多重DES
背景:单重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的更多相关文章
- DES加密--不安全加密
package test; import java.security.InvalidKeyException; import java.security.Key; import java.securi ...
- Java学习---传输安全设计
1.计算机安全的概念 用于保护数据和阻止Hacker的工具统称为计算机安全(Computer Security).信息安全最基本的方法就是利用加密信息防止未授权的人窃听,加密是以某种特殊的算法改变原有 ...
- DES原理
1.DES的描述 为了建立适用于计算机系统的商用密码,美国商业部的国家标准局NBS于1973年5月和1974年8月两次发布通告,向社会征求密码算法.在征得的算法中,由IBM公司提出的算法lucifer ...
- DES、3DES、AES、PBE对称加密算法实现及应用
1.对称加密算法概述 对称加密算法是应用较早的加密算法,技术成熟.在对称加密算法中,数据发信方将明文和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去.收信方收到密文后,若想解读原文 ...
- 在.NET Core 里使用 BouncyCastle 的DES加密算法
.NET Core上面的DES等加密算法要等到1.2 才支持,我们可是急需这个算法的支持,文章<使用 JavaScriptService 在.NET Core 里实现DES加密算法>需要用 ...
- 使用 JavaScriptService 在.NET Core 里实现DES加密算法
文章<ASP.NET Core love JavaScript>和<跨平台的 NodeJS 组件解决 .NetCore 不支持 System.Drawing图形功能的若干问题> ...
- [C#] 简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Wen. ...
- 4、DES和RSA简介
DES是分组加密算法,速度快,使用单一密钥,加密解密都使用同一个密钥,一般用于大量数据加密,目前处于半淘汰状态. RSA算法是流式加密算法,速度慢,但是使用成对的密钥,加密解密使用不同的密钥,有利于保 ...
- java跳出多重嵌套循环
public class BreaklFor { public static void main(String args[]){ OK: //设置一个标记 使用带此标记的break语句跳出多重循环体 ...
随机推荐
- Oracle的dual
1.dual 确实是一张表.是一张只有一个字段,一行记录的表. 2.习惯上,我们称之为'伪表'.因为他不存储主题数据.3.他的存在,是为了操作上的方便.因为select 都是要有特定对象的.但如果我们 ...
- 浅析java内存管理机制
内存管理是计算机编程中的一个重要问题,一般来说,内存管理主要包括内存分配和内存回收两个部分.不同的编程语言有不同的内存管理机制,本文在对比C++和Java语言内存管理机制的不同的基础上,浅析java中 ...
- PHP MySQL Order By 关键词
ORDER BY 关键词用于对记录集中的数据进行排序. ORDER BY 关键词 ORDER BY 关键词用于对记录集中的数据进行排序. ORDER BY 关键词默认对记录进行升序排序. 如果你想降序 ...
- JavaScripy execCommand函数
execCommand函数命令 execCommand方法是执行一个对当前文档,当前选择或者给出范围的命令.处理Html数据时常用如下格式:document.execCommand(sCommand[ ...
- 论文答辩ppt要怎么写
1.总体原则: 字大.字少.图多.要有重点 字体建议:正文要用黑体(如微软雅黑),标题可使用宋体或者黑体(如微软雅黑) 2. 主要分为两大部分: 2.1系统介绍 系统概述:概述自己系统主要是做了些什么 ...
- Android的Ui层次
UI 概览 Android 应用中的所有用户界面元素都是使用 View 和 ViewGroup 对象构建而成.View 对象用于在屏幕上绘制可供用户交互的内容.ViewGroup 对象用于储存其他 V ...
- Android TV开发总结(四)通过RecycleView构建一个TV app列表页(仿腾讯视频TV版)
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52854131 前言:昨晚看锤子手 ...
- Android TV开发总结(一)构建一个TV app前要知道的事儿
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52792562 前言:近年来,智能 ...
- EBS技术开发之返利开发
返利是指公司间应收款项按一定比率的返还给客户.返利开发实质就是实现对应收发票的更改和新增(暂时我的理解) 一.对发票行更改 PACKAGE AP_INVOICE_LINES_ALL_PRIVATE I ...
- Android Multimedia框架总结(八)Stagefright框架之AwesomePlayer及数据解析器
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼:http://blog.csdn.net/hejjunlin/article/details/52503057 前言:前面一篇分析了medi ...