Stream-Cipher

所有流密碼算法都基於與密鑰的異或嗎?

  • March 27, 2021

我是密碼學的新手,我試圖更多地了解流加密的工作原理。當談到流加密時,我知道範式是執行一對一的加密;輸入消息與密鑰進行異或。

  • 當密鑰長度小於消息大小時會發生什麼?
  • 是否所有算法都對密鑰執行相同的 XOR 操作,或者還有其他操作要執行,就像使用多輪和派生密鑰的分組密碼一樣?

如何更好地理解流密碼?

所有流密碼算法都基於與密鑰的異或嗎?

幾乎所有的。原因很簡單;x-or 是一種廉價的操作,並且 $ c = m \oplus k $ 然後

$$ c \oplus k = (m\oplus k) \oplus k = m $$

因此,如果您使用密鑰流對消息進行 x-or,則 re-xor 等於消息。這有助於使用與加密和解密相同的邏輯。這降低了硬體成本。

x-or 還有一個重要的性質;

  • 隨機序列與非隨機序列的 x-or 是隨機的。因此,如果為流密碼生成的序列具有良好的隨機性,它可以很好地隱藏我們的非隨機消息。

請注意,流密碼不需要每次循環/加密輸出一位。CTR 模式下的 AES 是一種流密碼,每個 AES 加密/計數器產生 128 位。ChaCha20 流密碼的塊大小為 64 字節,換句話說,每個計數器產生 512 位。

正如 FGrieu 所指出的,還有模加法/減法,當符號的數量不是 2 的冪時, $ c = m + k \bmod n $ 用於加密和 $ m = c - k \bmod n $ 用來。Solitaire手動流密碼使用此操作。

當密鑰長度小於消息大小時會發生什麼?

流密碼旨在產生非常長的位序列,因此這裡沒有問題。真正的問題是重複使用一個以上的 (key,nonce) 對。這可能會導致機密性失去。

是否所有算法都對密鑰執行相同的 XOR 操作,或者還有其他操作要執行,就像使用多輪和派生密鑰的分組密碼一樣?

嗯,顯而易見的答案是 x-nor,即 $ \neg\oplus $ . 我們可以使用 x-or 和 x-nor 以外的方法嗎?鍛煉:

  • 找到一個不會破壞資訊但也不會洩漏的二進制操作!

如何更好地理解流密碼?

好吧,讀一本關於流密碼和設計的書?你可以從

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