Randomness

CSPRNG 和 PRNG 有什麼區別?

  • January 20, 2017

CSPRNG 和 PRNG 有什麼區別?

它們之間是否存在性能差異?**例如:**我們使用 PRNG 生成非常昂貴的密鑰,使用 CSPRNG 生成快速分組密碼中的 IV/nonce?

這兩種RNG有什麼區別?

“PRNG”的意思是“偽隨機數生成器”,這意味著一個數字序列(位、字節……)是從一個看似隨機的算法產生的,但實際上是確定性的(序列是從某個未知的內部狀態生成的),因此偽隨機

這種偽隨機性可以是密碼安全的,也可以不是。如果沒有人能可靠地區分輸出與真正的隨機性,那麼它在密碼學上是安全的,即使 PRNG 算法是完全已知的(但不是它的內部狀態)。非密碼安全的 PRNG 會欺騙基本的統計測試,但可以被智能攻擊者與真正的隨機性區分開來。

例如,考慮以下生成器:

  • 有一個內部狀態s,它是一個 20 字節的序列。
  • 生成器按 20 字節塊生成長字節序列。
  • 為了產生下一個塊,算法是:輸出s,然後將s設置為 SHA-1( s )。

這個 PRNG 在統計上會非常好,但與真正的隨機性區分開來是微不足道的:只需在輸出中取兩個連續的 20 字節塊,看看第二個是不是 SHA-1 對第一個的結果。這不是加密安全的PRNG。

當然,每個 CSPRNG 都是 PRNG,但不是每個 PRNG 都是 CSPRNG。像Mersenne twister這樣的一些非 CS PRNG可以實現相當高的性能,並且足以在沒有智能攻擊者可以擊敗的非加密情況下(例如物理模擬)。儘管也有一些已知的高性能 CSPRNG(例如這些流密碼),但非 CS PRNG 可能在缺乏密碼安全性不是問題的情況下提供優勢。

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