昨天在OSCHINA上看到一个有趣的问题,笔者用万元悬赏解决方案,他提出了构建分布式集群来对MD5进行K -V 暴力破解,要解决成本和效率问题,这个问题很简单,看看我的解决方案,不过这个不是本文重点。 首先将MD5进行水平分割成32位,然后再进行分布式索引,将分割后的每一个KEY索引至分布式服务器,按照键盘可以输入的MD5记录来算,差不多就100T的数据量。10台服务器足够了。通过索引的方法到分布式服务器后,服务器再采用nosql进行KVDB架构,速度和成本都控制下来了,也许理论上很简单,但是要的也仅仅是一个理论,我的方法也许是简单的,但不是最好的解决方案。
并且就算是一切都解决了,暴力破解还存在问题,下面就会阐述一下。
接下来是本文重点
本身对密码学不感兴趣,也没有深入涉及过,只是和群里人的讨论过MD5的算法后周期性。
从理论上来将,MD5本身就存在强弱碰撞的可能,32位储存单位只可以有!32个MD5的值,碰撞试验得到了这个可能性的结果是:存在相同文件或者值对应相同MD5值。因为本身MD5就是散列算法,从民用角度来讲,它本身的安全性能就不是顶尖。所以碰撞很容易碰撞出结果来。
MD5的单向算法,网上已经公布了很久,他是一个开源算法,但是是不可逆的,只能用穷举的方法算到结果,但是穷举的方法有万亿亿条结果。从碰撞试验可以缩小这个范围至2^64条,从密码学理论上来说,MD5算是被破解的算法了。
王小云教授的碰撞理论让国际安全机构公认的金钥匙MD5算法轰然倒塌,只要拥有强大的计算机,这个结果是必然被穷举出来的。理论上是绝对可行的,但没有这样的超级计算机。
上面也知道了MD5存在HASH的碰撞,所以暴力破解到一定程度就用不了了,比如会产生碰撞结果100个值,暴力破解后这个值也不对,所以暴力破解只能存在一些简单的密码里。
MD5算是从理论上破解了,实际上没有这样的计算机,但是不排除未来几十年内这样的计算机出现,所以MD5的周期变短了,MD5也会变得不安全。前段时间CSDN的密码泄露事件充分说明了当今社会密码的安全隐患。10万的用户数据泄露,拥有10万个MD5值。排除弱口令已经破解,另一些高级的口令破解也只是时间问题。那么MD5既然不安全了,怎么办?
如果单纯从设计角度来讲,不通过SSL的话,一般现在常用就是加入salt的方法来增加破解难度,但从其他角度来讲还是有很大的隐患,现在迅雷等下载的文件安全效验其实是效验MD5值,理论如下:
下载一个文件后迅雷将得到这个文件的MD5值(因为一个文档,即时是一个空格不同,就会导致MD5全部改变,即便你修改之后在还原保存MD5也不同),然后去效验此文件的原MD5,如果相同,则表示文件安全。
如果存在MD5碰撞后使用这一结果,那么文件的安全效验也会面临灾难,你下载的文件经过安全效验后也不一定是安全的,或许里面就包含了病毒和木马等恶意程序。
鉴于MD5理论上被破解了,现在新的密码规则SHA-2又出来了,此算法目前还没有得到任何攻击、破解的报告,至少未来100年内此算法得以安全,美国政府机构和其他一些机构都将采用SHA-2的算法,对于老系统也正在加速升级中。
或许MD5金钥匙不久后就会被替代为其他,也许是SHA-2也许是正在研究的SHA-3。
|