????????前面的密碼學基礎——密碼學文章中介紹了密碼學相關的概念,其中簡要地對稱密碼體制(也叫單鑰密碼體制、秘密密鑰體制)進行了解釋,我們可以知道單鑰體制的加密密鑰和解密密鑰相同,單鑰密碼分為流密碼和分組密碼。
- 流密碼(或序列密碼,Stream Cipher):對明文消息按字符(如二元數字)逐位地進行加密。
- 分組密碼(Block Cipher):將明文消息分組(含有多個字符),逐組地進行加密。
????????那么本文要介紹的DES算法屬于分組密碼。
一、基礎知識? ??
????????在介紹DES算法之前,我們需要知道幾個概念:
????????1.代換
????????2.擴散和混淆
????????3.Feistel加密結構
1.代換
在前一篇介紹密碼學基礎——古典密碼學的文章已經初步介紹了代換和置換的概念:
代換(替代):將明文中的每個字符替換為另一個字符,形成密文。
置換(換位):不改變明文中的字符,而是通過重新排列字符的位置來形成密文。
在 DES 中,代換主要通過 S 盒(Substitution Box)來實現。
?
2.擴散和混淆
(1)擴散
?????????定義:擴散是指將明文的統計特性散布到密文中去,使得明文的每一位影響密文中的許多位,從而使密文的統計特性與明文的統計特性無關。實現方式是使得密文中每一位由明文中多位產生。
????????實現方式:在 DES 中,通過多次迭代的置換和異或操作來實現擴散。例如,在每一輪迭代中,數據會經過置換操作,將不同位置的比特進行交換,使得明文的影響逐漸擴散到整個密文。
(2)混淆
?????????定義:混淆是指將密鑰和明文之間的關系變得復雜,使得從密文和密鑰中難以推出明文的統計特性。
????????實現方式:DES 通過 S 盒的非線性代換以及密鑰與數據的混合操作來實現混淆。S 盒的非線性特性使得輸入和輸出之間的關系非常復雜,難以通過分析輸出得到輸入的信息。同時,密鑰與數據的異或操作也增加了密鑰和明文之間的混淆程度。
?
3.Feistel 加密結構
????????Feistel 結構是一種分組密碼的設計結構,由 Horst Feistel 提出。DES 采用了 Feistel 結構。
(1)結構原理
加密算法? ? ? ?
????????加密算法的輸入是分組長為2w的明文和一個密鑰K。將長度為2w位的明文分組分成左右兩個w位的子塊,分別記為L0?和R0?,在進行完n輪迭代后,左右兩半再合并到一起以產生密文分組。
????????在進行第i輪迭代時,其計算方式為:
Li?=Ri?1?,
Ri?=Li?1?⊕F(Ri?1?,Ki?)
????????其中F是輪函數,Ki?是第i輪的子密鑰。一般,各輪子密鑰彼此不同而且與K也不同。經過多輪迭代后,再將最后一輪得到的左右子塊進行交換,得到密文。
?Feistel網絡中每輪結構都相同,每輪中右半數據被作用于輪函數F后,再與左半數據進行異或運算,這一過程就是上面介紹的代換。
每輪輪函數的結構都相同,但以不同的子密鑰K作為參數。代換過程完成后,再交換左、右兩半數據,這一過程稱為置換。
解密算法
????????解密算法每輪的左右兩半用LEi?和 REi表示。
(2)輪函數F
????????輪函數F是 Feistel 結構的核心組件,它通常包含了代換、置換、密鑰混合等操作。通過這些操作,對輸入的數據進行非線性變換,從而實現混淆和擴散的效果。不同的分組密碼算法在輪函數的具體設計上會有所不同,但目的都是為了增加密碼的安全性。
(3)密鑰生成與使用
????????在 Feistel 結構中,密鑰通常會被擴展成多個子密鑰,分別用于每一輪的迭代運算。密鑰擴展算法的設計需要保證子密鑰的安全性和獨立性,以防止攻擊者通過分析子密鑰來破解密碼。例如,在 DES 算法中,56 位的密鑰會被擴展成 16 個 48 位的子密鑰,用于 16 輪的迭代。
?
二、DES加密算法
????????數據加密標準(Data Encryption Standard,DES)是IBM公司于1970年研制的DES (Data Encryption Standard)算法。該算法每隔五年由美國國家保密局(NSA—National Security Agency)作出評估,并重新批準它是否繼續作為聯邦加密標準。最后一次評估是在1994年1月,美國已決定1998年12月以后將不再使用DES。
算法概述
????????明文分組長度為64比特,密鑰長度為56比特,生成 64 位的密文分組。16輪迭代
????????如下圖為DES加密算法框圖,輸入64bit明文數據,64bit密鑰,其中8 位用于奇偶校驗,實際有效密鑰長度為 56 位。將64bit明文數據經過初始置換IP,再經過16輪迭代,每輪中都有置換和代換運算,第16輪變換的輸出分為左右兩半,并被交換次序。最后再經過一個逆初始置換IP-1(為IP的逆)從而產生64比特的密文。
????????除初始置換IP和逆初始置換IP-1外,DES的結構和前面的的Feistel密碼結構完全相同。
加密過程
1.初始置換(IP)
????????將 64 位的明文按照特定的置換表進行位置置換,得到初始置換后的結果。
????????DES的置換表如下:
2.輪函數(Feistel 結構)?
????????DES 的輪函數采用 Feistel 結構,如下圖為DES加密算法的輪結構。
????????先看左側將 64 bit的中間數據分為左右兩個 32 bit的子塊,記為記為L和R。在第i輪迭代時:
Li?=Ri?1?,
Ri?=Li?1?⊕F(Ri?1?,Ki?)
輪密鑰 為48比特。
輪函數F的具體操作包括:
- 將輪輸入的右半部分R進行擴展置換(E表),從 32 位擴展到 48 位;
- 然后與 48 位的子密鑰K進行異或運算;
- 接著將結果通過 8 個 S 盒進行代換,將 48 位數據壓縮回 32 位;
- 最后進行 P 盒置換。
?F 中的代換由8個S盒組成,每個S盒的輸入長為6比特、輸出長為4比特,其變換關系如下表所示,每個S盒給出了4個代換(由一個表的4行給出)
3.密鑰生成
首先,將 64 位的密鑰(其中包含 8 位奇偶校驗位)經過置換選擇 1(PC - 1),得到 56 位的密鑰。
然后,將這 56 位密鑰分為兩部分,每部分 28 位,進行循環左移操作,移位的位數根據輪數而定。
(c)左循環移位位數
最后,經過置換選擇 2(PC - 2),從 56 位密鑰中選出 48 位作為每輪的子密鑰,共生成 16 個子密鑰,用于 16 輪的加密運算。
解密過程
????????DES 的解密過程與加密過程基本相同,只是子密鑰的使用順序相反。首先對密文進行初始置換,然后按照逆序使用 16 個子密鑰進行 16 輪的輪函數運算,最后進行逆初始置換得到明文。
DES系統的保密性主要取決于什么?
密鑰的安全性。窮舉法破解
安全性
DES的56位密鑰可能太小
DES的迭代次數可能太少(16次恰巧能抵抗差分分析)
?