为何Google急着杀死加密算法SHA-1

这是一篇转载的翻译文章。html

原文地址: http://www.freebuf.com/news/topnews/44288.htmlgit

google原文地址: https://konklone.com/post/why-google-is-hurrying-the-web-to-kill-sha-1github

 

Google官方博客宣布,将在Chrome浏览器中逐渐下降SHA-1证书的安全指示。但有意思的是Google.com目前使用的也是SHA-1签名的证书,但证书将在3个月内过时,Google将从2015年起使用SHA-2签名的证书。SHA-1算法目前还没有发现严重的弱点,但伪造证书所需费用正愈来愈低。web

概述

大部分安全的网站正在使用一个不安全的算法,Google刚刚宣称这将是一个长周期的紧急状况。算法

大约90%采用SSL加密的网站使用SHA-1算法来防止本身的身份被冒充。当你去访问网址时,保证了你正在访问的确实是正品Facebook,而不是把本身的密码发送给攻击者。然而不幸的是,SHA-1算法是很是脆弱的,长期以来都是如此。该算法的安全性逐年下降,却仍然被普遍的应用在互联网上。它的替代者SHA-2足够坚固,理应被普遍支持。chrome

最近谷歌声明若是你在使用Chrome浏览器,你将会注意到浏览器对大量安全的网站的警告会不断发生变化。浏览器

证书有效期至2017年的站点在Chrome中发生的变化安全

首批警告会在圣诞节以前出现,而且在接下来6个月内变得愈来愈严格。最终,甚至SHA-1证书有效期至2016的站点也会被给予黄色警告。并发

经过推出一系列警告,谷歌这正在宣布一个长周期的紧急状况,并督促人们在状况恶化以前更新他们的网站。这是件好事情,由于SHA-1是时候该退出历史舞台了,并且人们没有足够重视SHA-1的潜在风险。运维

若是你拥有一个使用SSL的网站,你可使用我建立的SHA-1测试小工具来测试你的网站,它会告诉你应该怎么作。即便你没有网站,我仍然推荐你去读一读。在接下来的博文,我会介绍网站上SSL和SHA-1是如何一块儿工做的,为何如谷歌说的那么紧急,和浏览器正在采起的措施。

一样重要的是,安全社区须要让证书更换过程少些痛苦和麻烦,由于网站的安全升级没必要那么紧急和匆忙。

FreeBuf科普:安全散列算法与SHA-1

安全散列算法(英语:Secure Hash Algorithm)是一种能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不一样,它们对应到不一样字符串的机率很高;而SHA是FIPS所认证的五种安全散列算法。这些算法之因此称做“安全”是基于如下两点(根据官方标准的描述):

一、由消息摘要反推原输入消息,从计算理论上来讲是很困难的。
二、想要找到两组不一样的消息对应到相同的消息摘要,从计算理论上来讲也是很困难的。任何对输入消息的变更,都有很高的机率致使其产生的消息摘要迥异。

SHA (Secure Hash Algorithm,译做安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散列函数。

SHA-1简介 

要理解替换SHA-1为何这么重要,首先把本身站在一个浏览器的角度上。

当你访问一个使用的网站,该网站向浏览器出示一个文件(相似于咱们的身份证)即一个SSL证书。这个证书用来作两件事:加密访问网站的链接,并验证网站真实身份。

任何证书均可以用来加密链接。可是为了验证你访问的是真实的Facebook(不是山寨的),你的浏览器必须经过某种方式决证书是否可信的,而后再向你显示一个绿色的小锁。

为了完成验证工做,你的浏览器查明网站的证书是否由权威机构(证书签发机构,简称“CA”)颁发的。CA向网站颁发证书文件一般是收费的。你的浏览器信任来自超过56个CA(根CA)建立和担保的证书,如Verisign、GoDaddy、美国国防部等,还有经由56个根CA的受权的成千上万的中间CA。如你所料,这是一个有很大缺陷的系统,但确实是实际状况。

 

在Chrome中点击网址前面的绿色小锁时所显示的内容

此网站的CA在当时是Comodo,经过Namecheap购买的。当网站的SSL证书宣称是本身由某个CA颁发给该网站时,你的浏览器须要进行另外一项关键的测试:此证书自己可以证实这个事实吗?

广泛状况下,互联网经过数学来证实事实。当一个证书被颁发时,CA经过使用一个私钥签名该证书提供了身份证实。从某种程度上说,只有真正的CA可以完成这个签名(除非私钥丢了,哈哈,我常常丢钥匙),而浏览器可以验证该签名。

可是CA实际上不签名原始的证书:它首先运行“单向散列”算法(如MD五、SHA-一、SHA-256)把证书压缩成一个惟一的字段。

Chrome浏览器中的证书片断

单向哈希算法可以压缩信息:例如,把《战争与和平》3.2MB版本经过SHA-1运算,你将获得:

baeb2c3a70c85d44947c1b92b448655273ce22bb

MD5file.com(一个有趣的在线哈希计算器)的运算结果

相似SHA-1,单向哈希算法被用来产生惟一的不可逆的数据块(原文为slug,弹头的意思)。你不可以再从aeb2c3a70c85d44947c1b92b448655273ce22bb反推出《战争与和平》的内容(即哈希运算不可逆)。一样重要的是,没有其余文件可以产生相同的数据块(即指纹具备惟一性)。甚至内容修改一小部分也会致使SHA-1运算的结果发生很大的变化,难以寻找先后的关联性。

若是两个文件通过同一个哈希运算生成相同的值,这种现象被称做是一个“碰撞”。碰撞具备理论上的可能性,但几率太低而被认为是在现实中是不可能存在的。

当浏览器遇到一个证书时,它会计算证书信息的SHA-1值,而后与被证书用做身份证实的原始SHA-1值做比较。由于SHA-1结果的惟一性,若是两个值是相同的,浏览器就确信提供的证书和CA签发的证书是同一个,没有通过篡改。

若是你设计了一个证书,可以与目标站点的证书发生碰撞,而后再诱骗CA给你颁发此证书。最终,你就可使用此证书来冒充目标站点,即便浏览器也没法区分真伪。

具体详情:若是你想要了解签名算法和SSL证书的具体细节,乔舒亚·戴维斯有一个极其详尽的解释,具体连接以下:
http://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art012

 

SHA-1攻击

在2005年,密码学家证实SHA-1的破解速度比预期提升了2000倍。可是破解仍然是极其困难和昂贵的。可是随着计算机变得愈来愈快和愈来愈廉价,在互联网上中止使用SHA-1算法只是时间的问题。

后来,互联网继续使用SHA-1。在2012年,Jesse Walker写了一份评估报告,关于伪造一个SHA-1证书所花费的成本。该评估参照亚马逊Web服务的价格和摩尔定律。

当时沃克预计一个SHA-1的碰撞在2012年需花费2,000,000美圆,在2015年需花费700,000美圆,在2018年需花费173,000美圆,在2021年需花费43,000美圆。基于这些数字,施奈尔暗示到2018年就会有犯罪集团可以伪造证书,到2021年就会有科研院校具有这种能力。

在有关更替SHA-1的规划和争论中,沃克的评估和施奈尔的推断被普遍的引用。一个由主流CA组成的组织:CA安全理事会(CA Security Council),近来使用沃克和施奈尔的结论来抱怨谷歌的时间表。CA把评估结果看成反驳的利器,认为 “等到2018年这种攻击才会实际出现”。

我发现CA安全理事会所采起的立场简直像卡通片同样幼稚。他们只像在掩饰问题,由于他们深知加快的更换过程给他们带来很大的不便(直白点就是时间和金钱)。

沃克和施奈尔的评估是在斯诺登事件以前,在人们弄明白原来政府也是敌人以前。基于他们的评估,在2014年伪造一个证书的成本要少于2000.000美圆,许多一线的明星大腕都能支付得起这个数目。

咱们怎么确信他们会这样作呢?由于他们已经作了。(反正给我这么多钱,我不是干这种傻事的)

 

卡巴斯基实验室监控到已感染火焰病毒的计算机

在2012年研究人员发现了大名鼎鼎的火焰病毒。华盛顿邮报报道这是美国和以色列的合做,用于从伊朗搜集情报,阻挠伊朗核武器计划。一份泄露的NSA文件彷佛证明了这一观点。火焰病毒依赖于一个伪造的SSL证书,实现了一个MD5(SHA-1的前任)的碰撞。使人不安的是,它使用了一个在当时不为人知的方法,尽管人们对MD5已经作了多年的研究。此事件给咱们的提示是,咱们应该假设最危险的漏洞是未知的。

关于MD5,有一个有趣的故事。由于像SHA-1同样,很早以前人们就发现MD5存在脆弱性, 并且和SHA-1同样,从互联网上移除MD5所花费的时间使人吃惊。

在1995年,MD5首次被披露存在理论上的脆弱性,并随着时间推移变得愈来愈脆弱,但直到2008年,MD5仍被一些CA所使用。

在Chrome中经过chrome://settings/certificates查看

虽然这是一个很危急的状况,但是一直到2011年Chrome仍然不能取消对MD5的支持-距离首次证实MD5不可信的时间已过去16年了。

在互联网上更换签名算法存在一个特有的挑战:只要浏览器支持SHA-1,任何人的证书均可能被伪造你可使用一个SHA-1签名的伪造证书来冒充一个SHA-2签名的证书,由于浏览器只会查看SHA-1签名的伪造证书,并不知道存在一个“真正的”证书或证书应该使用SHA-2签名。(简言之,为了冒充目标站点的证书,伪造证书的信息和目标站点的证书如出一辙,只是签名算法改成SHA-1)换句话说,防止利用SHA-1伪造证书的惟一方式就是浏览器取消对SHA-1的支持。

各浏览器的响应

微软是第一个宣布了SHA-1弃用计划,在2016年以后Windows和IE将再也不信任SHA-1证书。Mozilla也作了一样的决定。虽然微软和Mozilla向用户昭示了问题的存在性,但都没代表将要改变用户接口。

另外一方面,最近谷歌丢出一个爆炸性新闻,宣布由于SHA-1太脆弱了,Chrome浏览器会向用户显示警告:

 “咱们计划经过Chrome中Https安全指示器来强调SHA-1不能知足当初的设计要求的这一事实。咱们正在采起一种可量化的方法,逐渐下调安全指标器并逐渐推动时间表”

在两周前,谷歌的Ryan Sleevi首先公布了Chrome的预期策略。建议你们阅读一下完整的讨论过程,具体连接以下:

https://groups.google.com/a/chromium.org/d/msg/security-dev/2-R4XziFc7A/NDI8cOwMGRQJ

你会发现许多CA和大规模网站的运维人员露面,并试图和Ryan Sleevi进行辩论,由于Ryan Sleevi告诉他们如今就应该中止颁发脆弱的证书,而不是推迟到明年。

这是谷歌发起的一个大胆的举动,同时也伴随着巨大的风险。浏览器移除签名算法为何如此艰难,其主要缘由是:当浏览器告诉用户一个重要的站点存在风险时,用户却认为浏览器出问题了,而后去更换浏览器。谷歌彷佛在打赌用户对Chrome的安全性足够信任和对Chrome足够的喜欢,以至可以接受该计划带来的不便。(毕竟是第一个吃螃蟹,向谷歌致敬!)

Opera 表示支持谷歌的计划。Safari团队正在观望(俗称“围观群众”)并未表态。

指导建议

为了帮助迁移,我搭建了一个小型站点www.shaaaaaaaaaaaaa.com,用于检查你的站点是否使用了SHA-1,以及是否须要更新。

字母A的数目是一个不可预测的大素数(做者为啥选择个数字让我费解,也许你能告诉我答案!嘿嘿)

你须要提交一个新证书请求,让你的CA颁发一个使用SHA-2的新证书。使用你现有的私钥:

openssl req -new -sha256 -key your-private.key -out your-domain.csr

其中-sha256标志会使用SHA-2签名CSR,但CA才能决定是否向你颁发一个使用SHA-2签名的证书。我一直在关注有关从不一样的CA得到SHA-2证书的问题和解决方案。若是你遇到的问题在网站上没有提到,请在这里反馈,我会及时更新网站。

你可能更新全部的SHA-1中间证书,由于它们也需经过数字签名来验证。这也就意味着你要追踪你的CA是否颁发了SHA-2中间证书,并发向哪里了。我也一直在追踪不一样的CA颁发的SHA-2中间证书的位置。若是你发现了网站上未提到的,或者你的CA没有中间证书的话,也请在这里反馈。

若是你有一个站点,但其余公司控制着证书,你能够向他们的客服发送邮件告知。发送谷歌声明的链接,并询问他们的时间表。固然我也须要一些帮助,你若是愿意的话,查看网站上的开放问题,助我一臂之力。

SHA-1根证书:你没必要担忧浏览器自带的SHA-1根证书,由于它们的完整性不是经过数字签名验证的。

结论

这种推进SHA-1退役的计划早就应该启动了。随着压力不断被放大而引起的全部麻烦应该被导向到CA,而不是让谷歌做替罪羊,由于长久以来CA都不能采起有效的措施。

对于我的而言,得到证书应该像购买域名同样容易,安装它应该向打开一个网站那样简单,并更换它可以实现自动化。这些思路提供了一些很是明确的商业机会和开源工具的需求。 

对于组织,在他们的基础设施的设计和更新过程当中,频繁的证书轮换是须要优先考虑的。出色完成这项工做的组织应该广开言路,共享他们的工做成果。 

与此同时,网站经营者应该更新证书和利用暂无像Heartbleed级别的紧急状况为契机,从新审视本身的SSL配置,并开启“正向加密”(forward secrecy)之类的配置。

[参考信息来源 Why Google is Hurrying the Web to Kill SHA-1 ,内容有所删减,尽可能保留了原文本意。译自Rabbit_Run,喜欢文章请点赞鼓励。转载请注明来自FreeBuf.COM]

相关文章
相关标签/搜索