Является ли Java KeyGenerator случайным образом безопасным по умолчанию?
Следующая строка генерирует секрет sha512 через JDK KeyGenerator
,
SecretKey secretKey = KeyGenerator.getInstance("HmacSHA512").generateKey();
Мне интересно, является ли ключ случайным образом безопасным?
Или я должен запустить генератор с SecureRandom
Например, перед генерацией ключа?
1 ответ
Просто для полноты можно назвать init
метод с использованием ключа размером 512 бит. Однако размер ключа по умолчанию для HMAC совпадает с размером выходных данных. Поэтому в этом смысле очень разумно предположить, что этот размер ключа установлен по умолчанию. Действительно, называя init
Метод с использованием постоянного значения следует избегать.
Что касается реализации, вполне вероятно, что если вы не позвоните init
Метод явно, что значение по умолчанию предполагается и что SecureRandom
экземпляр выбран. Однако вы правы в том смысле, что это логический провайдер по умолчанию; это должно было быть указано как требование ко всем поставщикам.
Некоторая идея о том, что здесь происходит, в KeyGeneratorCore
, Весь код провайдера находится в сети, поэтому его невозможно найти, если не заглянуть достаточно глубоко, хотя по общему признанию вам понадобится Google Foo, чтобы найти его.