碰撞攻击分为生日攻击和中间相遇攻击。①生日攻击。目标是从N个点X1 ,X2,…,Xn中找出2个相等的点。其方法是随机从N个点中选取n个点,通过对这n个点的存储和按大小排序,找出其中相等的点。算法的计算量近似为n,当任意2个点相等的概率都是1/n时,选择n=(2n)1/2时算法成功的概率近似为0.632,存储量和计算量都是(2n)1/2,效率最高。②中间相遇攻击。目标是采取随机从N元集合S中选取1个m元子集和1个n元子集的方法,找出2个集合的1个交点。其方法是先随机选取集合S的m个不同点,并将它们按大小排序和存储,然后再随机选1个点,并检查它是否为已存储的点。若是,算法成功;若不是,继续随机选新的点并检查它是不是已存储的点。当随机选N个点后仍没有找到所要的点,算法以失败结束。这一算法的计算量近似为m+n,当S中任意2点相等的概率都是1/n 时,这2个子集交集不空的
概率近似为1-emn/N。一般选择m=n=N1/2,算法成功的概率近似为0.632,存储量和计算量都是N1/2,效率最高。碰撞攻击大大降低了穷举攻击的计算量,可解决许多具体的密码分析问题。碰撞攻击还可与分割攻击等密码分析方法结合,降低破译密码的计算量。