最近密码学家盖坦.勒伦(GatanLeurent)和托马.佩林(ThomasPeyrin)宣布已经对SHA-1成功计算出第一个选择前缀冲突并对利用相关成功撰写了论文。这表明了SHA-1哈希已经被完整而实在的攻破,如果还在使用该哈希函数,将带来具有严重的风险:所有适用于MD5的攻击现在也适用于SHA-1。下面我们一起来看看他们的研究和结论。
SHA-1选择前缀冲突研究
我们都知道针对SHA-1的碰撞攻击,之前早有谷歌团队于宣布可操作的生成冲突的技术,并证明攻击的方法,但是该攻击依赖了谷歌大规模计算群并不具备通用性,而且时间和成本较大。
这次由盖坦.勒伦(GatanLeurent)和托马.佩林(ThomasPeyrin)主导的研究则利用SHA-1选择前缀冲突,极大提高了SHA-1攻击效率,将加速因子提高了大约10倍。研究使用GTXGPU计算条件下碰撞攻击的成本从2^64.7降低到26^1.2,选择前缀碰撞攻击的成本从2^67.1降低到2^63.4。
通过改进,实施了整个选定的前缀冲突攻击。这种攻击是非常具有技术性的,包含许多细节,各个步骤,并且需要大量的工程工作。为了节省成本、以较少的学术预算进行计算,他们从GPUserversrental租用了下便宜的游戏或采矿GPU,没有使用大型云提供商的数据中心级硬件。在19年夏天,已经使用个GPU(NvidiaGTX)计算了两个月。计算结果表明现在以64位安全级别破解密码(即计算个对称密码的操作)的成本不到10万美元。
PGP/GnuPG模拟和攻击示例
他们选择了PGP/GnuPG信任网络来演示SHA-1的前缀冲突攻击。WebofTrust是PGP的信任模型,该模型依赖用户彼此签名的身份证书,而不是使用中央PKI。出于兼容性原因,默认情况下,GnuPG(1.4版)的旧分支仍默认使用SHA-1进行身份认证。使用SHA-1选择前缀冲突,创建了两个具有不同UserID和冲突证书的PGP密钥:密钥B是Bob的合法密钥(由WebofTrust签名),但是签名可以转移伪造的AliceID签名的密钥A。由于哈希冲突,该签名仍然有效,这样Bob可以用Alice的名字控制密钥A,并通过第三方签名。因此,Bob可以冒充Alice,并以她的名字签署任何文件。
示例
研究创建了一个带有前缀dfe和dfe(以十六进制表示)的选择前缀冲突。大家可以下载以下两条消息,并使用sha1sum工具验证其哈希值:
messageA(sha-mbles.github.io/messageA)
messageB(sha-mbles.github.io/messageB)
sha1sum验证:
sha1summessageAsha1summessageB
8ac60ba76fa1abfaefdc78d4ddc0messageA
8ac60ba76fa1abfaefdc78d4ddc0messageB
已选择前缀来构建两个具有冲突SHA-1认证签名的PGP公钥。可以在下载以下两个具有不同用户名的示例密钥,并使用pgpdump-i检查它们,以查看由0xAFBB1FEDA发出的SHA-1签名是否相同:
alice.asc(sha-mbles.github.io/alice.asc)
bob.asc(sha-mbles.github.io/bob.asc)
为了避免恶意使用,密钥的创建日期很远。如果要使用pgp分析它们,则可以使用--ignore-time-conflict--ignore-valid-from选项,可以给命令前添加falsetime
作为前缀)。相关系统漏洞情况
GnuPG
在年5月9日以及GnuPG开发人员讨论了这种攻击,并在年10月1日将新发现的选定前缀冲突发出通知。问题的CVE编号为CVE--。GnuPG2.2.18版(年11月25日发布)中包含的edc36f5提交中已采取策略:对-01-19之后基于SHA-1创建的身份签名视为无效。
CAcert
CAcert是PGP密钥的主要CA之一。在公共密钥服务器上,有大量带有CAcert最新SHA-1签名的密钥。在12月14日通过电子邮件联系,并在1月6日收到确认此答复。CAcert正计划切换到用于密钥认证的安全哈希功能。
OpenSSL
已于12月14日联系OpenSSL开发人员。已经在安全级别1(定义为80位安全性)禁用SHA-1。由于安全级别1是默认配置,该设置可以防止SHA-1用于证书和握手签名。DebianLinux先前已在最新版本(DebianBuster)中将默认配置设置为安全级别2(定义为位安全),可以防止危险使用SHA-1。
相关问题
前缀选择冲突
哈希函数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的现代分支所接受。许多非WebTLS客户端也接受SHA-1证书,并且TLS和SSH中的协议内签名仍允许使用SHA-1。即使实际使用率较低(约1%),这也会形成安全威胁,因为中间相遇的攻击者会先将连接降级为SHA-1,然后伪造证书攻击。SHA-1也是Git版本控制系统的基础。还有许多鲜为人知或专有的协议仍在使用SHA-1,但这很难评估。
攻击成本
研究通过在线租用GPU集群,对SHA-1进行的整个所选前缀冲突攻击,耗费总共约7.5万美金。但是,在进行计算时没有特别优化,不是最佳算法实现。并且为了研究浪费额外的计算时间。如果去除这些影响,目前可以把攻击成本控制到4.5万美元。随着计算成本持续快速下降,预计到年在SHA-1上生成选定前缀冲突攻击的成本应该能降低到1万美元。
已有的SHA-1的碰撞攻击
在年SHA-1已经发生过计经典碰撞攻击,但是与选择前缀冲突攻击大不相同,后者可以对任何前缀对进行挑战,这在实践中会导致更为严重的影响。
针对SHA-1选择前缀冲突攻击
研究者已经宣布了一种新的选择的前缀冲突攻击,并且已在Eurocrypt大会上发布了。攻击已经现在已经做了改进,可以在一定成本下进行攻击,并且编写了针对SHA-1的选定前缀冲突攻击的实际实现。为了避免被恶意利用会将等待一段时间后再发布相关的代码。
总结
影响
任何希望从SHA-1获得耐碰撞性的用途都具有很高的风险。可能受所选前缀冲突直接影响一些案例:
如果第三方生成和使用SHA-1密钥认证,则可以伪造PGP密钥
如果某些证书颁发机构颁发具有可预测序列号的SHA-1证书,则X.证书可能会被破坏。
经典冲突和选择前缀冲突不会威胁SHA-1所有使用场景。比如,HMAC-SHA-1似乎相对安全,并且直到今天,SHA-1的原像抵抗性(即反转哈希函数的能力)仍然保持不变。但是建议在所有地方都弃用SHA-1,即使还没有证据可以直接利用。
建议
产品中避免使用SHA-1,对已经使用的,尽快升级换用SHA-或SHA-3或者ECDSA。
SHA-1破解已经有15年,因此没有充分的理由在现代安全软件中再使用该哈希函数。随着时间的流逝,攻击只会变得越来容易,密码分析工作的目标是警告用户,以便他们可以在攻击变得实用之前就弃用算法。