生日攻击:为什么哈希碰撞比你想的快

23人同生日概率已过半,不是因为人多,而是“两两配对”有253对。密码学据此要求哈希位数翻倍才安全。

分类
概率反直觉
难度
进阶
标签
生日攻击、哈希、碰撞、密码学
生日攻击:为什么哈希碰撞比你想的快 · 漫画配图
漫画 · 生日攻击:为什么哈希碰撞比你想的快

题目

哈希函数输出 nn 位(共 2n2^n 种可能)。攻击者想找到两个不同输入产生相同哈希(碰撞)。大约需要尝试多少个输入,命中概率才过半?

直觉可能觉得要试约 2n12^{n-1} 个。其实少得多。

答案与解析

这是生日攻击(Birthday Attack),直接用生日悖论:

kk 个随机值,两两配对共 (k2)k2/2\binom{k}{2}\approx k^2/2 对。当对数接近总可能数 2n2^n 时,出现碰撞的概率激增。令 k222nk2n/2\frac{k^2}{2}\approx 2^n \quad\Rightarrow\quad k\approx 2^{n/2}

所以只需约 2n/22^{n/2} 次尝试,碰撞概率就约 50%——比直觉的 2n12^{n-1} 少了一半的指数!例如 128 位哈希,理论上抗穷举要 21282^{128} 次,但抗碰撞只需约 2642^{64} 次。

背后的数学

它量化了“碰撞抵抗”与“原像抵抗”的天壤之别:找碰撞是生日问题(平方级),找指定原像是穷举(线性级)。现代哈希(SHA-256 等)因此把输出做得足够长,让 2n/22^{n/2} 也遥不可及。安全协议设计的第一课,就是别被“生日”骗了。