Stream-Cipher

流密碼和循環問題

  • October 3, 2015
  • 對於所有 PRNG(包括 CSPRNG),假設有一個序列 x、y、z,那麼當 PRNG 循環回到 x 時,它後面的序列將與之前完全相同。這適用於所有 PRNG 嗎?
  • 是否有關於用於流密碼的 CSPRNG 的最小周期長度的任何規則?因為如果發生一個循環,那麼 One Time Pad 就不再是 One Time Pad 並且變得不安全了,對吧?
  • 常用的 Stream Cipher 算法的平均循環長度是多少?
  • 是否可以通過使算法依賴於它正在加密的內容來防止循環 - 即類似於

流密碼用於加密 Alice 和 Bob 之間的通信。Alice 的密鑰是 K1,Bob 的密鑰是 K2。這是對話

Alice: Hello, Bob
Bob: Hello, Alice
Alice: How are you? 

所以

  1. K1 用於生成用於加密“Hello, Bob”的流並發送。
  2. 生成的下一個流不僅取決於為“Hello,Bob”生成流之後的 PRNG 狀態,而且“Hello,Bob”也用作該流的輸入。這將用於加密“你好嗎?” 等等。

PRNG 具有內部有限狀態。該狀態的值決定了所有後續輸出;這就是 PRNG 作為確定性引擎的意義所在。每當 PRNG 產生一個新的輸出元素時,它的內部狀態就會演變成一個新的值。由於內部狀態的大小是有限的,因此 PRNG 在某些點進入一個循環並且永遠不會離開它是一個數學確定性。

細節值得分析:

  • PRNG會進入一個循環,不一定就開始循環。例如,如果 PRNG 狀態的大小位,並且當 PRNG 輸出一個元素時,狀態被替換為位輸出的某個散列函式 ,則平均而言,步後將達到循環,並且循環長度也將約為。你不會回到初始狀態。 $ S $ $ n $ $ S $ $ h(S) $ $ h $ $ n $ [Math Processing Error] $ 2^{n/2} $ [Math Processing Error] $ 2^{n/2} $
  • 這是關於內部狀態,而不是輸出。如果您在某個時刻獲得輸出元素,然後再次獲得,那麼您不一定完成甚至進入循環,因為兩個不同的內部狀態值可能會產生相同的輸出元素。 $ x $ [Math Processing Error] $ x $
  • 在實踐中,對於加密安全的 PRNG,循環無法完成甚至無法達到,這對於它來說太大了。週期長度曾經是一種傳統的“安全性”度量,但現在它不再扮演這個角色。任何超過的循環長度都與“無限”一樣好。[Math Processing Error] $ 2^{128} $

流密碼是專門用於批量數據加密的加密系統。許多流密碼的操作類似於 PRNG:從密鑰中,它們產生一長串偽隨機位,通過 XOR 與數據組合以進行加密或解密。在這種情況下,內部 PRNG 狀態不會以任何方式受到加密數據的影響。但是,其他一些流密碼也通過注入加密數據來修改其內部狀態。當數據被注入時,這改變了循環的情況:如果要加密的數據不是循環的,那麼你將不會得到一個循環。

通過使用某些操作模式,特別是 CFB、OFB 和 CTR,可以將塊密碼轉換為流密碼。CFB模式將加密數據注入內部狀態;OFB 和 CTR 沒有。如果塊大小為位(例如),則 CTR 提供正好為個塊的周期長度,即位;OFB 週期長度更隨機(如果您非常不幸,您可能會遇到一個較短的周期)。[Math Processing Error] $ n $ $ n = 128 $ [Math Processing Error] $ 2^n $ $ n2^n $

流密碼被視為“安全”的一個條件是,即使在對長的零序列進行加密時,它的輸出在計算上也無法與隨機性區分開來。結果是,在安全的流密碼中,循環不能完全走,甚至實際上不能簡單地達到。除此之外,週期長度對安全性沒有任何意義。

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