-1

我正在做一个项目来找到两个不同的句子,它们基于减少的 sha1 散列给出部分冲突。我的程序将生成两条不同的消息。如果两个句子的哈希值的前 32 位匹配,则程序将停止,否则将重复直到检测到冲突。

我的程序运行良好,但是搜索冲突的时间很慢。我怎样才能加快物联网。我阅读并发现我可以使用生日悖论,我该如何实现?

我进行了一些搜索并获得了相关答案,但是我仍然对生日悖论感到困惑。

SHA1 冲突的概率

SHA1 碰撞演示/示例

http://www.metzdowd.com/pipermail/cryptography/2004-August/007409.html

http://www.freelists.org/post/hashcash/Hashcash-and-the-cracking-of-SHA1,2

这就是我的程序的工作方式:

Generate random number() // let say i generate 100 number
Generate random char1() // we will generate 100 char
Hash() // the first 100 char  
Generate random char2() // we will generate another 100 char
Hash2() // this 100 char again
Get the 32 bit of the random char1()
Get the 32 bit of the random char2()
compare the 32 bit for partial collision 
If they dont match we will keep on doing until partial collision is found.
  • 与其他可以以毫秒为单位的程序相比,搜索所花费的时间太长了。
4

1 回答 1

1

如果您每次通过尝试一对随机输入来寻找哈希函数中的部分冲突,您将不得不接受极长的运行时间。对于 32 位和一个完美的散列函数,它有 1/(2^32) 的碰撞机会。

要利用生日悖论,您需要存储您生成的散列,并针​​对它们检查新的散列。这是有效的,因为您正在寻找碰撞,您并不真正关心最终碰撞的哈希是由什么生成的。阅读生日悖论如何使用人类和生日,并确保在将其应用于散列之前了解这一点。 通过这里的数学计算,您只需要大约 77,000 个哈希就有 50% 的机会在它们之间找到 32 位的冲突。

于 2016-05-10T17:44:48.197 回答