為什麼 DES 實現了這麼多交叉佈線?
我一直在經歷 DES,我發現大多數塊只是重新調整輸入,這可能被稱為“交叉佈線”。這包括 IP、IP-1、PC-1、PC-2 甚至擴展(儘管這似乎比其他的更有用)。
為什麼 DES 會這樣做?是有原因的,還是只是為了好玩?
排列 IP 和 PC-1 是近乎換位,並且不發揮密碼作用。IP -1只是簡單的 IP 反轉。關於它們為何出現在這裡的最佳理論是:作為早期 DES IC 使用的 8 位介面的技術副產品,在編寫 DES 標準時轉化為與其他介面相同的形式。當使用 8 個 8 位移位寄存器用於數據輸入和輸出以及 8 個 7 位移位寄存器用於鍵輸入(後者在鍵載入後重新組合為兩個 28 位移位寄存器)時,它們使硬體實現的佈線變得簡單。
擴展 E(從 32 位到 48 位,在 XOR 與通向 S 盒輸入的鍵位之前)非常有規律;它是為了補償從 6 位到 4 位的 S-box。S-box 的這種幾何結構本身就是安全性和矽面積之間的折衷方案。
置換 P(32 位,在 S-box 的輸出)是非常不規則的,在一輪到另一輪的擴散中起著核心作用,並為此目的進行了精心優化(E、P 和 S- 的組合)表使 DES 對差分密碼分析具有很強的抵抗力)。請注意,這種任意排列的額外矽成本很低(特別是與提供一些擴散的替代品相比,並考慮到 1970 年代的技術)。在軟體中,E 具有相當大的性能成本,尤其是在小於 32 位的 CPU 上:典型的實現使用具有 32 位寬輸出的 S-table,需要比其他方式更多的記憶體,或者每個 S-box 需要一個屏蔽操作,每輪有 8 個。
置換 PC-2(在密鑰移位寄存器和 S 盒之前的 XOR 之間)在使 16 個 DES 子密鑰“良好”方面發揮作用,即從一輪到另一輪沒有太多可利用的相關性。這樣一來,輪子密鑰中未使用的 8 位(實際使用的 56 個密鑰位中的)將用於下一輪的子密鑰中。除此之外,據我所知,這是相當隨意的。
我不相信DES中的排列是為了使軟體實現變慢而引入的:IP、IP -1和 PC-1 代表軟體 DES 計算時間的一小部分,因為它們不在圓環;並且不是任意的,以至於這三個表的某些軟體實現利用了它們是近乎轉置的事實。其他位按摩要麼盡可能簡單(E),要麼具有密碼角色:P的主要角色;PC-2 的一個較小的,但後者為批量加密引入了非常低的軟體成本。此外,我不知道支持該理論的歷史證據;當證據已經浮出水面時(見這個答案的結尾) 支持故意引入 DES 的 56 位密鑰大小以削弱它,這是設計者願意使用 64 位或 128 位(如在某些 Lucifer 變體中)的妥協結果;和美國當局推動 48 位。