哈希生日悖论

时间:2015-11-20 06:52:59

标签: php c++ hash birthday-paradox

所以我正在编写一段代码来计算2^4组3个随机素数(小于2 ^ 8)的哈希值。然后继续选择3个复合数(小于2 ^ 8)的集合,直到有一组{c1, c2, c3}的哈希值与之前的哈希值(主要哈希值)匹配,该集合将被称为{ {1}}。

根据我的理解,生日攻击基本上是找到两个提供相同结果的功能。所以我会创建2个函数?一个用于素数,另一个用于复合?这样做的最佳方式是什么?我认为PHP是语言。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我认为前提是寻找一组任意3个数字< 2 ^ 8使用相同的散列函数产生与一组3个素数相同的散列值。

未说明哈希值的范围。

生日攻击基于以下事实:由于散列值的范围是有限的,所以尝试散列3个数字的所有组合的强力方法<在实际尝试所有可能的组合之前,2 ^ 8可能会产生一些与有效哈希值的冲突。但是,在这种情况下,尝试3个数字的所有组合< 2 ^ 8仅需要16777216个循环,因此可以使用完整的强力方法。

程序可以创建所有可能的哈希值的直方图。由于只有54个素数< 2 ^ 8,为所有有效输入(3个素数)生成直方图将需要54 ^ 3 = 157464个循环。

使用所有3个数字组来检查碰撞< 2 ^ 8将需要2 ^ 24 = 16777216个循环,这不应该花费太长时间,具体取决于散列算法。