从hash函数到王小云的MD5破解

密码学是理论计算机的一个很大的方向。以前准备先写密码学概论再提在hash函数破解上作出重大贡献的王小云教授的工做,不过前两天王小云得到求是杰出科学家奖以及100万奖金,在媒体上又掀起了一轮宣传狂潮,可是有些报道极端弱智,错误百出,因此我趁机纠正一下,并介绍密码学的一个组成部分——hash函数,以及王小云在这上面的工做。算法

王小云的主要工做是关于hash函数的破解工做。她在2005一个密码学会议上宣布破解了SHA-1,震惊了全世界。因此要介绍和理解她的工做,先看一下hash函数具体是怎么回事。数据库

简单的说,hash函数就是把任意长的输入字符串变化成固定长的输出字符串的一种函数。通俗得说,hash函数用来生成信息的摘要。输出字符串的长度称为hash函数的位数app

目前应用最为普遍的hash函数是SHA-1MD5,大可能是128位和更长。函数

hash函数在现实生活中应用十分普遍。不少下载网站都提供下载文件的MD5码校验,能够用来判别文件是否完整。另外,好比在WordPress的数据库,全部密码都是保存的MD5码,这样即便数据库的管理员也没法知道用户的原始密码,避免隐私泄露(不少人在不一样地方都是用的同一个密码)。网站

若是两个输入串的hash函数的值同样,则称这两个串是一个碰撞(Collision)。既然是把任意长度的字符串变成固定长度的字符串,因此,必有一个输出串对应无穷多个输入串,碰撞是必然存在的。google

一个「优良」的hash函数 应当知足如下三个条件:spa

  • 任意y,找x,使得f(x)=y,很是困难。翻译

  • 给定x1,找x2,使得f(x1)=f(x2),很是困难。orm

  • 找x1,x2,使得f(x1)=f(x2),很是困难。htm

上面的「很是困难」的意思是除了枚举外不可能有别的更快的方法。好比第3条,根据生日定理,要想找到这样的x1,x2,理论上须要大约2^(n/2)的枚举次数。

几乎全部的hash函数的破解,都是指的破坏上面的第三条性质,即找到一个碰撞(前两条都能被破坏的hash函数也太弱了点,早就被人抛弃了)。在密码学上还有一个概念是理论破解,指的是提出一个算法,使得能够用低于理论值得枚举次数找到碰撞。

王小云的主要工做是给出了MD5,SHA-0的碰撞,以及SHA-1的理论破解,她证实了160位SHA-1,只须要大约2^69次计算就能找出来,而理论值是2^80次。她的寻找MD5碰撞的方法是极端高效的。传说王小云当时在会议上把碰撞写出来,结果被下面的人验证发现不对,原来她把MD5算法的一个步骤弄错了。可是她立马联系她的当时留在中国的学生,修正算法,并找到一个新的碰撞。这一个是对的。

看到这里,那些认为中国国安局应该将这些结果封存做为秘密武器甚至幻想用这些成果来袭击美国之徒能够停住大家的YY了。这种形式上的破解,在大多数状况下没有实际性的做用。更别提MD5早就被美国人抛弃了。

可是,说这种破解一点实际意义都没有,那就侮辱了广大密码学家的智商,密码学家不会平白无故的弄出碰撞这么一个概念来。下面简单的介绍一下在特定状况下,怎么利用给定的碰撞来作坏事(翻译自Attacking Hash Functions):

Caesar给实习生Alice叫写了一封推荐信(letter)。同一天,Alice叫Caesar在推荐信上数字签名,并提供了一份推荐信的电子板。Caesar打开文件,发现和原件如出一辙。因此他在文件上签了名。

几个月后,Caesar发现他的秘密文件被非法察看。这究竟是怎么回事呢?

letter order
(apply MD5 to both documents)
a25f7f0b 29ee0b39 68c86073 8533a4b9

事实上,Alice要求Caesar签名的文件letter已经被Alice作了手脚,准确地说,Alice还准备了另一个文件order,它们的MD5码彻底一致。而Caesar的数字签名还依赖于MD5算法,因此Alice用order文件替换Letter文件以后,Caesar的数字签名依然有效。那封order给Alice提供了察看秘密文件的权限。

具体的实现方法可见Hash Functions and the Blind Passenger Attack。我在这里简单的解释一下(只是大体思路,具体实现方式,须要对文件结构信息有所了解):

letter文件的内容是:

if(x1==x1) show "letter" else show "order"

order文件的内容是:

if(x2==x1) show "letter" else show "order"

其中字符串"letter"和"order"表明两封信实际显示的内容。x1,x2是一个MD5的碰撞。

上面的方法,只供参考和学术用途,实际使用所引发的后果概不负责。

参考:

PS:我跟王小云老师的接触不多,上过俩次她的讨论班而已,亦感受到王小云老师的严谨和耐心。在去年一个Turing奖得到者的演讲上,王小云提问的时候竟口而出「I ask who」的中式英语,在引发哄笑的同时,我也极端佩服她的勇气。也许只有这样才能作出很是好的工做吧。

PS2: wikipedia在国内能够经过free_door浏览。

相关文章
相关标签/搜索