Stream-Cipher
所有流密碼算法都基於與密鑰的異或嗎?
我是密碼學的新手,我試圖更多地了解流加密的工作原理。當談到流加密時,我知道範式是執行一對一的加密;輸入消息與密鑰進行異或。
- 當密鑰長度小於消息大小時會發生什麼?
- 是否所有算法都對密鑰執行相同的 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 以外的方法嗎?鍛煉:
- 找到一個不會破壞資訊但也不會洩漏的二進制操作!
如何更好地理解流密碼?
好吧,讀一本關於流密碼和設計的書?你可以從
- 應用密碼學手冊第 6 章
- 學習基於 LFSR 的流密碼,它們很容易理解。
- 研究 RC4
- Andreas Klein 的書:流密碼
- 下一步是eSTREAM:ECRYPT 流密碼項目。閱讀 eSTREAM 候選人/獲勝者和對他們的攻擊。