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

时间:2013-11-08 01:59:34

标签: openssl rsa

我选择了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的公钥。如何将这些数字作为输入。

2 个答案:

答案 0 :(得分:25)

执行此操作的一种方法是使用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。对于pq,{{的值1}}你给了,这些是:

d

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

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

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

q^-1 mod p = 14

构造二进制DER文件:

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

然后,您可以通过OpenSSL的openssl asn1parse -genconf <path to above file> -out newkey.der 命令运行此命令以确认:

rsa

应该输出:

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

您可以使用它来使用OpenSSL的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----- 命令加密数据(尽管使用此密钥,您只能加密一个字节的数据,只要该字节小于187)。

答案 1 :(得分:1)

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

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

我建议您查看函数generateKey here(您还需要文件cryptomath才能生效)