BT

你的观点很重要! 快来参与InfoQ调研吧!

Google宣布攻破SHA-1,从此SHA-1不再安全!

| 作者 Marc Stevens 关注 0 他的粉丝 发布于 2017年2月24日. 估计阅读时间: 4 分钟 | ArchSummit社交架构图谱:Facebook、Snapchat、Tumblr等背后的核心技术

A note to our readers: As per your request we have developed a set of features that allow you to reduce the noise, while not losing sight of anything that is important. Get email and web notifications by choosing the topics you are interested in.

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等存在一定缺陷的散列算法的情况下,拥有充裕资源的攻击者确实能够实现这种碰撞结果。攻击者随后可以利用碰撞欺骗依赖于散列机制的系统,引导后者将原本的良性文件替换为拥有同样摘要的恶意文件——例如两份内容完全不同的保险合同。

寻找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-1碰撞风险

着眼于未来,安全从业者比以往更为迫切地需要转而使用更加安全的加密散列算法,例如SHA-256与SHA-3。根据谷歌公司的漏洞披露政策,我们将在发布代码之前等待90天,且允许任何创建两份拥有相同SHA-1散列摘要但图像内容彼此不同的PDF文档,同时遵循一部分前提条件。为了防止此类攻击手段被主动使用,我们为Gmail及G Suite用户提供额外的保护措施,供其检测我们的PDF碰撞技术。另外,我们也在为公众提供一套免费的检测系统。

感兴趣的朋友可以点击此处了解更多与SHA-1攻击以及我们研究技术成果相关的细节信息。

原文链接:Announcing the first SHA1 collision

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

散列函数描述有误 by chen yanpan

散列函数能够将大量数据压缩为体积更小的消息摘要。

散列函数是从数据中提取消息摘要,不是压缩。

Re: 散列函数描述有误 by Guo Gary

您好,这是Wiki的解释:
散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。

这里是英文原文的描述:

Hash functions compress large amounts of data into a small message digest.

综上,文章描述的,应该没问题。

Re: 散列函数描述有误 by SIO RoamWonder

Compress也有扼要归纳的意思,不仅仅翻译成“压缩”,从Wiki原文的digest来说,翻译成“扼要归纳”这一类可能更恰当。

Re: 散列函数描述有误 by 杨 振涛

感谢建议。
作为通俗的解释,翻译成“压缩”是可以接受的;从更加严谨的技术角度,确实还有待改进。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

4 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT