Является ли Java KeyGenerator случайным образом безопасным по умолчанию?

Следующая строка генерирует секрет sha512 через JDK KeyGenerator,

SecretKey secretKey = KeyGenerator.getInstance("HmacSHA512").generateKey();

Мне интересно, является ли ключ случайным образом безопасным?

Или я должен запустить генератор с SecureRandom Например, перед генерацией ключа?

1 ответ

Решение

Просто для полноты можно назвать init метод с использованием ключа размером 512 бит. Однако размер ключа по умолчанию для HMAC совпадает с размером выходных данных. Поэтому в этом смысле очень разумно предположить, что этот размер ключа установлен по умолчанию. Действительно, называя init Метод с использованием постоянного значения следует избегать.

Что касается реализации, вполне вероятно, что если вы не позвоните init Метод явно, что значение по умолчанию предполагается и что SecureRandom экземпляр выбран. Однако вы правы в том смысле, что это логический провайдер по умолчанию; это должно было быть указано как требование ко всем поставщикам.

Некоторая идея о том, что здесь происходит, в KeyGeneratorCore, Весь код провайдера находится в сети, поэтому его невозможно найти, если не заглянуть достаточно глубоко, хотя по общему признанию вам понадобится Google Foo, чтобы найти его.

Другие вопросы по тегам