如果您可以验证JKS密钥库没有被更改,那么对其进行密码设置是否有任何好处



例如,假设密钥库在Git中被跟踪,因此我们可以确定它没有被篡改。在密钥库中设置密码会增加安全性吗?在这种情况下,省略密钥库密码是否会带来安全风险?

注意:如果重要的话,密钥库用于存储用于签名Android应用程序的公钥/私钥证书,并且密钥库中的私钥使用强密码进行加密。

在我看来,私钥应该始终尽可能安全地存储。

取自Sun/Oracle官方文档

There is a built-in default keystore implementation type known as "jks" that is provided by Sun Microsystems. It implements the keystore as a file, utilizing a proprietary keystore type (format). It protects each private key with its own individual password, and also protects the integrity of the entire keystore with a (possibly different) password...

http://docs.oracle.com/javase/7/docs/technotes/guides/security/crypto/CryptoSpec.html#KeystoreImplementation

我在谷歌上做了很多搜索、阅读和实验,我相信我的问题的答案是"不"。

密钥库密码仅作为签名生成的一部分使用:它可以防止篡改,但不会阻止检查。如果您可以保证文件没有发生任何更改,则可以保证is没有被篡改,因此在这种情况下添加密钥库密码不会提供任何额外的安全性。

来源:

Java keytool文档只将密钥库密码称为验证完整性,而不是加密,但没有明确表示它只防止篡改。

Bouncy Castle规范(第5.4节)指出,当与JKS"以相同的方式"操作时,"密钥库可以抵抗篡改,但不能进行检查。"这强烈表明JKS 也是如此

最具体但最不官方的是JKS的反向工程实现,它也支持密钥库没有使用密钥库密码加密的说法。

实验:

我的第一个实验是更改密钥库上的密码,并查看在十六进制编辑器中更改了多少,看起来只更改了文件的最后几个字节。

第二个实验:创建一个带有密码的密钥库,生成并存储一个带有不同密码的密钥。使用正确的密钥库密码和空白密码从密钥库中检索密钥。你会得到完全相同的结果。

最新更新