📜  密码学中的生日攻击

📅  最后修改于: 2022-05-13 01:57:02.628000             🧑  作者: Mango

密码学中的生日攻击

先决条件——生日悖论
生日攻击是一种密码攻击,属于暴力攻击的一类。它利用了概率论中生日问题背后的数学原理。这种攻击的成功很大程度上取决于在随机攻击尝试和固定程度的排列之间发现碰撞的可能性更高,如生日悖论问题中所述。

生日悖论问题——
让我们考虑一个有 30 名学生和一名教师的教室的例子。老师希望找到一对生日相同的学生。因此,老师要求每个人的生日找到这样的对。直觉上,这个值可能看起来很小。例如,如果老师确定了一个特定的日期,比如10 月 10 日,那么那天至少有一个学生出生的概率是1 – (364/365) 30 ,约为7.9% 。但是,使用以下公式,至少一名学生与任何其他学生生日相同的概率约为70%

1 - 365!/((365 - n!) * (365n))  (substituting n = 30 here) 

上述术语的推导:

假设——
1. 假设是非闰年(因此是 365 天)。
2. 假设一个人在一年中的任何一天都有同样的机会出生。
让我们考虑 n = 2。
P(两个人生日相同)= 1 - P(两个人生日不同)
= 1 – (365/365)*(364/365)
= 1 – 1*(364/365)
= 1 – 364/365
= 1/365。
所以对于 n 个人,他们都有不同生日的概率是:
P(N 个人有不同的生日) = (365/365)*(365-1/365)*(365-2/365)*….(365-n+1)/365。
= 365!/((365-n)! * 365 n )

哈希函数–
哈希函数H 是一种转换,它采用可变大小的输入 m并返回一个称为哈希值 (h = H(m))固定大小的字符串。密码学中选择的散列函数必须满足以下要求:

  • 输入是可变长度的,
  • 输出具有固定长度,
  • 对于任何给定的 x,H(x) 相对容易计算,
  • H(x) 是单向的,
  • H(x) 是无碰撞的。

如果哈希函数H 难以反转,则称其为单向函数,其中“难以反转”意味着给定哈希值 h,在计算上无法找到某个输入 x 使得H(x) = h

如果给定消息 x,在计算上无法找到不等于 x 的消息 y,使得H(x) = H(y) ,则称 H 是弱无碰撞散列函数。

强无冲突散列函数H 是在计算上不可能找到任何两个消息 x 和 y 使得H(x) = H(y)的散列函数。

H: M => {0, 1} n为散列函数( |M| >> 2 n )

以下是在时间O(2 n/2 )散列中找到冲突的通用算法。

算法:

  1. 在 M 中选择 2 n/2条随机消息: m 1 , m 2 , ...., m n/2
  2. 对于 i = 1, 2, ..., 2 n/2计算 t i = H(m i ) => {0, 1} n
  3. 寻找碰撞 (t i = t j )。如果没有找到,返回步骤 1

我们考虑以下实验。从一组 H 值中,我们随机均匀地选择 n 个值,从而允许重复。设p(n;H)是在这个实验中至少一个值被多次选择的概率。这个概率可以近似为:

p(n; H) = 1 - ( (365-1)/365) * (365-2)/365) * ...(365-n+1/365))
p(n; H) = e-n(n-1)/(2H) = e-n2/(2H) 

数字签名敏感性 –
数字签名很容易受到生日攻击。消息m通常通过首先计算H(m)进行签名,其中H是密码散列函数,然后使用一些密钥对H(m)进行签名。假设 Alice 想要欺骗 Bob 签署一份欺诈性合同。爱丽丝准备了一份公平的合同m和一个欺诈性的m' 。然后,她找到了一些可以在不改变含义的情况下更改m的位置,例如在句子后插入逗号、空行、一个对两个空格、替换同义词等。通过结合这些变化,她可以创造出大量的变体在 m 上都是公平的合同。

类似地,Alice 也可以对m'进行一些更改以使其更接近m ,即H(m) = H(m') 。因此,Alice 现在可以将公平版本m呈现给 Bob 进行签名。 Bob 签名后,Alice 接受签名并将欺诈合同附加到其上。这个签名证明 Bob 签署了欺诈性合同。

为了避免这种攻击,哈希函数的输出应该是一个非常长的位序列,这样生日攻击现在在计算上变得不可行。