Вопрос

Когда вы создаете хранилище ключей с помощью утилиты Java Keytool, как защищены ключи?Я прочитал документацию и понимаю, что у каждого закрытого ключа есть пароль ключа, а затем у хранилища есть пароль хранилища.

Но какой механизм используется для защиты данных?Является ли это шифром шифрования?Если да, то каков алгоритм?Я сосредоточен конкретно на том, как keytool выполняет защиту при создании файла JKS.

Это было полезно?

Решение

Хранилище ключей JKS Sun по умолчанию использует собственный алгоритм, в первую очередь для обхода ограничений на экспорт стандартных алгоритмов.Алгоритм реализован в этом классе,

  sun.security.provider.KeyProtector

Это описание алгоритма,

Это реализация запатентованного Sun экспортируемого алгоритма, предназначенного для использования при защите (или восстановлении текстовой версии) конфиденциальных ключей.Этот алгоритм не предназначен в качестве шифра общего назначения.Вот как работает алгоритм защиты ключа:p - пароль пользователя s - случайная соль X - ключ xor P - защищаемый ключ Y - защищенный ключ R - что сохраняется в хранилище ключей Шаг 1:Возьмите пароль пользователя, добавьте к нему случайную соль (фиксированного размера) и хэшируйте его:d1 = переварить (p, s), Сохранить d1 в X.Шаг 2:Возьмите пароль пользователя, добавьте результат дайджеста с предыдущего шага и хэшируйте его:dn = дайджест(p, dn-1).Сохраните dn в X (добавьте его к ранее сохраненным дайджестам).Повторяйте этот шаг до тех пор, пока длина X не совпадет с длиной закрытого ключа P.Шаг 3:XOR X и P, и сохраните результат в Y:Y = X XOR P.Шаг 4:Сохраните s, Y и дайджест(p, P) в результирующем буфере R:R = s + Y + дайджест (p, P), где "+" обозначает конкатенацию.(ПРИМЕЧАНИЕ:digest(p, P) сохраняется в буфере результатов, так что, когда ключ будет восстановлен, мы сможем проверить, действительно ли восстановленный ключ соответствует исходному ключу.) R хранится в хранилище ключей.Защищенный ключ восстанавливается следующим образом:Шаг 1 и шаг 2 такие же, как указано выше, за исключением того, что соль не генерируется случайным образом, а берется из результата R шага 4 (первые байты длины).Шаг 3 (операция XOR) выдает ключ открытого текста.Затем объедините пароль с восстановленным ключом и сравните с байтами последней длины (digest(p, P)) R.Если они совпадают, восстановленный ключ действительно является тем же ключом, что и исходный ключ.

Другие советы

Используемый алгоритм зависит от хранилища ключей, которое вы используете (например, это может быть смарт-карта).

Хранилище ключей по умолчанию, которое Sun поставляет вместе с JDK, создает программный токен (в файле на диске) с три варианта шифрования:

  1. По умолчанию:"jks", проприетарный тип хранилища ключей (format).Не уверен насчет алгоритма.

  2. "jceks", альтернативный проприетарный формат, использующий 3-DES

  3. "pkcs12", стандартный формат (OpenSSL может его прочитать), с несколькими вариантами, но обычно 3-DES для закрытых ключей и RC2-40 для сертификатов.

Во всех трех случаях ваши личные данные зашифрованы (симметрично, с использованием отдельных паролей), а целостность всего хранилища ключей защищена криптографическим дайджестом (с использованием пароля хранилища ключей).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top