Known-Plaintext-Attack

1輪Feistel網路的已知明文攻擊

  • August 25, 2018

考慮一個簡單的 1 輪 Feistel 網路。

因為密文本質上是 $ (L_1,R_1) $ , 如果知道明文 $ (L_0,R_0) $ ,唯一未知的剩下的是 $ K $ .

然而,Feistel 網路中的輪函式不一定是可逆的。例如,原則上可以使用加密散列作為輪函式

Feistel 網路方程將變為:

$ R_1=L_0 \oplus \operatorname{sha2}(R_0,k_1)\L_1=R_0 $

一個可以異或 $ R_1 $ (已知密文)和 $ L_0 $ (已知明文),從而獲得 $ \operatorname{sha2}(R_0,k_1) $ ,但是除非使用蠻力,否則這不會產生密鑰。

很明顯,蠻力總是可能的——1輪Feistel網路還有其他問題,例如它洩露了一半的明文——但我想知道。

當一個人談論 KPA 對抗 1 輪 Feistel 網路時,是否暗示最終可以使用蠻力來獲得 $ k $ ,對於不可逆的圓形函式?

不管具體 $ f $ 功能,您已經觀察到您可以獲得

$$ R_1\oplus L_0=f(R_0,k_1) $$ 在哪裡 $ k_1 $ 第一輪子鍵是你的目標。 但 $ R_0 $ 也是已知明文的一部分。所以你有一個方程組 $ k_1 $ 您可以系統地嘗試解決。對於正常的 Feistel 函式 $ f $ (這是一對一的,否則密碼不可逆)這很簡單。

具體如何 $ sha_2(R_0,k_1) $ 定義在這裡起作用:

可能性包括 $ sha_2(R_0||k_1), $ 或者 $ sha_2(R_0 \oplus k_1) $ (可能帶有填充或重複 $ k_1 $ 使其長度與 $ R_0. $ ).

在任何情況下,您都可以嘗試使用 $ sha_2 $ 方程,注意到有效輸入長度基本上至多是 $ R_0 $ 加上長度 $ k_1 $ 因此,對於此類輸入,強大的雜湊函式很可能是一對一的。使用隨機預言模型,從長度為 128 位的輸入到 512 位的 sha_2 的完整摘要大小的隨機選擇函式是一對一的,具有壓倒性的機率(請參閱生日悖論,在許多問題的答案中解決加密堆棧交換)。

首先,我們應該知道 Feistel 網路不是什麼東西,而是一個偽隨機排列,這意味著當你給這個網路一個輸入時,它首先將它分成兩部分,然後在 F 函式的幫助下,它映射這兩個單獨的輸入到另外兩個單獨的輸出中,其中一個部分保持不變,但另一部分通過 F 函式進行更改。這個 F 函式的選擇方式應該是,經過一輪之後,它的輸出具有不可區分的性質,意味著 F 的任何輸出,與 F 的輸入不可區分,但是在這種情況下,這個函式將需要大量計算並且將重的; 設計師,而不是這個繁重的 F 函式,使用輕量級的函式,這些函式可以以某種方式產生這種不可區分性,但他們在很多輪次中都使用了這個函式,在這些回合中,共同為整個密碼提供了足夠的不可區分的力量,並且這種結構將可以安全地抵禦大多數攻擊,例如蠻力等。這個 F 函式沒有必要是可逆的,重要的問題是它在幾輪後不可區分的能力。

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