Google去年在一次称为“粉碎”的攻击中成功在SHA-1中发生了碰撞。这个事实会使基于RSA-SHA1签名的证书具有创建欺诈证书的风险吗?

如果RSA-SHA1签名仍然安全,那为什么会这样(因为攻击者没有私钥)? br />

#1 楼

答案是“不安全”。

但是,无论Google受到什么攻击,它都不安全。在Google发起攻击之前,我们知道SHA-1不是最佳选择。

Google在SHA-1上基于一些现有的,众所周知的碰撞
攻击发现了一次碰撞。有关先前工作的完整列表,请参见Google论文的介绍。首先,让我简要解释一下RSA-SHA1签名的工作原理。下面的说明是从W3C的介绍RSA-SHA1的页面改编而成的。


消息$ m $通过SHA-1压缩为固定长度的字符串$ h = \ mathsf {SHA1 }(m)$。
RSA签名方案(通过PKCS#1进行填充)在$ h $而非$ m $上创建签名。 $ \ sigma = \ mathsf {RSASignPKCS \#1} _ \ mathsf {sk}(h)$。

如果SHA-1被完全破坏,我们希望可以找到$ m_1 $和$在可能的资源约束下具有相同哈希值的m_2 $:$ \ mathsf {SHA1}(m_1)= \ mathsf {SHA1}(m_2)$。在这种情况下,它们具有相同的$ h $。 $ m_1 $的RSA-SHA1签名也是$ m_2 $的RSA-SHA1签名。


现在我举一个为什么失败的例子。 (更正的示例,感谢@ peter-green)

我是randomwebsite.com的网站所有者。
我想让VeriSign为cvs.com签署证书。

因此,我使用碰撞攻击生成了两个证书。


randomwebsite.com的证书。
cvs.com的证书。

这两个证书具有相同的哈希值。

我有一个CA对randomwebsite.com的证书进行签名。

现在,如果您具有由CA通过RSA-SHA1签名的randomwebsite.com证书,则该证书具有该哈希的签名。此签名也可以在cvs.com的证书中使用。

您可以将签名应用于伪造的cvs.com证书。与真正的cvs.com证书不同,对于这一证书,您具有与证书中的公钥关联的私钥。

可以在另一篇文章中找到更详细的讨论。


SHA-1故事的一个教训:


始终使用MOST高级加密技术。我们知道SHA-1存在一些问题,并且有SHA-256,SHA-512和其他替代它。






没有任何理由坐在老虎的前面。
感谢约书亚,Squeamish Ossifrage和彼得·格林。

评论


$ \ begingroup $
评论不用于扩展讨论;此对话已移至聊天。
$ \ endgroup $
– SEJPM♦
18年7月9日在16:08

#2 楼


这个事实是否会使基于RSA-SHA1签名的证书具有创建欺诈证书的风险?


不是真的。可以创建具有相同SHA1哈希的一对“文件”(严格为字节序列)。如果这些文件之一已签名,则攻击者可以将签名移植到另一个文件中,因为它们的哈希值匹配。

这与前映像攻击不同,在前映像攻击中,攻击者生成了一个文件来进行匹配现有哈希。图像前攻击比碰撞攻击难得多。即使是古老的MD5也没有已知的在计算上可行的原像攻击(它的理论上比蛮力还强一点)。

但是,并不是所有的碰撞攻击都一样。通常,在最简单的碰撞攻击中,“好”文件和“邪恶”文件是相同的,只是少量的随机外观垃圾。由于许多哈希算法的结构,如果对好文件和坏文件进行了相同的更改,则在冲突垃圾之前更改数据将打破冲突,但在冲突垃圾之后不会更改冲突。

此类攻击可以与pdf等奇特的格式结合使用,以生成具有相同哈希值但用户可见内容不同的一对文档。构造一个通用的标头,然后发现冲突,然后构造一个通用的预告片,它根据碰撞块的内容显示不同的信息。

由于几个原因,攻击CA很难。


CA通常不会对用户提供的任意证书进行签名,而是先生成证书然后再对其进行签名。证书的某些部分由用户控制,但不是全部。特别是,证书在证书的早期包含“序列号”。 CA的最佳做法是使用随机序列号。
证书的格式不如pdf格式灵活。

这样的结果是,要切实地攻击CA,您需要“独特的选择前缀冲突”攻击,而不是简单的冲突攻击。您还需要能够猜测“序列号”。

谨慎地使用具有已知缺陷的散列函数是可行的,但是仍然存在一些夸张的情况。

评论


$ \ begingroup $
我知道,如果欺诈证明是根证明怎么办? (因此可以构造证书的副本)
$ \ endgroup $
–adi
18年7月9日在5:52

$ \ begingroup $
@adi:不,因为这是第二次原像攻击。据我所知,尚无任何关于SHA1的已发布可行的第二次原像攻击。
$ \ endgroup $
–凯文
18年7月9日在6:29

$ \ begingroup $
“ CA通常不会对用户提供的任意证书进行签名,而是先生成证书然后再对其进行签名。”我想我们应该补充一点,“ CA”会以一种无法预测的方式更改证书?
$ \ endgroup $
–陈伟ik
18年7月9日在15:33

#3 楼

不,不再使用SHA-1是不安全的。 CA现在使用SHA-256。冲突意味着两条消息产生相同的哈希值。在计算签名时,将对消息进行哈希处理,然后使用私钥生成签名。如果两条消息具有相同的哈希值,则一条消息可以获取一条消息的签名,并声称它是另一条消息的签名。如果是这种情况,那么数字签名提供的许多安全属性(如完整性,身份验证,不可否认性)将消失。

实际上,自2004/5年以来,SHA-1就一直被认为是不安全的,这是NIST在新哈希函数方面的竞争的主要推动力,从而催生了新的SHA-3标准。 br />
当前许多组织仍在使用SHA-1证书。但这只是时间问题,迟早人们会像我们使用MD5一样远离sha-1。 Google删除了Chrome 56中对SHA-1证书的支持,其他浏览器也在这样做。

评论


$ \ begingroup $
我知道了,但是为什么使用sha1 rsa签名不安全? (尽管攻击者可以在sha1中发生冲突,但他找不到私钥,因此无法创建相同的签名)
$ \ endgroup $
–adi
18年7月8日在17:57

$ \ begingroup $
他不需要创建签名,他只需使用现有签名,当出现冲突消息时,它将通过验证。
$ \ endgroup $
–董长玉
18年7月8日在17:59