弱抵抗和强抵抗之间有什么区别

时间:2011-12-15 16:06:01

标签: hash cryptography

我已经阅读了一些关于强碰撞阻力和弱碰撞阻力的文章,但我无法理解其中的差异。我唯一能理解的是,在具有弱碰撞阻力的散列函数中存在低碰撞概率,并且在强碰撞阻力散列函数中具有较高的碰撞概率。我无法理解什么是真实的,这些参数的意义是什么。任何人都可以帮我吗?

2 个答案:

答案 0 :(得分:64)

弱抗碰撞性有时也被称为第二原像抗性

  

给定一个任意x,没有x'与x'!= x因此h(x)= h(x')

另一方面,强烈的碰撞阻力定义为:

  

x和x'不存在x和x',因此h(x)= h(x')

它们定义的明显区别在于,对于弱碰撞阻力,我们假设与x的特定选择绑定,而在强碰撞阻力的定义中,我们可以任意选择我们的x和x'。这似乎非常相似,所以让我们看看两个例子。

弱碰撞阻力

我们实际上只对弱碰撞阻力感兴趣的一个很好的例子是一个简单的密码存储方案。假设我们通过存储其哈希值将用户提供的密码存储在数据库中。当用户提供的某些密码的哈希值等于先前存储的值时,身份验证将成功(但这是一种固有的不安全方案,但请暂时告诉我)。现在,在这种情况下,给定的x是先前提供的(未知)原始密码。如果攻击者能够有效地解决“第二原像”问题,他可以获得一个x',其哈希值与原始x的哈希值相同,因此可以成功进行身份验证。请注意,在这种情况下,产生任意冲突的能力(即解决强冲突问题)通常是无用的,因为我们得到的x和x很可能类似于哈希已经存储在数据库中的实际密码

强烈的抗碰撞性

另一种情况是我们关注的是强烈的碰撞阻力,例如,您希望能够借助于唯一ID来查找存储在数据库中的任意数据的应用程序。您可以计算数据的哈希值,而不是对原始数据发出查询(由于数据的潜在无限大小,这通常会非常慢)。哈希非常紧凑,尺寸有限,因此可以更有效地查询。事实上,在这些情况下,你根本不介意散列函数的(第二)前映像电阻属性,主要是因为前映像本身并不是秘密。但是,您真正关心的是,您绝对希望避免两个不同的数据集散列到相同的值,这实际上是一个冲突。您并不特别关心任何碰撞,但是您希望此属性能够普遍存在 - 即您不希望任何两个数据集散列到相同的值(假设存在'唯一约束'在该列上定义)。由于安全性在这些应用程序中通常没有问题,因此我们经常使用非加密哈希,主要是因为它们的性能更好。

两者之间的关系

直观且也暗示着他们的名字,我们会认为强烈的碰撞阻力比弱的碰撞阻力更难以提供。幸运的是,在随机Oracle模型下,我们的直觉可以被证明是正确的。我们可以通过假设如果我们有一个有效的概率多项式算法来求解“第二原像”来证明这一点,那么这也将为我们提供一种解决“碰撞”的有效算法。

考虑哈希函数h和以下简单的概率算法[1]:

  

让2ndPreimage成为另一个概率(e,Q)算法,解决哈希函数h的“第二个原像”。

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查询的最大数量(即算法的“评估”)。如果成功,算法返回有效的解决方案,否则返回指示失败的值。

答案 1 :(得分:1)

由于亚历山大的评论,我写了这个答案;复制所有定义; Cryptographic Hash-Function Basics: Definitions, Implications, and Separations for Preimage Resistance, Second-Preimage Resistance, and Collision Resistance,作者:P。Rogaway和T. Shrimpton。

  • 原像电阻-基本上对于所有预先指定的输出,在计算上找不到散列到该输出的任何输入,即,找到任何原像x'使得{ {1}},如果输入任意未知的y。
  • 第二原像电阻,弱碰撞-在计算上找不到与指定输入相同输出的任何第二输入,即给定h(x') = y来查找第二张原图x,例如x' != x
  • 抗碰撞,强碰撞-在计算上找不到任何两个不同的输入h(x) = h(x')x,这些输入散列到相同的输出,即{ {1}}。

事实1 :碰撞抵抗力意味着散列函数的第二原像抵抗力。

事实2:第2个原像电阻表示原像电阻。


正如亚历山大指出的那样,根据信鸽原理,当输入空间大于哈希函数的输出空间时,冲突是不可避免的。