Feistel密碼的定義是什麼?
我知道 Feistel Network 的工作原理,但我想知道“Feistel Cipher”的確切定義,以解決以下幾個問題:
問題1:說DES(數據加密標準)是Feistel Cipher對嗎?
意見:我認為“DES使用Feistel網路”的說法是正確的。另外,由於加密和解密過程相同,除了密鑰調度,有人可以說DES是Feistel Cipher。但我認為其他人可以說 DES 不是 Feistel 密碼,因為 DES 具有初始和最終排列。
問題2:“DES_Encrypt’(M,K1,K2) = DES_Encrypt(M,K1) xor K2”也是Feistel Cipher嗎?
意見:我認為“上述修改後的DES使用Feistel結構”的說法是正確的。但是,由於上述修改方案的加密和解密結構不同,有人可以說上述修改方案不是Feistel Cipher。
可以有幾種選擇來解決這個定義問題:
- 如果使用 Feistel 網路,我們將加密方案稱為 Feistel Cipher;
- 如果僅使用 Feistel 網路,我們將加密方案稱為 Feistel Cipher;
- 我們稱一個加密方案為Feistel Cipher,如果它使用Feistel Network並且加密和解密過程相同,除了密鑰調度過程。
哪一個是正確的?或者,還有其他意見嗎?
我知道這個問題不是那麼重要,但我想把它說清楚。
根據Alfred J. Menezes、Paul C. van Oorschot 和 Scott A. Vanstone 的應用密碼學手冊給出的定義 7.81,
Feistel 密碼是一個迭代密碼映射一個 $ 2t $ -位明文 $ (L_0,R_0) $ , 為了 $ t $ 位塊 $ L_0 $ 和 $ R_0 $ , 為密文 $ (R_r,L_r) $ ,通過一個 $ r $ -round 過程在哪裡 $ r\ge1 $ .
為了 $ 1\le i\le r $ , 圓形的 $ i $ 地圖 $ (L_{i−1},R_{i−1})\xrightarrow{K_i} (L_i,R_i) $ 如下: $ L_i=R_{i−1} $ , $ R_i=L_{i−1}\oplus f(R_{i−1},K_i) $ , 其中每個子鍵 $ K_i $ 是從密匙派生的 $ K $ .
通常在 Feistel 密碼中, $ r\ge3 $ 並且經常是偶數。Feistel 結構特別將密文輸出排序為 $ (R_r,L_r) $ 而不是 $ (L_r,R_r) $ ; 在最後一輪之後,區塊會按照通常的順序進行交換。從而使用相同的方法實現解密 $ r $ -round 過程,但子鍵以相反的順序使用(…)
他們在下一頁中指出,問題的 Q1 中指出了矛盾:
DES 是 Feistel 密碼 (…)
初始比特置換 (IP) 在第一輪之前;在最後一輪之後,交換左右兩半,最後,通過 IP 的倒數對結果字元串進行位置換。
在 Q1:DES 是 Feistel 密碼,除了 IP 和 IP -1;這種偏差保留了純 Feistel 密碼的顯著特性,即只有子密鑰的順序在加密和解密時有所不同。
在 Q2:構造是一個 Feistel 密碼,除了上述偏差,以及一個額外的最終 XOR 與 $ K_2 $ 關於加密,以及相應的附加初始 XOR $ K_2 $ 解密時;這失去了前面提到的純 Feistel 密碼的顯著特性,並添加了一個依賴於密鑰的轉換。
我會說,對於吉姆柯克來說,Q1 的答案是肯定的,而對斯波克先生來說不是。雖然他們可以同意第二季度的否決。船長在問題的選項 3 上(也許還要求任何依賴於鍵的轉換都是通過 Feistel 結構);而邏輯學家堅持 2 (並希望任何偏差都是明確的)。甲板上沒有人代表1。