DES 数据加密标准 结构详解
DES
Data Encryption Standard,又称数据加密标准,是一种对称加密算法,也是密码学摆脱古典流加密后最简单的一种块加密算法。由于香农与1949年提出“完善保密性”,该标准要求**长度不短于明文长度,实际操作难以达到,因此DES使用了块加密,选择牺牲一定程度的“完善保密性”来降低**的长度。
核心结构:
上图为DES的整体结构,Feistel 网络,每一小块的变化被称为一回合,DES总计16回合,3DES有48回合,AES有10回合。
由上图可知,先将加密信息对等分成一半,每一个回合都要将R代入F函数(费斯妥函数,下面会讲到)中,得出结果后与L进行异或操作,再与L互换位置。
另外,次结构为可逆结构,只要知道在F函数中使用的**Key就能以同结构进行反向运算,从而得出明文。
费斯妥函数(F函数):
结构图:
具体分成以下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输出的一个字节。