5.2 生日攻击
5.2 生日攻击
生日攻击相关问题
问题1---第Ⅰ类生日攻击问题
已知一杂凑函数H有n个可能的输出,H(x)是一个特定的输出,如果随机取k个输入,则至少有一个输入y使得H(y)=H(x)的概率为0.5时,k有多大?
问题2---生日悖论--第Ⅱ类生日攻击:寻找函数H的具有相同输出的两个任意输入的攻击方式。
在k个人中至少有两个人的生日相同的概率大于0.5时,k至少多大?
解释
- 设有k个整数项,每一项都在1到n之间等可能地取值。
- P(n, k): k个整数项中至少有两个取值相同的概率生日悖论就是求使得P(365,k)≥0.5的最小k。
- Q(365,k): k个数据项中任意两个取值都不同的概率。
如果k>365,则不可能使得任意两个数据都不相同,因此假定k<365。
k个数据项中任意两个都不相同的所有取值方式数为
\[365×364×…·×(365 - k +1) = \frac{365!}{(365-k)!}
\]
如果去掉任意两个都不相同这一限制条件,可得k个数据项中所有取值方式数为365^k。所以可得
\[Q(365,k)=\frac{365!}{(365-k)!365^k}
\]
\[P(365,k)=1-Q(365,k)=1-\frac{365!}{(365-k)!365^k}
\]
结果
- 当k=23时,P(365,23)=0.5073,即上述问题只需23人,人数如此之少。
- 若k=100,则P(365,100)=0.9999997,即获得如此大的概率。
- 之所以称这一问题是悖论是因为当人数k给定时,得到的至少有两个人的生日相同的概率比想象的要大得多。
问题--生日悖论推广问题
已知一个在1到n之间均匀分布的整数型随机变量,若该变量的k个取值中至少有两个取值相同的概率大千0.5,则k至少多大?
\[P(n,k)=1-\frac{n!}{(n-k)!n^k}
\]
令P(n,k) > 0.5 可得
\[k = 1.18\sqrt{n}≈\sqrt{n}
\]
若取n=365,则
\[k = 1.18\sqrt{365}≈22.54
\]
生日攻击
设杂凑函数H有2^m个可能的输出(即输出长m比特),如果H的k个随机输入中至少有两个产生相同输出的概率大于0.5,则
\[k ≈\sqrt{2^m}
\]
安全应用
输出长度与碰撞
- 这种生日攻击给出了消息摘要长度的下界,一个40比特的消息摘要是非常不安全的。
- 因为在大约220个(大约100万)个随机值中就能以1/2的概率找到一个碰撞。
- 通常建议消息摘要的最小可接受的长度为128比特,在DSS签名标准中使用160比特的消息摘要就是基于这个考虑。
---------------------------
“朝着一个既定的方向去努力,就算没有天赋,在时间的积累下应该也能稍稍有点成就吧。”