给定一个或两个由Internet的线性同余生成器生成的连续Math.random输出,是否有可能找到在LCG中使用的种子并找到后续的输出?下面是在回购:上给出的代码
const double kdbl2to27 = 134217728.0;
uint64 sn;
sn = (seed * 25214903917 + 11) & 0x0000FFFFFFFFFFFFull;
double res = double((uint)(sn >> 21));
seed = (sn * 25214903917 + 11) & 0x0000FFFFFFFFFFFFull;
res += (double)((uint)(seed >> 21)) / kdbl2to27;
res /= kdbl2to27;然后,res作为Math.random值返回。我试着计算出倒转最后两行的数学,结果没有结果。我认为有一个直观的蛮力方法,我错过了利用的事实,我有两个输出。如果可以用一个输出来做,那也是很好的。
发布于 2019-07-18 12:56:17
我可以建议尝试将所有已知的数据和公式通过类似于Microsoft、Z3或其他SMT解决程序。然而,我无法预测搜索需要多长时间。
https://security.stackexchange.com/questions/213675
复制相似问题