給定密鑰和密文的一半對 Feistel 密碼進行攻擊
考慮一個經典的 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