我已经考虑了几天,SHA-256算法输出64个字符,可以是小写字母或0-9之间的数字。这应该意味着有64 ^ 36个不同的SHA-256结果。

如何从未发现冲突?如果我决定为长度增加的随机输入找到哈希,即使需要花费数年的时间,我也应该最终找到冲突。我想这也可以在输入为大文件的情况下完成,您只需更改一个字节并计算哈希值,直到发现冲突为止。为什么没有发生这种情况?

评论

人脑在想象大量数字方面表现异常出色。这使我想起一个有关所有1024位素数的列表的问题。无论如何:十六进制输出并非全部为小写字母。那只是表达所有$ 2 ^ {256} $可能的输出的一种方式(实际的数字格式完全不相关,只是计算机倾向于经常使用十六进制)。然后是$ 36 ^ {64} $,而不是$ 64 ^ {36} $-这是完全不同的。

@ Swailem95十六进制仅使用6个字母,因此有16个不同的字符,而不是36个。此外,您还会混淆基数和指数。字母的大小进入底数,长度进入指数。因此,您可以看到$ 2 ^ {256} $看着位表示,$ 256 ^ {32} $看着字节表示或$ 16 ^ {64} $看着十六进制表示。

考虑爱丁顿的数= 136 * $ 2 ^ {256} \约10 ^ {80} $。现在,爱丁顿的数量据称是宇宙中基本粒子(质子+电子,假设中子由质子和电子组成)的数量(假设-暗示-庞大,请参见Wiki)。因此,每个SHA-256哈希基本上只有2 * 136(= 272)个粒子可用于存储碰撞数据(+开销)?我将2换为50%的冲突-数学可以吗?

@Vérace你的数学不太正确。生日悖论(根据答案)指出,您只需要$ 2 ^ {128} $哈希值即可产生50%的碰撞机会。因此,您将拥有$ 136 * 2 ^ {128} $个粒子来存储每个哈希。当然,这仍然是不切实际的!

“为什么尚未找到SHA-256冲突”已找到冲突

#1 楼

我认为您低估了$ 2 ^ {256} \ gg 64 ^ {36} $的大小。


从未发现冲突?


要花很长时间才能找到一个$ \ text {very} ^ {\ text {very}} $。为了进行比较,截至2015年1月,比特币每秒计算300百万个SHA-256哈希。那就是$ 300 \乘以10 ^ {15} $每秒的哈希值。按照比特币的汇率,它们需要花费

$ 2 ^ {128} /(300 \ times 10 ^ {15} \ cdot 86400 \ cdot 365.25)\ approx 3.6 \ times 10 ^ {13 } $年。相比之下,我们的宇宙大约只有13.7美元乘以10 ^ 9 $年。蛮力猜测不是可行的选择。

评论


$ \ begingroup $
那么,考虑到大约2600个宇宙寿命,所有比特币矿工在一起将能够很好地找到共享给定SHA-256哈希的数据?我是在解释+计算该权利吗?
$ \ endgroup $
–JamesTheAwesomeDude
17年7月24日在18:38



$ \ begingroup $
@JamesTheAwesomeDude在此期间,所有比特币矿工都有很大的机会计算出的两个哈希具有相同的哈希值。您仍然必须找到这些是哪两个哈希。通过“给定的SHA-256哈希”,我相信您的意思是第二次Preimage Attack,它不能依赖于生日悖论。
$ \ endgroup $
– desowin
17-10-5在10:22

$ \ begingroup $
因此,在2600个宇宙寿命中,我们将有机会发现碰撞,但前提是我们必须保存/记录/存储世界上所有比特币矿工丢弃的每个哈希,即使那样,只是两个具有相同哈希值的随机块+随机文件?
$ \ endgroup $
–JamesTheAwesomeDude
17-10-12在15:37

$ \ begingroup $
galvatron:对于您的公式,我得到3.59e13(不是e33)。同样,每个比特币哈希值都是两个(尽管受到限制)SHA256。 @James:您的链接除以1.37e9得出26,254,但除以正确的13.7e9得出2,625,就像您的文本一样。两者:17年10月,比特币的价格高达10e18x2 / s,因此5.4e11年或39个宇宙。另外,正如您所说,存储和比较。
$ \ endgroup $
–dave_thompson_085
17-10-19在2:50

$ \ begingroup $
esh。我一定很激动地输入3.33。那是少得多的宇宙。谢谢。
$ \ endgroup $
–user47922
17-10-19在16:28