Пароль Java Keystore бессмыслен?
В чем именно заключается смысл пароля Keystore, например, в хранилищах JKS/BKS?
Это явно НЕ для безопасности, потому что я могу открыть файл с помощью редактора и скопировать все записи в новые файлы без пароля. Данные в защищенном паролем Keystore не шифруются!
что защищает этот пароль? Кажется, это просто для анонимных разработчиков oO...
Ответы
Ответ 1
В хранилище ключей JKS или BKS пароль не бессмысленен, но он не делает того, что вы могли бы предположить.
Он не шифрует данные в хранилище ключей или каким-либо образом препятствует доступу к нему, но проверяет целостность хранилища ключей. Не зная пароля, невозможно вносить изменения в хранилище ключей, если обычный пользователь его не узнает (как правило, из-за того, что их инструменты сообщают им, что "Keystore был изменен или пароль неверен" )
В некоторых других типах хранилищ ключей (таких как Keystore.BouncyCastle) пароль хранилища ключей защищает от проверки, а также от подделки.
Ответ 2
скажем, что вы сохранили строку под названием "это мое предложение" в хранилище ключей, и когда вы открываете ее в блокноте, вы видите шифр-текст "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 генерирует подпись и сравнивает ее с acutal, чтобы увидеть, изменяется ли она.
BouncyCastle keystore UBER более безопасен, все хранилище ключей зашифровано с помощью PBE на основе SHA1 и Twofish (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);
Ответ 3
Хранилища JKS представляют собой двоичные хранилища, а их содержимое зашифровывается с использованием пароля в качестве ключа. Никто не может получить доступ к содержимому без пароля. Пароль предназначен для защиты содержимого магазина от незаконных доступов и манипуляций. Вы можете, конечно, открыть зашифрованный контент в каком-то редакторе, но не можете понять его.