Encryption

流密碼和一次性密碼有什麼區別?

  • March 26, 2019

(同步)流密碼是一種將一些固定長度的密鑰映射到任意長度的密鑰流(即比特序列)的算法: $ C : {0,1}^k \to {0,1}^{\infty} $ .

然後這個密鑰流與純文字流進行異或運算,得到密文流。對於解密,相同的密鑰流(從接收方的密鑰生成)將與密文流進行異或運算,再次給出密鑰流。

**One-time pad**是一種算法,它採用大尺寸(至少是消息大小)的密鑰,並將其與明文開始進行異或以獲得密文。對於解密,我們將密鑰的開頭與密文進行異或以取回明文。

這些看起來非常相似——可以說流密碼是一種(創建/使用的特殊方法)一次性密碼,或者一次性密碼是一種流密碼?

這兩類算法之間有什麼重要區別嗎?

沒有普遍接受的“流密碼”定義;但我最常遇到的是以下情況:流密碼是一種對稱加密算法,它接受任意位(或字節)序列作為輸入,例如:

  • 輸出的長度等於輸入的長度(無填充);
  • 對於任何 $ n $ (可能任何 $ n $ 如果我們將自己限制為字節,則它是 8 的倍數),第一個 $ n $ 輸出位僅取決於密鑰和第一個 $ n $ 輸入位,無論後續輸入位的值如何。

從這個意義上說,一次性密碼是一種流密碼。在CTR 模式CFB 模式中使用的分組密碼也是流密碼。請注意,後者不是那種“與輸入數據無關的密鑰生成的流的異或”。您連結到的 Wikipedia 頁面討論了“同步流密碼”和“自同步流密碼”。

然而,One-Time Pad 的最終安全性來自密鑰大小:它是牢不可破的*,因為*它假定密鑰與消息一樣長,並且是由不可預測的機制生成的。如果您使用更傳統的流密碼生成 pad,使用固定大小的小密鑰,那麼它不再是一次性密碼,而只是“正常”流密碼。“One-Time Pad”一詞專門指使用真正隨機長密鑰的神話方案。因此,雖然 One-Time Pad 是一種流密碼,但流密碼不是 One-Time Pad。

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