随机性可以防止碰撞攻击吗?

信息安全 哈希
2021-08-21 00:36:04

谷歌最近宣布了一个实用的SHA-1 碰撞

几年前 MD5 也有类似的问题,研究人员甚至创建了一个CA。

这在今天是不可能的——即使使用 MD5——因为 CA 必须在序列号中包含至少 20 位的随机数据(请参阅Mozilla 要求)。

我的问题有点笼统:如果签名消息包含签名者生成的随机数据,碰撞攻击是否重要?

对于散列的所有用途,我认为只有签名才是重要的冲突。然后,只有当签名者签署来自不受信任的人的消息时。还有其他重要的用例吗?在这个用例中,如果签名者总是在消息中包含随机数据,是否可以防止碰撞攻击。

顺便说一句,我仍然认为放弃 SHA-1 是个好主意,这个问题更具理论性。

2个回答

是的,由签名者控制并且(至关重要)攻击者不可预测的随机性消除了产生冲突的可能性,包括研究人员在 2008 年使用的选择前缀样式的碰撞攻击来创建假 CA和 Flame 恶意软件的作者在几年后创建了一个伪造的签名证书。

原因是这样的:要创建碰撞攻击,攻击者必须控制两个输入。这并不意味着这两种输入都一定是完全任意的。/事实上,正如您所知,对于伪造的证书或谷歌在他们的实验中创建的 PDF,它们肯定不是。实际上有相当多的结构。然而,他们的攻击者仍然需要确切地知道两个输入的固定分量是什么,以便能够生成两个输入的分量,最终允许完整输入的哈希值发生冲突。

因此,当攻击者无法控制并且无法预测其中一个输入的最终形式是什么时,他无法提前创建需要在他提交给签名者进行签名的输入中的数据。他之后才发现完整的输入数据(包括随机数)和生成的哈希。这从根本上改变了问题,从需要创建碰撞到需要创建第二个原像,正如您所指出的,这是一个非常非常困难的问题,而且目前使用 MD5 甚至不可能,如果永远都是。

所以,我会说是的,不可预测的随机性的引入确实消除了作为一个类的碰撞攻击的可能性。

“我的问题有点笼统:如果签名消息包含签名者生成的随机数据,碰撞攻击是否重要?”

随机数据可以通过使碰撞攻击更难来提高安全性。如果没有关于攻击的完整信息,就不可能确定答案,但在这种情况下,随机数据似乎并不能提高安全性,因为攻击者可以根据任意起始消息按需生成冲突。

“还有其他重要的用例吗?”

是的。谷歌在他们关于该主题的文章中指出,有人可以发送两个具有相同哈希但合同条款不同的不同合同。这可能是受信任的一方试图把你搞砸(确实发生了!)或者它可能是冒充受信任的一方的人。那里的哈希将用于文件完整性验证,而不是作为签名。另一个用例是 git。Git 使用 sha1 哈希来识别代码。如果有人可以生成具有相同哈希值的新代码,git 无法区分两者,git 用户可能会构建/执行恶意软件。