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比特的消息摘要就是基于这个考虑。
posted @ 2022-04-07 23:12  Dinesaw  阅读(266)  评论(0编辑  收藏  举报