加密过程
数学描述
整体结构
子密钥生成
64位的密钥分为8个字节,每个字节的前7位是真正的密钥位,第8位是奇偶校验位,因此,DES真正的密钥只有56位。
置换选择$1$
作用:
- 从64位密钥中去掉8个奇偶校验位
- 将其余56位密钥打乱重排,且将前28位作为$C_0$,后28位作为$D_0$
矩阵:
(矩阵中第一个数字57,表明原密钥中的第57位移到$C_0$中的第1位)
置换选择$2$
作用:从$C_i$和$D_i$(56位)中选择出一个48位的子密钥$K_i$
矩阵:
循环左移
迭代次数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
循环左移位数 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 1 |
初始置换$IP$
作用:增加了输入数据的随机性和混淆性,将输入的64位数据分为左半部分和右半部分,为后续的轮函数(Feistel函数)做准备。
矩阵:
加密函数
选择运算$E$
作用:将32位的数据扩展为48位,以便与48位的子密钥模2相加,并满足代替函数组S对数据长度的要求。
矩阵:
代替函数组$S$
构成:由8个代替函数(S盒)组成,函数组的输入是一个48位的数据,每个S盒有6位输入,产生4位的输出。
作用:引入非线性运算,增加加密算法的复杂性,从而增强其安全性。在DES中,每个S盒都是由固定的置换操作和一系列代替操作构成的,这些操作共同实现了非线性变换,使明文位和密钥位之间的关联变得非常复杂,难以推断出密钥信息。
代替规则:S盒的6位输人 $b_1b_2b_3b_4b_5b_6$ 中的第1位 $b_1$ 和第6位 $b_6$ 组成的二进制数 $b_1b_6$ 代表选中的行号、其余4位数字 $b_2b_3b_4b_5$ 所组成的二进制数代表选中的列号,而处在被选中的行号和列号交点处的数字便是S盒的输出(以二进制形式输出)。以 $S_1$ 为例,设输入 $b_1b_2b_3b_4b_5b_6 = 101011$,第1位和第6位数字组成的二进制数 $b_1b_6 = 11 = (3)_{10}$,表示选中 $S_1$ 的行号为3的那一行,其余4位数字所组成的二进制数为 $b_2b_3b_4b_5 = 0101 = (5)_{10}$,表示选中 $S_1$ 的列号为5的那一列,交点处的数字是9,则 $S_1$ 的输出为1001。
矩阵:
置换运算$P$
作用:把S盒输出的32位数据打乱重排,得到32位的加密函数输出。用P置换来提供扩散,把S盒的混淆作用扩散开来。
矩阵:
逆初始置换$IP^{-1}$
作用:逆初始置换$IP^{-1}$是初始置换$IP$的逆置换,它把16次加密迭代的结果打乱重排,形成64位密文,使用$IP$的同时必须使用$IP^{-1}$,以确保加密算法的可逆性和对合性。
矩阵:
解密过程
原理分析
- 由于DES的运算是对合运算,所以解密和加密可公用同一个运算,只是子密钥使用的顺序不同。
- 把64位密文当做明文输入,而且第1次解密迭代使用子密钥$K_{16}$,第2次解密迭代使用子密钥$K_{15}$,以此类推,第16次解密迭代使用子密钥$K_1$,最后的输出便是64位明文。
数学描述
安全性分析
- 具有很强的抗差分攻击和抗线性攻击能力,其中抗差分攻击能力更强;但是,难以抵抗并行计算的穷举攻击。
- 密钥较短(56位)。
- 存在一些弱密钥和半弱密钥,即由一些密钥产生的16个子密钥完全相同,或者部分相同。
- 存在互补对称性,使得DES在选择明文攻击下所需的工作量减半。即,设$C=DES(M,K)$,则有$\overline{C}=DES(\overline{M},\overline{K})$。
3DES
优点:
- 密钥足够长(112位或168位),安全性高,可以抵抗穷举攻击。
- 当3DES中各密钥相同时,等价于DES的加解密,因此兼容性好。
缺点:加解密速度慢,分组长度只有64位。