随笔 - 30,  文章 - 0,  评论 - 6,  阅读 - 35万

背景:单重DES在穷举攻击下相对比较脆弱

 

理论依据:以双重DES为例

  加密:C = E(K2,E(K1,P))      解密:P = D(K1,D(K2,C))

  要证明多重加密有效,就要证明不存在K3,使得 E(K2,E(K1,P)) = E(K3,P)

  DES加密是64位分组之间的映射,64位分组存在264个可能的明文分组,这264个分组有(264)! = 10347380000000000000000个可能的一一映射关系。

  而DES每个密钥定义了一个映射,映射总数位256 < 1017。因而完全有理由认为双重DES所对应的映射不能为单映射所定义。

中间相遇攻击:一种对所有分组密码均有效的攻击方法

  以双重DES位例,C = E(K2,E(K1,P)) 。首先设定一个中间值X,有

    X = E(K1,P) = D(K2,C)

  给定明密文对(P,C),首先,将P按所有可能的密钥K1加密,得到的256个结果按X的值排序放在一个表内,然后将C用所有可能的密钥K2解密,每解密一次,将解密结果与表中的值比较,如果由相等的,就将刚才测试的两个密钥对一个新的明密文对进行验证,若验证成功,则认定这两个密钥对是正确的密钥。

  结论:中间相遇攻击使用两组已知明密文对就可以猜出正确的密钥,其时间复杂度是256,比单重DES所需的255次方多不了多少。

三重DES

  使用三个不同的密钥进行三次加密的三重DES将使中间相遇攻击的代价升至2112数量级。但是其缺陷是需要56×3 = 168位密钥,这有些笨拙。

  改进的办法是使用两个密钥进行三次加密,牺牲一定的安全性来换取更加轻便的密钥。

  这种加密具体的运算过程是加密-解密-加密(EDE),写成式子如下

    C = E(K1,D(k2,E(K1,P)))     P = D(K1,E(k2,D(K1,C)))

  第二步采用解密运算并没有什么密码学上的深意,仅是为了使三重DES与单DES兼容,因为    

    C = E(K1,D(k1,E(K1,P))) = E(K1,P)       P = D(K1,E(k1,D(K1,C))) = D(K1,C)

  不过由于使用双密钥的三重DES算法的人还是感觉不放心,因此很多人还是觉得采用三个密钥的三重DES算法才是最好的方案,三个密钥的定义如下

    C = E(K3,D(k2,E(K1,P)))     P = D(K1,E(k2,D(K3,C)))

posted on   block2016  阅读(5091)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示