Collision-illustrated.png

上周四Google与荷兰研究机构CWI宣布首例SHA-1碰撞攻击实例。仅仅一天后的周五就出现了首个碰撞攻击的攻击受害者:WebKit 项目使用的开源版本控制系统Apache SVN,引发业界讨论。SHA-1遭碰撞后,我们的网络空间还安全吗?

上周五,SHA1 碰撞攻击出现了第一位受害者:WebKit项目使用的开源版本控制系统 Apache SVN(或 SVN)。虽然这个问题是发生在WebKit SVN上的,但它能影响全世界的版本控制系统。

程序测试导致代码仓库崩溃

事情的起因是WebKit的工程师想要看看WebKit会如何处理SHA-1碰撞,于是他上传了Google提供的两份内容不同,SHA-1校验值相同的PDF文件。

WebKit SVN接收到上传的两份文件后立即出错并且不再接受任何新的代码推送。

无论是回滚还是删除PDF文件都不起作用,SVN repo仍然无法使用,与镜像repo的同步也中止了。虽然工程师最终修复了问题,但WebKit团队不得不放弃在他们软件中检测SHA-1碰撞的想法。

SVN缺陷被确认

Google和Apache分别确认了SVN存在的问题。

Google在其SHA-1碰撞攻击网站上写道:“版本控制服务器会使用SHA-1进行重复数据删除。当两个[具有相同SHA-1而内容不同的]文件被提交到repo时,代码仓库就会损坏。 [...]我们注意到,在某些情况下,由于代码仓库损坏,用户无法再提交代码。”

Apache则在确认缺陷后不久发布了临时补丁,这个脚本可以在SVN checkout之前检查提交的源代码中有没有能够导致SHA1碰撞的文件。Apache表示会在将来提供更好的解决方案。

事实上SHA-1遭遇碰撞攻击后,人们就担心,使用SHA-1校验的代码仓库Git会不会存在被攻击的问题。版本控制系统Git的作者Linus Torvalds 在其Google+账号上,Git不会受这类攻击影响:使用加密哈希用作安全签名和用在诸如git的内容可寻址系统中生成“内容标识符”存在很大的区别;这个SHA1攻击的本质决定它实际上很容易缓解,已经有两组针对这个攻击的补丁;实际上有个直接过渡到一些其他的哈希方法。他还表示,Git 确实需要替换 SHA1,这需要时间,并不需要现在就去做。

365px-SHA-1.svg.png

专家:天还没有塌下来

Linus Torvalds针对谷歌完成SHA-1碰撞一事,在他的Google+帐号中说了一句话:天还没有塌下来。实际上很多专家们对安全形势也是持乐观态度的。

弃用SHA-1并不难

SHA-1最普遍的应用就是SSL/TLS连接的加密了,对于这个问题,各大浏览器厂商早已开始淘汰SHA-1算法了。早在2014年,Chrome浏览器就不再推荐SHA-1算法的浏览器证书,微软Edge浏览器Firefox浏览器都在计划逐步淘汰SHA-1算法。而作为厂商,升级SHA-1证书是应该做的事,而且也不那么难。

InfoSec Global公司CSO David Maxwell表示,SHA-1还可能潜伏在一些不那么普遍的地方。很多产品代码中可能会含有SHA1相关代码,比如CMS系统和代码控制系统会用SHA-1校验文件防止篡改,如果这些系统购买自第三方,那公司可以问问厂商是不是用了SHA-1、何时打算更换算法。

多余那些加密算法出现在代码中的情况,Maxwell称,如果代码具有足够的加密灵活性,那替换成更安全的算法也不会是难题。所谓加密灵活性通俗讲其实就是在代码中使用了别的模块来调用哈希函数,在这种情况下只需要简单地替换调用的模块就行了。

攻击成本高昂

Google与CWI公布的新方法比传统的暴力破解快了100,000倍。具体花费的时间与CPU和GPU有关,即使是拥有强大计算资源的Google,从研究、规划到计算也花了两年。

碰撞攻击的第一阶段花费740万美元,这还是假设CPU开足马力每时每刻在亚马逊上运行的情况,因此能够利用这个漏洞的人只可能是资源丰富的罪犯或者国家资助的黑客。英特尔的Jesse Walker估计,到2021年,制造SHA-1碰撞的计算硬件成本为43000美元。

因此,即便Google证明SHA-1算法是可以被攻击的,它离实际应用还差很远。