20

我选择了 2 个质数pq.
计算出的公钥对:(n,e)和私钥:d
例如。

p = 17,q = 11,n = 187,e = 7 和 d = 23

在网上冲浪后,我发现这个命令可以生成公钥和私钥对:
openssl genrsa -out mykey.pem 1024

但是我想生成对应的私钥和对应的d = 23公钥e = 7。我怎样才能将这些数字作为输入。

4

2 回答 2

38

asn1parse一种方法是使用 OpenSSL 的命令-genconf选项生成 DER 编码密钥。

您需要构建一个输入文件asn1parse -genconf以生成标准格式的 RSA 密钥(根据RFC 3447)。的语法在asn1parse -genconf这里给出:http ://www.openssl.org/docs/crypto/ASN1_generate_nconf.html实际上,它已经有一个构造 RSA 密钥的例子。

您需要计算更多的值(特别是d mod (p-1),d mod (q-1)q^-1 mod p。对于您给出的 , 的值,p这些是:qd

d mod(p-1) = 23 mod 16 = 7

d mod(q-1) = 23 mod 10 = 3

q^-1 mod p = 14

将所有这些放在适当格式的文本文件中:

asn1=SEQUENCE:rsa_key

[rsa_key]
version=INTEGER:0
modulus=INTEGER:187
pubExp=INTEGER:7
privExp=INTEGER:23
p=INTEGER:17
q=INTEGER:11
e1=INTEGER:7
e2=INTEGER:3
coeff=INTEGER:14

构建二进制 DER 文件:

openssl asn1parse -genconf <path to above file> -out newkey.der

然后您可以通过 OpenSSL 的rsa命令运行它来确认:

openssl rsa -in newkey.der -inform der -text -check

哪个应该输出:

Private-Key: (8 bit)
modulus: 187 (0xbb)
publicExponent: 7 (0x7)
privateExponent: 23 (0x17)
prime1: 17 (0x11)
prime2: 11 (0xb)
exponent1: 7 (0x7)
exponent2: 3 (0x3)
coefficient: 14 (0xe)
RSA key ok
writing RSA key
-----BEGIN RSA PRIVATE KEY-----
MBwCAQACAgC7AgEHAgEXAgERAgELAgEHAgEDAgEO
-----END RSA PRIVATE KEY-----

您可以使用它通过 OpenSSL 的rsautl命令加密数据(尽管使用此密钥,您仅限于加密单个数据字节,前提是该字节也小于 187)。

于 2013-11-08T09:47:40.100 回答
2

如果您正在寻找一种不需要您进行其他计算的方法,那么我猜这种方法不存在。

看看 openssl 源码的 rsa_gen.c 中的rsa_builtin_keygen,它会为自己生成素数。

我建议你看看generateKey 这里的功能(你还需要文件密码才能工作)

于 2016-05-18T15:31:23.583 回答