密码学基础02——详解DES算法
Feistel模型:
基于四方面进行设计:
1.数据映射设计:
可映射(一一对应)和不可映射(不是线性关系)
2.扩散和扰乱:
一.
扩散:把明文的统计特征消散到密文中,让明文的每个数字影响许多密文的数字,反之亦然
一般采用方式:
平均操作进行加密
重复使用对数据的某种置换,并对置换结果在应用某个函数
二.
扰乱:密文的统计特性与加***的取值之间的关系尽量复杂。
一般采用方式:
复杂的替代算法(非线性函数)
3.加密算法
通过n轮迭代,上图为一次迭代的步骤
Feistel具体实现依赖于以下参数和设计特点
分组大小
**大小
循环次数
子**产生算法
Round函数
4.解密算法
DES算法:
总流程:
1.输入64比特明文数据
2.进行初始置换IP
3.在**的控制下进行16轮迭代
4.交换左右32比特
5.初始逆置换IPˆ(-1)
6.输出64比特密文数据
初始置换:
产生8*8的一个矩阵,调整位置置换,比如把1号位放在其他位置,如放在第5号位置,那么逆置换的一号位就为5
单轮迭代流程:
子**:
1.从64比特**K中去掉8的倍数(因为8的倍数位为校验位),共得56比特
2.将56比特分成两份,每份28比特,分别进行循环左移
3.进行压缩置换,从56比特中输出48比特,生成子**
这是一个循环的过程,生成Ki个子**
E扩展置换:共32比特,从第2比特开始每隔2位重复2位,变成48比特
S盒替代:共有8组盒子,每个S盒都接收6个比特位的输入并产生4个比特作为输出,每个S盒子都为4*16的矩阵,如:
将6个比特位的第一位和最后一位(此时都是二进制)转为十进制作为行号,剩余4个转为10进制后作为列号,找行号与列号的交叉点的数字转为二进制后进行输出,即输出4个字节
S盒特点:
没有一个S盒是它输入变量的线性函数
S盒的每一行是整数0,…,15的一个置换
S盒子每一位的输入变化至少引起两位的输出变化
P置换:
用来产生雪崩效应
明文或**的一点小变都会引起密文较大的变化
DES算法已被**,所以不建议使用此加密算法
注:图片均来源于网络,版权归原作者所有。如有侵权,请联系作者删除,谢谢!