我读了一些关于强碰撞抵抗和弱碰撞抵抗的文章,但是我无法理解它们之间的区别。我唯一能理解的就是,具有弱碰撞抵抗性的哈希函数中发生碰撞的概率较低,而在具有强碰撞抵抗性的哈希函数中发生碰撞的概率较高。我无法理解这些参数的实际意义。请问有人可以帮助解答吗?
我读了一些关于强碰撞抵抗和弱碰撞抵抗的文章,但是我无法理解它们之间的区别。我唯一能理解的就是,具有弱碰撞抵抗性的哈希函数中发生碰撞的概率较低,而在具有强碰撞抵抗性的哈希函数中发生碰撞的概率较高。我无法理解这些参数的实际意义。请问有人可以帮助解答吗?
Choose x uniformly at random
value = 2ndPreimage(h, x)
case value == failure -> return failure
case value == x' (!= x) -> return (x, x')
很容易看出这也是一个解决强碰撞问题的(e, Q)-算法。这意味着如果我们有一个解决"第二原像"的算法,我们也可以使用这个算法来产生碰撞。由于我们对基础哈希函数h没有任何假设,因此现在我们可以安全地说:
强碰撞抗性意味着弱碰撞抗性,但反之不一定成立。
[1] e是算法的成功概率,0 <= e < 1。Q是最大的oracle查询次数(即算法的“评估”次数)。在成功的情况下,该算法返回一个有效的解决方案,否则它将返回一个表示失败的值。
破坏弱碰撞抗性比破坏强碰撞抗性更为严重。
例如,您从互联网上下载一个文件,并希望证明它没有被篡改。假设您知道该文件的SHA256哈希值,您只需下载文件,对其进行哈希运算,并将结果与您所知道的文件应该具有的哈希值进行比较。如果它们匹配,则文件是安全的;如果不匹配,则文件已被篡改。
现在,如果有人破解了SHA256的强碰撞抗性,这意味着他们只是找到了任意两个具有相同哈希值的文件,但这两个文件中任何一个与您希望的文件相同的概率极小,因此对于攻击者来说并没有什么用处。
但是,如果有人破坏了弱碰撞抗性,这意味着他们可以生成另一个与您要下载的文件具有完全相同哈希值的文件。这将使攻击者能够用他篡改过的文件替换您要下载的文件,而您永远不会注意到,因为它们的哈希值相同。
听起来很可怕,对吧?确实如此!但并非一切(立即)都完蛋了,即使弱碰撞抵抗性被破解。虽然攻击者可以生成另一个具有相同哈希值的文件,但弱碰撞抵抗性并不能说明该文件是“有效”的文件。例如,如果你正在下载一个Python脚本,攻击者可能能够生成另一个二进制块,其哈希与你的Python脚本相同,但它不是一个有效的Python脚本,在Python解释器运行时会出错。Cloudflare在这个主题上的相关博客文章:为什么伪造SHA-1证书比找到SHA-1碰撞更难