考察的是对LCG伪随机算法的攻击。
题目:
1 | from Crypto.Util.number import getPrime, isPrime, bytes_to_long |
其实就是RSA套上了LCG进行混淆,看起来复杂实际上考点就两个:
1.费马小定理:题中r += [pow(x * r[i] +y, pow(getrandbits(k), t - 1, t), t)]
这里指数部分可化简为1
2.对LCG算法的破解:
1 | def crack_unknown_modulus(states): |
完整脚本:
1 | import numpy as np |