代码之家  ›  专栏  ›  技术社区  ›  bethlakshmi

钥匙工具如何保护钥匙?

  •  2
  • bethlakshmi  · 技术社区  · 15 年前

    当使用JavaKeKooTM实用工具构建密钥存储库时,密钥是如何被保护的?我已经阅读了文档,并且我意识到每个私钥都有一个密钥密码,然后存储有一个存储密码。

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

    2 回复  |  直到 15 年前
        1
  •  6
  •   ZZ Coder    15 年前

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

      sun.security.provider.KeyProtector
    

    是对算法的描述,

    这是一个Sun专有的可导出算法的实现,用于保护(或恢复)敏感密钥的明文版本。此算法不是通用密码。这就是该算法用于密钥保护的方式:p-用户密码s-随机salt x-xor密钥p-要受保护的密钥y-受保护的密钥r-存储在密钥库中的内容步骤1:获取用户密码,向其添加随机salt(固定大小),并将其散列:d1=摘要(p,s)将d1存储在x中。步骤2:获取用户密码,附加dig上一步的EST结果,并散列它:dn=digest(p,dn-1)。将dn存储在x中(将其附加到以前存储的摘要中)。重复此步骤,直到x的长度与私钥p的长度匹配。步骤3:xor x和p,并将结果存储在y:y=x xor p中。步骤4:将s、y和digest(p,p)存储在结果缓冲区r:r=s+y+digest(p,p)中,其中“+”表示连接。(注意:摘要(P,P)存储在结果缓冲区中,以便在恢复密钥时,我们可以检查恢复的密钥是否确实与原始密钥匹配。)R存储在密钥库中。受保护的密钥恢复如下:步骤1和步骤2与上述相同,只是salt不是随机生成的,而是从步骤4的结果r(第一个长度(s)字节)中提取的。步骤3(XOR操作)生成纯文本键。然后将密码与恢复的密钥连接起来,并与r的最后一个长度(摘要(p,p))字节进行比较。如果匹配,则恢复的密钥实际上与原始密钥相同。

        2
  •  2
  •   Thilo    15 年前

    所使用的算法取决于所使用的密钥库(例如,它可能是智能卡)。

    Sun随JDK一起提供的默认密钥存储库创建软令牌(磁盘文件上) three encryption options :

    1. 默认值:“jks”,一个专有的密钥存储类型(格式)。不确定算法。

    2. “jceks”,一种替代的专有格式,使用3-des

    3. “pkcs12”,一种标准格式(openssl可以读取),有几个选项,但通常3-des用于私钥,RC2-40用于证书。

    在这三种情况下,您都对私有数据进行了加密(对称地,使用单独的密码),并且整个密钥存储的完整性受到加密摘要(使用密钥存储密码)的保护。