RSA 2048鍵ペアの生成:openssl 0.5sを介してgpg 30sを介して、なぜ違いがあるかRSA公開/秘密鍵ペアを生成できるプログラムがいくつかあります
たとえばGnuPG / OpenPGPは、経由で呼び出されるウィザードを持っています
gpg --gen-key
OpenSSLはこれらのコマンドラインを使用してキーペアを生成できます
openssl genrsa -out testkey.private 2048 openssl rsa -in testkey.private -pubout -out testkey.public
まったく同じことについて、それは私が知覚できるキーペアRSA 2048ビットを生成しています-非常に同じマシン上で-非常に異なる時間。
openssl
約0.5秒でキーペア
gpg
を生成し、約30 秒かかり、さらに「マウスを動かしてランダム性/エントロピーを生成する」と宣伝する
違いは説明できますか?gpgはRSA鍵の作成だけではなく、いくつかの少しのことを行うことを知っていますが、特にオプション(4)を選択します
必要なキーの種類を選択してください: (1)RSAおよびRSA(デフォルト) (2)DSAとElgamal (3)DSA(署名のみ) (4)RSA(署名のみ) あなたの選択?
したがって、実際に生成されるのは2048ビットのRSAキーペアだけです。それでも時差は30秒ぐらいですか?
私には、gpgが不必要に時間を浪費しているか、OpenSSLが十分な時間待機していないために安全でないキーが作成されているようです。
私の質問は、違いを説明できるものは何ですか?
更新
RSAの作成では、入力としてある程度のランダム性を使用する必要があります。したがって、高速のopensslが、格納されたランダム性を使用した結果ではないことを確認するために、何度かバッチ実行しました
time bash -c "for i in {1..50}; do openssl genrsa -out / dev / null 2048; done;"
これは
実数0分16.577秒 ユーザー0m16.309s sys 0m0.092s
つまり、2048ビットのRSAキーが50個ある場合(私はエントロピーとランダム性が必要だと思います)、opensslは16秒しか必要としません。したがって、ここでの私の想定は、opensslを破らなければならないという「答え」です。結局のところ、私のLinux(3.2.0-59カーネル)は、ランダム性を生成する点で非常に素晴らしいものになっています。
多分違いは単にopensslの使用/dev/urandom
とgpgの使用で/dev/random
あり、trueが時間差を説明できる場合、私の問題はこれを確認する方法がわからないことを確認することです。
update2
opensslのランダムのソースをテストするために使用しました
strace -xe trace = file、read、write、close openssl genrsa -out testkey5.private 2048 2>&1 | grepランダム-A1
これは
open( "/ dev / urandom"、O_RDONLY | O_NOCTTY | O_NONBLOCK)= 4 read(4、 "\ x21 \ xd8 \ xaa \ xf1 \ x2b \ x5f \ x4a \ x89 \ x5d \ x6c \ x58 \ x82 \ xc1 \ x88 \ x21 \ x04 \ xfa \ x5b \ x18 \ x98 \ x8a \ x34 \ x2b \ xe3 \ xf3 \ xc0 \ xb1 \ xef \ xfb \ x44 \ x15 \ x09 "、32)= 32
そのため、opensslの2048ビットRSAキーペアには32バイト/dev/urandom
(「良い」で/dev/random
はない)で十分です。したがって、それはとても速いです!
測定
2048ビットRSA鍵ペア生成手段
- 32バイトのみ
/dev/urandom
(opensslを使用) - 300バイト
/dev/random
(openPGP GNU Privacy Guardを使用)
これはもちろん時差を説明します!
/dev/urandom
gpg で満足している間は、「1バイト/dev/random
はランダムな1バイトに対して十分ではない」とさえ言っています。これは、opensslキーがgpgに比べて「ランダム性が小さすぎる」傾向があることを意味しませんか?