1、数据加密标准
- 设计要求:算法的安全性取决于密钥,不依赖于算法(因为算法是公开的)
- 现代大多数的对称分组密码也是基于Feistel密码结构
- 1977年1月15日正式发布,属于对合运算
- 第一个被公布出来的加密标准算法
- 综合使用了置换(P)、代替(S)和代数(异或⊕)等多种密码技术
- 安全使用10-15年,用于非机密的敏感数据加密,非军事场合
- 典型的Feistel结构,一共进行16轮迭代
2、分组密码原理
- 扩散:修改1位明文,密文要修改很多
- 混乱:密文和明文之间关系复杂
- 乘积密码:使用多个密码的强度大于单个强度
3、DES算法加密流程
- 生成16个48位子密钥
- 对64位明文初始化置换IP,打乱重排,分成左右各半
- 对R进行扩展置换E,E(R),32位扩展到48位
- 进行S盒代换,对K⊕E(R)进行非线性变换,8个S盒,产生32位的混淆数据
- 置换P,扩散
- 逆初始化置换IP
4、DES算法的数学表示形式
5、Feistel密码
- 这是一条加密方案设计的通用原则,而并非特定的密码方案
6、子密钥产生过程
-
📍置换选择PC1
去掉8、16、24、32、40、48、56、64这8个奇偶校验位
打乱重排,形成左右各半28位(左C0,右D0)
有效密钥长度:56位
循环左移位(不同轮数,左移位的数不同,循环移位表)
-
📍 置换选择PC2
选出48位子密钥,一般都会给出一个选择表
7、初始化置换IP
- 这个会直接给到一个表,直接对着将二进制的数据去做排列即可
- 经过置换IP之后,直接分左右各半L、R
8、DES加密函数f
📍S盒代换(对E(R0)⊕K1进行)
📌属性
- 是DES唯一的非线性变换
- 是DES安全的关键
- 8个S盒
-
📌计算
首末2位组成的二进制转换十进制为行号,中间的4位组成的二进制转换十进制为列号,行列相交点的数(二进制)为输出
- 行号最大(11),也就是0~3,4行;列号最大(1111),也就是0~15,16行
- 每一行的数都是0~15不重复
📍置换运算P
9、其他
- DES最后一轮是不需要做左右交换
- 逆初始置换IP-1可通过初始置换IP推算
如果有简化的DES版本,其明文输入为8比特,初始置换表IP如下: IP:2 6 3 1 4 8 5 7 请给出其逆初始置换表。
假设原文为:abcdefgh 经IP后M 1 ,变为:bfcadheg 逆初始置换与初始置换是互逆,即把M1重新变为M IP逆初始置换表:4 1 3 5 7 2 8 6
10、DES解密过程
- 对合运算,所以解密和加密算法相同
- 子密钥使用顺序倒序:K、K、……、K
- (换做是左边做相关操作运算)
11、DES的弱密钥与半弱密钥
📍弱密码
初始密钥被分成两部分,每部分都单独做移位。如果每一部分的每一位都是0或都是1,则每一圈的子密钥都相同。这样的密钥被称为弱密钥。
📌属性
- 存在4个弱密钥
📍半弱密钥
有些成对的密钥会将明文加密成相同的密文,即一对密钥中的一个能用来解密由另一个密钥加密的消息,这种密钥称作半弱密钥。
📌属性
- 至少有12个半弱密钥