Java Keystore密码毫无意义?

时间:2012-08-22 12:57:50

标签: java android keystore keytool

密钥库密码背后的意义究竟是什么,例如在JKS / BKS密钥库上?

显然不是为了安全,因为我可以使用编辑器打开文件,并将所有条目复制到新文件中,而无需使用passwordcheck。密码保护密钥库中的数据未加密!

这个密码保护什么?它似乎只是为了讨厌的开发者......

3 个答案:

答案 0 :(得分:8)

假设您在密钥库中保存了一个名为“这是我的句子”的字符串,当您通过记事本打开它时,您看到了密文“blabla”,并且您将“blabla”复制到另一个文件并声称您找到明文,它是“blabla”,这显然是不正确的,你仍然不知道原来的pliant-ext,直到通过密码恢复它。

== EDIT ==

对于JKS密钥库,密钥库密码用于验证完整性, src

636   if (password != null) {
637       md = getPreKeyedHash(password);
638       dis = new DataInputStream(new DigestInputStream(stream, md));
639   }

DigestInputStream生成一个签名并将其与实际的签名进行比较以查看是否已修改。

BouncyCastle密钥库UBER更安全,整个密钥库使用基于SHA1和Twofish的PBE加密(PBEWithSHAAndTwofish-CBC)

        Cipher cipher = this.makePBECipher(cipherAlg, Cipher.DECRYPT_MODE, password, salt, iterationCount);
        CipherInputStream cIn = new CipherInputStream(dIn, cipher);

        Digest dig = new SHA1Digest();
        DigestInputStream  dgIn = new DigestInputStream(cIn, dig);

        this.loadStore(dgIn);

答案 1 :(得分:4)

在JKS或BKS密钥库上,密码不是没有意义的,但它也不会做你想象的那样。

它不会加密密钥库中的数据或以任何方式阻止对其的访问,但它确实验证了密钥库的完整性。在不知道密码的情况下,如果没有普通用户发现密码库,就无法对密钥库进行更改(通常是因为他们的工具告诉他们“密钥库被篡改,或密码不正确”)

在其他一些密钥库类型(例如Keystore.BouncyCastle)中,密钥库密码可以防止检查和篡改。

答案 2 :(得分:-1)

JKS密钥库是二进制存储,其内容使用密码作为密钥加密。没有密码,没有人可以访问内容。密码用于保护商店内容免受非法访问和操纵。您可以肯定在某些编辑器中打开加密内容,但无法理解它。

相关问题