Hash 根据文件内容计算的MD5哈希的前4个字节发生冲突的概率是多少?

Hash 根据文件内容计算的MD5哈希的前4个字节发生冲突的概率是多少?,hash,cryptography,md5,combinatorics,Hash,Cryptography,Md5,Combinatorics,这是一个组合数学问题,需要一些散列算法理论 假设输入可以是大小为30KB到5MB的任意随机字节序列(我猜这会产生很多输入值组合:) 根据字节序列计算的MD5哈希的前4个字节(或前n个字节)对于不同的文件相同的概率是多少 如果无法专门针对MD5哈希计算此值,那么生成均匀分布的m字节哈希的任何哈希函数计算给定输入范围前n个字节冲突的哈希的概率是多少 如果没有关于字节值概率的更多信息,我认为它是1/2^32 编辑。事实上,如果使用十六进制字符而不是纯字节,则为1/2^16 根据评论编辑: MD5可以被

这是一个组合数学问题,需要一些散列算法理论

假设输入可以是大小为30KB到5MB的任意随机字节序列(我猜这会产生很多输入值组合:)

根据字节序列计算的MD5哈希的前4个字节(或前n个字节)对于不同的文件相同的概率是多少


如果无法专门针对MD5哈希计算此值,那么生成均匀分布的m字节哈希的任何哈希函数计算给定输入范围前n个字节冲突的哈希的概率是多少

如果没有关于字节值概率的更多信息,我认为它是1/2^32

编辑。事实上,如果使用十六进制字符而不是纯字节,则为1/2^16

根据评论编辑

MD5可以被认为是统一的吗 计算出的值是 绝对随机


MD5散列算法的设计使得输入中的一个小变化会导致完全不同的散列,因此我要说MD5散列字节以相同的概率分布(无论如何我不会对它打赌)。无论如何,您可以对哈希应用后处理(例如,您可以使用),以增加其随机性(顺便说一句,使其更安全)。MD5哈希通常为十六进制,因此每个字节有16个可能的值。因此,对于四个字节,有16*16*16*16=65536个可能的组合,使得哈希冲突的概率为1:65536。

md5是十六进制的,因此每个字符可以是16个等位基因中的任意一个。 因此,这将使
16^n


对于4个字符,这使得65536个不同的可能组合。

对于理想的哈希函数,输出是均匀分布的,因此两个冲突的几率是2^32中的一个。然而,生日悖论告诉我们,如果我们比较所有的散列对,我们应该期望在平均有2^16个散列时看到冲突——所以不要只依赖4个字节,因为“我的值远远小于40亿”


正如我们所知,MD5不是一个理想的散列函数,但这里的弱点有些偶然:在4字节上发现冲突完全在合理的暴力攻击范围内,因此不需要求助于密码弱点。如果你只关心随机选取的数据,你不会看到与随机性的显著统计偏差。

如果你对两个特定输入具有相同的4字节散列的几率感兴趣,那么它只是1/2^32。如果你对一组X总输入中两个输入具有相同几率的几率感兴趣,那么在你开始接近集合中的2^16=65536个不同的输入之前,这个几率一直很低,达到了近50%(这种现象被称为生日悖论)


通常,哈希函数在加密方面有用的标准之一是所有位的一致性

在这种情况下,由于-so约为1/2^16,n位散列中发生冲突的几率约为1/2^(n/2)。如果出于某种原因,您指的是使用32位的十六进制编码,那么这当然只是前16位的实际位,因此发生冲突的几率约为1/2^8

给定一个特定的固定文件,随机选择的任何其他文件与该文件具有相同哈希值的几率约为2^n。就加密散列而言,它们之间的区别是第一个是冲突,另一个是前映像


在这种散列大小下,MD5中的弱点是非常不相关的,因为对MD5最著名的攻击大约需要2^32次计算,而即使是理想安全的32位散列,也可能在大约2^16次计算中产生冲突(由于仅通过选择随机输入,发生碰撞的概率为1/2^16,因此在大约2^16次随机猜测后,您可能会发现一对碰撞的输入).

它们以十六进制显示给人类,但计算为4个DWORD,因此他指的是第一个DWORD。即4字节==2^32感谢您的快速回答。但是,这是否考虑了MD5的特定属性?MD5是否可以被认为是一致的,即计算值是绝对随机的?冲突问题不存在吗与绝对一致的理想散列函数相比,MD5的能力更大?如果输入是“绝对随机的”,则有理由假设输出是“绝对随机的”此外,散列函数的设计是统一的,因此在实践中,可以安全地假定为统一的,除非输入是专门设计的,以引起与给定散列函数的冲突。?将表示形式从字节更改为十六进制字符会改变概率。这不会计算。这取决于“前4个字节”表示散列的十六进制表示形式的前4个实字节或前4个数字。感谢您的澄清。您的答案是否正确(以及其他表示1/65536为概率的答案)考虑到生日悖论吗?@Marek:生日悖论适用于集合,而不是成对。这里给出的机会对于一对文件是正确的。因为我们不知道总共有多少个文件,所以总的机会是未知的。澄清:请不要评论MD5的安全性。我试图解决的问题是如何检测identical文件,与安全无关。最近实施的ZFS重复数据消除带来了一些有趣的见解;散列冲突确实在那里引发了一次有趣的攻击。如果您知道刚才创建的文件与另一个文件相同,则实际上会破坏文件系统安全。事实上,文件系统不安全是SHA256安全性-如果您有相同的SHA256哈希,您几乎可以