例如,假设在 Git 中正在跟踪密钥库,因此我们可以确定它没有被篡改。在密钥库上设置密码会增加安全性吗?在这种情况下以任何方式省略密钥库密码是否存在安全风险?
注意:如果重要的话,keystore 被用于存储用于签署 Android 应用程序的公钥/私钥证书,并且 keystore 内的私钥使用强密码加密。
在我看来,私钥应始终尽可能安全地存储。
取自 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...
我做了很多谷歌搜索、阅读和实验,我相信我的问题的答案是“不”。
密钥库密码仅用作签名生成的一部分:它可以防止篡改,但不能防止检查。如果你能保证文件没有被修改一点,你就可以保证没有被篡改,所以在这种情况下添加密钥库密码不会提供任何额外的安全性。
资料来源:
Java keytool 文档仅将密钥库密码称为验证完整性,而不是加密 - 但没有明确表示它仅用于防止篡改。
Bouncy Castle 规范(第5.4 节)指出,当“以与 JKS 相同的方式”运行时,“密钥库可以抗篡改,但不能检查。” - 这强烈表明这对 JKS 来说是正确的
最具体但最不正式的是JKS 的逆向工程实现,它也支持密钥库未使用密钥库密码加密的说法。
实验:
我的第一个实验是更改密钥库上的密码,并在十六进制编辑器中查看更改了多少,看起来只有文件的最后几个字节发生了变化。
第二个实验:创建一个带有密码的密钥库,生成并存储一个带有不同密码的密钥。使用正确的密钥库密码和空白密码从密钥库中检索密钥。你会得到一点一点相同的结果。