為什麼在 Feistel 密碼中密鑰重用不是問題?
我對流密碼和一次性密碼有很好的理解。我也知道在 PRG 中使用相同密鑰作為流密碼的危險。
但是據我所知,Feistel 分組密碼對每個純文字塊使用相同的密鑰(每輪都擴展為密鑰)。如果這是真的,為什麼這不是問題?是因為函式 F 尤其是使用的 S 框是不可逆的(即單個輸出有許多可能的輸入)?
一次性便箋重用由於其線性而揭示了明文的差異: $$ c_1 = m_1 \oplus k,~~~~ c_2 = m_2 \oplus k,~~~~ c_1 \oplus c_2 = m_1 \oplus m_2. $$
另一方面,好的分組密碼(基於 Feistel Networks 或 SPN 或其他任何東西)減少了密鑰重用直接洩露的資訊:如果 $ c_1 = E_k(m_1), c_2 = E_k(m_2) $ ,那麼,給定 $ c_1 $ 和 $ c_2 $ 我們只能得出結論 $ m_1 $ 和 $ m_2 $ 是否相等(通過檢查是否 $ c_1 $ 和 $ c_2 $ 是否相等)。
首先,這不足以滿足現代加密要求:這種加密仍然被認為是不安全的,因為它仍然會洩露有關消息的資訊。
但是,通過使用適當的分組密碼模式(例如 CBC、CTR),我們可以隨機化分組密碼的輸入,這樣即使消息相同,分組密碼的輸入和輸出也會不同(機率很高)。這樣,攻擊者將無法判斷消息是否相等或僅給出密文。
**UPD:**要重點說明問題,這與 Feistel 函式的不可逆性無關 $ F $ 本身:它可以是可逆的,並且 FN 仍然是安全的(可能需要多幾輪)。事實上,你甚至不需要反轉 $ F $ 解密一個塊。破解它的困難在於以復雜的非線性方式使用未知密鑰,使得提取明文/密文塊之間的任何有意義的關係非常困難(與多次填充相反,該關係是線性且簡單的)。