2021-08-08 09:19:59
两个文件的 MD5 和 SHA1 同时发生碰撞的概率,在实际操作中几乎为零,其理论概率约为 $1/2^{288}$,但实际难度远超这一数值。
从理论层面分析,MD5 是 128 位哈希函数,输出空间有 $2{160}$ 种可能性。若单纯考虑随机碰撞概率,两个不同文件 MD5 值相同的概率约为 $1/2{160}$。由于这两个事件相对独立,同时发生这两个独立随机事件的概率,就是这两个概率的乘积,即 $(1/2{160}) = 1/2^{288}$。
然而,这并非最准确的描述。实际寻找碰撞的难度远超理论计算。寻找碰撞更像是解决一个巨大的谜题,想象在一张 $2{160}$ 的巨大网格上,随机放置两个点代表两个文件的哈希对,这两个点同时落在对角线上的概率极其渺茫。
虽然 MD5 和 SHA1 都存在碰撞漏洞,但即便利用这些漏洞,也需要海量计算资源。攻击者要找到同时满足 MD5 和 SHA1 碰撞的“双重碰撞”,需同时攻破两者的防线。MD5 虽被证明不安全,但找到碰撞仍不轻松;SHA1 寻找碰撞难度更高。其计算复杂度是两个难度函数的组合,难度呈指数级增长。所以,除非有针对性的、花费巨额计算资源的攻击,否则两个文件 MD5 和 SHA1 同时碰撞的概率,比日常生活中能想象到的“不可能”事件还要不可能。