如何在openssl中使用特定的输入数字生成rsa密钥?

How to Generate rsa keys using specific input numbers in openssl?

我选择了2个质数p和q。 计算的公共对:(n,e)和私钥:d。
对于前。
p =17, q = 11
n = 187,
e= 7 & d = 23

在互联网上浏览后,我发现此命令生成公用,专用密钥对:
openssl genrsa -out mykey.pem 1024

但是我想生成对应于d = 23的私钥和对应于e = 7的公钥。我如何给这些数字作为输入。


一种方法是使用OpenSSL的asn1parse命令的-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。对于您提供的pqd值,它们是:

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

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

q^-1 mod p = 14

将所有内容以适当的格式放到一个文本文件中:

1
2
3
4
5
6
7
8
9
10
11
12
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文件:

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

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

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

哪个应该输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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)。


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

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

我建议您在这里查看功能generateKey(您还需要文件cryptomath才能使其工作)