MD5算法

前言

        MD5算法其实离我们非常近,例如在网络上下载一个官方资源时,我们发现下载速度非常的慢,但是此时我们通过其他的一个非官方链接发现了一个下载途径。此时我们可以确定这两个资源是完全一样的吗?此时我们可以通过对比两个下载资源的MD5值看是否一样,如果一样的话就说明这是一样的资源,如果不一样那么就需要小心了,是否是一个恶意程序。通过上面一个例子可以略微了解MD5算法起到了一个验证的作用,可以为网络通信提供一定安全保障。下面开始具体介绍MD5算法的相关内容。

一、MD5介绍
1.MD5算法介绍

        MD5加密算法,其全称是Message-Digest Algorithm 5,通常被称为信息摘要算法,所谓的信息摘要就是把明文内容按一定规则生成一段哈希(hash)值,即得到这段明文内容的信息摘要。利用MD5可以基于任意长度的明文字符串生成128位的哈希值,结果唯一且不可逆,因此MD5经常被用于防止信息被篡改、数字签名、以及对明文进行加密等场景。

2.MD5算法特点

        根据以上MD5算法的简单介绍,可以了解到MD5算法具有以下特点:

        (1)对任意输出长度的信息,经过摘要处理,输出128位的信息。

        (2)不同的输入会产生不同的结果(绝大部分情况之下,特殊情况就是“碰撞”)。

        (3)输出信息不可逆向推出输入。

3.MD5算法的应用

        (1)根据上述特点1,可以利用其实现防止数据被篡改,传送方和接收方在传输信息,可以同时传输要传递信息的MD5值接收方计算MD5的值进行对比,防止数据被篡改。

        (2)根据上述特点2和3,由于MD5算法在绝大部分情况之下,不同输入对应不同输出,所以可以实现数字签名的应用,并且从输出很难得到输入,因此可以证明签名是由本人签署,而非其他人恶意使用。

        前文阐述的MD5算法可以简单理解为一个盒子,对于这个盒子可以放入任何东西,之后这个盒子会将输入转换为一个长度为128位的MD5值。

        这种转换是一种压缩映射,可以意识到输入空间大小要远大于散列值的空间大小。所以不同的输入可能会输出相同的散列值。因此这就会带来一个问题——MD5碰撞。

二、MD5碰撞

        MD5碰撞简而言之就是先输入一个值得到他的MD5值,然后根据这个MD5值逆向找出另一个输入,两个输入的MD5值是相同的。

1.原像攻击

        MD5算法作为一种散列函数,对该算法的安全性要求提出的第一个要求就是抵御原像攻击。

        原像攻击作为一种对散列函数的攻击,具体就是寻找有着指定哈希值的信息。也就是从算法的输出,得到他的输入。很显然MD5算法在设计之初可以抵御原像攻击。但随着计算机资源的飞速发展,通过暴力穷举,字典法,彩虹表等暴力碰撞方法可以将其破解。

        暴力穷举法就是不停的尝试各种字符的排列组合,看哪一个组合的MD5值与之相等。其方法十分简单易懂,问题就是十分耗费时间和资源。

        字典法是在暴力穷举方法的基础上将每一次穷举的输入和MD5值记录下来,然后将需要碰撞的MD5值进行查表操作。得到相应的输入值,这样就可以查出原文。缺点也是要暴力穷举一遍所有输入,不过就是只需穷举一次,之后只需要进行查表操作即可。

2.第二原像攻击

        对MD5算法提出的第二个安全性要求就是抵御第二原像攻击。

        第二原像攻击就是在已知一个输入和其MD5值的情况之下,寻找一个输入与之前已知的MD5值相同。

3.碰撞攻击

        这是对MD5算法最为宽松的一个安全性要求。

        碰撞攻击就是只需找出两个输入,两者的MD5值相同即可。并且针对于MD5算法的攻击研究,大多都是从该攻击方式入手,并在2004年由我国王小云院士提出了MD5碰撞方法,她可以在短短几分钟之内找出两个不同的字符串并且它们的MD5值相同。所用方法正是差分攻击。

三、MD5破解研究过程
        1.学术研究领域的突破

        在我国密码学专家王小云院士的研究中,主要使用的就是差分攻击对MD5算法进行了破解。

        如下是对差分攻击的介绍:(来自百度百科)

        差分攻击是通过比较分析有特定区别的明文在通过加密后的变化传播情况来攻击密码算法的。差分攻击是针对对称分组加密算法提出的攻击方法,看起来是最有效的攻击DES的方法(之所以说看起来,是因为差分攻击需要很大的空间复杂度,实际上可能不如野蛮攻击具有可操作性)。2000年以前,差分攻击就被证明对MD5的一次循环是有效的,但对全部4次循环似乎难以奏效。但是随着对MD5研究的进展,情况有了变化。

        2005年,王小云、来学嘉等使用差分攻击的思路,提出了对MD5差分的攻击方法。该方式提出了充分条件的概念,并列出了一系列的充分条件(大约有290个),如果这些充分条件都能得到满足,那么一定能产生碰撞。于是MD5的强抗碰撞性不能得到满足,即该攻击方法可以寻找消息对(x,y),使得MD5(y)=MD5(x)。不过,这一系列的充分条件很难同时满足。尽管王小云、来学嘉等进一步提出了消息修改算法,通过修改相应比特位的方法来达到满足这一系列充分条件,但是仍然有37条充分条件不能满足。这就意味着,从理论上来讲,该算法只需测试2^{37}条随机消息就可以找到完全满足充分条件的消息对(x,y),从而找到碰撞,即MD5(y)=MD5(x)。这是一个相当有意义的成果,意味着任何人在自己的笔记本上都可以计算出碰撞的消息对。当然,这里产生碰撞的消息对是随机的。

        王小云院士的研究在学术层面上打破了MD5算法不可破解的神话。基于模块化差分,大体思路是从局部碰撞开始,先找到局部碰撞然后分析差分如何传播,找到差分路径再利用消息修改技术最后得到能产生碰撞的消息对。

        这样的研究成果意味着在学术领域层面上MD5算法的第三个安全性要求上彻底被攻破。

        但是此时的MD5算法在工程实际应用方面并未宣布崩溃。因为王小云院士的方法找到的两个拥有相同MD5值得字符串,几乎都是乱码,也就是一些没有意义,仅仅为了证实MD5算法不安全得一些测试数据。真正的实际应用其输入都是一些有实际意义的数据,而非人为构造的一些无意义的乱码。但是不可否认王小云院士在这一研究方面的突出成就,让这一当时极为火热的算法被证实是不安全的。也为后人的研究奠定了基石。于是在后者的研究成果之下,MD5算法被彻底的宣布为一个不安全的算法,在实际工程应用方面出现了极大的安全危险。

        2.工程应用上的突破

        真正使得md5彻底退出舞台的是对王小云碰撞方法的改进版本:相同前缀碰撞和构造前缀碰撞法,由密码学家:Marc Stevens等人提出。

        根据上文指出的,王小云院士使用的方法几乎都是构造的无意义的字符串,对于实际的工程安全问题并不会构成太大的威胁。

        Stevens的研究实现了,可以通过一个内容生成另外两个MD5值一样但是内容不一样的消息。同时生成的内容可以有意义。

        对应于这个研究成果发布了一个软件。
        “快速 MD5 碰撞生成器”: http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5.exe.zip

        使用该软件可以输入任意东西,然后他会输出两个与输入大致一样,所谓大致一样就是在原文件的基础上在文件的末尾加上了一个字符串,但是文件前部分都是一样的,所以生成的文件还是可以和原文件一样正常使用,而且他们两个的MD5值是一样的。下面演示一下该文件的使用。

        1.使用cmd启动该软件,-p之后加上要输入的文件。在此选择的是jpg格式的图片

        

        2.输出两个文件

        

        3.查看两个输出文件的内容(以文本形式打开)、

        原文件内容。

        

        输出文件1文件内容

        

        输出文件2文件内容

        

        通过对比都是在文件末尾增加了字符串,并且字符串的内容不同,但是MD5值还是一样的。

        这就是相同前缀碰撞,这会产生什么后果呢?

        如果我们设计一个程序,在程序运行中需要用到一个文件,该文件我们可以在背后使用该技术生成多个MD5值相同的文件,然后根据文件末尾的字符换不同,让程序根据末尾字符串的不同执行不同的代码模块。例如:如果文件末尾字符为0,则执行正常功能,如果末尾字符为1,则执行恶意代码模块。而在文件传输时,安全性的验证使用的MD5值进行校验,则无法避免此问题的发生。但是对于在最初正常版本运行文件的提交,以及之后不同的版本提交,一些安全检测软件还是可以检测出来的。而之后的选择前缀碰撞更是让MD5算法的安全性成了“危楼”。

        Stevens研究发现的选择前缀碰撞,与相同前缀碰撞不同的地方在于,相同前缀碰撞是生成的两个文件前部分内容一样,两者的文件内容不是截然不同的,基本功能都是一样的,仅仅是最后添加了一部分字符串。而选择前缀碰撞则是可以生成两个完全不同的文件,但是两者的MD5值是完全一样的。这就对MD5算法的安全性带来了毁灭性的打击。

        比如在进行一次交易时,甲给了乙一张价值1000元的支票。而此时使用MD5算法进行支票的完整性验证。但是乙在收到之后,利用该支票伪造一张价值10元的支票,但是两者的MD5值是一样的,乙对甲指着这张10元的支票说你给我的钱不够,这张10元的支票就是你给我的支票。此时就陷入了乙的骗局。

总结

        以上就是对MD5算法及MD5碰撞的个人理解。其中主要是针对于MD5碰撞的破解介绍,而对MD5算法原像攻击和第二原像攻击并不像碰撞攻击一样“一丝不挂”,但是目前来看MD5算法确实是不太安全的。

        

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值