在介紹完Feistel結構之後,接下來進入到著名的DES演算法。
6.1 DES演算法的意義
在正式介紹DES之前,首先介紹幾個重要的歷史時間節點。
① 1973年,美國國家標準局(NBS)向社會公開徵集加密演算法,一直盯加密演算法標準。
② 1974年,第二次徵集。
③ 1975年,選中IBM的演算法,公佈徵求意見。
④ 1977年1月15日正式頒佈。
⑤ 1998年底以後停用。
⑥ 1999年頒佈3DES為新標準。
標準加密演算法的目標:
① 用於保護政府機構和商業部門的非機密的敏感資料。
② 用於加密保護靜態儲存和傳輸通道中的資料。
③ 安全使用10~15年。
DES演算法是單射的分組密碼演算法,是密碼學發展的一個重要的階段(現代密碼學誕生的標誌之一),對演算法的標準化研究和分組密碼的發展有重大意義。
目前攻擊DES的最有效的辦法是金鑰窮舉攻擊。
6.2 DES演算法概述
密碼的整體特點:
① 分組密碼:明文、密文和金鑰的分組長度都是64位。
② 面向二進位制資料的密碼演算法:因而能夠加解密任何形式的計算機資料。
③ 對合運算:加解密使用同一個演算法,使工程量減半。
④ 綜合運用了置換、代替、代數等基本密碼技術。
⑤ 基本結構屬於Feistel結構。
首先,簡單看一下DES演算法的整體結構,其主要由初始置換IP、輪函式、逆初始置換IP-1以及金鑰擴充套件演算法組成。這裡直接放上書上的圖。
DES演算法時迭代型分組密碼演算法,16輪的Feistel型密碼基本引數:
·分組長度:64位元
·金鑰長度:64位元
·有效金鑰長度:56位元(8位元校驗位)
·迭代圈數:16圈
·圈金鑰長度:48位元
DES加密標準的核心是採用Fesitel結構。明文分組長度是64位元,初始金鑰長度也是64位元(實際上採用的是56位元,8位元校驗位),迴圈輪數為16輪。
6.3 Fesitel型密碼
Fesitel模型的優缺點:
優點:設計容易,f函式不要求可逆。
缺點:輪變換有一半的輸入沒有改變,左右塊的處理不能並行實施。
6.4 DES中的輪函式 f(A,J)
A為32位元串,J為48位元串,輸出為f(A,J)為32位元串。
① A根據一個固定擴充套件函式E擴充套件成一個長為48位元串E(A).
② 計算E(A)⊕J,並將所得結果分成8個長為6的位元串,記為B=B1B2B3B4B5B6B7B8.
③ 使用8個S盒S1,S2,...,S8,每個S盒為6進4出。用4×16矩陣描述。
對 Bj = b1b2b3b4b5b6 計算 Sj(Bj)
b1b6對應Sj的行
b2b3b4b5對應Sj的列
對應二進位制表示 Cj=Sj(Bj)
例:有 B1 = 100110
此時有 b1b6=10,b2b3b4b5=0011.則對應第2行第3列(序號從0開始)。
查詢S盒找到對應的數字——8.故S1(B1)=1000.
④ 將長為32位元的 C=C1C2...C8通過固定置換P(P盒):
P(C) = f(A,J)
- 擴充套件變換 —— E盒擴充套件
作用: 將輸入的32位元擴充套件為48位元。
擴充套件方式: 分別將第i-1塊最右位元 和 第i+1塊最左位元 新增到 第i塊的左邊 和 右邊。形成輸出的第i個6位元塊。
- S盒
S盒代替是DES演算法中唯一的非線性變換。在DES演算法中起核心作用。
S盒的設計標準對於實現DES演算法的安全性,對於實現混亂和擴散原則,對於保障DES演算法的密碼強度,具有十分重要的作用。
S盒只要稍微改變,其密碼強度就會大大改變。
- P盒
P盒的設計特點:
① P盒的各輸入塊的4位元都分配到不同的輸出塊中。
② P盒的各輸出塊的4位元都來自不同的輸入塊。
6.5 輪金鑰產生
輪金鑰的產生主要包含三個部分:
① 置換選擇1 (64位元 -> 56位元,去掉8位元奇偶校驗位)
② 迴圈移位 (分左28位元,右28位元)
③ 置換選擇2 (56位元 -> 48位元)
最終得到 16 個 48位元 的 輪金鑰。
① 置換選擇1
作用:去掉金鑰中8位元奇偶校驗位;打亂重排,形成C0(左28位元)、D0(右28位元)。
② 迴圈移位
作用:對Ci、Di分別迴圈左移位。
③ 置換選擇2
作用:從Ci和Di(56位元)中選擇出一個48位元的子金鑰Ki.
說明:從Ci中取24位元,Di中取24位元。
6.6 加密過程
加密過程可以簡單分為三個部分:①初始置換IP ②16輪Feistel結構 ③逆初始置換IP-1
① 初始置換 IP
作用:把64位明文打亂重排。
注意:IP中的置換是有規律的,則對保密是不利的。
② 逆初始置換 IP-1
作用:把64位中間密文打亂重排,形成最終64位密文。
相逆性:IP 與 IP-1 互逆
如:在IP中把輸入的第1位置換到第40位,而在IP-1中把輸入的第40位置換到第1位。
但保密作用不大。由於沒有金鑰參與,在IP與IP-1公開的條件下,其保密意義不大。
③ 16輪Feistel結構
(a)擴充套件置換E
作用:把32位輸入擴充為48位中間資料,通過重複使用資料,實現資料擴充。
(b)代替函式組S(S盒)
S盒的一般性質:
S盒是DES中唯一的非線性變換,是DES安全的關鍵。
在保密性方面,起混淆作用。
共有8個S盒,並行作用。
每個S盒有6個輸入,4個輸出,是非線性壓縮變換。
改變S和任一輸入位元,其輸出至少2位元發生改變。
其他準則:
非線性準則:S盒必須有足夠的非線性度,否則不能抵抗線性攻擊。
差分均勻性準則:S盒的差分性應均勻,否則不能抵抗差分攻擊。
代數次數及項數分佈準則:S盒必須有足夠的代數次數和項數,否則不能抵抗插值攻擊和高階差分攻擊。
S盒的密碼學特性保證了DES的安全。
(c)置換運算P
把資料打亂重排。
在保密性方面,其擴散作用。因為S盒是6位輸入,4位輸出,其非線性作用是區域性的,因此需要把S盒的混淆作用擴散開來。
S盒和P盒相互配合,共同確保DES安全。
6.7 解密過程
DES的加密演算法是對合運算,因此解密和加密可以共用同一個演算法。
不同點:子金鑰的使用順序不同
第一次解密迭代使用子金鑰K16,第二次解密迭代使用子金鑰K15,...,第十六次解密迭代使用子金鑰K1。
數學描述:
Ri-1=Li i=16,15,...,1.
Li-1=Ri-1⊕f(Li,Ki) i=16,15,...,1.
6.8 DES的對合性和可逆性
① 可逆性證明
(1)定義:變換T是把64位資料的左右兩半交換位置。
T(L,R)=(R,L)
因為TT(L,R)=T(R,L)=(L,R)=I,其中I為恆等變換。
又顯然TT-1=I,於是TT-1=TT,所以有
T=T-1
所以T變換是對合運算。
(2)記DES第i輪中的主要運算為Fi,即
Fi(Li-1,Ri-1)=(Li-1⊕f(Ri-1,Ki),Ri-1)
Fi2(Li-1,Ri-1)=Fi(Li-1⊕f(Ri-1,Ki),Ri-1)=(Li-1⊕f(Ri-1,Ki)⊕f(Ri-1,Ki),Ri-1)=(Li-1,Ri-1)=I
所以,Fi=Fi-1.
所以,Fi變換是對合運算。
(3)結合(1)(2),便構成了DES的輪運算:
Hi=FiT
因為(FiT)(TFi)=(Fi(TT)Fi)=FiFi=I,所以(FiT)-1=(TFi),(TFi)-1=(FiT)
(4)初始置換IP和逆初始置換IP-1是互逆的。
(5)加解密表示
① DES(M) = (M)IP(F1T)(F2T)...(F15T)(F16)IP-1 = C
② DES-1(C) = (C)IP(F16T)(F15T)...(F2T)(F1)IP-1 = M
故有DES-1DES(M) = (M)IP(F1T)(F2T)...(F15T)(F16)IP-1IP(F16T)(F15T)...(F2T)(F1)IP-1
= (M)IP(F1T)(F2T)...(F15T)(F16)(F16T)(F15T)...(F2T)(F1)IP-1
= (M)IP(F1T)(F2T)...(F14T)(F15)(F15T)(F14T)...(F2T)(F1)IP-1
= (M)IP(F1T)(F2T)...(F13T)(F14)(F14T)(F13T)...(F2T)(F1)IP-1
= ......
= (M)IP(F1T)(F2)(F2T)(F1)IP-1
= (M)IP(F1)(F1)IP-1
= (M)IP IP-1
= M
所以DES是可逆的。
② 對合性證明
DES = IP(F1T)(F2T)...(F15T)(F16)IP-1
DES-1 = IP(F16T)(F15T)...(F2T)(F1)IP-1
DES和DES-1除了子金鑰的使用順序相反之外是相同的。
不考慮子金鑰的使用順序,則有:
DES = IP(FT)(FT)...(FT)(F)IP-1
DES-1 = IP(FT)(FT)...(FT)(F)IP-1
顯然 DES = DES-1
所以DES的運算是對合運算。
6.9 DES的破譯
1990年,以色列密碼學家Eli Biham和Adi Shamir提出了差分密碼分析法。可對DES進行選擇明文攻擊。
線性密碼分析(1993)比差分密碼攻擊更有效。
- 強力攻擊:平均255次嘗試(56位有效金鑰位,256平均÷2=255)
- 差分密碼分析法:使用247對明密文的選擇明文攻擊
- 線性密碼分析法:使用247對明密文的已知明文攻擊
6.10 DES的安全性
① 攻擊:窮舉攻擊(目前最有效的方法)、差分攻擊、線性攻擊。
② 安全弱點:
- 金鑰太短
- 存在弱金鑰
- 存在互補對稱性(設C=DES(M,K),則有~C=DES(~M,~K))
- DES的弱金鑰:
通過金鑰擴充套件演算法產生的16個子金鑰出現重複:k1=k2=k3=...=k15=k16.
由金鑰擴充套件演算法,易知C、D兩個暫存器如果取值“全0”或“全1”,則通過迴圈移位和置換選擇2得到的子金鑰總是重複的。
6.11 三重DES
在講三重DES之前首先考慮一下雙重DES。
用DES加密兩次,每次使用不同的金鑰。
但雙重DES並不安全,雙重DES存在中間相遇攻擊。使它的強度跟一個56位DES的強度差不多。
若已知明文密文對(M,C),攻擊方法如下:
① 先用256個可能的K1加密M,得到256個可能的值,將這些值從小到大存入一個表中。
② 再對256個可能的K2解密C,每次做完解密,將所得到的值與表中的值比較,如果產生匹配,則它們對應的金鑰可能是K1和K2。
③ 用一個新的明文密文對檢測兩個金鑰,如果產生正確的密文,則它們是正確的金鑰。
為了防止中間相遇攻擊,採用三次加密方案。
(1)下面是使用兩個金鑰的三重DES(加密-解密-加密 E-D-E)方案
注意:加密與解密在安全性上來說是等價的。這種加密方案窮舉攻擊代價是2112.
(2)三把金鑰的三重DES的(有效)金鑰長度是168位,採用加密-解密-加密(E-D-E)方案
3DES的優點和缺點:
優點:
① 金鑰長度是168位,足以抵抗窮舉攻擊;
② 3DES的底層加密演算法與DES加密演算法相同,該加密演算法比任何其它加密演算法收到分析的時間要長得多,也沒有發現有比窮舉攻擊更有效的密碼分析攻擊方法。
缺點:
加解密速度慢,分組長度只有64位。
優勢:
3金鑰的3DES:金鑰長度是168位。
2金鑰的3DES:金鑰長度是112位。
安全:金鑰足夠長,經過最充分的分析和實踐檢驗。
相容性好。
弱勢:
速度慢。
6.12 DES的歷史回顧
DES的貢獻:
- DES很好地體現了夏農的密碼設計理論;
- DES體現了密碼公開設計原則,開創了公開密碼演算法的先例;
- DES代表當時商業密碼的最高水平,是商用密碼的典範;
- DES對確保國際資訊保安和提高國際密碼設計水平都發揮了重要作用。
DES給我們的啟示:
- 商用密碼應當堅持公開設計原則;
- 商業密碼標準應當公佈演算法。
參考文獻:
[1]張煥國,唐明. 密碼學引論(第三版)[M].武漢: 武漢大學出版社, 2015.