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