看到网上一些对于MD5的介绍,还有对于当初王小云所做的破解有很多的误解,或者说不理解,然后觉得对于这些事情只要说明白,还是比较好理解的说。
首先MD5其实就是一种hash,或者叫散列函数,有的地方叫杂凑函数,都是一个东西,其实它就是一种映射,而平常最常见的就是说MD5是不可逆的,为什么不可逆呢?有人就说就是像有些函数没有反函数那样了,其实还是有点抽象,考虑MD5是多对一的映射,也就是说很多不同的经过MD5变换之后可能会是相同的,那么既然多对一,自然是不可逆啦,你怎么会知道他到底是由哪个变换过来的呢。在密码学的应用里,说是单向函数,或者说单向变换,一种是这种多对一不可逆,还有一种是说逆工程会非常困难,举个例子吧,假设f(x)=x^6-x-1,然后你知道f(1)=-1,在知道x=1和f的情况下计算f(1)是很简单的,而知道f(x)=-1和f去求x却是很困难的,这里就不展开说了,大家有个大体的认识就可以了。
刚才说过了由于MD5是多对一的,所以肯定会出现变换后的值是一样的情况,这种情况叫做冲突,或者叫碰撞。为了保证安全性,定义了两种,一种叫无弱碰撞,一种叫无强碰撞。
无弱碰撞是
1
2
3
4
|
已知函数M和一段数据H
找到一个H'
使得M(H)=M(H')
是难的
|
无强碰撞是
1
2
3
4
|
已知M
找到一对H和H'
使得M(H)=M(H')
是难的
|
很明显满足无强碰撞比满足无弱碰撞更难,真的吗?好吧,就不说明显了,为什么说无强碰撞更难呢,换句话说为什么找到强碰撞更简单呢,恩,这就涉及到生日悖论了,或者叫生日攻击了。
来想想以前的概率吧,假设一年365天,那么,至少有多少人使得有两人是同样生日的概率会超过1/2呢,直觉上应该是365/2个人吧,其实答案是23,少的夸张是吧,不然不会叫做悖论了啊,如何计算呢,其实我们是在求一个最小的n,使得1-(1-1/365)*(1-2/365)*…(1-(n-1)*365)>=1/2,随便写个程序验证下就知道是23了,什么你不知道这个式子怎么得来的,考虑第二个人不要和第一个人生日冲突的概率是(1-1/365)然后第三个人不和前两个人生日相同的概率是(1-2/365)后面就知道了吧。然后这个人数其实是O(sqrt(365))。那么回到前面的问题,假设映射空间,就是说最后能够得到的值的个数是m,那么弱碰撞的复杂度是O(m),而强碰撞呢是O(sqrt(m)),所以说找到强碰撞更简单,也就是说满足无强碰撞更难!
王小云的贡献呢就是找到了比生日攻击复杂度低得多算法来快速找到一对强碰撞,弱碰撞吗依旧是不行的。这里有她的论文,有兴趣的可以看一下。那么也就是说通过密文找到明文依旧是不可能的,并且弱碰撞依旧是很难的。
不过后来又有外国的nb人受到了王小云的启发,得到了一种很快的算法能够在已知前缀x1,x2的情况下构造一对后缀y1,y2使得M(x1y1)=M(x2y2),不过有两点需要注意,一个是他其实还是一种寻找强碰撞,另一个就是他的复杂度比王小云的直接构造高的多,然后这里有论文,然后利用这个搞了个预测2008年美国大选结果的东西,为啥叫预测呢,因为可以这样
因为我说我知道大选结果,但是必须事后公布,为了保证我没有说谎,我先给出一段MD5的值,之后给出我的结果,只要结果和MD5相同不就是我预测成功了吗
这个东西是基于我很难构造两个东西使得他们的MD5相同的基础上的,不过有了上面的算法,这个事情的复杂度大大降低,使得变为了可能。
那么这些破解对于我们有什么影响呢,首先需要认识到MD5有什么用,现在很多网站都用MD5来验证文件的完整性,但是你从非官方的地方下载了文件发现MD5相同,那么你依然不能掉以轻心,因为可能是通过上述算法而在程序里加入了某段病毒代码,但是MD5还是相同的而已,所以下文件还是从官方地址下吧,还一个就是经常在数字签名里使用了,至于不知道数字签名的这里先不说了,然后这个可以伪造数字签名啥的,不过传说现在貌似没谁用MD5来弄数字签名了,也不必太过担心了,基本就是这样子了。
原文链接:http://blog.jobbole.com/22105/
分享到:
相关推荐
### 深度官方系统MD5值解析 #### 背景介绍 在软件分发领域,特别是操作系统发行版的传播过程中,确保下载文件的完整性和安全性至关重要。MD5值作为一种常用的散列函数,在文件验证方面发挥着重要作用。深度科技...
本话题主要涉及两个关键知识点:MP3音乐信息解析和MD5信息加密。这两个概念在不同的场景下有着重要的作用。 首先,我们来谈谈“MP3音乐信息解析”。MP3是一种流行的音频压缩格式,它使用了有损压缩技术,能够在保持...
通过这份列表,我们能够了解到深度技术不同版本操作系统的MD5校验值,这对于用户在下载和安装过程中确保文件的完整性和未被篡改至关重要。同时,这些信息也为我们提供了关于如何使用MD5校验值来验证文件完整性的实际...
《MD5校验工具——HashCalc深度解析》 在信息化高度发展的今天,数据的安全性和完整性至关重要。MD5(Message-Digest Algorithm 5)作为一种广泛使用的哈希函数,它能够为文件生成独一无二的数字指纹,以确保文件在...
YOLOv3深度解析YOLOv3深度解析YOLOv3深度解析YOLOv3深度解析YOLOv3深度解析YOLOv3深度解析YOLOv3深度解析YOLOv3深度解析YOLOv3深度解析YOLOv3深度解析YOLOv3深度解析YOLOv3深度解析YOLOv3深度解析YOLOv3深度解析...
### AS3 MD5姓名大战游戏源码解析与关键技术点 #### 一、游戏概述与原理 标题中的“AS3 MD5姓名大战”指的是一个使用ActionScript 3(简称AS3)编程语言开发的游戏,名为“姓名大战”。此游戏的核心玩法是通过随机...
《Md5Checker V3:深度解析MD5校验工具及其应用》 在信息技术领域,数据的完整性和安全性至关重要。为了确保文件在传输或存储过程中的完整性,MD5(Message-Digest Algorithm 5)校验码作为一种广泛使用的哈希函数...
深度解析Spark五大大算子深度解析个人原创 内容详实 业界最全`spark`内置了非常多有用的算子,通过对这些算子的组合就可以完成业务需要的功能。 `spark`的编程归根结底就是对`spark`算子的使用,因此非常有必要熟练...
深度解析蓝桥杯:从入门到精通,你的全面备考策略.md
《React技术深度解析:基于Markdown的轻量级编辑器实现》 在当今的Web开发领域,React.js作为一款由Facebook推出的JavaScript库,以其组件化、虚拟DOM和强大的生态系统深受开发者喜爱。本文将深入探讨如何利用React...
HashMap源码深度剖析,面试必备
该项目为黑马程序员的高级Spring5教程源码,深度解析了Spring5的底层原理。该教程包含312个文件,其中Java源文件179个,HTML文件3个,MD文件43个,XML配置文件19个,Properties文件8个,PNG图片文件45个,JPG图片...
通过深入解析文档内容,本文将全面揭示部署过程中的关键步骤和技术要点。 **二、实施概述** 实施PowerVault MD32xxi存储阵列与VMware ESX 4.1的集成,首要目标是确保系统硬件和软件的兼容性。此过程涉及对存储阵列...
Visual Basic(简称VB)...学习VB不仅有助于掌握编程的基本原理,也为学习其他编程语言和技术打下了坚实的基础。对于VB的学习者来说,理解VB的基础知识、核心技术、高级应用和实战案例,是成长为优秀程序员的重要步骤。
5. 双变量分析 - 数值变量之间的关系 - 数值变量与分类变量的关系 - 分类变量之间的关系 6. 多变量分析 - 相关矩阵 - 主成分分析(PCA) 7. 数据可视化技巧 8. 高级EDA策略 - 处理缺失值 - 处理异常值 - ...
### DELL MD3200/MD3200I 部署指南知识点解析 #### 一、系统概述 **Dell PowerVault MD3200i 和 MD3220i 存储阵列**是Dell推出的一系列高性能、高可靠性的存储解决方案,适用于中小型企业以及大型企业的分支办公室...
Linux内核源代码深度解析是理解操作系统核心机制的重要途径,对于任何希望深入学习Linux系统或者从事相关开发工作的人来说,这都是不可或缺的知识。这个压缩包包含了多个文件,它们可以帮助我们逐步剖析Linux内核的...
根据提供的文档信息,我们可以详细解析出关于FR-MD12模块的重要知识点,这些知识点主要集中在模块的功能、引脚定义、工作参数以及数据格式等方面。 ### 一、FR-MD12模块简介 FR-MD12是深圳福仁电子有限公司生产的...
技术深度考察的是应聘者在前端技术栈中的底层原理理解、源码解析以及解决复杂问题的能力。 首先,大厂在面试过程中通常会通过难题来试探求职者的技术深度。这涉及到多方面的技术知识,包括但不限于JavaScript、Vue...
5. leetCode-5-Longest-Palindromic-Substring.md:第5题,最长回文子串,考察字符串处理和动态规划。 6. leetCode-84-Largest-Rectangle-in-Histogram.md:第84题,柱状图中最大的矩形,涉及到数组处理和栈的数据...