Hash

雜湊算法對 PRNG 的影響

  • July 21, 2017

偽隨機數生成器通常使用散列函式進行生成。一些應用程序允許使用者選擇此雜湊函式,例如 OpenVPN。

從 OpenVPN 手冊:

–prng算法

$$ nsl $$ (高級)對於 PRNG(偽隨機數生成器),使用摘要算法 alg(預設 = sha1),並將 nsl(預設 = 16)設置為隨機數秘密長度(16 到 64 之間)的字節大小。

Set alg=none to disable the PRNG and use the OpenSSL RAND_bytes function instead for all of OpenVPN's pseudo-random number needs.

散列函式對生成的偽隨機數的隨機性有什麼影響?

例如,SHA1 遭受經過驗證的雜湊衝突。這會影響偽隨機數嗎?

SHA2 會被認為更安全,還是散列函式的影響對隨機性不是那麼重要?

散列函式對生成的偽隨機數的隨機性有什麼影響?

沒有任何。像您提到的那些良好的加密雜湊函式將產生均勻分佈的隨機輸出。給定一長串輸出,您將無法辨識使用了哪個散列函式。但是,如果您更改雜湊,實際的數字流將完全改變,但它們都將是隨機的。無論您付出多少努力,都應該仍然無法將好的 PRNG 輸出與真正的隨機性區分開來。

例如,SHA1 遭受經過驗證的雜湊衝突。這會影響偽隨機數嗎?

在非常特殊的情況下,這是一個非常人為的例子。我們還沒有到可以立即反轉 SHA-1 輸出以確定輸入的階段。實際上,PRNG 輸出中的衝突並不可怕。您會期望這些在您生成輸出時自然發生(但不經常發生)。隨機數有時會重複。重要的是,再次給定一個長序列的輸出,我們目前無法發現輸入序列,因此無法發現生成器的內部狀態。

SHA2 會被認為更安全,還是散列函式的影響對隨機性不是那麼重要?

在這個階段,它沒有任何區別。/dev/random 和 Java 的 SecureRandom 仍然使用 SHA-1 混合函式,它們被認為是完整的。如果您特別關注隨機性,那不是密碼安全性和反轉能力的直接產物。這是雪崩效應的函式。任何表現出雪崩效應的雜湊函式都會產生完美的隨機輸出。例如,基於置換置換網路或矩陣乘法的簡單算法將產生完全隨機的輸出。您只能將其反轉,因此它們不適合作為加密 PRNG。

引用自:https://crypto.stackexchange.com/questions/50296