特征

1.分组加密算法:明文和密文为64位分组长度。
2.对称算法:加密和解密除密钥编排不同外,使用同一算法。
3.密钥长度:64位,但每个字节第8位为奇偶校验位,可忽略。
4.密钥可为任意的56位数,但存在弱密钥,尽量避开。
5.采用混乱和扩散的组合,每个组合先替代后置换,共16轮;
只使用了标准的算术和逻辑运算,易于实现

加/解密过程

加密

Pasted image 20240315171636.png

Pasted image 20240315083851.png

16次迭代

每一轮迭代都是feistel网络:
(注:密钥产生器产生48位密钥,过程在这张图中略。)

Pasted image 20240315084113.png

选择扩展运算:查表
令s表示E原输入数据比特的原下标,则E的输出是将原下标s0或1(mod 4)的各比特重复一次得到的,即对原第32, 1, 4, 5, 8, 9, 12, 13, 16, 17, 20, 21, 24, 25, 28, 29各位都重复一次,实现数据扩展。

Pasted image 20240315171834.png

密钥加密运算:将子密钥产生器输出的48 bit子密钥ki与选择扩展运算E输出的48 bits数据按位模2相加。
选择压缩运算S:将前面送来的48 bit数据自左至右分成8组,每组为6 bit;而后并行送入8个S一盒,每个S盒为一非线性代换网络,有4位输出。
S盒:6位输入,4位输出。压缩运算–查表(替换)
其中表的算法没有公开,一般是民用 ,没有军用
Pasted image 20240315171936.png
s盒的工作原理基于s-表:以表S1为例子说明使用方法
Pasted image 20240315172016.png
置换运算P:对S1至S8盒输出的32 bit数据进行坐标置换。
左右混合运算:置换P输出的32 bit数据与左边32 bit,即Ri-1,逐位模2相加,所得到的32 bit作为下一轮迭代用的右边的数字段。并将Ri-1并行送到左边的寄存器,作为下一轮迭代用的左边的数字段。

子密钥产生器

Pasted image 20240315090210.png
置换选择1:先选择56位,再查表置换
密钥表计算逻辑:16轮变换,每一轮循环移动不同位数
置换选择2:置换选择PC2将C中第9、18、22、25位和D中第7、9、15、26位删去,并将其余数字置换位置后送出48 bit数字作为第i次迭代时所用的子密钥ki。

解密

DES的加密运算是可逆的,其解密过程可类似地进行。

公开性和脆弱性

1.密钥空间较小,56位不太可能提供足够的安全性。
2.S盒的设计原理半公开,可能有陷阱
3.互补性: 若明文组 xx 逐位取补, 密钥 kk 逐位取补, 且 y=DESk(x)y=D E S_{k}(x), 则有 yˉ=DESkˉ(xˉ)\bar{y}=D E S_{\bar{k}}(\bar{x}) 称这种特性为算法上的互补性。这种互补性会使 DES在选择明文破译下所需的工作量减半。
4.弱密钥:DES算法在每次迭代时都有一个子密钥供加密用。如果给定初始密钥k,各轮的子密钥都相同,即有k1= k2= … =k16,就称给定密钥k为弱密钥(Weak key)。
5.半弱密钥:两个不同密钥将同一明文加密成相同密文,一个用来加密,一个用来解密。

DES密码分析(研)(略)

讨论

为了增加DES的安全性,可以:
1.采用两重DES加密
Pasted image 20240315172702.png
2.采用三重DES加密
Pasted image 20240315172720.png
其中 k1!=k2
为什么不用k3? 密钥增加了,密钥分发和管理难度也增加了。