哈希函数与生日攻击
\(1.\) 哈希函数概念
哈希函数 \(H\) 公开,将任意长度消息 \(M\) 映射成固定长度的值 \(H(M)\),这说明的是哈希函数的压缩性
除此之外,哈希函数还需要满足安全性
- 单向性 给定 \(H(M)\),计算 \(M\) 计算不可行
- 抗弱碰撞 给定 \(M\),找到 \(M'\) 使得 \(H(M') = H(M)\) 计算不可行
- 抗强碰撞 找到两个消息 \(M,\ M'\) 满足 \(H(M) = H(M')\) 计算不可行
\(2.\) 哈希函数的应用
\(2.1\) 数字签名
哈希函数用于压缩消息得到摘要 \((digest)\)
发送方用自己的私钥加密消息和摘要,一同发给接收方
接收方拿到消息后,用发送方的公钥解密消息和摘要,并用相同的 \(hash\) 函数(例如 \(MD5\))对消息进行压缩,检查两个摘要是否一致,如果一致,证明未被篡改过
\(2.2\) 口令认证
数据库存储的是用户密码被散列后的值,用户登录时输入密码,数据库检查输入密码的散列值与存储的散列值是否一致
\(3.\) 攻击哈希函数——生日攻击
考虑一个哈希函数 \(f: D\rightarrow \left\{0,\ 1\right\}^{n}\),哈希空间为 \(2^n\),只需要 \(O(2^{\frac{n}{2}})\) 级别的哈希值便能构成碰撞
\(3.1\) 问题背景
给定 \(n\) 个人,一年有 \(m\) 天,为了使得至少有两人生日相同的概率大于等于 \(\epsilon\),计算 \(n\) 的大小
\(3.2\) 推导
设 \(P(n,\ m)\) 表示至少两个人生日相同的概率,则
即
根据 \(1 + x\leq e^x\),有 \(1 - \frac{i}{m}\leq e^{-\frac{i}{m}}\),所以
即
若要使 \(P(n,\ m)\geq \epsilon\),只需要
对上式变换,取对数得到
即
由于 \(0 < \epsilon < 1\),所以一元二次不等式的判别式 \(\Delta = 1 - 8m\cdot ln(1 - \epsilon) > 0\),所以方程组有解,具体为
具体的,若考虑 \(\epsilon = 50\%,\ m = 365\),那么只需要 \(n\geq 1.177\sqrt{365}\approx 23\),便可以以 \(0.5\) 概率构成生日碰撞

浙公网安备 33010602011771号