Brute-Force-Attack

給定密鑰和密文的一半對 Feistel 密碼進行攻擊

  • March 20, 2019

考慮一個經典的 Feistel 密碼,其中給出了輪函式和加密過程中使用的密鑰。

如果給出一半的密文,是否可以重建原始數據?此外,如果給出的密文不到一半,是否可以重建原始數據?

這些任務的複雜性是什麼?

範例: 假設我們有一個“有意義”的文本(例如,它屬於字典或某個集合 $ S $ )。假設“Salsifis”被加密為“abcdefgh”。假設“efgh”和密鑰一樣被顯示出來。除了使用窮舉搜尋之外,是否可以重建“Salsifis”?

在分組密碼(Feistel 的 SPN)中,我們希望每個明文位都影響密文位。換句話說,如果你寫下密文位的布爾函式 $ c_i $ ,我們期望該函式包含所有明文位和密鑰位;

$$ C_i:{p_0,\ldots,p_l} \times {k_0,\ldots,k_n} \mapsto {0,1} $$ $$ c_i=C_i(p_0,\ldots,p_l,k_0,\ldots,k_n) $$和 $ l $ -位分組密碼, $ n $ -位密鑰大小,和 $ C_i $ 是一個布爾函式並且 $ c_i $ 是密文的第 i 位。

類似地,可以為明文位編寫布爾函式;

$$ P_i:{c_0,\ldots,c_l} \times {k_0,\ldots,k_n} \mapsto {0,1} $$ $$ p_i=P_i(c_0,\ldots,c_l,k_0,\ldots,k_n) $$

一位失去的情況

在這種情況下,每個布爾函式 $ P_i $ 將有一個自由變數,即缺失的位。通過雪崩特性,我們預計 1 或 0 會隨機影響一半的位。因此,如果您將此變數設置為 1 或 0,您將擁有幾乎完全不同的明文。如果您對明文有先驗知識,例如語言或結構,則可以確定哪個是正確的。

多於一位失去

在這種情況下,缺失的變數會表現得更加複雜。但是,仍然可以嘗試猜測位並檢查明文屬性以進行驗證。

複雜性

正如人們所看到的,一切都不過是蠻力。所以復雜性是 $ 2^m $ 在哪裡 $ m $ 是失去的位數。請記住,只有在您有一些關於明文的資訊時,暴力破解才能成功,例如RSA challenge

** 更新:DES 中一位更改的簡單測試案例。**

鑰匙 : $ \texttt{0e1f35bbaf37a86b} $

密文: $ \texttt{0123456789ABCDEF} $

純文字 : $ \texttt{0d738d5e43fbd5fe} $

密文: $ \texttt{1123456789ABCDEF} $

純文字 : $ \texttt{bd85b2e02bb056df} $

有一位變化的兩個明文之間的差異;

$ \texttt{b0f63fbe684b8321} $ , 和二進制;

1011000011110110001111111011111001101000010010111000001100100001

其中有 33 個 1

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