генерация безопасных простых чисел - PullRequest
6 голосов
/ 21 марта 2011

Мне нужно сгенерировать безопасное простое число, которое имеет форму 2p + 1, где p также простое число определенной длины в битах (скажем, 1024 бита).Он должен использоваться при обмене ключами DH.

Я полагаю, что openssl может сделать это через

openssl gendh 1024

, однако это возвращение в формате base64 pem

-----BEGIN DH PARAMETERS-----
MIGHAoGBANzQ1j1z7RGB8XUagrGWK5a8AABecNrovcIgalv1hQdkna2PZorHtbOa
wYe1eDy1t/EztsM2Cncwvj5LBO3Zqsd5tneehKf8JoT35/q1ZznfLD8s/quBgrH8
es2xjSD/9syOMMiSv7/72GPJ8hzhLrbTgNlZ+kYBAPw/GcTlYjc7AgEC
-----END DH PARAMETERS-----
  • Как я могу извлечь безопасное простое число из этого pem base64?

  • проще ли сгенерировать мое собственное безопасное простое число с моим собственным кодом?

как я могу проверить, что простое число "безопасно" и имеет определенную длину в битах.

Ответы [ 2 ]

7 голосов
/ 22 марта 2011

@ GregS имеет подход, который, вероятно, будет работать для вас. Исходя из того, что вы мне сказали, я бы просто создал двоичный файл C и использовал бы функцию BN_generate_prime(...) в OpenSSL. Это исключает весь промежуточный анализ и, несмотря на добавление отдельного двоичного файла в микс, вероятно, это проще, чем дорога, по которой вы идете вниз.

6 голосов
/ 22 марта 2011

Я согласен с комментариями @Luke. Тем не менее, если по какой-то причине вы должны использовать командные строки openssl, есть несколько вариантов, но они до вас только дойдут. Ничто из этого не сделает никакой существенной арифметики для вас; они не будут извлекать (p-1) / 2 и проверять его на простоту.

Вы можете использовать команду openssl dh и проанализировать вывод. Попробуйте сделать это с опцией -C и без нее, чтобы узнать, какая из них вам подходит. Примеры.

openssl gendh -out testdh.pem 1024
openssl dh -in testdh.pem -noout -C
openssl dh -in testdh.pem -noout

Если вы можете обрабатывать двоичные файлы или предпочитать их, то можете анализировать двоичный вывод для структуры DH с кодировкой DER.

openssl dh -in testdh.pem -outform der -out testdh.der

Другой вариант - проанализировать выходные данные команды ans1parse:

openssl asn1parse -in testdh.pem
...