2016-04-13 53 views
2

我正在研究PHP的非對稱加密。爲什麼openssl_pkey_new比gpg快得多?

在我的初步測試我注意到,openssl_pkey_new生成密鑰gpg --gen-keys在命令行上MUCH更快。在每種情況下,這是針對相同長度的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密鑰對生成的時間取決於找到約一半密鑰大小的兩個素數。尋找素數需要不確定的時間量 - 基本上,你幾乎可以立即找到它們,或者你可以花費相當多的時間找到素數。素數分佈相當好,但隨機的起點可能接近素數或離一個更遠。你可能需要測試幾千個密鑰對來平均一些東西。

總而言之,密鑰對生成器的速度並不能告訴您有關隨機數或結果鍵的質量。 ANSI X9.31中的附加測試實際上並不重要。

相關問題