數據加密標准( Data Encryption Standard)


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 =Lif(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比特的量C0D0 ,其中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結構。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM