Hash 选择散列函数

Hash 选择散列函数,hash,Hash,我想知道:在保持哈希函数的预期冲突计数的同时,可以安全地哈希的最大字节数是多少 对于md5、sha-*,甚至可能是crc32或adler32。你基本上是在看生日悖论,只看真正大的数字。 考虑到数据的正态“分布”,我认为在遇到问题之前,你可以找到大约5-10%的可能性,尽管没有任何保证 只需使用足够长的散列,就不会遇到问题;) 你的问题不清楚。“最大字节数”是指“最大项目数”?被散列的文件的大小与冲突的数量无关(当然,假设所有文件都不同) 你说的“保持预期的碰撞次数”是什么意思?从字面上看,答案是

我想知道:在保持哈希函数的预期冲突计数的同时,可以安全地哈希的最大字节数是多少


对于md5、sha-*,甚至可能是crc32或adler32。

你基本上是在看生日悖论,只看真正大的数字。 考虑到数据的正态“分布”,我认为在遇到问题之前,你可以找到大约5-10%的可能性,尽管没有任何保证


只需使用足够长的散列,就不会遇到问题;)

你的问题不清楚。“最大字节数”是指“最大项目数”?被散列的文件的大小与冲突的数量无关(当然,假设所有文件都不同)

你说的“保持预期的碰撞次数”是什么意思?从字面上看,答案是“无限的”,但在一定数量之后,你会像预期的那样发生碰撞

关于“在将冲突概率保持在x%以下的情况下,我可以散列多少项?”问题的答案,请看下表:

从链接:

作为比较,10^-18到10^-15是典型硬盘的不可纠正误码率[2]。理论上,128位的MD5应该保持在这个范围内,直到8200亿个文档,即使其可能的输出要多得多

这假定一个输出均匀分布的哈希函数。您可以假设,给定足够的项进行散列和加密散列函数(如md5和sha)或良好的散列(如Murruld3、Jenkins、City和Spooky散列)

并假定没有恶意对手积极制造冲突。然后,您确实需要一个安全的加密哈希函数,如SHA-2

请注意:CRC和Adler是校验和,旨在检测数据损坏,而不是最小化预期冲突。它们具有诸如“检测大小小于X或大于Y的所有位归零,用于输入高达zkbytes”之类的特性,但没有良好的统计特性


编辑:别忘了这都是关于概率的。完全有可能只对两个小于0.5kb的文件进行散列,并获得相同的SHA-512,但这是极不可能的(例如)。

因此,如果散列大小为512位,则将是26-51位,可以安全地进行散列,对吗?非常感谢您的详细回复!它完全回答了我的问题。