Encryption 安全素数的生成

Encryption 安全素数的生成,encryption,openssl,primes,Encryption,Openssl,Primes,我需要生成一个安全素数,它的形式是2p+1,其中p也是某个特定变量的素数 位长度(比如说1024位)。它将用于DH密钥交换 我相信openssl可以通过 openssl gendh 1024 但是,此返回是base64 pem格式 -----BEGIN DH PARAMETERS----- MIGHAoGBANzQ1j1z7RGB8XUagrGWK5a8AABecNrovcIgalv1hQdkna2PZorHtbOa wYe1eDy1t/EztsM2Cncwvj5LBO3Zqsd5tneehKf

我需要生成一个安全素数,它的形式是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-----
  • 如何从这个base64 pem中提取安全素数

  • 用自己的代码生成自己的安全素数更容易吗


我如何测试素数是“安全的”并且具有一定的位长度。

我同意@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
如果您可以处理或更喜欢二进制,那么您可以为DER编码的DH结构解析二进制输出

openssl dh -in testdh.pem -outform der -out testdh.der
另一个选项是解析ans1parse命令的输出:

openssl asn1parse -in testdh.pem

@格雷格有一种方法可能对你有用。根据您告诉我的,我将创建一个C二进制文件并利用OpenSSL中的函数。这就省去了所有的中间解析,尽管在混合中添加了一个单独的二进制文件,但这可能比你要走的路要容易。

什么目的安全?如果您正在进行Diffie Helman(DH)密钥交换,为什么不使用现有代码呢?我正在进行SPEKE,它使用DH,并且需要一个安全的主密钥来操作。因此没有现成的代码。您是否能够以编程方式使用OpenSSL而不是在命令行上调用它?你用的是什么语言?不是真的,我用的语言不能很容易地调用C代码,如果是这样的话,我可以很容易地复制我需要的代码片段,然后再将其编码成pem格式。在这种情况下,你能用C/C++制作一个简单的可执行文件并从应用程序中调用它吗?看起来这比生成PEM然后解码要容易得多。您已经在对OpenSSL进行外部调用。要在此基础上进行构建,您可以使用asn1parse命令并获取“prim:”字段并解析出256个字符长的ASCII十六进制数。如果您确保它是256个ASCII字符,您就知道您提取了一个1024位的数字。然后您可以使用您选择的素性测试来测试p和(p-1)/2,以确保它们都是素数。我们如何创建testdh.dh?gendh生成一个.pem文件.typo。正在修复,尽管您可以根据需要为文件命名。