生日攻击:为什么哈希碰撞比你想的快
23人同生日概率已过半,不是因为人多,而是“两两配对”有253对。密码学据此要求哈希位数翻倍才安全。
题目
哈希函数输出 位(共 种可能)。攻击者想找到两个不同输入产生相同哈希(碰撞)。大约需要尝试多少个输入,命中概率才过半?
直觉可能觉得要试约 个。其实少得多。
答案与解析
这是生日攻击(Birthday Attack),直接用生日悖论:
选 个随机值,两两配对共 对。当对数接近总可能数 时,出现碰撞的概率激增。令
所以只需约 次尝试,碰撞概率就约 50%——比直觉的 少了一半的指数!例如 128 位哈希,理论上抗穷举要 次,但抗碰撞只需约 次。
背后的数学
它量化了“碰撞抵抗”与“原像抵抗”的天壤之别:找碰撞是生日问题(平方级),找指定原像是穷举(线性级)。现代哈希(SHA-256 等)因此把输出做得足够长,让 也遥不可及。安全协议设计的第一课,就是别被“生日”骗了。