2016-04-13 34 views
2

私はPHPで非対称暗号化を検討しています。私の予備試験でなぜopenssl_pkey_newはgpgよりもずっと高速ですか?

私はopenssl_pkey_newは、コマンドライン上のgpg --gen-keysよりもはるかに高速キーを生成していることに気づきます。どちらの場合も、これは同じ長さのRSAキー用です。

私の最初の推測は、OpenSSLライブラリの乱数生成が安全ではないということです。

これが理由ですか?そして、私は強い鍵を生成するためにopenssl_pkey_newを信用できますか?

+2

OpenSSLの乱数生成器の解析:http://eprint.iacr.org/2016/367 –

+0

ありがとう。代わりに、私は代わりにPHP 7内に留まり、依存関係をインストールする必要はありません。 (私はECCにはオープンしていますが、すぐに使える解決策は見つけられないようです)。 – spraff

答えて

1

RSA鍵ペアを生成する方法はさまざまです。厳密なANSI X9.31の要件を満たせば、キー生成はかなり遅くなります。

さらに、素数性テストの速度は、非常に大きな整数の高速演算に依存します。これらの操作の速度は大きく異なる可能性があります。例えば、Java 8からJava 9へのアップグレードでは、2048ビット・キーのパフォーマンスが倍になることが示されます。

乱数ジェネレータをシードするためにエントロピーを使い切っていない限り、乱数生成はあまり重要ではありません。 /dev/random/を直接使用すると、問題を引き起こす可能性があります。しかし、素数性テストは、RNGよりも多くの時間を使用する可能性があります。

最後に、RSA鍵ペア生成の時間は鍵サイズの約半分の2つの素数を見つけることに依存することに注意してください。素数を見つけることは時間の非確定的な量を取る - 基本的に素早く見つけることができるか、素数を見つけるのにかなりの時間を費やすことができます。プライムはかなり良く分散されていますが、ランダムな開始点はプライムに近くても、離れていてもかまいません。あなたはおそらく、数千の鍵ペアの世代を平均化するためにテストする必要があります。

キーペアジェネレータの速度は、乱数の品質や生成されるキーの詳細を教えてくれません。 ANSI X9.31の追加テストはそれほど重要ではありません。

関連する問題