Randomness
為什麼我們要求 CSPRNG 的輸出與真正的隨機無法區分?
在我讀到的所有地方,輸出與真正隨機的不可區分性都被認為是 CSPRNG 的要求。然而,沒有人願意為如此強烈的要求給出理由。
具體來說,Yarrow 和 Fortuna 都使用分組密碼作為生成器,並且都限制了特定密鑰可以產生的輸出量。一旦達到限制,就會更改密鑰(也稱為重新密鑰)。他們的理由是,由於分組密碼在他們的設計中不會產生重複的輸出塊,攻擊者可以向 PRNG 請求大量的輸出,發現沒有重複的塊,並確定輸出不是真正的隨機。所以呢?
攻擊者可以從中獲得的唯一資訊是密碼的塊大小,這絲毫不會削弱安全性。此外,如果實施是開源的,這將是公共知識。我不明白缺少重複塊會如何削弱我們的安全性。
- 我們只是爭取盡可能接近理想的加密貨幣。無法區分是我們可以從 PRNG/流密碼中要求的最強屬性。
- 很難預測哪些非理想屬性會在未來的某個時候導致問題。例如,導致填充預言、BEAST、CRIME 或 RC4 偏差的非理想屬性在被證明可利用之前已為人所知多年。
- 許多安全證明假定不可區分,因此如果 PRNG 是可區分的,這會削弱證明。如果 PRNG 在某些條件下是可區分的,即使它是一個看似無害的區分符,那麼如果滿足這些條件,依賴於不可區分性的證明就變得毫無用處。
- 考慮在 CTR 模式下使用分組密碼加密的消息。這具有密鑰流中的任何塊都不會相同的特性(就像沒有重新鍵入的 Fortuna/Yarrow 一樣)。當密文包含相同的塊時,攻擊者知道對應的明文塊不同,因為對應的密鑰流塊也不同。
誠然,在大多數情況下這不是一個巨大的洩漏,但它是一個洩漏。在某些情況下,它可能會導致問題,例如,如果消息僅對每個塊使用幾個不同的值。