数据加密标准( 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结构。

 

posted @ 2020-04-23 14:28  SjYu  阅读(989)  评论(0编辑  收藏  举报