安全素数的产生

The*_*tor 6 encryption primes openssl

我需要生成一个安全素数,其形式为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-----
Run Code Online (Sandbox Code Playgroud)
  • 如何从这个base64 pem中提取安全素数?

  • 使用我自己的代码生成自己的安全素数是否更容易?

我怎样才能测试素数是否"安全"且具有一定的位长.

Luk*_*uke 7

@GregS有一种方法可能适合你.基于你告诉我的内容,我只想创建一个C二进制文件并利用BN_generate_prime(...)OpenSSL中的函数.这削减了所有的中间解析,尽管在混合中添加了一个单独的二进制文件,但它可能比你要走的道路更容易.


Jam*_*olk 6

我同意@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
Run Code Online (Sandbox Code Playgroud)

如果您可以处理或更喜欢二进制,那么您可以解析DER编码的DH结构的二进制输出.

openssl dh -in testdh.pem -outform der -out testdh.der
Run Code Online (Sandbox Code Playgroud)

另一种选择是解析ans1parse命令的输出:

openssl asn1parse -in testdh.pem
Run Code Online (Sandbox Code Playgroud)