【密码学原理】3DES的加密和解密

DES在穷举攻击下相对比较脆弱,希望设计某种算法替代它。

双重DES

多次加密是容易实现的,将DES加密两次,即C=E(K_2,E(K_1,P)),解密的时候有P=D(K_1,D(K_2,C))

对于DES,密钥长度为56位,双重DES的密钥长度为112位,加密和解密过程如图

如果将这个加密过程简化一下,对所有的56位密钥,给定K_1,K_2可能存在密钥K_3使得E(K_2,E(K_1,P))=E(K_3,P)。如果这个假设成立,那么不管用DES进行多少次加密运算,都是没有用的,都可以等同于一个密钥加密。

DES加密是64位分组之间的映射,对于2^{64}个可能的明文分组,有特定密钥与64位密文分组唯一对应,否则存在两个输入块映射到一个输入出块,解密将不能回复原始明文。对于2^{64}个可能输入,一对一映射的数量为(2^{64})!=10^{347380000000000000000}>(10^{10^{20}})。DES每个密钥定义一个映射,映射总数为2^{56}<10^{17}

中间相遇攻击

首先将P用K_1加密,将得到2^{64}个可能密文,按照明文顺序依次排列存储。然后将C用所有可能的K_2解密,每解密一次都将解密解密结果与表中的值进行比较,如果有相等的,就用这两个密钥与新的明密文校验。

已知明文攻击可以成功对付密钥长度为112位的双重DES,其付出是2^{56}数量级,比单DES攻击的2^{55}多不了多少。

3DES

对付中间相遇攻击的一个办法就是使用三个不同的密钥进行三次加密。

Tuchman建议使用两个密钥进行三次加密,运算过程为加密-解密-加密,如图所示。

第二步采用解密运算并没有什么密码学上的深层含义,仅仅是为了使用三重DES的用户可以利用该算法解密但DES加密的数据。

C=E(K_1,D(K_1,E(K_1,P)))=E(K_1,P)

P=D(K_1,E(K_1,D(K_1,C)))=D(K_1,C)

使用两个密钥的3DES已经广泛应用,用于密钥管理标准ANS X9.17和ISO 8732。目前还没有对3DES可行的攻击方法。

使用三个密钥的3DES加密方式为C=E(K_3,D(K_2,E(K_1,P))),要想和单DES兼容只要将设密钥K_3=K_2或者K_1=K_2即可。

猜你喜欢

转载自blog.csdn.net/m0_50984266/article/details/108890315