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これを行う 1 つの方法は、OpenSSL のコマンドの-genconfオプションを使用して DER でエンコードされたキーを生成することです。

標準形式 ( RFC 3447asn1parse -genconfごと) で RSA キーを生成するには、入力ファイルを作成する必要があります。の構文は次のとおりです: http://www.openssl.org/docs/crypto/ASN1_generate_nconf.html実際、RSA キーを構築するための例が既にあります。asn1parse -genconf

さらにいくつかの値を計算する必要があります (具体的には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コマンドでデータを暗号化できます (ただし、このキーを使用すると、データの 1 バイトのみの暗号化に制限されますが、そのバイトも 187 未満である必要があります)。

于 2013-11-08T09:47:40.100 に答える
2

あなたからの他の計算を必要としない方法を探しているなら、私はそのようなものは存在しないと思います.

openssl ソースのrsa_gen.cのrsa_builtin_keygen を見てください。それ自体が素数を生成します。

generateKey 関数hereを確認することをお勧めします(機能させるには、ファイルの暗号化も必要です)

于 2016-05-18T15:31:23.583 に答える