1.DES簡介
DES演算法是由IBM公司在20世紀70年代發展起來的,於1976年11月被美國政府採 用,隨後被美國國家標準局和美國國家標準協會承認,同時也成為全球範圍內事實上的工業標準。
DES演算法作為分組密碼的代表,已成為金融界及其他各種行業廣泛應用的對稱金鑰密碼系統。它以feistel網路結構理論為基礎,採用迭代分組形式,在提高演算法的執行速度,改善了密碼的實用性的同時,也大大的提高了密碼的安全性,對於我們研究密碼學以及展望密碼學的發展方向有重要意義。
2.演算法描述
DES使用56位金鑰對64位的資料塊進行加密,並對64位的資料塊進行16輪編碼。在每輪編碼中,一個48位的金鑰值由56位的“種子”金鑰得出來。 DES演算法把64位的明文輸入快變成64位的密文輸出塊,整個演算法的變換過程如圖1.1所示。
而解密和加密過程大致相同,不同之處僅在於右邊的16個子金鑰的使用順序不同,加密的子金鑰的順序為K1,K2,…,K16,而解密的子金鑰的使用順序則為K16,K15,…,K1。 IP即初始換位的功能是把輸入的64位明文資料塊按位重新組合,並把輸出分為L0,R0兩部分,每部分各長32位。其置換規則如表1.1所示。
DES演算法初始換位規則表
即將輸入的64位資料的第58位換到第1位,第50位換到第2位……依此類推。設定換前的輸入值為D1D2…D64,則經過初始換位後的結果為:L0=D58D50…D8,R0=D57D49…D7。 經過初始換位後,將R0與金鑰發生器產生的金鑰K1進行計算,其結果記為f(R0,K1)再與L0進行異或運算得到L0⊕f(R0,K1),把R0記為L1放在左邊,把L0⊕f(R0,K1)記為R1放在右邊,從而完成了第一次迭代運算。連續迭代16次,第16次迭代結果左右不交換,即L15⊕f(R15,K16)記為R16放在左邊,R15記為L16放在右邊。 16次迭代後,得到L16,R16。將此作為輸入進行逆初始換位IP-1,就可以得到密文輸出。逆初始換位正好是初始換位的逆運算。其置換規則如表1.2所示。表1.2 DES演算法逆初始換位規則表
其置換規則和表1.1所述相似。 DES演算法的16次迭代具有相同的結構,每一次迭代的運算過程如圖1.2所示。圖1.2 DES演算法的一次迭代過程圖
在每一次迭代過程中,其核心部分是f函式,即圖1.2中的擴充套件置換、異或運算、S-盒替換和P-盒置換。 擴充套件置換是將32位資料擴充套件為48位,使其長度與金鑰一樣。其置換規則如表1.3所示。 表1.3 擴充套件置換規則表P-盒置換規則如表1.4所示。 表1.4 P-盒置換規則表 16 7 20 21 29 12 28 17 1 15 23 26 5 18 31 10 2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25
S-盒是DES演算法的核心,它的功能是將6位資料變為4位資料,它是一個選擇函式,共有8個S函式,其功能表如表1.5所示。
表1.5 S-盒查詢功能表
以S1為例,設S1盒6位輸入為D=D1D2D3D4D5D6,將D1D6組成的一個2位二進位制數轉化為十進位制數,對應表中行號,將D2D3D4D5組成的一個4位二進位制數也轉化為十進位制數,對應列號,然後在S1表中差得行和列交叉點處的對應的數,以4位二進位制表示,即為S1的輸出。 圖1.3給出了子金鑰Ki(48位)的生成演算法。圖1.3 子金鑰產生過程圖
初始金鑰值位64位,但去掉8,16,…,64位的奇偶校驗位,實際可用位數只有56位。經過置換選擇1(如表1.6所示)後,金鑰的位數由64位變成56位,分為C0,D0兩部分,然後進行第一次迴圈左移(圖中LS),得到C1,D1,合併得到56位,再經置換選擇2(如表1.7所示),得到金鑰K1。依此類推,可得到K2,K3,…,K16. 每次迴圈左移的的位數分別是:1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1 表1.6 置換選擇1表1.7 置換選擇2
以上就完成了DES的整個加密解密流程。- DES的安全性 20多年來,儘管計算機硬體及破解密碼技術的發展日新月異,若撇開DES的金鑰太短,易於被使用窮盡金鑰搜尋法找到金鑰的攻擊法不談,目前所知攻擊法,如查分攻擊法或線性攻擊法,對於DES的安全也僅僅做到了“質疑”的地步,並未從根本上破解DES。 當然,對DES的批評也有很多,主要集中在以下幾點: (1) DES的金鑰長度(56位)可能太少。 (2) DES的迭代次數可能太少。 (3) S-盒中可能有不安全因素。 (4) DES的一些關鍵部分不應當保密。 比較一致的看法是DES的金鑰太短,僅256個,不能抵抗窮盡金鑰搜尋攻擊。事實上也確實如此,先後有人在較短的時間內就破解了DES。正因為如此,美國政府已經徵集評估和判定出了新的資料加密標準AES以取代DES。儘管如此,DES還是對現代分組密碼理論的發展和應用起了奠基性作用。
3.DES的工作模式 實際應用中,DES是根據其加密演算法所定義的明文分組的大小(64bits),將資料割成若干64bits的加密區塊,再以加密區塊為單位,分別進行加密處理。根據資料加密時每個加密區塊間的關聯方式,可以分為4種加密模式,包括ECB,CBC,CFB及OFB。 3.1 電碼本模式(ECB) ECB模式是DES加密的基本工作模式。 在ECB模式下,每一個加密區塊依次獨立加密,產生獨立的密文區塊,每一加密區塊的加密結果不受其他區塊的影響。使用此種方式下,可以利用並行處理來加速加密解密運算,且在網路傳輸時任一區塊有任何錯誤發生,也不會影響到其他區塊傳輸的結果。這是該模式的優點。 該模式的缺點是容易暴露明文的資料模式。 3.2 密碼分組連結模式(CBC) 在CBC模式下,第一個加密區塊先與初始向量IV做異或運算,再進行加密。其他每個加密區塊加密之前,必須與前一個加密區塊的密文作一次異或運算,再進行加密。每一個區塊的加密結果均會受到前面所有區塊內容的影響,所以即使在明文中出現多次相同的明文,也會產生不同的密文。 密文內容若遭剪貼、替換,或在網路傳輸過程中發生錯誤,則其後續的密文將被破壞,無法順利解密還原,這是這一模式的的優點,也是缺點。 在CBC模式下,加密作業無法利用並行處理來加速加密運算,但其解密運算可以利用並行處理來加速。 3.3 密文反饋方式(CFB) 在CFB模式下,可以將區塊加密演算法當作流密碼加密器使用,流密碼加密器可以按照實際上的需要,每次加密區塊大小可以自訂,每一個區塊的明文與前一個區塊加密後的密文做異或後成為密文。因此,每一個區塊的加密結果受之前所有區塊內容的影響,也會使得在明文中出現多次相同的明文均產生不同的密文。在此模式下,位了加密第一個區塊,也必須選擇一個初始向量,且此初始向量必須惟一,每次加密時必須不一樣,也難以利用並行處理來加快加密作業。 3.4 輸出反饋模式(OFB) OFB與CFB大致相同,都是每一個區塊的明文與之前區塊加密後的結果做異或後產生密文,不同的是之前區塊加密後的結果為獨立產生,每一個區塊的加密結果不受之前所有密文區塊的內容的影響,如果有區塊在傳輸過程中遺失或發生錯誤,將不至於無法完全解密,在此模式下,為了加密第一個區塊,必須設定一個初始向量,否則難以利用並行處理來加快加密作業。