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演算法初始換位規則表

表1.2 DES演算法逆初始換位規則表

圖1.2 DES演算法的一次迭代過程圖


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-盒查詢功能表

圖1.3 子金鑰產生過程圖


表1.7 置換選擇2

- 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大致相同,都是每一個區塊的明文與之前區塊加密後的結果做異或後產生密文,不同的是之前區塊加密後的結果為獨立產生,每一個區塊的加密結果不受之前所有密文區塊的內容的影響,如果有區塊在傳輸過程中遺失或發生錯誤,將不至於無法完全解密,在此模式下,為了加密第一個區塊,必須設定一個初始向量,否則難以利用並行處理來加快加密作業。