Бодрый Замок поколение пары ключей RSA с помощью Легкого веса API

Удивительно достаточно существует очень мало информации в сети об использовании легкого API замка Bouncy. После оглядывания некоторое время я смог соединить основной пример:

RSAKeyPairGenerator generator = new RSAKeyPairGenerator();
generator.init(new RSAKeyGenerationParameters
    (
        new BigInteger("10001", 16),//publicExponent
        SecureRandom.getInstance("SHA1PRNG"),//prng
        1024,//strength
        80//certainty
    ));

AsymmetricCipherKeyPair keyPair = generator.generateKeyPair();

У меня есть основное понимание RSA и математики, которая происходит негласно, таким образом, я понимаю что publicExponent и strength . Я предполагаю publicExponent относится к взаимно-простому из phi(pq) и от того, что я собираю, это может быть маленьким (как 3) как долго, поскольку соответствующее дополнение используется. Однако я понятия не имею что certainty относится к (некоторое место упомянуло, что могло бы относиться к проценту, но я хочу быть уверенным). Использование SecureRandom очевидно. Документация RSAKeyGenerationParameters абсолютно бесполезна (не удивительно там). Мое единственное предположение - то, что это имеет некоторое отношение к точности сгенерированных ключей, но снова я хочу быть уверенным. Таким образом, мой вопрос - то, что является соответствующими значениями для certainty и publicExponent?

P.S. Не отвечайте с "им, зависит от контекста - как безопасный Вы хотите, чтобы информация была". Довольно безопасно принять самую высокую степень безопасности (т.е. 4096-разрядный RSA ключевой или больше), если иначе не указано... Я также ценил бы ссылки на источники, которые дают хороший пример использования Легкого веса замка Bouncy API (я нисколько не интересуюсь реализацией JCA или любыми примерами, имеющими отношение к нему).

19
задан Andrey 21 June 2010 в 17:46
поделиться

3 ответа

Вы используете правильные значения для обоих.

PublicExponent должно быть числом Ферма . 0x10001 (F4) - текущее рекомендуемое значение. 3 (F1) также считается безопасным.

Для генерации ключа RSA требуются простые числа. Однако сгенерировать абсолютные простые числа невозможно. Как и любые другие криптографические библиотеки, BC использует вероятные простые числа. Уверенность показывает, насколько точно вы хотите, чтобы число было простым. Все, что выше 80, значительно замедлит генерацию ключей.

Обратите внимание, что алгоритм RSA по-прежнему работает в том маловероятном случае, когда простое число не является истинным простым числом, потому что BC проверяет относительную простоту.

10
ответ дан 30 November 2019 в 04:36
поделиться

Мне пришлось бы углубиться в их исходный код, чтобы быть «уверенным», но я считаю, что параметр уверенности передается прямо в конструктор BigInteger , который говорит: « Вероятность того, что новое BigInteger представляет собой простое число, превысит (1 - 1/2 уверенность ). Время выполнения этого конструктора пропорционально значению этого параметра. »[

Таким образом, при значении 80 вероятность того, что число не будет простым, меньше 1 из 2 80 . Комментарий предполагает, что время генерации простых чисел линейно по отношению к этому параметру, но вы должны проверить это, чтобы быть уверенным, если вы решите увеличить его. Возможно, имеет смысл использовать значение, соответствующее размеру используемого вами ключа. Например, NIST утверждает, что 1024-битный ключ RSA такой же надежный, как 80-битный симметричный ключ. Для 2048-битного ключа RSA вы можете использовать точность 112 бит (эквивалентный размер симметричного ключа по силе) и так далее.

Похоже, вы знаете об уязвимости использования 3 в качестве общедоступной экспоненты в особых случаях. Значение 65537 сейчас используется почти повсеместно.

8
ответ дан 30 November 2019 в 04:36
поделиться

Хорошая ссылка - FIPS PUB 186-3 . В частности, в разделе 3 приложения B содержится множество параметров безопасности, а также алгоритмы генерации первичного кода. определенность - это количество итераций теста простоты Миллера-Рабина.

3
ответ дан 30 November 2019 в 04:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: