Как EJBCA генерирует закрытый ключ
Я ищу метод, используемый EJBCA для генерации закрытых ключей в целом (CA, Sub-Ca, сертификаты...).
Допустим, вы хотите, например, размер ключа RSA 2048. Все ли процесс генерации выполнен в приложении EJBCA? Они полагаются на случайную генерацию сервера приложений на основе Java EE (в моем случае Jboss)? Есть ли где-нибудь ссылка с локально реализованной генерацией случайных чисел, например, в Linux /dev/(u)random?
Каков уровень энтропии, и гарантируют ли они один?
1 ответ
Я получил ответ из списка рассылки EJBCA, и я также получил информацию в исходном коде.
Может быть, это могло бы помочь кому-то еще, поэтому я вставлю здесь ответ.
Базовый метод, используемый EJBCA для генерации закрытого ключа, осуществляется через класс Java java.util.Random и класс java.security.SecureRandom.
В коде EJBCA ключ генерируется методом createCryptoToken из класса CryptoTokenManagementSessionBean, который использует SecureRandom() из файловых модулей /cesecore-ejb/src/org/cesecore/keys/token/CryptoTokenManagementSessionBean.java
В конце реализации OpenJDK SecureRandom использует / dev / random. Таким образом, общая энтропия - это энтропия / dev / random. Существует множество способов улучшить его энтропийный пул. Решение заключается в использовании аппаратного токена.
NB: Здесь это применимо только к системе без HSM (в этом случае ключ генерируется в HSM, поэтому он зависит от HSM) и работает в Linux (и, скорее всего, в системе, имеющей / dev / random, поэтому семейство BSD).