生日攻击是一种密码学攻击手段,它基于所谓的“生日悖论”。简单来说,生日悖论指出,在仅有23人组成的群体中,至少有两人同一天生日的概率超过50%。这个概率随着人数的增加而迅速增加。

在密码学中,生日攻击用于寻找哈希函数的碰撞,即两个不同的输入产生了相同的输出。对于一个理想的哈希函数H,它产生n位的输出,以下是对生日攻击的详细解释:

理想的哈希函数

  • 独立性:每个输出值都是独立的。
  • 均匀分布:每个输出值在{0,1}n空间中出现的概率是相等的。

攻击方式

  • 方法一:时间和空间非均衡的方法

    • 时间复杂度: $O(2^{n})$
    • 空间复杂度O(1)
    • 过程:只需要存储一个输入-输出对,然后不断尝试新的输入,直到找到一个与之前存储的输出相同的值。由于哈希函数的输出是均匀分布的,所以平均来说,我们只需要尝试2^n/2次就能找到一个碰撞。
  • 方法二:时间和空间均衡的方法

    • 时间复杂度$O(2^{n/2})$
    • 空间复杂度$O(2^{n/2})$
    • 过程:用 $2^{n/2}$的空间同时输入 $2^{n/2}$

问题:时间和空间复杂度的乘积是否可以是o(2^n)

假设存在一种攻击方法,使得时间和空间复杂度的乘积是o(2^n)。这意味着存在一个常数c,使得时间复杂度T和空间复杂度S满足:

k=T × S =c × 2^n

数学推导:

假设我们有一个理想的哈希函数$H$,它将任意长度的输入映射到一个固定长度的输出。输出长度为n位,因此可能的不同哈希值总数为$2^n$

        1.  单次哈希碰撞的概率:

                假设我们使用k个不同的哈希值。P=\frac{k}{2^n} 

        2.  至少一次碰撞的概率:

               先计算没有碰撞发生的概率,然后用 1 减去这个概率 。没有碰撞发生的概率(即所有哈希值都是唯一的)是:

P(no ~~collision)=\prod_{i=0}^{k-1} \left ( 1-\frac{i}{2^n} \right )=\frac{(2^n)!}{2^{nk}\times (2^n-k)!}

至少发生一次碰撞的概率是:P(at~~least~~one~~collision)=1−P(no ~~~collision)

当x很小时,我们可以使用近似表示

e^{x} =\sum_{i=0}^{\infty } \frac{x^i}{i!} \approx x+1

$e^{-x}=1-x$

当k相对于2^n很小时,每个分数\frac{k}{2^n}中的都是一个非常小的数, 令 x= \tfrac{i}{2^n}

P(no ~~collision)=\prod_{i=0}^{k-1} \left ( 1-\frac{i}{2^n} \right )=\prod_{i=0}^{k-1} \left ( 1-x \right )\\ ~~~~~~~~~~~~~~~~~~~~~~~=\prod_{i=0}^{k-1} e^{-x}=\prod_{i=0}^{k-1} e^{-\frac{i}{2^n}}

即:

P(no collision)\approx e^{-\frac{1}{2^n} \sum_{i=0}^{k-1} {i}}

等差数列求和,得:

P(at~~least~~one~~collision)\approx 1-e^{-\frac{(k-1)*k}{2*2^n} }

        3 .其中 k=S*T ; 使 p=1 ,则 e^{-\frac{(k-1)*k}{2*2^n} }=0;需

\lim_{n \to \infty} \frac{k(k-1)}{2^{n+1}} \longrightarrow \infty

为了使上述式子成立,k^2 的增长速度与 2^n相同;则有k\ge \sqrt{2^n};

即时间和空间复杂度的乘积为 (2^{n/2})


小o符号比大O符号提出了一个更严格的界限,通常认为对于安全的哈希函数,任何攻击的时间-空间乘积至少为O(2^n)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐