加密原理
1. 初始置换IP
输入64 bit明文,进行初始置换。置换规则如下:
2. 16轮轮函数迭代
轮函数如下:
1)扩充变换E:输入32bit明文X,扩充为 48 bit。扩充变换E如下:
2)异或:48bit课文与48bit 密钥进行异或操作
3)8个S盒:将48bit课文变换为 32 bit
4)置换P:对32 bit课文进行置换。置换P如下:
- L1 = R0
- R1 = L0 '+' F(R0,K)
- 最后一轮不用进行左右交换
3. 初始置换的逆变换
对得到的64bit课文进行变换,得到 64bit密文。变换如下:
密钥
DES密钥种子
DES的密钥种子是64bit长,其中第8、16、24、32、40、48、56、64位是奇偶校验位。因此真正的有效密钥长度是 56 bit。 然而DES的总密钥长度是 48x16 = 768 bit,因此, 56比特的用户密钥需要扩展为48×16=768比特的加密密钥。
DES密钥扩展算法
DES加密算法的密钥扩展算法需要用到两个缩减变换PC-1和PC-2,其中PC-1是将64比特长的串缩减为56比特;PC-2是将56比特长的串缩减为48比特。
- PC-1
- PC-2
- 密钥扩展算法还需要用到循环左移变换LSj,j=1-16。其中LSj表示生成第j轮子密钥k(j)时的循环左移变换。这里规定:当j=1,2,9,16时,LSj为循环左移1位;当j=3-8或10-15时,LSj为循环左移2位。每一个循环左移变换的输入和输出都是28比特串。
- 密钥扩展流程如下:
DES解密算法
DES的解密算法与加密算法相同,也是 IP→16轮迭代(最后一轮是特殊轮)→IP-1。 仅仅各轮迭代所用的子密钥不同。
若加密算法各轮迭代所用的子密钥为 {k(1), k(2), ~,k(16)}, 则解密算法各轮迭代所用的子密钥为 {k(16),k(15), ~,k(1)}。
总结
- DES简单快速,所使用的计算部件都是计算机的最常用操作。
- DES是加解密相似的。
- DES加密算法的第一个计算部件是IP,最后一个计算部件是IP-1,都没有密钥的参与。在已知明文攻击之下, IP和IP-1都可以剥去,没有任何安全性功能。
- DES的S盒的设计细节没有公开。
- DES的用户密钥长度(有效长度)是56比特,密钥太短,安全性不够。