Google 宣布攻破 SHA-1 加密:对互联网安全来说意义重大!
今天谷歌破解了一种名为SHA-1的老式加密算法,尽管此事听起来不像是网络安全界最重大的里程碑。但是此事意义重大,因为SHA-1已在互联网上广泛使用了很长一段时间,主要用来核检在互联网上传送的数字内容的真实性。
想了解谷歌做了什么,我们就得先来了解SHA-1是什么东西。它被称为“加密哈希函数”(cryptographic hash function)。也就是说,这是一种数学算法,它拿来数字对象后,将其转换成“摘要”(digest)即哈希,摘要只是用来表示该对象,可能是文件,也可能是消息。哈希其实就是一个字符串,在SHA-1的情况下,它是40个字符。看起来就像这样:988881adc9fc3655077dc2d4d757d480b5ea0e11。感谢安全研究员安德烈亚斯·林德(Andreas Lindh)给了我这番简化的解释和这个哈希例子,那是他创建的一个测试文件的哈希。
现在,该哈希应该是唯一的,只表示那一个文件。相同的文件会有相同的哈希。但是人们应该不可能做到创建一个完全不同的文件,却让SHA-1为它赋予同样的哈希。但是使用一些极其强大的数学和计算能力,谷歌以及阿姆斯特丹的CWI研究所的研究人员对于两个不同的PDF文件恰恰做到了这点。这就叫“碰撞”(collision),这种攻击确实很罕见。
数学如何转化为攻击?不妨假设第二个文件是恶意软件或伪造的文档,比如旨在保证网站(比如Google.com)的真实性的证书。攻击者可以让其恶意软件或假冒网站得到检查SHA-1哈希以验证的任何系统的信任。林德特别指出:“另一种使用场合是,如果你在自己的计算机上使用应用程序白名单机制,它使用哈希来验证文件就是它们声称的文件,恶意软件文件有可能拥有与比如Word或另外某个可信任应用程序同样的哈希。”
谷歌演示了碰撞攻击是什么样子。
无需恐慌
由于这种广泛部署的老式算法被破解,并不意味着人们需要恐慌。一段时间以来,各大互联网公司已不看好SHA-1,不会使用它来执行那些验证过程。比如说,Chrome浏览器会自动将使用SHA-1签名的任何SSL证书标记为不安全。
谷歌命名的这种Shattered攻击在SHA-1仍然可信的某些场景下才会得逞。比如说,GnuPG电子邮件加密认为它很安全。与此同时,正如安全专家凯文·博蒙特(Kevin Beaumont)特别指出,微软仍然依赖SHA-1,即便它在逐步淘汰这种算法。
凯文·博蒙特在2017年2月23日发布了这个帖子:
一个有趣的事实是,面向Windows的弃用SHA-1的补丁本该在这个月早些时候发布,但是由于质量原因被搁置了。
微软之前宣布计划在今年年中之前淘汰SHA-1。出现了这件事后,微软会步谷歌的后尘,以便其Internet Explorer和Edge两种浏览器防止由SHA-1证书保护的网站加载,并且会显示警示内容。Windows 10的下一个版本在浏览器中也会默认阻止SHA-1。Firefox也计划今年这么做。
微软发言人说:“今天的新闻进一步证明了SHA-1的实用寿命走到头了,这是加密技术的平常生命周期的一部分。自2012年以来,微软就与业界合作,逐步停止使用SHA-1。微软Edge和IE 11不认为使用SHA-1证书的网站是安全的,所以不在浏览器的地址栏中显示用来表示安全网站的挂锁图标。”
谷歌仍然认为其研究应该会促使仍在使用这种算法的所有公司远离长期以来被认为安全性很差的SHA-1。谷歌的博文声称:“我们希望,我们针对SHA-1的实际攻击会最终让业界相信,改用像SHA-256这些更安全的替代加密标准是当务之急。”
搞明白一点,凡是想要实际发动攻击的人都需要异常强大的计算能力。研究人员当初不得不使用相当于6500年的CPU计算和110年的GPU计算,才完成该攻击手法的两个阶段,执行的SHA-1计算次数多达9223372036854775808次。不过谷歌很快会告诉世人他们到底是如何开展这项研究的,这使攻击实现的可能性增加了一点。该公司补充道:“我们会等待90天,之后发布让任何人都可以创建让SHA-1为两篇PDF文档赋予相同哈希的代码。”
英国萨里大学的密码专家艾伦·伍德沃德(Alan Woodward)表示,不过在未来,预计其他类似的哈希算法也会式微。他说:“实际上,这表明,由于计算能力自一些比较老式的哈希算法问世以来已大幅提升,老式算法很容易受到这种类型的攻击:只要想想现在可供我们使用的计算能力比SHA1刚亮相的十年前多多少,我们就知道,这一幕早晚会到来,今天确实到来了。”
以下内容来自“聊聊架构”公众号:(ID:archtime)翻译自谷歌官方博文。
SHA-1等加密散列函数可谓加密学家手中的瑞士军刀。无论是浏览器安全保护、代码库管理乃至检测存储介质的重复文件,散列技术都在其中发挥着重要作用。散列函数能够将大量数据压缩为体积更小的消息摘要。作为一项被广泛使用的加密方案,其最基本的要求就是在当前计算能力上无法找到摘要相同的两条消息。然而随着时间的推移,这一要求很可能在针对散列函数数学基础的攻击或者计算能力提升等因素的冲击之下不再具有保障。
时至今日,距离SHA-1的最初发布已经过去了十年,我们正式公布第一套可实现碰撞的实用性技术方案。这套方案代表着阿姆斯特丹CWI研究所与谷歌公司过去两年中的合作研究成果。我们总结了如何着手生成一个下文所介绍的碰撞。另外,作为本次攻击活动的概念验证证明,我们还发布了两份具有相同 SHA-1哈希值但内容并不相同的PDF文件(点击文末阅读原文获取链接)。
对于技术业界而言,我们的发现强调了避免使用SHA-1的必要性。谷歌公司多年来一直主张弃用SHA-1方案,特别是在TLS证书签署等场景之下。早在2014年,Chrome小组就宣布将逐渐淘汰对SHA-1的使用。我们希望自己针对SHA-1完成的实际攻击能够进一步巩固这一结论,让更多人意识到其已经不再安全可靠。
我们亦希望这一针对SHA-1的实际攻击案例能够最终说服整个技术业界尽快转向更为安全的替代性方案,例如SHA-256。
当两组不同的数据——可以作为文件、二进制文件或者网站证书存在的哈希值如上图所示具有相同的摘要内容时,即视为二者发生碰撞。实际上,安全的散列函数不应存在这种碰撞现象。然而,在使用SHA-1等存在一定缺陷的散列算法的情况下,拥有充裕资源的攻击者确实能够实现这种碰撞结果。攻击者随后可以利用碰撞欺骗依赖于散列机制的系统,引导后者将原本的良性文件替换为拥有同样摘要的恶意文件——例如两份内容完全不同的保险合同。
2013年,Marc Stevens曾发表一篇论文,专门介绍了创建SHA-1碰撞的理论性方法。我们首先创建了一份专门作的PDF前缀,用以生成两份拥有任意不同内容的文档,但二者同时具备相同的SHA-1摘要。不过要在实践中重现这种理论性攻击,我们必须克服一系列新的挑战。此后,我们利用谷歌的技术专长与云基础设施计算碰撞情况,这也是我们截至目前已完成的规模最大的计算任务之一。
下面这些数字应该能让大家更为确切地感受此次计算任务的规模水平:
总计900万兆(即百万的五次幂,具体为9,223,372,036,854,775,808)次SHA1计算。
要完成攻击的首个阶段需要单一CPU计算6500年。
要完成攻击的第二阶段需要单一GPU计算110年。
虽然这些数字看似非常巨大,但SHA-1破坏性攻击的速度仍然较暴力破解攻击快10万倍,这意味着前者确实具有可行性。
着眼于未来,安全从业者比以往更为迫切地需要转而使用更加安全的加密散列算法,例如SHA-256与SHA-3。根据谷歌公司的漏洞披露政策,我们将在发布代码之前等待90天,且允许任何创建两份拥有相同SHA-1散列摘要但图像内容彼此不同的PDF文档,同时遵循一部分前提条件。为了防止此类攻击手段被主动使用,我们为Gmail及G Suite用户提供额外的保护措施,供其检测我们的PDF碰撞技术。另外,我们也在为公众提供一套免费的检测系统。
感兴趣的朋友可以点击此处了解更多与SHA-1攻击以及我们研究技术成果相关的细节信息(点击文末阅读原文获取链接)。
此项成果为CWI研究所与谷歌安全、隐私与反滥用研究小组间长期合作的产物。
Marc Stevens与Elie Bursztein 率先合作利用谷歌基础设施并根据Marc提出的SHA-1加密攻击理论进行相关实践。 Ange Albertini 负责此PDF攻击的具体开发工作,Pierre Karpman 负责密码分析与GPU实现工作,Yarik Markov 负责分布式GPU代码编写,Alex Petit Bianco 负责构建碰撞检测工具以保护谷歌用户,Clement Baisse则负责监督相关计算任务的可靠性。