生日攻击
突然看到关于\(Hash\)碰撞攻击的题,就顺便复习一下orz(学啥忘啥星人)
Hash碰撞攻击
穷举攻击
-
对于一个输出长度是n-bit的\(Hash\)函数,寻找碰撞最直接的方法是穷举攻击:产生\(2^n+1\)个不同的消息,分别计算它们的\(Hash\)值。很明显,最多有\(2^n\)个不同的\(Hash\)值。而\(2^n+1\)个消息必然产生\(2^n+1\)个\(Hash\)值。
-
根据抽屉原理,必然有两个不同的消息,它们的\(Hash\)值相同,如此便找到了一对碰撞。很明显,穷举攻击的时间复杂度为\(O(2^n)\)。
抽屉原理:桌上有十个苹果,要把这十个苹果放到九个抽屉里,无论怎样放,我们会发现至少会有一个抽屉里面放不少于两个苹果。这一现象就是我们所说的“抽屉原理”。 抽屉原理的一般含义为:“如果每个抽屉代表一个集合,每一个苹果就可以代表一个元素,假如有n+1个元素放到n个集合中去,其中必定有一个集合里至少有两个元素。” 抽屉原理有时也被称为鸽巢原理。它是组合数学中一个重要的原理。
生日攻击
- 比起效率低的穷举攻击,有没有更快的方法呢?当然有:生日攻击可以\(O(2^{\frac{n}{2}})\)的时间复杂度找到一对碰撞。
先记个结论,具体内容之后再补orz
参考资料:【现代密码学入门】44. 生日攻击