目录
一、DES算法简介
- DES算法为密码体制中的对称密码体制。DES是一种对称密码,即其加密过程和解密过程使用相同的密钥,与几乎所有现代分组加密一样。
- 在DES算法中由于大部分原始数据较长,首先需要将数据切成64位的明文分组,所以DES算法也叫做分组加密算法。
- 在DES算法中使用的密钥位64位,其中有效的密钥长度其实只有56位(分成8块每块长为8位,每隔8位设置左后一位为校验位,采用奇偶校验法)。
- 在DES算法中加密的明文较长,需要对DES加密进行16轮的函数循环迭代。
二、DES算法操作过程
算法主要过程:初始置换,16轮迭代的乘积变换,逆初始置换,16个子密钥产生器
-
DES算法框架图
-
DES算法流程
三、DES算法流程具体介绍
1、初始置换与逆初始置换
- 初始置换IP:将64bit明文的位置进行置换,得到一个乱序的64bit明文组。
- 逆初始置换:将16轮迭代后给出的64bit组进行置换,得出输出的密文组。读取时按行读取。
- 其中两次置换主要目的是为了打乱输入x的ASCII码字划分关系。
图中对于初始置换和逆初始置换就是在打乱每一个bit的位置,实现输入x的ASCII码字划分关系的目的。
2、DES的轮函数
将DES算法流程中一次轮函数截取分析。
该过程就是对于输入(x,y)首先会将x与f(k,y)进行异或运算,之后再将结果与y交换位置。其中f函数是一个规定好的规则,k是每一轮的子密钥。
在每一轮运算都是在重复该步骤。
轮函数结构
具体的轮函数结构如下
函数f(R,K)的计算过程
选择拓展运算E
其中的E就是在进行拓展/置换,该规则就是将32bit的数据以一个8行4列的矩阵形式向左向右各拓展一位,其中推展的数值向左拓展时是最左边一列都减一,向右拓展是最右一列都加一。最终形式如下图。加粗部分就是拓展的数据。
之后与48bit的密钥进行异或运算。运算完成之后会进行选择压缩运算S。
选择压缩运算S
由f(R,K)函数图可知有8个S盒,则每个S盒完成的工作就是将6bit数据压缩为4bit,之后得到32bit数据。其中具体的S盒运算输入输出关系如下图所示。
假设输入的数据为x5~x0也就是101100,首先将首位2bit数据合在一起为10,转换为十进制为2,也就是对应的第2行,中间4bit数据是0110十进制对应6,也就是对应的第6列,最终在第2行第6列找到数据2,该数据为十进制表示,转换为二进制为0010,则最终的输出为0010。
因此输入的101100,6bit数据也就输出为0010,4bit数据。
P盒置换
P盒置换:上一个S盒的输出32bit作为P盒的输入,按照置换表中的顺序进行置换。
此过程就完成了f(R,K)函数的运算过程,这就是轮函数的左半部分过程介绍。
3、DES的子密钥的生成
在介绍轮函数时,仅仅提到了每一轮都需要用到一个子密钥,下面将介绍每一轮子密钥的生成方式。
开始的密钥是64bit的密钥,需要进行一次置换选择1,去掉8bit的校验位,将剩下的56bit数据按照置换表进行排列。
排列完成之后分成左右28bit两部分,并开始循环左移,其中循环左移的过程每一次的左移位数是按照一个表来的,上表中会规定第几轮子密钥生成会左移多少位。
左移完成之后会合并两边然后去掉固定位置的比特,再进行置换选择2,置换选择2也是按照一个置换选择表进行重新排列。完成之后最终得到了48bit的数据。