Data Encryption Standard,又称数据加密标准,是一种对称加密算法,也是密码学摆脱古典流加密后最简单的一种块加密算法。由于香农与1949年提出“完善保密性”,该标准要求密钥长度不短于明文长度,实际操作难以达到,因此DES使用了块加密,选择牺牲一定程度的“完善保密性”来降低密钥的长度。
上图为DES的整体结构,Feistel 网络,每一小块的变化被称为一回合,DES总计16回合,3DES有48回合,AES有10回合。
由上图可知,先将加密信息对等分成一半,每一个回合都要将R代入F函数(费斯妥函数,下面会讲到)中,得出结果后与L进行异或操作,再与L互换位置。
另外,次结构为可逆结构,只要知道在F函数中使用的密钥Key就能以同结构进行反向运算,从而得出明文。
具体分成以下4个步骤:
1. 扩张函数 (E函数):
将32位的半块扩展到48位,其输出包括8个6位的块,每块包含4位对应的输入位,加上两个邻接的块中紧邻的位。
注意输入中的某些位在输出中被用到了不止一次,例如输入的第5位出现在输出的第6和8位。因此,32位的半块输入被扩张到了48位。
2. 异或操作:
用异或操作将扩张的结果和一个子密钥进行混合。
3.S盒:
在与子密钥混合之后,块被分成8个6位的块,然后使用“S盒”,或称“置换盒”进行处理。8个S盒的每一个都使用以查找表方式提供的非线性的变换将它的6个输入位变成4个输出位。S盒提供了DES的核心安全性—如果没有S盒,密码会是线性的,很容易破解。
给定6比特输入,将外面两个比特(第一个和最后一个比特)作为行条件,中间四个比特(inner four bits)作为列条件进行查表,最终获得4比特输出。例如,输入“011011”,通过外面两个比特“01”和中间的比特“1101”进行查表,最终的输出应该是“1001”
4. P置换:
最后,S盒的32个输出位利用固定的置换,“P置换”进行重组。这个设计是为了将每个S盒的4位输出在下一回次的扩张后,使用4个不同的S盒进行处理。
以上是DES 64bits密钥分成16个回合使用的算法。
1.选择置换(PC1):
从64位输入密钥中选出56位的密钥—剩下的8位要么直接丢弃,要么作为奇偶校验位。
2. 位移操作(<<<):
56位分成两个28位密钥,两个半密钥都被左移1或2位(由回次数决定)
3.选择置换(PC2):
该置换从56位的密钥调度状态中取出48位的子密钥
解密过程中,除了子密钥输出的顺序相反外,密钥调度的过程与加密完全相同。
另外,在整个16回合Feistel 网络外还要加上两个置换操作,IP和IP^-1。
1.初始置换(IP):
其意义如下:输出的首位为输入的第58位,第二位为50位,依此类推,输出的最后位为输入的第7位,实际上是一个矢量。
2.最终置换 (IP-1):
是IP的逆过程,含义与IP的相似。
IP和IP-1在密码意义上作用不大,它们的作用在于打乱原来输入x的ASCII码字划分的关系,并将原来明文的校验位x8, x16,L, x64变成为IP输出的一个字节。