背景:单重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解密,每解密一次,将解密结果与表中的值比较,如果由相等的,就将刚才测试的两个密钥对一个新的明密文对进行验证,若验证成功,则认定这两个密钥对是正确的密钥。

  结论:中间相遇攻击56,比单重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)))

多重DES的更多相关文章

  1. DES加密--不安全加密

    package test; import java.security.InvalidKeyException; import java.security.Key; import java.securi ...

  2. Java学习---传输安全设计

    1.计算机安全的概念 用于保护数据和阻止Hacker的工具统称为计算机安全(Computer Security).信息安全最基本的方法就是利用加密信息防止未授权的人窃听,加密是以某种特殊的算法改变原有 ...

  3. DES原理

    1.DES的描述 为了建立适用于计算机系统的商用密码,美国商业部的国家标准局NBS于1973年5月和1974年8月两次发布通告,向社会征求密码算法.在征得的算法中,由IBM公司提出的算法lucifer ...

  4. DES、3DES、AES、PBE对称加密算法实现及应用

    1.对称加密算法概述 对称加密算法是应用较早的加密算法,技术成熟.在对称加密算法中,数据发信方将明文和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去.收信方收到密文后,若想解读原文 ...

  5. 在.NET Core 里使用 BouncyCastle 的DES加密算法

    .NET Core上面的DES等加密算法要等到1.2 才支持,我们可是急需这个算法的支持,文章<使用 JavaScriptService 在.NET Core 里实现DES加密算法>需要用 ...

  6. 使用 JavaScriptService 在.NET Core 里实现DES加密算法

    文章<ASP.NET Core love JavaScript>和<跨平台的 NodeJS 组件解决 .NetCore 不支持 System.Drawing图形功能的若干问题> ...

  7. [C#] 简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Wen. ...

  8. 4、DES和RSA简介

    DES是分组加密算法,速度快,使用单一密钥,加密解密都使用同一个密钥,一般用于大量数据加密,目前处于半淘汰状态. RSA算法是流式加密算法,速度慢,但是使用成对的密钥,加密解密使用不同的密钥,有利于保 ...

  9. java跳出多重嵌套循环

    public class BreaklFor { public static void main(String args[]){ OK: //设置一个标记 使用带此标记的break语句跳出多重循环体 ...

随机推荐

  1. 小白的Python之路_day1

    Python 与 java 对比,代码更为简洁. Python 3.X 版本 Hello World 程序: print("Hello World!") java Hello Wo ...

  2. 修复 Ubuntu 14.04 的系统设置残缺问题

    sudo apt-get install ubuntu-desktop

  3. webstorm2017破解

    选择"license server" 输入:http://idea.imsxm.com/ 2017支持vue了

  4. 微信小程序 --- 无法跳转到tab页面问题

    首先检查你的跳转方法,如果是wx.navigateTo(OBJECT)或者是wx.redirectTo(OBJECT)都是无法跳转的,在微信小程序中如果需要跳转到具有tab的页面必须使用wx.swit ...

  5. C++/C# 开发高级案例资料一次送!关注加群领取哦!

    目前C/C++.C#.JAVA等语言开发的在线教育比较火爆,但小编所见的讲解高级案例的非常少,切合市场需求的较少.而且针对铁路.公路.建筑.市政.制造业等所有工业计算机辅助设计的开发技术和案例几乎没有 ...

  6. Node.js Query Strings

    Query String 稳定性: 3 - 稳定 这个模块提供了一些处理 query strings 的工具,包括以下方法: querystring.stringify(obj[, sep][, eq ...

  7. Android图表库MPAndroidChart(四)——条形图的绘制过程过程,隐隐约约我看到了套路

    Android图表库MPAndroidChart(四)--条形图的绘制过程过程,隐隐约约我看到了套路 在学习本课程之前我建议先把我之前的博客看完,这样对整体的流程有一个大致的了解 Android图表库 ...

  8. FFmpeg的H.264解码器源代码简单分析:熵解码(Entropy Decoding)部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  9. Struts 1 之<logic>标签库

    1. logic:empty logic:empty标签是用来判断是否为空的.如果为空,该标签体中嵌入的内容就会被处理.该标签用于以下情况: 当Java对象为null时 当String对象为" ...

  10. Eclipse中设置VM参数

    eclipse.ini -Xms256m //设置堆最小值 -Xmx1024m //设置堆最大值 Eclipse 做JVM 的分析时,需要动态设置JVM的参数来进行各种测试, 可以在下图地方进行设置 ...