keytool如何保护密钥?

2024-03-17

当您使用 Java Keytool 实用程序构建密钥存储时,如何保护密钥?我通读了文档,我意识到每个私钥都有一个密钥密码,然后商店有一个商店密码。

但是使用什么机制来保护数据呢?它是加密密码吗?如果是的话,算法是什么?我特别关注 keytool 在构建 JKS 文件时如何进行保护。


Note从 Java 9 开始的 Java 版本默认使用 PKCS#12 密钥存储类型,而不是 JKS。


Sun 的默认 JKS 密钥库使用专有算法,主要是为了绕过标准算法的导出限制。该算法在此类中实现,

  sun.security.provider.KeyProtector

这是算法的描述,

这是 Sun 专有的可导出算法的实现,旨在在保护(或恢复其明文版本)敏感密钥时使用。该算法并非旨在作为通用密码。这就是密钥保护算法的工作原理: p - 用户密码 s - 随机盐 X - 异或密钥 P - 待保护的密钥 Y - 受保护的密钥 R - 密钥库中存储的内容 步骤 1:获取用户的密码,向其附加一个随机盐(固定大小),并对其进行哈希处理: d1 = 摘要(p, s) 将 d1 存储在 X 中。 步骤 2:获取用户的密码,附加上一步的摘要结果,并对其进行哈希处理: dn = 摘要(p, dn-1)。将 dn 存储在 X 中(将其附加到之前存储的摘要中)。重复此步骤,直到 X 的长度与私钥 P 的长度匹配。 步骤 3: X 和 P 进行异或,并将结果存储在 Y 中: Y = X XOR P。 步骤 4: 存储 s、Y 和摘要(p , P) 在结果缓冲区 R 中:R = s + Y + 摘要(p, P),其中“+”表示串联。 (注意:digest(p, P) 存储在结果缓冲区中,以便在恢复密钥时,我们可以检查恢复的密钥是否确实与原始密钥匹配。) R 存储在密钥库中。受保护的密钥恢复如下: 步骤1和步骤2与上面相同,只是salt不是随机生成的,而是取自步骤4的结果R(第一个长度字节)。步骤 3(XOR 运算)产生明文密钥。然后将密码与恢复的密钥连接起来,并与 R 的最后一个 length(digest(p, P)) 字节进行比较。如果匹配,则恢复的密钥确实与原始密钥相同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

keytool如何保护密钥? 的相关文章

随机推荐

  • 使用 Makefile 在编译中排除源文件

    是否可以使用 Makefile 中的通配符函数在编译过程中排除源文件 就像有几个源文件一样 src foo cpp src bar cpp src 然后在我的 makefile 中 SRC FILES wildcard src cpp 但我
  • 以编程方式滚动离子段

    有什么办法可以控制分段的滚动吗 在我的情况下 滑块和段相互依赖 当您滑动幻灯片时 溢出段不会滑动 但将正确选择活动段 我的视图和控制器代码
  • 如何撤销 JWT 令牌?

    我正在使用 Spring Security OAuth2 和 JWT 令牌 我的问题是 如何撤销 JWT 令牌 正如这里提到的http projects spring io spring security oauth docs oauth2
  • 如何在 Node.js 中创建函数

    我正在使用 Firebase 函数创建 API 同时我使用 Firebase Firestore 作为我的数据库 我正在使用 Node js 来创建该程序 我想知道如何在 Node js 中创建函数 我将多次调用代码 因为我已经习惯了 Ja
  • 如何更改测试资源管理器的持续时间计时器,使其对于长(>1 秒)测试更有用?

    我在 Visual Studio 2013 中编写了一系列测试用例 这些测试用例通过 Visual Studio 的内置测试资源管理器运行 这些不是单元测试 因此它们都运行至少几秒钟 由于测试内容的性质 其中一些测试的运行时间甚至可能超过
  • Mac 上有什么好的 MongoDB 数据库管理应用程序吗?类似于 Sequel Pro? [复制]

    这个问题在这里已经有答案了 寻找一个可视化 mongodb 中的集合和文档的 GUI 网络上有许多可用的工具 罗博蒙戈 https robomongo org 是最好的和最著名的 Mongo客户端 http www mongoclient
  • 如何使用 Boost::Python 公开原始字节缓冲区?

    我有第三方 C 库 其中一些类方法使用原始字节缓冲区 我不太确定如何在 Boost Python 中处理它 C 库头类似于 class CSomeClass public int load unsigned char pInBufferDa
  • DynamoDB 如何同时支持 Key-Value 和 Document 数据库属性

    根据 DynamoDB 的文档 它支持 NoSQL 的键值和面向文档的属性 即使其他 NoSQL 数据库仅属于一种类型 键值 文档 图形或面向列 它还说 Amazon DynamoDB 基于 Dynamo 的原则构建 3 是 AWS 基础设
  • 必须调用“render :layout => false”才能在 Rails 2.3.3 中正确渲染 js.erb 模板

    我正在运行最新的 Rails 2 3 stable 分支 当前为 2 3 3 我正在使用 JQuery 将 AJAX 请求发布到我的 创建 操作 其中有以下块 respond to do format format js end 我创造了c
  • 如何设置应用内购买(非消耗品)?

    我正在使用一些在线教程在我的应用程序中实现应用程序内购买 但该教程适用于消费品应用内购买 但就我而言 用户只需要购买一次 我修改了代码 在购买应用内购买后禁用 购买按钮 现在一切正常 但问题是 如果我关闭并打开应用程序 购买按钮 就会启用
  • 使用 java 中的参数执行 shell 脚本

    我已经用谷歌搜索了一段时间 每个人似乎都有不同的解决方案 但似乎没有一个对我有用 我都尝试过ProcessBuilder and Runtime 两者都调用 sh直接文件并将其输入 bin bash 没有运气 回到基础 我当前的代码如下 S
  • 如何将 org.w3c.dom.Document 对象转换为字符串?

    我想将 org w3c dom Document 对象转换为字符串 我正在使用 Java 6 并且愿意使用任何能够完成任务的 完全免费 技术 我尝试了这个线程的解决方案 有没有比这段代码更优雅的方法将 XML 文档转换为 Java 中的字符
  • 在 TFS 中获取特定父级的子工作项

    如何在 TFS 中获取特定父级的子工作项 我需要一个平面列表 它将父 ID 作为查询参数并返回子工作项 注意 到目前为止 我只能通过 工作项和直接链接 查询来执行此操作 我们无法通过 工作项平面列表 查询来实现这一点 因为没有字段 条件来查
  • Start-Process 在 powershell 远程处理中不起作用

    我一直在尝试使用 powershell 远程处理来运行计算器 我进入了 powershell 会话 Enter PSSession 并输入以下命令 Start Process calc exe 我查看了远程计算机 但没有显示任何内容 当我尝
  • 如何检查字符串是否只包含大写字母或小写字母?

    当且仅当 s 中至少有一个字母字符且 s 中的字母字符全部大写或全部小写时 才返回 True def upper lower s str gt bool gt gt gt upper lower abc True gt gt gt uppe
  • 如何在 Xampp 安装的 Windows 上的 Apache 中禁用 SSLv3

    我正在尝试在 Apache 中禁用 SSLv3 该 Apache 是通过 xampp 安装在 Windows 上的 但我很难弄清楚如何做 有人告诉我我需要添加 SSLProtocol All SSLv2 SSLv3 到我的 ssl 配置文件
  • Haskell 函数名称中允许使用哪些字符?

    函数的有效名称是什么 Examples works let x x x let x x x doesn t work let x x x let x x x 我不确定 但我的预感是 Haskell 不允许 Unicode 函数名称 是吗 U
  • 如何从pairwise.t.test获取df和t值?

    有没有办法从a中获取t值和dfpairwise t test对于相关数据 Example data lt c 2 3 2 2 5 2 4 2 4 3 4 2 time lt c 1 1 1 1 2 2 2 2 3 3 3 3 pairwis
  • 如何在 .COM 可执行文件中以相反顺序打印字符串?

    我刚刚开始学习汇编语言 我正在尝试以相反的顺序打印 hello world 这意味着 dlrow olleh 问题是我只得到第一个字母作为输出 并且顺序仍然相同 没有任何变化 作为一个新手 很多事情对我来说都是未知的 我犯了很多错误 由于缺
  • keytool如何保护密钥?

    当您使用 Java Keytool 实用程序构建密钥存储时 如何保护密钥 我通读了文档 我意识到每个私钥都有一个密钥密码 然后商店有一个商店密码 但是使用什么机制来保护数据呢 它是加密密码吗 如果是的话 算法是什么 我特别关注 keytoo