Java密钥库密码毫无意义?

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

这显然不是为了安全,因为我可以用编辑器打开文件并将所有条目复制到没有密码检查的新文件中。 密码保护的密钥库内的数据未encryption!

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

Solutions Collecting From Web of "Java密钥库密码毫无意义?"

在一个JKS或BKS密钥库上,密码并不是毫无意义的,但它也不会做你可能会想到的。

它不会对密钥库中的数据进行encryption,也不会以任何方式阻止对其进行访问,但它确实会validation密钥库的完整性。 在不知道密码的情况下,如果没有find正常用户,就不可能对密钥库进行更改(通常是由于他们的工具告诉他们“密钥库被篡改或密码不正确”)

在其他某些密钥库types(如Keystore.BouncyCastle)中,密钥库密码可以防止检查以及篡改。

假设您在密钥库中保存了一个名为“这是我的句子”的string,当您用记事本打开它时,您看到密文“blabla”,并将“blabla”复制到另一个文件并要求您find纯文本文本,它是“blabla”,这是显而易见的不正确的,你仍然不知道原来的柔韧性,直到恢复密码。

== ==编辑

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

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

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

BouncyCastle密钥库UBER更安全,整个密钥库使用基于SHA1和Twofish的PBEencryption(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密钥库是二进制存储,其内容使用密码作为密钥encryption。 没有人可以访问没有密码的内容。 密码用于保护商店的内容不被非法访问和操作。 你可以确定的在一些编辑器中打开encryption的内容,但无法理解。