尽管DES的抗攻击不错,但是随即计算机硬件的迅速发展,DES也可能被破解。但是DES已经是被证明是相当好的算法,因此最好能够利用DES,用某种方法改进,而不是编写全新的加密算法。编写新的算法并不容易,要有充分的测试才能证明是否强算法。因此,DES出现了两个变体。
1. 双重DES
双重DES很容易理解。实际上是把DES通常要做的工作多做一遍。双重DES使用两个密钥K1和K2。首先对原明文用K1进行DES,得到加密文本,然后对加密文本用另一个密钥K2再次进行DES,加密这个加密文本,其过程如下图所示:
解密过程就是按相反的顺序解密两次,如下图所示:
双重加密的密文块首先先用密钥K2解密,得到单重加密的密文块。然后用K1解密这个密文块,得到原先的明文块。
一般来说如果使用n位密钥,则要进行
2
n
2^{n}
2n次运算才能试遍所有密钥。如果使用两种不同的密钥,密码分析员要进行
2
2
n
2^{2n}
22n次运算才能试遍所有的密钥。因此,基本DES要搜索
2
56
2^{56}
256,而双重DES搜索需要
2
56
×
2
2^{56\times2}
256×2(即
2
112
2^{112}
2112)个密钥。但是,引入中间人攻击的概念,这个攻击从一端加密,另一端解密,在中间匹配结果,因此称为中间人攻击。下面说明中间人攻击的工作方法:
假设密码分析员知道两个基本信息:P(明文块)和C(对应最终的密文块)。对于双重DES,P和C存在如下图的关系:
第一个加密结果为T,标为
E
k
1
(
P
)
E_{k1}(P)
Ek1(P)(即用K1加密块P)。用另一个密钥K2加密这个加密文本后,我们将结果标为
C
=
E
k
2
(
E
k
1
(
P
)
)
C=E_{k2}(E_{k1}(P))
C=Ek2(Ek1(P))(即用另一个密钥K2加密文本T,称为最后的密文C)。
知道P和C后,想取得K1和K2的值,需要进行如下步骤:
第一步:对密钥K1的所有值(
2
56
2^{56}
256),密码分析员使用计算机内存中的一个大表,执行下列步骤:
(1)密码分析员通过第一个加密运算明文块P,即
T
=
E
k
1
(
P
)
T=E_{k1}(P)
T=Ek1(P)。
(2)密码分析元存储这个操作的输出(临时密文T),放在内存中表格的下一行。
为了标语理解,用二位密钥显示这个过程(实际上,密码分析员要使用56位密钥,困难的多),如下图所示:
第二步:上述过程结束时,密码分析员得到密文表(T)。然后密码分析员进行逆运算,即用K2的所有取值解密已知的密文C(即执行
D
k
2
(
C
)
D_{k2}(C)
Dk2(C))。每种情况下,密码分析员比较得到的值与密文表(T)中的所有值,这个过程如下图所示:
显然,这种攻击是可能的,但需要大量的内存,如果算法使用64位明文块和56位密钥,则需要用
2
56
2^{56}
256个64位块。在内存中存储T表,存在磁盘中太慢,无法有效的攻击。
2. 三重DES
三重DES就是三次执行DES,分为两大类:一种用三个密钥,另一种用两个密钥。
2.1 三个密钥的三重DES
三个密钥的三重DES如下图所示:
首先用密钥K1加密明文块P,然后用密钥K2加密,最后用密钥K3加密,其中K1、K2、K3各不相同。要解密密文C和取得明文P,就要执行操作
P
=
D
k
3
(
D
k
2
(
D
k
1
(
C
)
)
)
P=D_{k3}(D_{k2}(D_{k1}(C)))
P=Dk3(Dk2(Dk1(C)))。
2.2 两个密钥的三重DES
三个密钥的三重DES是相当安全的,可以用公式
C
=
E
k
3
(
E
k
2
(
E
k
1
(
P
)
)
)
C=E_{k3}(E_{k2}(E_{k1}(P)))
C=Ek3(Ek2(Ek1(P)))表示。但是,三个密钥的三重DES有一个缺点,就是需要
56
×
3
=
168
56\times3=168
56×3=168位密钥,在实际中比较困难。因此提出了只用两个密钥的三重DES,算法如下:
(1)用密钥K1加密明文块P,得到
E
k
1
(
P
)
E_{k1}(P)
Ek1(P)
(2)用密钥K2解密上面的输出,得到
D
k
2
(
E
k
1
(
P
)
)
D_{k2}(E_{k1}(P))
Dk2(Ek1(P))。
(3)最后用密钥K1再次加密第二步的输出,得到
E
k
1
(
D
k
2
(
E
k
1
(
P
)
)
)
E_{k1}(D_{k2}(E_{k1}(P)))
Ek1(Dk2(Ek1(P)))。
这个过程如下图所示:
要解密密文C和取得明文P,就要进行操作
P
=
D
k
1
(
E
k
2
(
D
k
1
(
C
)
)
)
P=D_{k1}(E_{k2}(D_{k1}(C)))
P=Dk1(Ek2(Dk1(C)))。
第二步的解密没有什么特别的含义,只是使三重DES用两个密钥而不是三个密钥,称为加解加密模式。与使用K1与K2的双重DES不同,用两个密钥的三重DES不会受到中间人攻击。