Hash 双重散列是否具有抗冲突性?

Hash 双重散列是否具有抗冲突性?,hash,cryptography,collision,hash-function,hash-collision,Hash,Cryptography,Collision,Hash Function,Hash Collision,双重散列肯定比只有一层散列提供更多的安全性,但这是否意味着它更具抗冲突性?这道题的形式更为数学化: 如果H是一个抗冲突散列函数,那么对于某些x,H(H(x))是否仍然是抗冲突的?事实上,由于内部H的输出是有限的,所以抗冲突性可能更差 例如,以从{0,1}n映射的函数H为例→ {0,1}n。(我们将x限制为{0,1}n,以便更容易看到。)假设{0,1}n中有a,b,c=H(a)=H(b)。也就是说H(c)=H(H(a))=H(H(b))。当您在第一次转换中发生冲突时,您无法将其取消生成 如果在{0

双重散列肯定比只有一层散列提供更多的安全性,但这是否意味着它更具抗冲突性?这道题的形式更为数学化:
如果H是一个抗冲突散列函数,那么对于某些x,H(H(x))是否仍然是抗冲突的?

事实上,由于内部H的输出是有限的,所以抗冲突性可能更差

例如,以从{0,1}n映射的函数H为例→ {0,1}n。(我们将x限制为{0,1}n,以便更容易看到。)假设{0,1}n中有a,b,c=H(a)=H(b)。也就是说H(c)=H(H(a))=H(H(b))。当您在第一次转换中发生冲突时,您无法将其取消生成

如果在{0,1}n中没有冲突,那么第二个转换将以相同的方式执行


因为我们通常把散列函数称为{0,1}*→ {0,1}n在第一次转换中肯定会发生冲突,而第二次转换可能会使情况更糟。

原则上,生成的哈希函数H(H(x))的抗冲突性更低或相等,因为

  • 对于散列函数H(x),对于每个N个唯一的预映像,让我们假设存在一个冲突。这意味着有两个散列是相似的,H(H(x))不会使其不同
  • 对于散列函数H(x),对于每个N个唯一的预映像,让我们假设存在一个冲突。对于H(H(x))也是如此,因为H(H(x))只不过是H(固定长度字符串)。这使得发生碰撞的可能性更大