如果您可以验证JKS密钥库是否未被更改,那么通过密码可以获得任何好处吗?

时间:2013-07-05 14:56:06

标签: java android security

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

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

2 个答案:

答案 0 :(得分:0)

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

取自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

答案 1 :(得分:0)

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

密钥库密码仅用作签名生成的一部分:它可以防止篡改,但不会阻止检查。如果您可以保证文件没有改变一位,则可以保证未被篡改,因此在此方案中添加密钥库密码不会提供任何额外的安全性。

来源:

Java keytool documentation仅将密钥库密码称为验证完整性,从不加密 - 但没有明确说明它只能防止篡改。

Bouncy Castle specifications (section 5.4)指出,当“以与JKS相同的方式”操作时,“密钥库拒绝篡改而不是检查”。 - 这有力地暗示了JKS的确如此。

最具体但最不正式的是the reverse-engineered implementation of JKS,它还支持密钥库未使用密钥库密码加密的声明。

实验:

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

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