浅谈MD5和SHA-1被破解和应用改进策略
作者:fleshwound([email protected]) http://www.smatrix.org
来源:安全焦点
2004年8月17日在美国加州圣巴巴拉举行了一次国际密码学学术年会(Crypto’2004),当晚来自中国山东大学的王小云教授做了关于破译 MD5、HAVAL-128、 MD4和RIPEMD算法的报告。当她公布了破解结果之后,报告被激动的掌声打断,引起了全场的轰动。会议结束后,很多专家来到王小云教授身边向她表示祝贺,连世界顶尖级的密码学大师Rivest和Shamir也上前表示他们的欣喜和祝贺,世界信息安全方面的专家们对王小云教授等人的论文给予高度评价, MD5的设计者和著名的公钥密码系统RSA的第一设计者Rivest在邮件中写道:“这些结果无疑给人非常深刻的印象,她应当得到我最热烈的祝贺,当然,我并不希望看到MD5就这样倒下,但人必须尊崇真理。”为了公开征集专门针对MD5的攻击而设立的MD5破解工程权威网站http://www.md5crk.com/ 随后关闭。在该次学术年会总结报告这样写道:“我们该怎么办?MD5被重创了;它即将从应用中淘汰。SHA-1仍然活着,但也见到了它的末日。现在就得开始更换SHA-1了。”但是,不久,王小云教授又宣布SHA-1也被破解。
王小云教授的报告为什么能够引起如此大的反响?因为她的成果作为密码学领域的重大发现宣告了通常被认为是非常安全的MD5算法轰然倒塌,引发了密码学界的一场地震。
1 MD5和SHA-1算法简单介绍
MD5和SHA-1算法的核心是哈希函数。密码学哈希函数(Cryptography Hash Function,简称为哈希函数)又称杂凑函数,是在信息安全领域有广泛和重要应用的密码算法,主要作用是数据完整性验证和消息认证。它有一种类似于指纹的应用,所以有时候我们也把它叫做“数字指纹”。因为它具有以下特性:原始信息只要改变一点点,哪怕是几比特,对应的消息摘要也会改变很大。
哈希函数把任意有限长的输入行映射到固定长的行。哈希函数的值域与定义域相比规模要小得多,它是“多对一”的映射,因此可能会发生碰撞。所谓碰撞 (Collision)是指定义域的两个不同元素x1、x2映射到同一个消息摘要,即h(x1)=h(x2),也就是存在不同的消息具有相同的消息摘要。从信息论的观点看,哈希函数存在碰撞是必然的,这一点在数学上可以严格的证明。因此安全的杂凑函数在设计时必须满足两个要求:其一是寻找两个输入得到相同的输出值在计算上是不可行的,这就是我们通常所说的抗碰撞的;其二是找一个输入,能得到给定的输出在计算上是不可行的,即不可从结果推导出它的初始状态。现在使用的重要计算机安全协议,如SSL,PGP都用杂凑函数来进行签名,一旦找到两个文件可以产生相同的压缩值,就可以伪造签名,给网络安全领域带来巨大隐患。哈希算法的安全性从理论上来说与消息摘要的长度是成正比的,对于具有128位消息摘要的MD5,要在短时间内寻找到一组碰撞在计算上是比较困难的,而国际标准安全哈希算法( Secure Hash Algorithm, 简称SHA)是具有160位消息摘要,如果要找到一组碰撞在计算上更困难。
MD5它曾一度被认为是非常安全的,各国著名密码学家、数学家和顶级黑客们对它进行了多年的密码学分析和攻击,曾提出的著名的“生日攻击”和“袋鼠攻击” 等一系列攻击方法,但是在实质上没有突破性的进展,因此MD5经受住了多年的考验,同时又由于因为它易于实现,算法理解相对也比较简单,所以在国内外有着非常广泛的应用。但是王小云教授发现的这种方法,可以很快的找到MD5的“碰撞”,使得两个文件可以产生相同的“指纹”。这意味着什么?意味当当你在网络上使用电子签名签署一份合同后,还可能找到另外一份具有相同签名但内容迥异的合同,这样两份合同的真伪性便无从辨别,你很有可能要背负黑锅了。她的这项研究成果证实了利用MD5算法的碰撞可以严重威胁信息系统安全,这一发现使目前电子签名的法律效力和技术体系受到挑战,下面我们将具体谈谈这次发现对社会各方面的影响。
对网络系统安全的影响
学习黑客技术的人都知道,黑客攻击网络系统的最高目标是获得超级用户权限,因为获得超级用户权限那你就可以为所欲为。典型的为了获得系统权限的攻击方法主要有以下几大类:
(1) 缓冲区溢出,这是目前我觉得最有研究深度和价值的一种黑客技术;
(2) 木马技术与社交工程,这两种技术相信朋友们都很清楚是怎么回事,相信有不少朋友通过这种手段知道了MM的QQ和邮箱密码;
(3) 端口监听和网络截获,难度很高,成功的可能性也不太大,但成功后威胁性很大;
(4) 病毒与蠕虫;
(5) 暴力破解,攻击的最后的希望了!
由于一些网络系统的口令验证是这样设计的:系统保留的是用户密码经过加密算法MD5得到的消息摘要,而不保留用户密码本身,验证用户身份时,只需要将用户输入的密码再次用MD5生成消息摘要,与记录的MD5消息摘要作一个比较即可验证其密码的合法性。例如采用这种口令验证技术的系统有Linux和某些 UNIX,另外一些网络应用系统也是采用的这种方法。从理论上来说,如果我们要攻击Linux系统,只要得到用户密码文件(其中记录了密码的MD5),然后随便生成一个碰撞的密码(不一定要跟原密码相同),就可以用这个密码登录了,超级用户密码也不例外。以前做到这一点是非常困难的,而现在王小云教授的成果已经完全使Linux用的那种基于MD5的身份验证技术失效了,而且攻击成功后可以嫁祸于人,这使得Linux的安全神话再次打破。攻击基本思路如下:首先获得一个普通用户权限,再通过普通用户权限对存在缓冲区漏洞的某些程序进行缓冲区溢出,进行权限提升,最终获得超级用户权限,寻找到 /etc/passwd和/etc/shadow文件,开始破解吧!按照王小云教授的方法你将获得包括ROOT口令在内的所有口令,当然这些口令不一定与原口令相同,但是可以用合法的原用户名和这种口令大摇大摆登陆系统。这样,你无需担心在系统中添加新用户被系统管理员发觉,而且你做了什么不光彩的事情会有人帮你背黑锅!另外一个例子就是论坛系统,很多网上论坛采用的就是这种技术。基于ASP、PHP、JSP的各种论坛的漏洞很多,攻击手法更是层出不穷,比如很多人常用的SQL注入技术,因此获得含有用户名与密码消息摘要的数据表信息并不是件非常艰难的事情!如果有一天,在论坛上的有很高声望和名声的你,不幸被人家“借用”了身份,发了一些非常不堪入目或者无理攻击他人的帖子,那你就应该知道怎么回事了。目前关于利用她的研究成果进行攻击的报道还没有出现,以上可能攻击的方法是我根据自己研究经验进行的推测,如果出现类似手法,与本人无关。
2 对电子商务安全的影响
MD5在电子商务系统中有着非常重要的应用。很多系统中把MD5算法用于使用者的身份鉴别和数字签名。现在我举个简单的例子,来说明MD5被破解后会给我们带来什么。假设本地一个销售公司建立了一个电子产品网络购物中心,提供面向本地的网上订购、当天送货上门的服务。我知道这个公司信誉不错,而且打算购买一个MP3,首先是要在他们的网站上注册,输入我的登陆身份信息和真实的具体个人信息,包括:姓名、送货地址、联系电话、身份证号码等,完成注册。接着我挑选产品,将我喜欢的MP3放进电子购物篮,订购完成,公司会打电话来确认所填信息是否正确,确认信息正确后以后就会送货上门了,我收到送来的 MP3再付钱,交易成功!在系统后台,为了保护客户隐私并防止网络攻击,该系统将做了以下处理:对用户提交的身份信息进行一系列格式化、加密和数字签名等操作,并用MD5算法计算消息摘要来防止篡改,形成一个电子证书(如果比较正规的是采用CCITT X.509 国际标准),用户身份通过为用户颁发的电子证书进行识别。用户的电子证书可以导入到客户端浏览器中,当客户端向服务器提出登录请求时,系统自动从电子证书中获取用户身份信息,并计算消息摘要来判断证书是否被篡改过。每次交易时候,系统只要验证数字证书就行了,一般不需要输入用户名和密码,多年来这种方法一直被认为是安全的。但是不幸的事情发生了,利用王小云教授的发现,用户证书完全是可以被伪造!(据说最近国际密码专家Lenstra利用王小云教授的方法,甚至伪造了符合X.509标准的数字证书。)一个对我非常不友好的人伪造了我的用户证书,进入系统后成功修改了用于确认的联系信息,并不辞辛苦的为我定购了许多大宗电子商品,最后当公司把这些商品堆在我面前时候并叫我签单时,我惊呆了!这一切,似乎听起来不可思议,但是对于许多真正的网上电子商务系统而言,网络在线支付和信用卡支付是很普遍的,可信部门(目前包括我国在内有许多数字证书认证中心)的数字证书就是用户的网络身份证,代表了用户的信誉, MD5和SHA-1算法被用来保证这些证书的完整性和不可篡改性。而MD5和SHA-1算法被破解将导致这些数字证书可以伪造,由此造成的信誉和经济损失将是难以估量的。不过要伪造一份真正有意义的数字证书也是非常困难的,从目前来看,这种伪造技术还不实用,但是根据最近的迹象表明,国外的某些黑客组织由于受该研究成果的影响与刺激,对银行信用卡系统又开始表现出浓厚的兴趣了。
3 对电子政务安全影响
电子政务是政府机构运用现代计算机和网络技术,将其管理和服务职能转移到网络上去完成,同时实现政府组织结构和工作流程的重组优化,超越时间、空间和部门分隔的制约,向全社会提供优质高效、规范透明和全方位的管理与服务。一般应具有公务邮件、收发文管理、公文审批、部门简报等主要功能,以及日程安排、个人事务管理、档案管理、红头文件签章、笔迹签批保留的辅助功能。政府的电子文件代表着权威,具有法律和行政效率,如果文件在网上传递过程中被修改,例如:把审批的公文中的不同意去掉“不”字,那后果是不堪设想的。目前在电子政务系统中为了防止被篡改,传送和保存这些电子公文的时候往往会利用MD5或者SHA-1算法生成这些电子公文的数字摘要,一旦电子公文被恶意篡改,启用这些电子公文时候重新生成数字摘要检查时候就会被发现,从而篡改后的公文将失去效力。王小云教授从理论上说明这种保证电子公文的原始完整性的方法有缺陷,但是在实际中,要伪造有特定含义的电子公文与原始公文具有相同的数字摘要的可能性非常非常小,可以说是几乎不太可能的(这点是由她的破解算法决定的)。因此MD5或者SHA-1来保证类似与电子公文这种的具有一定意义的电子文件不被篡改还是有应用价值的。
4 应用改进策略
寻找一个MD5的碰撞已经解决了,那一组呢?就不那么容易了,那么我们在找不到更合适的替代算法之前,不妨使用以下方案:
散列向量组。具体的办法是依次取要求散列的内容的一半,或者特定交叉部分,形成一个散列向量组来替代原来的散列值。
5 结语
王小云教授的成果具有非常重要的理论意义,对密码学本身的发展具有一定的推动作用,为哈希函数的密码分析学提供了一条道路,有兴趣的朋友可以看一下她的论文,论文题目是《Collisions for Hash Functions MD4, MD5, HAVAL-128 and RIPEMD》。她的发现说明MD5、SHA-1已经不能用身份验证,更不能用于数字签名,另外在理论上说明数字摘要算法用于数据的完整性鉴别具有缺陷。不过她的方法也不是万能的,由于方法上的限制,要构造具有特定语义的碰撞几乎是不可能的,因此并不是所有的采用MD5算法的应用都因此被彻底的打倒,在实际中,MD5和SHA-1算法经常与其它算法一起使用,或者进行了很多变形,因此攻破使用MD5或者SHA-1算法的系统并不是想象中那么容易,所以她的发现要在实际中能够发挥什么作用还要看以后的实践了。不管怎么说,她的发现的确是信息安全学界的一场地震,王小云教授也是我们国人的骄傲!
[注:最近有不少人还在讨论关于散列的话题,这里我把以前一个杂志的约稿文章放出来]