这一方法又被称为小步大步法,用了中间相遇攻击的思想,将时间复杂度为o(n),空间复杂度o(1),折中为(o(sqrt(n)).
例如给定 y≡gx (mod n)
令x=m*i+j 其中m=sqrt(n),i,和j 都小于m,(这是因为x>n的话会发生冗余)
那么就可以得到:
y≡gx (mod n)=>y≡gm*i+j (mod n) =>y*g-mi ≡gj(mod n)
这样的话,就可以先枚举j 将所有的结果保存下来,然后在去枚举i, 对gj 的值进行碰撞,碰撞成功后即可得到i,j,也就可以得到x
Baby-step giant-step
最新推荐文章于 2021-11-05 19:08:29 发布