Java密钥库-详细信息

Øriginally posted on my blog

Java KeyStore用于以加密和完整性保护的方式存储密钥材料和关联的证书。 像Java的所有事物一样,此机制是可插入的,因此存在多种不同的选择。 那里有很多文章描述了不同的类型以及如何初始化它们,加载密钥和证书等。但是,缺少有关这些密钥库如何存储和保护密钥材料的详细技术信息。 这篇文章试图将最重要的KeyStore的那些重要细节集中在一处。

每个密钥存储区都有一个用于保护整个存储区的总体密码,并且可以选择为每个秘密或私有密钥条目(如果您的后端支持)都具有按条目输入的密码。

Java密钥库(JKS)

原始的Sun JKS(Java密钥库)格式是专有的二进制格式文件,只能存储非对称私钥和关联的X.509证书。

Individual private key entries are protected with a simple home-spun stream cipher—basically the password is salted (160-bits) and hashed with SHA-1 in a trivial chained construction until it has generated enough output bytes to XOR into the private key. It then stores a simple authenticator tag consisting of SHA-1(password + private key bytes) — that's the unencrypted private key bytes. In other words, this is an Encrypt-and-MAC scheme with homespun constructions both based on simple prefix-keyed SHA-1. (This scheme has OID 1.3.6.1.4.1.42.2.17.1.1).

整个档案库再次受到本地旋转前缀键哈希构造的完整性保护,该构造包括原始密钥库密码的UTF-16字节的SHA1哈希,后跟短语“ Mighty Aphrodite”的UTF-8字节(I (不是在开玩笑),后跟编码的密钥存储区条目的字节。

如果此描述的每个部分都没有让您在屏幕上同时发出恐怖和迷惑的尖叫,那么您可能还没有完全理解这是多么的糟糕。 即使仅用于存储证书,也不要使用它-防篡改功能是要比加密还差的东西。

JCE密钥库(JCEKS)

Sun随后通过Java密码扩展(JCE)更新了JVM的密码功能。 通过这种方式,他们还引入了一种新的专有密钥存储格式:JCEKS。

JCEKS uses "PBEWithMD5AndTripleDES" to encrypt individual key entries, with a 64-bit random salt and 200,000 iterations of PBKDF1 to derive the key. TripleDES is used with 3 keys ("encrypt-decrypt-encrypt") in CBC mode. There is no separate integrity protection of individual keys, which is fine if the archive as a whole is integrity protected, but it means that access control is effectively at the level of the whole keystore. This is not terrible from a cr

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值