Пароль Java Keystore бессмыслен? - программирование
Подтвердить что ты не робот

Пароль Java Keystore бессмыслен?

В чем именно заключается смысл пароля Keystore, например, в хранилищах JKS/BKS?

Это явно НЕ для безопасности, потому что я могу открыть файл с помощью редактора и скопировать все записи в новые файлы без пароля. Данные в защищенном паролем Keystore не шифруются!

что защищает этот пароль? Кажется, это просто для анонимных разработчиков oO...

4b9b3361

Ответ 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 представляют собой двоичные хранилища, а их содержимое зашифровывается с использованием пароля в качестве ключа. Никто не может получить доступ к содержимому без пароля. Пароль предназначен для защиты содержимого магазина от незаконных доступов и манипуляций. Вы можете, конечно, открыть зашифрованный контент в каком-то редакторе, но не можете понять его.