破译美国使用的密码破解MD5密码算法,运算量达到2的80次方。即使采用现在最快的巨型计算机,也要运算100万年以上才能破解。但王小云和她的研究小组用普通的个人电脑,几分钟内就可以找到有效结果。
SHA-1密码算法,由美国专门制定密码算法的标准机构———美国国家标准与技术研究院与美国国家安全局设计,早在1994年就被推荐给美国政府和金融系统采用,是美国政府目前应用最广泛的密码算法。
2005年初,王小云和她的研究小组宣布,成功破解邮箱密码。《崩溃!密码学的危机》,美国《新科学家》杂志用这样富有惊耸的标题概括王小云里程碑式的成就。因为王小云的出现,美国国家标准与技术研究院宣布,美国政府5年内将不再使用SHA-1,取而代之的是更为先进的新算法,微软、Sun和 Atmel等知名公司也纷纷发表各自的应对之策。
王小云个子不高、短发、戴着厚镜片的金边眼镜。一说话,口音里带着淳朴的山东风味。有10年的时间,她走在山东大学的校园里,能认出她的人很少。在记者采访前,她已经有半年没有接受过采访,就是她,两年前,在美国加州圣芭芭拉召开的国际密码大会上主动要求发言,宣布她及她的研究小组已经成功破解了MD5、HAVAL-128、MD4和RIPEMD四大国际著名密码算法。
当她公布到第三个成果的时候,会场上已经是掌声四起。她的发言结束后,会场里爆发的掌声经久不息。而为了这一天,王小云已经默默工作了10年。几个月后,她又破译了更难的SHA-1。王小云从事的是Hash函数的研究。
目前在世界上应用最广泛的两大密码算法MD5和 SHA-1就是Hash函数中最重要的两种。MD5是由国际著名密码学家、麻省理工大学的Ronald L. Rivest教授于1991年设计的;SHA-1背后更是有美国国家安全局的背景。
两大算法是国际电子签名及许多其他密码应用领域的关键。在王小云开始Hash函数研究之初,虽然也有一些密码学家尝试去破译它,但是都没有突破性的成果。因此,15年来Hash函数研究成为不少密码学家心目中最无望攻克的领域。
但王小云不相信,她想知道,Hash函数真像看上去的那么牢不可破吗?王小云破解密码的方法与众不同,但对王小云来说,电脑只是自己破解密码的辅助手段。更多的时候,她是用手算。手工设计破解途径。
图灵奖获得者姚期智评价她说:“她具有一种直觉,能从成千上万的可能性中挑出最好的路径。”当王小云带领她的团队终结MD5后,《华盛顿时报》随后发表报道称,中国解码专家开发的新解码技术,可以“攻击白宫”。
王小云说,在公众的理解上,密码分析者很像黑客,但我们的工作与黑客是有明显区别的。她说:“黑客破解密码是恶意的,希望盗取密码算法保护的信息获得利益。而密码分析科学家的工作则是评估一种密码算法的安全性,寻找更安全的密码算法。”
与电视剧里《暗算》里的高手不同,王小云的工作更准确地说是“明算”。王小云说:“与黑客的隐蔽攻击不同,全世界的密码分析学家是在一个公开的平台上工作。密码算法设计的函数方法和密码分析的理论都是公开的。”
她说:“在破解了SHA-1的那天,我去外面吃了一顿饭。心里有些兴奋,因为自己是第一个知道一个世界级秘密的人。”看过电影《U-571》的人一定记得,美军为了获得德国潜艇使用的密码,不惜用一艘潜艇伪装成德国潜艇去盗取一艘受伤德国潜艇上的解码机和密码本。
10年破解世界5大著名密码,很多人会想,这个科学家一定是一个生活非常刻苦的人。但出人意料,王小云说:“那10年是我感觉过得很轻松的10年。”在破解密码的10年中,王小云生了一个女儿,还养了一阳台的花。
王小云说:“我的科研就是抱孩子抱出来、做家务做出来、养花养出来的。”她说,“那段时间,我抱着孩子、做着家务的间隙,各种密码可能的破解路径就在我脑中盘旋,一有想法我就会立即记到电脑里。到现在我还怀念那10年的生活,那时候,我会在一段时间里拼命工作,感觉累了,就休息一段时间。”
一次,王小云自己乘出租车,她用手机把出租车号发给一个朋友。朋友以为她要自己接站,查遍了当天的航班和火车车次都没找到那个号码,最后才知道原来是出租车号。是王小云怕遭遇坏人留下的“线索”。培育密码学最美妙果实的人王小云可谓名满天下,但当记者趁会间短暂的休息时间走到她面前进行采访时,她依然腼腆,脸竟然红了。
当记者问起她如何支配100万元的奖金时,她表示还没有具体想过,但“有一部分会投入到科研当中去”。虽然由于时间和地点的关系,采访没有再继续下去,但关于这位颠覆了两大国际密码算法的中国女科学家的资料,记者其实已经耳熟能详。
王小云,1966年8月出生,1993年获山东大学数论与密码学专业博士学位后留校任教。她带领的研究小组于2004年、2005年先后破解了MD5和SHA-1两大密码算法。对于这项十几年来国际上首次成功破解全球广泛使用的密码算法与标准的工作,整个国际密码学界为之震惊,密码学领域最权威的两大刊物Eurocrypto与Crypto均将“2005年度最佳论文奖”授予这位中国女性。
2005年6月,王小云教授受聘为清华大学杨振宁讲座教授、清华大学长江特聘教授,并成为当年第六届“中国青年科学家奖”的候选人。
MD5、SHA-1是当前国际通用的两大密码算法,也是国际电子签名及许多密码应用领域的关键技术,广泛应用于金融、证券等电子商务领域。由于世界上没有两个完全相同的指纹,因此手印成为识别人们身份的惟一标志。在网络安全协议中,使用Hash函数来处理电子签名,能够产生电子文件独一无二的“指纹”,形成“数字手印”。
专家们曾认为,即使调用全球的计算机,花费数百年、上千年,也难以找到两个相同的“数字手印”,因此能够保证数字签名无法被伪造。王小云团队随后开发的方法能够迅速找到这些相同的数字手印,这大大出乎了国际同行们的设想。有专家因此发表评论说,这是近几年来密码学领域最美妙的结果。
王小云教授,1966年生于山东诸城,密码学家,清华大学教授,中国科学院院士。
1983年至1993年就读于山东大学数学系;1993年毕业后留校任教;2005年获国家自然科学基金杰出青年基金资助,同年入选清华大学“百名人才计划”;2005年6月受聘为清华大学高等研究中心“杨振宁讲座教授”;2017年5月,获得全国创新争先奖,8月,增选为2017年中国科学院院士初步候选人,11月,当选中国科学院院士。
王小云主要从事密码理论及相关数学问题研究。
王小云提出了密码哈希函数的碰撞攻击理论,即模差分比特分析法,提高了破解了包括MD5、SHA-1在内的5个国际通用哈希函数算法的概率;给出了系列消息认证码MD5-MAC等的子密钥恢复攻击和HMAC-MD5的区分攻击;提出了格最短向量求解的启发式算法二重筛法;设计了中国哈希函数标准SM3,该算法在金融、国家电网、交通等国家重要经济领域广泛使用。
2018年1月29日,在天津市第十七届人民代表大会第一次会议上,王小云当选为天津市出席第十三届全国人民代表大会代表。
现为清华大学“长江学者特聘教授”。中国致公党第十五届中央委员会委员。 第十三届全国人民代表大会代表。
2018年4月14日,央视《开讲啦》“守护幸福”系列节目,全民国家安全教育日特别策划——清华大学教授,密码学专家王小云开讲:熟悉又陌生的“守护者”——密码!
和15年前相比,现在的王小云或许少了些年轻恣意,多了份担子和责任。但无论如何,这注定她的下一个5年又将是一场充满风险和乐趣的长跑。
参考资料:百度百科-王小云
清华大学计算机系,软件学院,理论计算机研究中心和高等研究中心都有密码学方面的教师,在密码学理论方面比较领先,就业不错;上海交通大学,武汉大学也有相关的研究,但实力一般,就业情况不详;西电属于密码学方面传统强校,前一段时间垄断中国密码学界,但由于地域原因逐渐滑坡,影响力逐渐衰弱,大概算是“百足之虫,死而不僵”吧;其他还有北邮山东大学(山东大学密码学领袖王小云已经被聘到清华大学高等研究中心工作了)什么的,水品良莠不齐。军队实力不好说,因为军队是不允许发表论文的,但据说军队的实力强于国内的科研机构,出于保密的原因也不好透露。 就业方面,高校自不必说,此外,还有从事信息安全的IT企业,国内这些企业正在发展,前途还是可以的。此外,还可以考虑到军队就业,军队非常需要这方面的人才。
中国地质大学有,信息安全系的
破译美国使用的密码破解MD5密码算法,运算量达到2的80次方。即使采用现在最快的巨型计算机,也要运算100万年以上才能破解。但王小云和她的研究小组用普通的个人电脑,几分钟内就可以找到有效结果。SHA-1密码算法,由美国专门制定密码算法的标准机构———美国国家标准与技术研究院与美国国家安全局设计,早在1994年就被推荐给美国政府和金融系统采用,是美国政府目前应用最广泛的密码算法。2005年初,王小云和她的研究小组宣布,成功破解邮箱密码。《崩溃!密码学的危机》,美国《新科学家》杂志用这样富有惊耸的标题概括王小云里程碑式的成就。因为王小云的出现,美国国家标准与技术研究院宣布,美国政府5年内将不再使用SHA-1,取而代之的是更为先进的新算法,微软、Sun和 Atmel等知名公司也纷纷发表各自的应对之策。王小云个子不高、短发、戴着厚镜片的金边眼镜。一说话,口音里带着淳朴的山东风味。有10年的时间,她走在山东大学的校园里,能认出她的人很少。在记者采访前,她已经有半年没有接受过采访,就是她,两年前,在美国加州圣芭芭拉召开的国际密码大会上主动要求发言,宣布她及她的研究小组已经成功破解了MD5、HAVAL-128、MD4和RIPEMD四大国际著名密码算法。当她公布到第三个成果的时候,会场上已经是掌声四起。她的发言结束后,会场里爆发的掌声经久不息。而为了这一天,王小云已经默默工作了10年。几个月后,她又破译了更难的SHA-1。王小云从事的是Hash函数的研究。目前在世界上应用最广泛的两大密码算法MD5和 SHA-1就是Hash函数中最重要的两种。MD5是由国际著名密码学家、麻省理工大学的Ronald L. Rivest教授于1991年设计的;SHA-1背后更是有美国国家安全局的背景。两大算法是国际电子签名及许多其他密码应用领域的关键。在王小云开始Hash函数研究之初,虽然也有一些密码学家尝试去破译它,但是都没有突破性的成果。因此,15年来Hash函数研究成为不少密码学家心目中最无望攻克的领域。但王小云不相信,她想知道,Hash函数真像看上去的那么牢不可破吗?王小云破解密码的方法与众不同,但对王小云来说,电脑只是自己破解密码的辅助手段。更多的时候,她是用手算。手工设计破解途径。图灵奖获得者姚期智评价她说:“她具有一种直觉,能从成千上万的可能性中挑出最好的路径。”当王小云带领她的团队终结MD5后,《华盛顿时报》随后发表报道称,中国解码专家开发的新解码技术,可以“攻击白宫”。王小云说,在公众的理解上,密码分析者很像黑客,但我们的工作与黑客是有明显区别的。她说:“黑客破解密码是恶意的,希望盗取密码算法保护的信息获得利益。而密码分析科学家的工作则是评估一种密码算法的安全性,寻找更安全的密码算法。”与电视剧里《暗算》里的高手不同,王小云的工作更准确地说是“明算”。王小云说:“与黑客的隐蔽攻击不同,全世界的密码分析学家是在一个公开的平台上工作。密码算法设计的函数方法和密码分析的理论都是公开的。”她说:“在破解了SHA-1的那天,我去外面吃了一顿饭。心里有些兴奋,因为自己是第一个知道一个世界级秘密的人。”看过电影《U-571》的人一定记得,美军为了获得德国潜艇使用的密码,不惜用一艘潜艇伪装成德国潜艇去盗取一艘受伤德国潜艇上的解码机和密码本。王小云说,真实的情况绝不是电影里描述的那样。她说:“盟军当年为了破解德军使用的英格曼密码,动用了大批数学家,其中包括图灵,现在计算机界中的崇高荣誉‘图灵奖’就是以这个数学家的名字命名的。”“这一批数学家前后经历了10年的时间最后才破解了英格曼密码。”王小云说,一般而言,一种先进的密码被设计出来后,要破解需要10年左右的时间,而设计一种新的密码大约需要8年的时间。密码学就是在这种不断的创立和破解中发展的。王小云是从1994年开始破解MD5和SHA-1的,到她2004年成功破解恰恰经过了10年。她说,从现在开始世界密码学界已经开始了新密码的设计工作,预计到2012年新一代安全密码将产生。破解密码破解密码,在电视剧里,这个职业充满了紧张与刺激。王小云说,现实中的密码破解工作远没有那么戏剧性。她说:“事实上这个领域里的科学家,99%的人永远也不会取得成功。”在破解密码算法RIPEMD的过程中,为了找到最后的破解方法,王小云曾经先后尝试了30多条破解路线。王小云回忆说,经常是破解进行到深夜,一条破解路线在最后的关键两步被证明是不可能的,只好第二天从零开始再找下一种破解方法。如此坚持了3个月,才成功破解。破译密码的10年是我过得最轻松的10年物理学家,高考出了意外才成了数学家。在高中时,王小云一直就是学校的物理状元。“考试没考好,才报了数学专业。”说起这段往事,她摇摇头,仿佛有点不甘心地说:“意外!”进入大学后,王小云不死心。她曾经用一年的时间重新进入物理学研究领域。但一年下来,她发现,她已经不能在物理领域取得突破了。此后才安心地在密码学领域探索,而且在这个别人认为无望的领域一钻就是10年。10年里,有一次她跟丈夫打赌说,有一天,你用GOOGLE搜索王小云,一定能有上千条记录。在GOOGLE输入“王小云”3个字,得到的记录已经超过259,000条。10年破解世界5大著名密码,很多人会想,这个科学家一定是一个生活非常刻苦的人。但出人意料,王小云说:“那10年是我感觉过得很轻松的10年。”在破解密码的10年中,王小云生了一个女儿,还养了一阳台的花。王小云说:“我的科研就是抱孩子抱出来、做家务做出来、养花养出来的。”她说,“那段时间,我抱着孩子、做着家务的间隙,各种密码可能的破解路径就在我脑中盘旋,一有想法我就会立即记到电脑里。到现在我还怀念那10年的生活,那时候,我会在一段时间里拼命工作,感觉累了,就休息一段时间。”事实上,王小云是一个非常注重生活细节的人。她很爱美,曾经走进号称伦敦最昂贵的百货公司里买上一双鞋。她们家的午饭,只要她在家就从不像现代都市人那样简单。她最拿手的是烧排骨,浇上醋、小火蒸、大火烧……有一套完整程序。烧出来的排骨口味独到,是实验室里所有研究生公认的美食。去过她家的人说,她家的地板特别干净。拖地是王小云的一个嗜好。工作累了,她会去拖地;闲下来了,她也忍不住要去拖地,所以她家的地板总是一尘不染。在她家的阳台上,一年四季都有鲜花,君子兰、鹤望兰、杜鹃花……记出租车号是生活中与数字的唯一联系作为世界级密码分析专家,王小云的生活与数字却没有多少联系,更没有像《暗算》里黄依依那样用密码向意中人表白。在生活中她唯一与数字有关的习惯竟然是记出租车号。原来,王小云的课题组中有超过一半都是女博士生。工作晚了,没有公交车,王小云总要送学生们打车回家。为了保证学生们的安全,她总要记住学生们乘坐出租车的车号,等学生到家了,给她发回平安短信,她才把记住的出租车号从脑子里删除。一次,王小云自己乘出租车,她用手机把出租车号发给一个朋友。朋友以为她要自己接站,查遍了当天的航班和火车车次都没找到那个号码,最后才知道原来是出租车号。是王小云怕遭遇坏人留下的“线索”。培育密码学最美妙果实的人王小云可谓名满天下,但当记者趁会间短暂的休息时间走到她面前进行采访时,她依然腼腆,脸竟然红了。 当记者问起她如何支配100万元的奖金时,她表示还没有具体想过,但“有一部分会投入到科研当中去”。虽然由于时间和地点的关系,采访没有再继续下去,但关于这位颠覆了两大国际密码算法的中国女科学家的资料,记者其实已经耳熟能详。王小云,1966年8月出生,1993年获山东大学数论与密码学专业博士学位后留校任教。她带领的研究小组于2004年、2005年先后破解了MD5和SHA-1两大密码算法。对于这项十几年来国际上首次成功破解全球广泛使用的密码算法与标准的工作,整个国际密码学界为之震惊,密码学领域最权威的两大刊物Eurocrypto与Crypto均将“2005年度最佳论文奖”授予这位中国女性。2005年6月,王小云教授受聘为清华大学杨振宁讲座教授、清华大学长江特聘教授,并成为当年第六届“中国青年科学家奖”的候选人。MD5、SHA-1是当前国际通用的两大密码算法,也是国际电子签名及许多密码应用领域的关键技术,广泛应用于金融、证券等电子商务领域。由于世界上没有两个完全相同的指纹,因此手印成为识别人们身份的惟一标志。在网络安全协议中,使用Hash函数来处理电子签名,能够产生电子文件独一无二的“指纹”,形成“数字手印”。专家们曾认为,即使调用全球的计算机,花费数百年、上千年,也难以找到两个相同的“数字手印”,因此能够保证数字签名无法被伪造。王小云团队随后开发的方法能够迅速找到这些相同的数字手印,这大大出乎了国际同行们的设想。有专家因此发表评论说,这是近几年来密码学领域最美妙的结果。
2004年,已经被山东大学的王小云教授破解了。 以下是她在国际密码学会上发表的破解原理论文。Collisions for Hash FunctionsCollisions for Hash FunctionsMD4, MD5, HAVAL-128 and RIPEMDXiaoyun Wang1, Dengguo Feng2, Xuejia Lai3, Hongbo Yu1The School of Mathematics and System Science, Shandong University, Jinan250100, China1Institute of Software, Chinese Academy of Sciences, Beijing100080, China2Dept. of Computer Science and Engineering, Shanghai Jiaotong University, Shanghai, China3xywang@sdu.edu.cn1revised on August 17, 20041 Collisions for MD5MD5 is the hash function designed by Ron Rivest [9] as a strengthened version of MD4 [8]. In 1993 Bert denBoer and Antoon Bosselaers [1] found pseudo-collision for MD5 which is made of the same message with twodifferent sets of initial value. H. Dobbertin[3] found a free-start collision which consists of two different 512-bitmessages with a chosen initial value 0 V I .ED BA x C B F x C B AC x A V I 763 4 0 D , 97 62 5 0 , 341042 3 0x B , 2375 12 0 : 0 0 0 0 0Our attack can find many real collisions which are composed of two 1024-bit messages with the originalinitial value 0 IV of MD5:10325476 0 , 98 0 , 89 0 67452301 0 : 0 0 0 0 0 x D badcfe x C xefcdab ,B x A IV) 0 , 2 ,..., 2 ,..., 2 , 0 , 0 , 0 , 0 ( , 31 15 311 1 C C M M) 0 , 2 ,..., 2 ,..., 2 , 0 , 0 , 0 , 0 ( , 31 15 312 2 C C N N i i(non-zeros at position 4,11 and 14)such that) , ( 5 ) , ( 5 i i N M MD N M MD .On IBM P690, it takes about one hour to find such M and M , after that, it takes only 15 seconds to 5minutes to find i N and i N , so that ) , ( i N M and ) , ( i N M will produce the same hash same value. Moreover,our attack works for any given initial value.The following are two pairs of 1024-bit messages producing collisions, the two examples have the same 1-sthalf 512 bits.M2dd31d1 c4eee6c5 69a3d69 5cf9af98 87b5ca2f ab7e4612 3e580440 897ffbb8634ad55 2b3f409 8388e483 5a417125 e8255108 9fc9cdf7 f2bd1dd9 5b3c3780X1N1d11d0b96 9c7b41dc f497d8e4 d555655a c79a7335 cfdebf0 66f12930 8fb109d1797f2775 eb5cd530 baade822 5c15cc79 ddcb74ed 6dd3c55f d80a9bb1 e3a7cc35M02dd31d1 c4eee6c5 69a3d69 5cf9af98 7b5ca2f ab7e4612 3e580440 897ffbb8634ad55 2b3f409 8388e483 5a41f125 e8255108 9fc9cdf7 72bd1dd9 5b3c3780X1N1d11d0b96 9c7b41dc f497d8e4 d555655a 479a7335 cfdebf0 66f12930 8fb109d1797f2775 eb5cd530 baade822 5c154c79 ddcb74ed 6dd3c55f 580a9bb1 e3a7cc35H 9603161f f41fc7ef 9f65ffbc a30f9dbfM2dd31d1 c4eee6c5 69a3d69 5cf9af98 87b5ca2f ab7e4612 3e580440 897ffbb8634ad55 2b3f409 8388e483 5a417125 e8255108 9fc9cdf7 f2bd1dd9 5b3c3780X2N2313e82d8 5b8f3456 d4ac6dae c619c936 b4e253dd fd03da87 6633902 a0cd48d242339fe9 e87e570f 70b654ce 1e0da880 bc2198c6 9383a8b6 2b65f996 702af76fM02dd31d1 c4eee6c5 69a3d69 5cf9af98 7b5ca2f ab7e4612 3e580440 897ffbb8634ad55 2b3f409 8388e483 5a41f125 e8255108 9fc9cdf7 72bd1dd9 5b3c3780313e82d8 5b8f3456 d4ac6dae c619c936 34e253dd fd03da87 6633902 a0cd48d242339fe9 e87e570f 70b654ce 1e0d2880 bc2198c6 9383a8b6 ab65f996 702af76fH 8d5e7019 6324c015 715d6b58 61804e08Table 1 Two pairs of collisions for MD52 Collisions for HAVAL-128HAVAL is proposed in [10]. HAVAL is a hashing algorithm that can compress messages of any length in 3,4or 5 passes and produce a fingerprint of length 128, 160, 192 or 224 bits.Attack on a reduced version for HAVAL was given by P. R. Kasselman and W T Penzhorn [7], whichconsists of last rounds for HAVAL-128. We break the full HAVAL-128 with only about the 26 HAVALcomputations. Here we give two examples of collisions of HAVAL-128, where) 0 ,..., 0 , 2 ,.... 2 , 0 , 0 , 0 , 2 ( , 8 12 1 i i i C C M Mwith non-zeros at position 0,11,18, and 31 ,... 2 , 1 , 0 i , such that ) ( ) ( M HAVAL M HAVAL .M16377448b d9e59f18 f2aa3cbb d6cb92ba ee544a44 879fa576 1ca34633 76ca5d4fa67a8a42 8d3adc8b b6e3d814 5630998d 86ea5dcd a739ae7b 54fd8e32 acbb2b3638183c9a b67a9289 c47299b2 27039ee5 dd555e14 839018d8 aabbd9c9 d78fc632fff4b3a7 40000096 7f466aac fffffbc0 5f4016d2 5f4016d0 12e2b0 f4307f87M16377488b d9e59f18 f2aa3cbb d6cb92ba ee544a44 879fa576 1ca34633 76ca5d4fa67a8a42 8d3adc8b b6e3d814 d630998d 86ea5dcd a739ae7b 54fd8e32 acbb2b3638183c9a b67a9289 c47299ba 27039ee5 dd555e14 839018d8 aabbd9c9 d78fc632fff4b3a7 40000096 7f466aac fffffbc0 5f4016d2 5f4016d0 12e2b0 f4307f87H 95b5621c ca62817a a48dacd8 6d2b54bfM26377448b d9e59f18 f2aa3cbb d6cb92ba ee544a44 879fa576 1ca34633 76ca5d4fa67a8a42 8d3adc8b b6e3d814 5630998d 86ea5dcd a739ae7b 54fd8e32 acbb2b3638183c9a b67a9289 c47299b2 27039ee5 dd555e14 839018d8 aabbd9c9 d78fc632fff4b3a7 40000096 7f466aac fffffbc0 5f4016d2 5f4016d0 12e2b0 f5b169636377488b d9e59f18 f2aa3cbb d6cb92ba ee544a44 879fa576 1ca34633 76ca5d4fa67a8a42 8d3adc8b b6e3d814 d630998d 86ea5dcd a739ae7b 54fd8e32 acbb2b3638183c9a b67a9289 c47299ba 27039ee5 dd555e14 839018d8 aabbd9c9 d78fc632fff4b3a7 40000096 7f466aac fffffbc0 5f4016d2 5f4016d0 12e2b0 f5b16963H b0e99492 d64eb647 5149ef30 4293733cTable 2 Two pairs of collision, where i=11 and these two examples differ only at the last word3 Collisions for MD4MD4 is designed by R. L. Rivest[8] . Attack of H. Dobbertin in Eurocrypto'96[2] can find collision withprobability 1/222. Our attack can find collision with hand calculation, such that) 0 , 0 , 0 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 2 , 2 , 0 ( , 16 31 28 31 C C M Mand ) ( 4 ) ( 4 M MD M MD .M14d7a9c83 56cb927a b9d5a578 57a7a5ee de748a3c dcc366b3 b683a020 3b2a5d9fc69d71b3 f9e99198 d79f805e a63bb2e8 45dd8e31 97e31fe5 2794bf08 b9e8c3e9M14d7a9c83 d6cb927a 29d5a578 57a7a5ee de748a3c dcc366b3 b683a020 3b2a5d9fc69d71b3 f9e99198 d79f805e a63bb2e8 45dc8e31 97e31fe5 2794bf08 b9e8c3e9H 5f5c1a0d 71b36046 1b5435da 9b0d807aM24d7a9c83 56cb927a b9d5a578 57a7a5ee de748a3c dcc366b3 b683a020 3b2a5d9fc69d71b3 f9e99198 d79f805e a63bb2e8 45dd8e31 97e31fe5 f713c240 a7b8cf694d7a9c83 d6cb927a 29d5a578 57a7a5ee de748a3c dcc366b3 b683a020 3b2a5d9fc69d71b3 f9e99198 d79f805e a63bb2e8 45dc8e31 97e31fe5 f713c240 a7b8cf69H e0f76122 c429c56c ebb5e256 b809793Table 3 Two pairs of collisions for MD44 Collisions for RIPEMDRIPEMD was developed for the RIPE project (RACE Integrrity Primitives Evalustion, 1988-1992). In1995, H. Dobbertin proved that the reduced version RIPEMD with two rounds is not collision-free[4]. We showthat the full RIPEMD also isnOt collision-free. The following are two pairs of collisions for RIPEMD:) 2 , 0 , 0 , 0 , 0 , 2 2 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 0 , 0 , 0 ( , 31 31 18 20 ' C C M M i iM1579faf8e 9ecf579 574a6aba 78413511 a2b410a4 ad2f6c9f b56202c 4d757911bdeaae7 78bc91f2 47bc6d7d 9abdd1b1 a45d2015 817104ff 264758a8 61064ea5M1579faf8e 9ecf579 574a6aba 78513511 a2b410a4 ad2f6c9f b56202c 4d757911bdeaae7 78bc91f2 c7c06d7d 9abdd1b1 a45d2015 817104ff 264758a8 e1064ea5H 1fab152 1654a31b 7a33776a 9e968ba7M2579faf8e 9ecf579 574a6aba 78413511 a2b410a4 ad2f6c9f b56202c 4d757911bdeaae7 78bc91f2 47bc6d7d 9abdd1b1 a45d2015 a0a504ff b18d58a8 e70c66b6579faf8e 9ecf579 574a6aba 78513511 a2b410a4 ad2f6c9f b56202c 4d757911bdeaae7 78bc91f2 c7c06d7d 9abdd1b1 a45d2015 a0a504ff b18d58a8 670c66b6H 1f2c159f 569b31a6 dfcaa51a 25665d24Table 4 The collisions for RIPEMD5 RemarkBesides the above hash functions we break, there are some other hash functions not having ideal security. Forexample, collision of SHA-0 [6] can be found with about 240 computations of SHA-0 algorithms, and a collisionfor HAVAL-160 can be found with probability 1/232.Note that the messages and all other values in this paper are composed of 32-bit words, in each 32-bit wordthe most left byte is the most significant byte.1 B. den Boer, Antoon Bosselaers, Collisions for the Compression Function of MD5, Eurocrypto,93.2 H. Dobbertin, Cryptanalysis of MD4, Fast Software Encryption, LNCS 1039, D. , Springer-Verlag, 1996.3 H. Dobbertin, Cryptanalysis of MD5 compress, presented at the rump session of EurocrZpt'96.4 Hans Dobbertin, RIPEMD with Two-round Compress Function is Not Collision-Free, J. Cryptology 10(1),1997.5 H. Dobbertin, A. Bosselaers, B. Preneel, "RIPMEMD-160: A Strengthened Version of RIPMMD," FastSoftware EncrZption, LNCS 1039, D.Gollmann, Ed., Springer-Verlag, 1996, pp. 71-82.6 FIPS 180-1, Secure hash standard, NIST, US Department of Commerce, Washington D. C., April 1995.7 P. R. Kasselman, W T Penzhorn , Cryptananlysis od reduced version of HAVAL, Vol. 36, No. 1, ElectronicLetters, 2000.8 R. L. Rivest, The MD4 Message Digest Algorithm, Request for Comments (RFC)1320, Internet ActivitiesBoard, Internet Privacy Task Force, April 1992.9 R. L Rivest, The MD5 Message Digest Algorithm, Request for Comments (RFC)1321, Internet ActivitiesBoard, Internet PrivacZ Task Force, April 1992.3RIPEMD-128110 Y. Zheng, J. Pieprzyk, J. Seberry, HAVAL--A One-way Hashing Algorithm with Variable Length of Output,Auscrypto'92.
西电密码学,国内大学应该无出其右。数学、编程不错应该就可以。
MD5简介 MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。 Message-Digest泛指字节串(Message)的Hash变换,就是把一个任意长度的字节串变换成一定长的大整数。请注意我使用了“字节串”而不是“字符串”这个词,是因为这种变换只与字节的值有关,与字符集或编码方式无关。 MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。 MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。 MD5还广泛用于加密和解密技术上,在很多操作系统中,用户的密码是以MD5值(或类似的其它算法)的方式保存的,用户Login的时候,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值进行比较,而系统并不“知道”用户的密码是什么。 一些黑客破获这种密码的方法是一种被称为“跑字典”的方法。有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用MD5程序计算出这些字典项的MD5值,然后再用目标的MD5值在这个字典中检索。 即使假设密码的最大长度为8,同时密码只能是字母和数字,共26+26+10=62个字符,排列组合出的字典的项数则是P(62,1)+P(62,2)….+P(62,8),那也已经是一个很天文的数字了,存储这个字典就需要TB级的磁盘组,而且这种方法还有一个前提,就是能获得目标账户的密码MD5值的情况下才可以。 在很多电子商务和社区应用中,管理用户的Account是一种最常用的基本功能,尽管很多Application Server提供了这些基本组件,但很多应用开发者为了管理的更大的灵活性还是喜欢采用关系数据库来管理用户,懒惰的做法是用户的密码往往使用明文或简单的变换后直接保存在数据库中,因此这些用户的密码对软件开发者或系统管理员来说可以说毫无保密可言,本文的目的是介绍MD5的Java Bean的实现,同时给出用MD5来处理用户的Account密码的例子,这种方法使得管理员和程序设计者都无法看到用户的密码,尽管他们可以初始化它们。但重要的一点是对于用户密码设置习惯的保护。 有兴趣的读者可以从这里取得MD5也就是RFC 1321的文本。 实现策略 MD5的算法在RFC1321中实际上已经提供了C的实现,我们其实马上就能想到,至少有两种用Java实现它的方法,第一种是,用Java语言重新写整个算法,或者再说简单点就是把C程序改写成Java程序。第二种是,用JNI(Java Native Interface)来实现,核心算法仍然用这个C程序,用Java类给它包个壳。 但我个人认为,JNI应该是Java为了解决某类问题时的没有办法的办法(比如与操作系统或I/O设备密切相关的应用),同时为了提供和其它语言的互操作性的一个手段。使用JNI带来的最大问题是引入了平台的依赖性,打破了SUN所鼓吹的“一次编写到处运行”的Java好处。因此,我决定采取第一种方法,一来和大家一起尝试一下“一次编写到处运行”的好处,二来检验一下Java 2现在对于比较密集的计算的效率问题。 实现过程 限于这篇文章的篇幅,同时也为了更多的读者能够真正专注于问题本身,我不想就某一种Java集成开发环境来介绍这个Java Bean的制作过程,介绍一个方法时我发现步骤和命令很清晰,我相信有任何一种Java集成环境三天以上经验的读者都会知道如何把这些代码在集成环境中编译和运行。用集成环境讲述问题往往需要配很多屏幕截图,这也是我一直对集成环境很头疼的原因。我使用了一个普通的文本编辑器,同时使用了Sun公司标准的JDK 1.3.0 for Windows NT。 其实把C转换成Java对于一个有一定C语言基础的程序员并不困难,这两个语言的基本语法几乎完全一致.我大概花了一个小时的时间完成了代码的转换工作,我主要作了下面几件事: 把必须使用的一些#define的宏定义变成Class中的final static,这样保证在一个进程空间中的多个Instance共享这些数据 删去了一些无用的#if define,因为我只关心MD5,这个推荐的C实现同时实现了MD2 MD3和 MD4,而且有些#if define还和C不同编译器有关 将一些计算宏转换成final static 成员函数。 所有的变量命名与原来C实现中保持一致,在大小写上作一些符合Java习惯的变化,计算过程中的C函数变成了private方法(成员函数)。 关键变量的位长调整 定义了类和方法 需要注意的是,很多早期的C编译器的int类型是16 bit的,MD5使用了unsigned long int,并认为它是32bit的无符号整数。而在Java中int是32 bit的,long是64 bit的。在MD5的C实现中,使用了大量的位操作。这里需要指出的一点是,尽管Java提供了位操作,由于Java没有unsigned类型,对于右移位操作多提供了一个无符号右移:>>>,等价于C中的 >> 对于unsigned 数的处理。 因为Java不提供无符号数的运算,两个大int数相加就会溢出得到一个负数或异常,因此我将一些关键变量在Java中改成了long类型(64bit)。我个人认为这比自己去重新定义一组无符号数的类同时重载那些运算符要方便,同时效率高很多并且代码也易读,OO(Object Oriented)的滥用反而会导致效率低下。 限于篇幅,这里不再给出原始的C代码,有兴趣对照的读者朋友可以去看RFC 1321。MD5.java源代码 测试 在RFC 1321中,给出了Test suite用来检验你的实现是否正确: MD5 ("") = d41d8cd98f00b204e9800998ecf8427e MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661 MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72 MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0 MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b …… 这些输出结果的含义是指:空字符串””的MD5值是d41d8cd98f00b204e9800998ecf8427e,字符串”a”的MD5值是0cc175b9c0f1b6a831c399e269772661……编译并运行我们的程序:javac –d . MD5.javajava beartool.MD5 为了将来不与别人的同名程序冲突,我在我的程序的第一行使用了package beartool; 因此编译命令javac –d . MD5.java 命令在我们的工作目录下自动建立了一个beartool目录,目录下放着编译成功的 MD5.class 我们将得到和Test suite同样的结果。当然还可以继续测试你感兴趣的其它MD5变换,例如: java beartool.MD5 1234 将给出1234的MD5值。 可能是我的计算机知识是从Apple II和Z80单板机开始的,我对大写十六进制代码有偏好,如果您想使用小写的Digest String只需要把byteHEX函数中的A、B、C、D、E、F改成a、b、 c、d、e、f就可以了。 MD5据称是一种比较耗时的计算,我们的Java版MD5一闪就算出来了,没遇到什么障碍,而且用肉眼感觉不出来Java版的MD5比C版的慢。 为了测试它的兼容性,我把这个MD5.class文件拷贝到我的另一台Linux+IBM JDK 1.3的机器上,执行后得到同样结果,确实是“一次编写到处运行了”。 Java Bean简述 现在,我们已经完成并简单测试了这个Java Class,我们文章的标题是做一个Java Bean。 其实普通的Java Bean很简单,并不是什么全新的或伟大的概念,就是一个Java的Class,尽管 Sun规定了一些需要实现的方法,但并不是强制的。而EJB(Enterprise Java Bean)无非规定了一些必须实现(非常类似于响应事件)的方法,这些方法是供EJB Container使用(调用)的。 在一个Java Application或Applet里使用这个bean非常简单,最简单的方法是你要使用这个类的源码工作目录下建一个beartool目录,把这个class文件拷贝进去,然后在你的程序中import beartool.MD5就可以了。最后打包成.jar或.war是保持这个相对的目录关系就行了。 Java还有一个小小的好处是你并不需要摘除我们的MD5类中那个main方法,它已经是一个可以工作的Java Bean了。Java有一个非常大的优点是她允许很方便地让多种运行形式在同一组代码中共存,比如,你可以写一个类,它即是一个控制台Application和GUI Application,同时又是一个Applet,同时还是一个Java Bean,这对于测试、维护和发布程序提供了极大的方便,这里的测试方法main还可以放到一个内部类中,有兴趣的读者可以参考: 这里讲述了把测试和示例代码放在一个内部静态类的好处,是一种不错的工程化技巧和途径。 把Java Bean装到JSP里 正如我们在本文开头讲述的那样,我们对这个MD5 Bean的应用是基于一个用户管理,这里我们假设了一个虚拟社区的用户login过程,用户的信息保存在数据库的个名为users的表中。这个表有两个字段和我们的这个例子有关,userid :char(20)和pwdmd5 :char(32),userid是这个表的Primary Key,pwdmd5保存密码的MD5串,MD5值是一个128bit的大整数,表示成16进制的ASCII需要32个字符。 这里给出两个文件,login.html是用来接受用户输入的form,login.jsp用来模拟使用MD5 Bean的login过程。 为了使我们的测试环境简单起见,我们在JSP中使用了JDK内置的JDBC-ODBC Bridge Driver,community是ODBC的DSN的名字,如果你使用其它的JDBC Driver,替换掉login.jsp中的Connection con= DriverManager.getConnection("jdbc:odbc:community", "", "");即可。 login.jsp的工作原理很简单,通过post接收用户输入的UserID和Password,然后将Password变换成MD5串,然后在users表中寻找UserID和pwdmd5,因为UserID是users表的Primary Key,如果变换后的pwdmd5与表中的记录不符,那么SQL查询会得到一个空的结果集。 这里需要简单介绍的是,使用这个Bean只需要在你的JSP应用程序的WEB-INF/classes下建立一个beartool目录,然后将MD5.class拷贝到那个目录下就可以了。如果你使用一些集成开发环境,请参考它们的deploy工具的说明。在JSP使用一个java Bean关键的一句声明是程序中的第2行:
222 浏览 1 回答
118 浏览 6 回答
195 浏览 3 回答
205 浏览 7 回答
86 浏览 4 回答
266 浏览 4 回答
247 浏览 3 回答
186 浏览 1 回答
247 浏览 1 回答
165 浏览 5 回答
205 浏览 10 回答
230 浏览 4 回答
341 浏览 4 回答
133 浏览 3 回答
116 浏览 6 回答