DES 加密算法的改進方案
DES 算法
DES 算法是一種分組密碼,明文每 64 比特為一組,密鑰為 64 比特,除去 8 比特奇偶校驗位,實際密鑰為 56 比特,因此密鑰組合數量為 256 個。加密時,用同一密鑰依次對每組明文進行加密,得到的每組密文也是 64 比特,因此最后得到的密文長度和明文長度一致。對每組等長明文加密時,密鑰不變,算法也不變,因此 DES 十分適合以嵌入式硬件實現 [5]。DES 加密前先把明文用一個置換函數 IP 映射為初始密文。DES 加密算法由 16 輪迭代加密構成,每次迭代加密所用密鑰由原始密鑰循環左移得到,稱為子密鑰 K [6]。每輪迭代前,把上一輪迭代得到的密文(如果是第一輪迭代,加密對象是初始密文)分為左半 L(第 1~32 位)和右半 R(第33~64 位)。R 被當前子密鑰加密為
,f 為加密函數。
和 L 異或運算后得到下一輪迭代的右半 R' 。下一輪迭代的左半 L' 由R 賦值,和 R 完全一致。16 輪迭代完成后得到的密文,經過一個置換函數
映射后得到最終密文。解密算法和加密算法一致,密鑰也一致,但每輪迭代所使用的子密鑰的順序和加密時相反。
經過 16 輪迭代的 DES 算法已被證明具有充分的對抗統計分析和線性分析的能力。因此,破解 16 輪迭代的 DES 密文的唯一途徑是暴力破解,即用窮舉法嘗試所有的 256 個可能的密鑰,這在 DES 算法剛提出時被認為是不可能完成的任務。但隨著計算機運算速度的提高和并行計算技術的成熟,DES 的安全度被大大弱化。
DES 算法的改進方案
對 DES 算法的改進原則是使用 RSA 保護DES 密鑰,同時在加密前,對明文增加亂序和干擾處理。
2.1 改進方案的總體設計
DES 算法的密鑰是對稱密鑰,必須通過秘密信道傳送。為了使其也能通過互聯網等公開信道傳送,必須使用公鑰密碼體系對其進行保護。最常用的公鑰密碼算法是 RSA,因此,我們可以把 DES 密鑰“封裝”在一個 RSA 加密的“頭部”(Header)里,然后把這個頭部附加在DES 密文前,成為一個密文包(Encrypted Data Packet),再把這個密文包發送給接收方。“封裝”主要是指用接收方的公鑰加密 DES 密鑰。接收方收到密文包后,先以自己的私鑰解密包頭,取出 DES 密鑰后,再用其解密密文包的數據部分(即 DES 密文),得到明文。
如果頭部封裝的信息僅僅是 DES 密鑰,抗攻擊意義并不大,僅解決了密鑰通過公共信道分發的問題,攻擊者仍然可以用窮舉法對密文包的數據部分實施暴力破解。為了增加暴力破解的難度,密文包頭部字段中必須包含一些有助于提高暴力破解難度的信息,并且不能顯著影響密文包頭的 RSA 解密效率。主要可以采取以下兩個策略:(1)對明文預先進行亂序處理,擾亂(Confuse)明文的原來順序;(2)在 DES加密前插入無效信息,攻擊者只有在剔除這些無效信息后,才能得到有效的密文分組,并對此分組嘗試暴力破解。
2.2 改進算法詳述
改進算法包括密文包的結構、明文的預處理和加密流程,以及密文包的頭部結構。
2.2.1 密文包的整體結構
密文包由頭部和密文兩個部分組成。由于頭部是用 RSA 加密的密文,因此本文以“RSA 頭”這一名稱指代頭部。明文通過 RSA 頭中的密鑰集加密后,生成密文部分。由于無效信息的插入,使密文部分和明文部分的長度不相等,大大增加了破解的難度。“密鑰集”不僅是 DES 密鑰,還包含了加密或解密流程中各階段所使用的密鑰,而 DES 加密或解密僅僅是其中一個階段。為方便接收方把頭部分離出來,RSA 頭的長度是固定的,只能用接收方的私鑰解密。
2.2.2 對原始明文的預處理
加密前需要對原始明文 P 進行預處理,詳細流程如下文所述。
(1)分組。分組長度和 DES 加密的分組長度一致(64 位),最后一組不足 64 位的以 0 補足。
(2)分段。段是比組更高一級的單位,每段包含64個分組,最后一段不足64組的以0補足。
對預處理后的明文用 P0 表示,得出
,其中
為 P0 的 第 i 個 分 段,
(
為
段的第 j 個分組),
(
為
分組中的第 k 位)。
整個加密過程需經過 3 次加密,分別以 U,J,D 表示,每次加密后的密文分別以 A ,B ,C 表示。圖 1 說明了 3 次加密之間的輸入 / 輸出關系。

圖 1 加密流程
2.2.3 密文包的頭部結構
RSA 頭包括 3 個關鍵字段和一些輔助字段(如圖 2 所示)。關鍵字段分別存放 3 個密鑰,對應加密流程的 U,J,C 這 3 個階段。輔助字段主要存放控制和校驗信息。這些字段的名稱、長度和作用如下文所述。

圖 2 RSA 頭的布局結構
(1)亂序密鑰(Confusing Key,CK)。亂序密鑰的作用是對每段明文進行重排(Reshuffle)。其長度為 64 個字節,每個字節最高位恒為 0,最低位為校驗位,中間 6 位轉化為 10 進制數后表示一個加密參數 ,
i 為字節的序號。亂序加密算法為
,
表明第i 組的密文由明文各組的第
比特排列而成。其中,
是第 m 組的第 n 位,滿足
(2)干擾密鑰(Jamming Key,JK)。干擾密鑰的作用是在密文 A 的每個分組中插入無效信息,以增加破解難度。其長度為 8 位,前6 位表示在分組中插值的位置
,后兩位是需要插入的值。如干擾密鑰是
,
,可以看出,干擾密鑰前 6 位的 10 進制數值為 19,故J =19,二進制 10 會被插入到目標分組的第 19個比特前。干擾密鑰只應用在密文 A 的第 1 個分組中,此后,它會發生動態變化。應用在密文 A 的第 2 個分組的干擾密鑰將從第 1 個分組的明文中產生。方法是把一個 8 位的空字節(窗口)放置在明文第 1 個分組的起始位置(即 0號位),窗口的最高位對應分組的 0 號位,窗口顯示的字節即為第 2 個分組的干擾密鑰。同樣地,把 8 位窗口放置在第 2 個分組的 1 號位,得到第 3 個分組的干擾密鑰。以此類推,每次把窗口右移一位,即可得到下一分組的干擾密鑰。如果窗口越過分組的右邊界,則把越過的比特循環對應分組開始時的幾個比特。這種插值法有一個缺陷,密文分組的長度固定是 66 位(因為插值固定是 2 位),使攻擊者可以輕松地從密文中分離出有效分組,再對有效分組實施破解。為了使插值后的分組長度不固定,需要改變插值的長度,具體操作是從第 2 個分組開始,使算法中干擾密鑰末兩位的含義發生變化,由原來的“插值的內容”變化為“插值的位數”。插值的內容從窗口后截取,截取的長度就是末兩位所指出的插值的位數。同樣地,截取插值時把背景分組看成首尾相接的環。這樣一來,插值長度可能是 0,1,2,3 其中之一。(3)DES 密 鑰(DES Key,DK)。DES 密鑰的作用、形式、應用方法和經典 DES 加密密鑰一致,在 RSA 頭占 64 位,它作用于干擾加密的結果 B ,產生密文C 。(4)標志位(Flags)。標志位占 2 位,分別指出在加密過程中是否使用了干擾加密和亂序加密。(5)摘要算法(Hash Algorithm,HA)。摘要算法占 6 位,對 RSA 頭中特定部分應用本算法,得出摘要(Hash)字段的值。特定部分是指 RSA頭中從起始到標志位(包括標志位)的部分,本文稱為“上段”。這一字段最多可表示
種摘要算法,包括常用的 MD5 信息摘要算法(MD5 Message-Digest Algorithm,MD5)、安全散列算法(Secure Hash Algorithm,SHA)等算法。(6)保留位(Reserved Bits)。未使用位,留待優化算法時使用。(7)摘要(Hash)。摘要是對 RSA 頭上段應用“摘要算法”字段指定的散列算法而得到的哈希值,長 128 位。(8)校驗值(Checksum)。校驗值是密文部分的校驗值,所用散列算法由“摘要算法”字段指定,長 128 位。
2.2.4 加密和解密流程
加密流程如下文所述。
(1)把原始明文 P 預處理為 P0 。(2)隨機產生 3 個密鑰,即 CK , JK ,DK 。(3)對 P0 應用CK ,得到 A 。(4)對 A 應用 JK ,得到 B 。(5)對 B 應用 DK ,得到C 。(6)填寫 RSA 頭各字段。(7) 計 算 并 填 寫 摘 要(Hash) 和 校 驗 值(Checksum)字段。(8)用接收方的公鑰加密 RSA 頭的明文,得到密文包的頭部。(9)把密文包頭部和密文 C 連接,整合成一個完整的密文包。
解密流程與加密流程各步驟的順序相反,要注意以下幾點。
(1)容易分離出密文包頭部,因為它的長度是固定的 896 位。(2)在解密密文包頭部時,須使用接收方的私鑰。(3)對 B 應用 JK 時(清除無效信息),是從第 1 個分組開始,而不是相反地從最后一個分組開始。即先用 JK 恢復第 1 個分組,再用8 位窗口循環右移的方法得到第 2 個分組的干擾密鑰,從而恢復第 2 個分組,以此類推。(4)對于加密前的預處理,沒有逆算法,因而解密時不需要執行逆算法。
改進 DES 算法的抗攻擊能力分析
本文提出的改進 DES 算法的密鑰不再是單一的對稱密鑰,而是由 3 個互相獨立的密鑰CK ,JK ,DK 組成的密鑰集,并受 RSA 密碼的保護。即使通過窮舉法暴力破解密鑰集CK ,JK ,DK ,其面臨的可能密鑰組合數量為:
,這個組合數量已經具備足夠的強度來抵抗當前計算技術下可以實現的暴力破解攻擊。
對于統計分析攻擊的防御,DES 加密所實現的擴散模糊有效地抵御了基于統計的攻擊。這是經典 DES 算法的優點之一 ,本文的算法完整保留了這一優點。
對于差分分析、線性分析等數學分析方法的防御,因為多重密鑰必然會帶來分析參數數量的暴增,使得數學分析難度加大 ,同時,分階段的加密流程使本算法難以使用單一的數學分析方法破解。表明對稱密碼和非對稱密碼體系在應用中可以混合使用,取長補短,互為加固。
結 語
本文在經典的 DES 加密算法的基礎上,提出了一種改進算法。其設計思想是用非對稱密碼算法保護 DES 密鑰,產生“密鑰外殼”,使加殼密鑰和密文組成了防御破解的共同體;同時在 DES 加密的基礎上,增加了亂序加密和干擾加密,其密鑰同樣受到密鑰外殼的保護,使攻擊者無法在不攻破密鑰外殼的情況下,單獨對密文實施暴力破解。然而,這種算法的軟硬件實現方式和性能仍有待進一步評估和測試,這關系到它在何種范圍、何種場景中才能得到實際的應用。