SHA-1是一个耻辱SHA-1是一个耻辱SHA-1是一个耻辱

我们计算了第一个SHA-1的chosen-prefix碰撞简而言之,这意味着SHA-1哈希函数将被彻底破坏,如果您仍在使用此哈希函数,则会产生危险的实际影响。换句话说:所有在MD5上实用的攻击现在在SHA-1上也实用。

检查我们的论文在这里了解更多详细信息。RWC的幻灯片也可以使用。

我们的贡献

复杂性改进

我们显著提高了SHA-1攻击的复杂性,加速因子约为10。更确切地说,我们已经将碰撞攻击的成本从2降低64.7至261.2以及chosen-prefix碰撞攻击的代价67.1至263.4(在GTX 970 GPU上)。

记录计算

通过这些改进,我们实现了整个chosen-prefix碰撞攻击。此攻击技术性极强,包含许多细节、各种步骤,并且需要大量工程工作。为了用较小的学术预算执行此计算,我们从GP用户权限而不是大型云提供商使用的数据中心粒度硬件。去年夏天,我们使用900个GPU(Nvidia GTX 1060)在两个月内成功运行了计算。

作为一个副作用,这表明现在破解安全级别为64位的加密(即计算264对称加密操作)。

PGP/GnuPG模拟

我们选择PGP/GnuPG Web of Trust作为我们针对SHA-1的chosen-prefix碰撞攻击的演示。信任Web是一种用于PGP的信任模型,它依赖于用户对彼此的身份证书进行签名,而不是使用中央PKI。出于兼容性原因,GnuPG(1.4版)的遗留分支在默认情况下仍使用SHA-1进行身份认证。

使用我们的SHA-1选择前缀冲突,我们创建了两个具有不同用户ID和冲突证书的PGP密钥:密钥B是Bob的合法密钥(将由信任Web签名),但签名可以传输到密钥a,该密钥是具有Alice ID的伪造密钥。由于冲突,签名仍然有效,但是Bob控制了名为Alice的密钥A,并由第三方签名。因此,他可以冒充爱丽丝并以她的名义签署任何文件。

我们选择的前缀冲突示例

我们创建了一个带有前缀的chosen-prefix冲突99040d047fe8178001200099030d047fe81780011800(以十六进制表示法)。您可以下载下面的两条消息,并使用沙伊苏姆工具:

选择前缀来构建两个具有冲突SHA-1认证签名的PGP公钥。您可以下载下面两个具有不同用户名的示例密钥,并使用pgp泵-i确保SHA-1签名由0xAFBB1FED6951A956是相同的:

为了避免恶意使用,密钥的创建日期在很久以后;如果你想用pgp分析它们,你可以使用选项--ignore-time-冲突--ignore-valid-from(一般来说,您可以在任意命令前面加上faketime@2145920400).

负责任的披露和影响

在宣布此次攻击之前,我们已尝试联系受影响软件的作者,但由于资源有限,我们无法通知所有人。

保密性卫兵

我们首先在2019年5月9日与GnuPG开发商讨论了此次攻击,并最终于2019年10月1日告知他们新发现的chosen-prefix碰撞事件。该问题通过CVE编号CVE-2019-14855进行跟踪。对策已在中实施提交edc36f5包括在GnuPG版本2.2.18(2019年11月25日发布)中:2019-01-19之后创建的基于SHA-1的身份签名现在被视为无效。

CA证书

CA证书是PGP密钥的主要CA之一。我们注意到,公共密钥服务器上有大量来自CAcert的带有最近SHA-1签名的密钥。这似乎表明他们仍然使用SHA-1对用户密钥进行签名。我们于12月14日首次通过电子邮件联系了他们,并于1月6日收到了回复,确认了这一问题。他们正在计划切换到安全散列函数以进行密钥认证。

开放SSL

我们于12月14日首次联系了OpenSSL开发人员。下一版本的OpenSSL将不再允许使用安全级别为1及更高的SHA-1签名的X.509证书(提交68436f0). 由于安全级别1是TLS/SSL的默认配置,因此这将阻止SHA-1用于证书。Debian Linux之前在最新版本(Debian Buster)中将默认配置设置为安全级别2(定义为112-bit安全);这已经防止了危险使用SHA-1。

打开SSH

OpenSSH(8.2)的最新版本包括“未来折旧通知”解释说SHA-1签名将在不久的将来被禁用。

DNSSEC公司

在我们的结果公布后,有人指出SHA-1仍在DNSSEC中使用18%的TLD使用SHA-1签名。建议任何使用SHA-1 DNSKEY算法(算法编号7或更少)的人都应该升级。请参见Tony Finch的相关页面IETF相关讨论

问答

什么是所选前缀冲突?

哈希函数H的经典冲突(或恒等前缀冲突)只是两条消息M和M',它们导致相同的哈希输出:H(M)=H(M')。尽管这种安全概念在密码学中是基本的,但在实践中利用经典冲突进行攻击是困难的。

选择前缀冲突是一种更受约束(且更难获得)的冲突类型,其中两个消息前缀P和P'首先被给予对手作为挑战,然后他的目标是计算两个消息M和M',使得H(P||M)=H(P'||M'),其中||表示串联。

有了这种能力,即使可以任意选择前缀(因此可能包含一些有意义的信息),攻击者也可以获得冲突。当在数字签名方案中使用哈希函数时,这一点尤其重要,这是哈希函数最常见的用法之一。

SHA-1真的还在使用吗?

过去几年,SHA-1的使用量显著下降;特别是web浏览器现在拒绝使用SHA-1签名的证书。然而,许多应用程序仍然支持SHA-1签名。SHA-1是GnuPG遗留分支中用于认证PGP密钥的默认散列函数,在我们报告结果之前,这些签名已被GnuPG的现代分支接受。许多非web TLS客户端也接受SHA-1证书,并且在TLS和SSH中仍然允许SHA-1用于协议内签名。即使实际使用率很低(大约为1%),允许使用SHA-1的事实也会威胁到安全性,因为中间相遇的攻击者会将连接降级到SHA-1。SHA-1也是GIT版本系统的基础。可能有许多不太为人所知或专有的协议仍在使用SHA-1,但这更难评估。

受影响的是什么?

当然,任何预期SHA-1具有防撞性的用途都有很高的风险。我们确定了一些直接受chosen-prefix碰撞影响的设置:

我们注意到经典碰撞和chosen-prefix碰撞并不威胁SHA-1的所有用途。特别地,HMAC-SHA-1似乎相对安全,到今天为止,SHA-1的预成像阻力(也称为反转散列函数的能力)仍未被破坏。然而,作为密码学家,我们建议在任何地方都不要使用SHA-1,即使没有直接证据表明这种弱点可以被利用。

我该怎么办?

尽快停止在产品中使用SHA-1SHA-256型SHA-3型

SHA-1已经被破坏了15年,所以没有充分的理由在现代安全软件中使用此散列函数。随着时间的推移,攻击只会变得更好,密码分析工作的目标是警告用户,以便他们可以在攻击实用之前否决算法。实际上,我们预计我们的攻击在几年内只需花费几千美元。

这次袭击要花多少钱?

通过在线租用GPU集群,整个针对SHA-1的chosen-prefix碰撞攻击花费了我们约7.5万美元。然而,在计算时,我们的实现并不是最优的,我们损失了一些时间(因为研究)。此外,自那以后,计算价格进一步下降,因此我们估计今天的攻击成本约为45000美元。由于计算成本持续快速下降,我们估计到2025年,在SHA-1上生成chosen-prefix碰撞攻击的成本应不到10k美元。

作为补充说明,SHA-1的经典碰撞现在仅需约11000美元。

难道还没有针对SHA-1的碰撞攻击吗?

如您所见,2017年末对SHA-1进行了经典碰撞计算在这里然而,这与chosen-prefix冲突非常不同,在chosen-pefix冲突中,任何前缀对都可能受到冲突的挑战,这在实践中会带来更严重的影响。

难道还没有针对SHA-1的选择性前缀冲突攻击吗?

去年,我们宣布了一种新的chosen-prefix碰撞攻击,如您所见在这里(一些测试代码(也可提供),该作品发表于2019年Eurocrypt会议。在这里,我们进一步改进了这些结果,使其达到了可以以合理的金额进行攻击的程度,并且我们编写了攻击的实际实现来计算针对SHA-1的chosen-prefix冲突。

我可以自己试试吗?

由于我们对SHA-1的攻击具有实际意义,为了确保采取了适当的对策,我们将等待一段时间,然后再发布允许生成SHA-1选择前缀冲突的源代码。

新闻报道


联系人

如果您有任何问题,请随时联系我们:

加丹·勒伦特:gaetan.leurent@inria.fr
托马斯·佩林:托马斯·佩林@ntu.edu.sg