减少的SHA1哈希的部分冲突

Partial collision for Reduced SHA1 hash

本文关键字:冲突 SHA1 哈希      更新时间:2023-10-16

我正在做一个项目,寻找两个不同的句子,它们基于减少的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.
  • 与其他可以在毫秒内找到的程序相比,搜索所花费的时间太长

如果您在散列函数中寻找部分冲突,每次都要尝试一对随机输入,那么您将不得不接受超长的运行时间。对于32位和一个完美的哈希函数,发生冲突的几率为1/(2^32)。

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