密钥库密码背后的含义到底是什么,例如在 JKS/BKS 密钥库中?
这显然不是为了安全,因为我可以用编辑器打开文件并将所有条目复制到新文件中而无需密码检查。受密码保护的密钥库中的数据未加密!
这个密码保护什么?这似乎只是为了讨厌的开发人员oO ...
假设您在密钥库中保存了一个名为“this is my sentence”的字符串,当您用记事本打开它时,您看到密文“blabla”,然后您将“blabla”复制到另一个文件并声称您找到了纯文本-text,它是“blabla”,这显然是不正确的,你仍然不知道原始的pliant-ext,直到通过密码恢复它。
==编辑==
对于 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);
在 JKS 或 BKS 密钥库上,密码并非毫无意义,但它也不会像您假设的那样。
它不会加密密钥库中的数据或以任何方式阻止对其的访问,但它会验证密钥库的完整性。在不知道密码的情况下,不可能在没有普通用户发现的情况下对密钥库进行更改(通常是因为他们的工具告诉他们“密钥库被篡改,或者密码不正确”)
在其他一些密钥库类型(例如 Keystore.BouncyCastle)中,密钥库密码可以防止检查和篡改。
JKS 密钥库是二进制存储,其内容使用密码作为密钥进行加密。没有密码,任何人都无法访问内容。密码用于保护商店的内容免受非法访问和操纵。您可以肯定地在某些编辑器中打开加密的内容,但无法理解它。