哈希函数与生日攻击

\(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)\) 表示至少两个人生日相同的概率,则

\[\begin{aligned} P(n,\ m) & = 1 - \frac{A_{n}^{m}}{m^n}\\ & = 1 - \frac{1\cdot 2\cdots (m - n + 1)}{m^n}\\ & = 1 - (1 - \frac{1}{m})(1 - \frac{2}{m})\cdots (1 - \frac{n - 1}{m}) \end{aligned} \]

\[1 - P(n,\ m) = (1 - \frac{1}{m})(1 - \frac{2}{m})\cdots (1 - \frac{n - 1}{m}) \]

根据 \(1 + x\leq e^x\),有 \(1 - \frac{i}{m}\leq e^{-\frac{i}{m}}\),所以

\[1 - P(n,\ m)\leq \prod_{i = 1}^{n - 1}e^{-\frac{i}{m}} = e^{-\frac{n(n - 1)}{2m}} \]

\[1 - e^{-\frac{n(n - 1)}{2m}}\leq P(n,\ m) \]

若要使 \(P(n,\ m)\geq \epsilon\),只需要

\[1 - e^{-\frac{n(n - 1)}{2m}}\geq \epsilon \]

对上式变换,取对数得到

\[ln(1 - \epsilon)\geq -\frac{n\cdot (n - 1)}{2m} \]

\[n^2 - n + 2m\cdot ln(1 - \epsilon)\geq 0 \]

由于 \(0 < \epsilon < 1\),所以一元二次不等式的判别式 \(\Delta = 1 - 8m\cdot ln(1 - \epsilon) > 0\),所以方程组有解,具体为

\[n\geq \frac{1 + \sqrt{1 - 8m\cdot ln(1 - \epsilon)}}{2}\approx \sqrt{2m\cdot ln\frac{1}{1 - \epsilon}} \]

具体的,若考虑 \(\epsilon = 50\%,\ m = 365\),那么只需要 \(n\geq 1.177\sqrt{365}\approx 23\),便可以以 \(0.5\) 概率构成生日碰撞

posted @ 2020-12-21 17:56  徐摆渡  阅读(685)  评论(0)    收藏  举报