Permutation
Feistel 密碼如何在塊之間產生擴散?
從我讀到的關於 Feistel 密碼的內容中,我可以理解在每個塊中,既有混淆又有擴散。但我不清楚 Feistel 密碼是如何在數據塊之間排列的。如果一條消息比塊長度長,那麼改變消息的一部分將如何影響消息其他部分的加密?如果將 L1 和 R1 視為一個塊,它們將如何影響消息的下一個塊或前一個塊?
如果一條消息比塊長度長,那麼改變消息的一部分將如何影響消息其他部分的加密?
這真的不取決於使用的分組密碼,它可能是像DES這樣的feistel 密碼或像AES這樣的SP 網路,但取決於操作模式。
現在這個問題的答案真的取決於選擇的實際模式。無論如何請注意:加密過程從不依賴於消息,只有加密結果顯示模式之間可觀察到的差異。
- 如果使用 CTR 或 OFB,則消息位的任何更改只會影響相應的密文位,而不會影響其他位。這同樣適用於在內部使用 CTR 的所有模式(例如幾乎所有經過身份驗證的加密模式)。
- 對於 CBC,這將打亂目前塊,因此也會打亂下一個塊的“編碼消息”,因此消息更改會完全傳播,直到從更改塊開始以隨機方式的最後一個塊(這也使 CBC 在某種程度上適合作為消息驗證碼,即CBC-MAC)。
- 至於CFB,它類似於CBC。明文的變化將無限傳播,因為這將改變目前的密文塊,從而改變下一個塊的“xor-pad”。
- ECB(你真的不應該使用)在這方面的行為很像 CTR 和 OFB,明文的變化會影響塊級粒度而不是位級的密文。
如果將 L1 和 R1 視為一個塊,它們將如何影響消息的下一個塊或前一個塊?
這不是feistel 網路的眾所周知或未定義的用法。但是,您要麼以這種方式創建更大的分組密碼,從而將模式問題“移動”到更高的粒度,要麼您正在定義某種模式同時對兩個數據塊進行操作,例如 $ C_1||C_2=E_K(P_0,P_1)||E_K(P_1,P_2) $ 這將遭受與 ECB 類似的問題,但粒度級別更高(例如,您可以檢測到三個塊的模式何時重複)。