DES算法是迭代型分組密碼算法
DES算法概述:
·明文和密文分組長度為64比特
·算法包含兩部分:迭代加解密和密鑰編排
·Feistel結構(加解密相似):加密和解密除密鑰編排不同外,完全相同
·密鑰長度:56比特(DES的密鑰空間:2^{56}),每7比特后為一個奇偶校驗位(第8位),共64比特
·輪函數采用混亂和擴散的組合,共16輪
目前,由於DES算法的密鑰長度太短,已經停止使用,但二重DES和三重DES還在使用。
DES算法流程框圖:
DES算法過程:
1.給定明文,通過一個固定的初始置換衛來重排輸入明文塊P中的比特,得到比特串P0=IP(P)=L0R0,這里L0和R0分別是P0的前32比特和后32比特
規律:2 4 6 8 1 3 5 7 然后逐次加8
2.按下述規則進行16次迭代,即1≤i≤16
Li=Ri-1 Ri =Li⊕f(Ri-1,Ki),這里是對應比特的模2加,f是一個函數(稱為輪函數);
16個長度為48比特的子密鑰K1(1≤i≤16)是由密鑰k經密鑰編排函數計算出來的
----------------Feistel結構
3.對比特串R16L16使用逆置換IP-1得到密文C,即C=IP-1(R16L16)(注意L16和R16的相反順序)
DES算法的輪函數:
函數f以長度為32比特串Ri-1作為第一輸入,以長度為48比特串Ki作為第二個輸入,產生長度為32比特的輸出: (32+48=32)
E擴展 密鑰加 S盒代換 P置換
分組密碼的輪函數
E擴展:Ri-1根據擴展規則擴展為48比特長度的串
有些比特出現多次
E比特選擇表
密鑰加:計算E(Ri-1)⊕Ki,並將結果寫成8個比特串,每個6比特,B=B1B2B3B4B5B6B7B8
S盒代換(為了6bit->4bit):
使用8個S盒S1…S8,每個S1是一個固定的4*16階矩陣,其元素取0-15之間的整數
給定長度為6的比特串,如Bj=b1b2b3b4b5b6,Sj(Bj)計算如下:
1)b1b6兩個比特確定了Sj的行r的二進制表示(0≤r≤3)
2)b2b3b4b5四個比特確定了Sj的列c的二進制表示(0≤c≤15)
3)Sj(Bj)定義成長度為4的比特串的值Sj(r,c)。由此可以算出Cj=Sj(Bj),1≤j≤8
S盒
P置換:(把32bit->32bit)
P置換:長度為32比特串C=C1C2C3C4C5C6C7C8,根據固定置換P(*)進行置換,得到比特串P(C)。
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 P盒
DES算法的密鑰編排算法:
根據密鑰K來獲得每輪中所使用的子密鑰Ki
輸入的密鑰k先經過一個置換(稱為“置換選擇1”)進行重排。置換結果(56位)被當成兩個28比特的量C0與D0 ,其中C0是置換結果的前28位,而D0是置換結果的后28位。
置換選擇1 規律 每次跳8位
計算第i輪迭代所需要的子密鑰時,首先對Ci - 1與Di - 1進行循環左移,分別得到Ci與Di。
循環的次數取決於i的值:如果i = 1,2,9和16,循環左移的次數是1;否則循環左移的次數等於2。這些經過移位的值將作為下一個循環的輸入。
然后,以Ci Di作為另外一個由DES算法固定的置換選擇(稱為“置換選擇2”)的輸入,所得到的置換結果即為第i輪迭代所需要的子密鑰ki。
置換選擇2
DES的解密變換:
DES的解密與加密一樣使用相同的算法,它以密文y作為輸入,但以相反的順序使用密鑰編排K16K15...K1,最后輸出的是明文x (就是順序不一樣)
DES最關鍵的就是它采用了Feistel結構。