前几天,
Google 破解 SHA-1 算法的新闻刷了我的朋友圈。
其实“破解”二字不太准确,实际应该是
公布了一个攻破SHA-1算法的实例。
对此新闻,
我看到了两种不同的评论:
A:哇好牛X呀,居然破解了SHA-1加密算法,世界好危险,我要不要回火星?
B:谷歌这次只是花费了大量的计算资源,验证了一下破解算法,没啥可牛X的。本大爷几年前就知道 SHA-1 算法不安全了。。
今天宅客频道本着求真的精神,
今天就来好(sui) 好 (bian) 聊聊:
一、谷歌此次成果到底意义何在?
二、谷歌为啥要搞出这么大动静?
先还是简单科普一下哈希算法。
我们知道,每个人的指纹都不一样,
所以能用指纹来验证人的真伪。
(孙猴子除外)
在计算机系统中,
每个不同的文件内容也有自己的指纹——哈希值
用来计算哈希值的方法有很多,
比如 SHA-1、SHA-2、MD5 等等
它们统称“哈希算法”。
苍老师有部作品叫 挑発エロティック.avi ,
用 SHA-1算出的哈希值是 :
basb2c3a70c85d44947n1292b458655273ce22bb
如果你下载的 挑発エロティック.avi
哈希值不一样,
很可能你会被忽悠下载了葫芦娃全集。
简单来说,哈希值就是数字世界的指纹。
那么问题来了,
虽然概率极低,但是
两个人的指纹还是有可能完全相同,
两个文件的哈希值也有可能相同。
也就是说,
只要我找到和马云爸爸指纹相同的人,
就有可能盗走马云爸爸的财产;
只要构造一个和AV的哈希值相同的视频文件,
就能成功忽悠你下载葫芦娃全集。
其实谷歌这次就干了这么一件事。
他们成功构造了两个不同的PDF文件,
SHA-1 哈希值完全相同。
那么这意味着什么呢?
谷歌官方是这么说的:
我们从应用角度破解了SHA-1。
这一工业界应用的密码学哈希函数标准被用于数字签名、文件完整性验证中,并在多个领域保护着人们的数字财产,这些数字财产包括信用卡交易、电子文档、开源软件仓库、软件更新等。
在实际中,我们可以构造两个SHA-1结果相同的PDF文件。这使得第二个文件SHA-1后的数字签名可以通过第一个文件SHA-1后数字签名的验证。
举例来说,可以构造两个SHA-1结果相同的PDF租赁协议文件,协议文件中标注的租金不同,但高租金文件的SHA-1后签名结果与低租金文件的SHA-1后签名结果一样。这样,可以让租赁方在低租金文件上签字,再用高租金文件替换,达到伪造租赁协议文件的目的。
之所以有的朋友觉得谷歌这个结果,
不牛X,不令人“震精”。
是因为 SHA-1 很早就从理论上被证明能破解了,
只是计算量极大,成本比较高。
2005年,
我国密码学专家王小云教授,
联手姚期智夫妇,
提出了一种破解方法,
将破解SHA-1 的时间从2^69步到2^63步,
让中国密码界闪耀在世界舞台。
【王小云教授】
上文所说的姚期智就是前不久和杨振宁一起放弃外籍转为中科院院士的那个图灵奖得主姚期智。
【姚期智】
那次的研究结果,
让国家标准技术局 NIST 不得不着手选择新 SHA-2 系列哈希函数。
但由于破解的成本太高
SHA-1 依然在广泛应用
之后,
学者们一直努力寻找更高效的破解方法。
2013年,
一个叫Stevens的小伙将破解计算量降低到 2^61步
2016年,
他再一次将计算量降低到2^57.5 步,
此次谷歌就借鉴了他的破解方法。
利用这种方法,
100个GPU大约需要计算一年就能破解,
大概得花个几十万美元,
成本确实不低,
但对于国家机构、高级黑客组织来说,
简直就是毛毛雨。
对于这次成果的意义,
我认为更多的还是敲响警钟
就好比人们知道弱口令不安全,
但只有当一个个盗号事件发生在他们身边,
人们才会真正学乖。
那么就到了第二个问题:
谷歌为什么一直不惜代价来推动SHA-1算法灭亡?
据宅客频道所知
有很多采用SSL加密的网站
使用SHA-1算法来防止自己的身份被冒充。
当你去访问网址时,
能保证了你正在访问的确实是正品Facebook,
而不会把自己的密码发送给攻击者。
为了完成验证工作,
你的浏览器会查明网站的证书是否由权威机构颁发的。
(证书签发机构,简称“CA”)
浏览器验证证书有这么一个过程:
当浏览器遇到一个证书时,
它会计算证书信息的SHA-1值,
然后与被证书用作身份证明的原始SHA-1值作比较。
如果两个值是相同的,
浏览器就确信提供的证书和CA签发的证书是同一个,
没有经过篡改。
如果你设计了一个证书,
能够与目标站点的证书发生碰撞,
然后再诱骗CA给你颁发此证书。
最终,你就可以使用此证书来冒充目标站点,
即使浏览器也无法区分真伪。
证书欺骗过程
其实就跟我忽悠你下载葫芦娃全集有点像。
现在SHA-1不安全了,有两种解决方法:
1. CA颁发的证书不再支持SHA-1校验
2. 浏览器不再支持 SHA-1 校验
但是,
在 SHA-1 算法之前,同样有个叫MD5的算法,
在1995年,就披露存在理论上的脆弱性,
但直到2008年,MD5仍被一些CA所使用。
好了,指望CA来淘汰SHA-1是没希望了。
那么,防止利用SHA-1伪造证书
只能用另一个方式:
浏览器取消对SHA-1的支持。
两三年前,谷歌就宣布因为SHA-1太脆弱了,
计划Chrome浏览器向用户显示警告
虽然微软、Mozilla(火狐)也很早发布了相关的计划
但实际冲在最前头的,依然是谷歌。
浏览器们这么做,
会让自己面临一个尴尬的情况:
当浏览器告诉用户一个重要的站点存在风险时,用户会认为浏览器出问题了,然后去更换浏览器。
就像你在上大人网站时,如果浏览器告诉你这个网站不安全,不允许你观看,90%的情况下,会点击继续访问,或者换个不打扰的浏览器继续访问。
至此,也就解释了,
谷歌之后为什么一直在不停地向大家传递一个消息:
SHA-1 不安全了! 赶紧换呀! 浏览器厂商们快加入反抗队列呀~
冲得太靠前,队友没跟上,有些心虚。
(话说,Safari团队至今还没对SHA-1这事儿表过态)
不过总的说来,谷歌能够第一个吃螃蟹,推动加密算法应用的迭代,提升整体网络安全状况,还是非常值得致敬!应该全力支持的!
注:以上内容参考了这些内容:
知乎问答:《如何评价 2 月 23 日谷歌宣布实现了 SHA-1 碰撞?》中刘巍然-学酥 的回答;
Freebuf 2014年 Rabbit_Run 翻译的文章:《为什么Google急着杀死加密算法SHA-1》
宅客漫谈是雷锋网宅客频道最近开始的一个小栏目,以轻松无拘束的形式和读者聊聊最近发生的安全大事件,文章首发于雷锋网旗下公众号:宅客频道(ID:letshome) 。嗯,这是我们的一个尝试,你看到的不是假的雷锋网。