使用此代码我可以在多长时间内找到 6 字节的 sha-1 冲突?

How long I can find 6-bytes sha-1 collision using this code?

我需要找到 "last 6-bytes of SHA-1 digest" 的碰撞。这是我的 Python 代码(删除了不相关的部分):

import hashlib
import os
import binascii

start_string = os.urandom(20)
x0 = binascii.hexlify(start_string)

hash_value = hashlib.sha1(x0)
x1 = hash_value.hexdigest()

while x0[28:]!=x1[28:]:
  x0 = x1
  x1_hash = hashlib.sha1(x0)
  x1 = x1_hash.hexdigest()
else:
  print x0
  print x1

我使用的是 Thinkpad T400 笔记本电脑(Intel Core 2 Duo 2.8GHz、6 MB L2 缓存、800 MHz)。多久能找到碰撞?无论如何改进代码以使其更快? (这个Python)

6 字节的数据是 248 (281474976710656) 种可能性。您预计平均会在大约一半的支票中发现冲突,即大约 140 万亿次。我的机器每秒大约有 200000 SHA1/hexdigest 次操作(使用 Python),所以我预计需要大约 22 年的 运行 时间。

如果您不特别要求冲突发生在您生成的两个连续摘要之间,您可以通过检查先前生成的 all 来大大加快该过程摘要(将它们保存在一个集合或字典中)。 (查看 "birthday paradox" 了解这有多大帮助的详细信息。)这会很快 运行 内存不足,但除非你的笔记本电脑安装了绝对最小的 RAM,否则你可能会发现在那之前发生碰撞。假设有 1-2 GB 的可用 RAM,我估计需要一两分钟 运行 时间。