Encryption

密碼回饋模式

  • February 26, 2019

CFB的視覺化

我不明白CFB到底是什麼。它在維基百科中說 CFB 與 CBC 相同,但我發現 CFB 比 CBC 更難。

有人可以向我解釋 CFB 是如何工作的。例如初始化向量(IV)如何在加密算法過程中與密鑰一起工作,以及密文消息如何工作到下一個分組密碼加密。

還有我的另一個問題,可以將 CFB 與 AES 一起使用嗎?我很困惑,因為明文消息應該進入 AES 算法來加密明文消息,但是在 CFB 中,只有初始化向量和密鑰會被分組密碼置換。

這是我對 CFB 的另一個問題:

“使用 CFB 來製作一個自同步流密碼,它將同步任何倍數的 $ x $ 位失去,首先使用初始化向量初始化塊大小的移位寄存器。這是用分組密碼加密的,最高 $ x $ 結果的位與 $ x $ 要產生的明文位 $ x $ 位的密文。這些 $ x $ 輸出的位被移入移位寄存器,並且該過程與下一個重複 $ x $ 明文位。解密類似,從初始化向量開始,加密,然後將結果的高位與 $ x $ 要產生的密文位 $ x $ 明文位。然後轉移 $ x $ 將密文的位放入移位寄存器。這種處理方式被稱為CFB-8或CFB-1(根據移位的大小)。

在符號中,其中 $ S_i $ 是個 $ i $ -移位寄存器的狀態, $ a \ll x $ 是 $ a $ 上移 $ x $ 位, $ \operatorname{head}(a, x) $ 是個 $ x $ 最高位 $ a $ 和 $ n $ 是 IV 的位數:

$$ \begin{aligned} C_i &= \operatorname{head}(E_K (S_{i-1}), x) \oplus P_i \ P_i &= \operatorname{head}(E_K (S_{i-1}), x) \oplus C_i \ S_i &= ((S_{i-1} \ll x) + C_i) \bmod 2^n \ S_{0} &= \operatorname{IV} \ \end{aligned} $$ 如果 $ x $ 位從密文中失去,密碼將輸出不正確的明文,直到移位寄存器再次等於它在加密時保持的狀態,此時密碼已重新同步。這將導致最多一個塊大小的輸出出現亂碼。”

我無法理解公式以及移位寄存器的用途。有人能幫我嗎?

那麼,在CFB模式下,加密過程是“取最近的密文塊,通過塊密碼,然後與明文塊異或,生成下一個密文塊”。至於IV,在加密第一個明文塊(您還沒有最新的密文塊)時,它被用作“最新的密文塊”。

現在,CFB 帶來的優勢是錯誤恢復,包括添加或刪除密文塊的錯誤。即是密文塊是亂碼(或插入或刪除一個塊),對應的解密後的明文塊和後面的也是亂碼;但是,在那之後,解密過程會重新同步,然後它會正確解密其餘的文本。現在,CBC 對於整個塊也具有相同的屬性;但是,如果您採用最後 128 位密文,對其進行加密,然後使用(比如說)每個 AES 塊輸出的 8 位,並且異或,即 8 位明文形成接下來的 8 位密文,好吧, 現在您有了一些可以抵禦從密文中插入或刪除單個字節的更改的東西(以必須執行塊密碼 N 次來加密 N 個字節為代價)。如今,這被認為是無關緊要的(我們通常要加密和 MAC 整個消息,如果有任何更改,我們會拒絕整個消息);從歷史上看,如果(比如說)您正在通過 RS-232 介面加密數據(這確實可以添加/刪除單個字節),這被認為是一個很好的功能。

CFB 模式的另一個優點(例如,CBC)是解密過程也在加密模式中使用分組密碼。根據分組密碼加密和解密的不同,這可能很方便。

現在,至於你的問題:

  • 關於CBC和CFB的關係;好吧,它們都執行相同的一般過程,它們都在下一個明文塊中迭代異或,然後通過塊密碼執行。它們的不同之處在於它們從哪裡提取密文;CBC 在我們通過分組密碼執行內部狀態後拉取它,CFB 在我們計算異或後拉取它。
  • 可以與 AES 一起使用嗎?為什麼,是的,AES 與 CFB 完美配合。至於你所說的“明文應該進入AES算法加密明文”,為什麼,這根本不是真的;在計數器模式下,明文消息根本不經過 AES 算法。對於CFB模式,對於第一個密文,是的,明文不進入AES算法;然而,對於任何其他密文塊,我們通過它發送前一個密文塊,並且之前的明文塊用於計算前一個密文塊。

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