我最近读到,如果您满足以下条件,您可以预测 PRNG 的结果:
- 知道正在使用什么算法。
- 有连续的数据点。
是否可以仅从数据点中找出用于 PRNG 的种子?
我最近读到,如果您满足以下条件,您可以预测 PRNG 的结果:
是否可以仅从数据点中找出用于 PRNG 的种子?
我设法找到了Kelsey 等人的一篇论文,其中详细介绍了不同类型的攻击,并总结了一些现实世界的例子。似乎大多数攻击都依赖于与针对密码系统的技术类似的技术,并且在大多数情况下实际上利用了 PRNG 用于密码系统的事实。
当然,“足够”的数据点是 PRNG 生成的绝对第一个数据点,没有间隙。大多数 PRNG 函数都是可逆的,所以只要向后工作,你就应该得到种子。
例如,典型值return seed=(seed*A+B)%N
是 的倒数return seed=((seed-B)/A)%N
。
如果您被“允许”暴力破解种子的所有可能值,并且如果您有足够的数据点以至于只有一个种子可以产生该输出,那么理论上总是可能的。如果 PRNG 是随时间播种的,并且您大致知道那是什么时候发生的,那么这可能会非常快,因为没有多少可行的值可供尝试。如果 PRNG 的种子来自具有 64 位熵的真正随机源的数据,那么这种方法在计算上是不可行的。
是否有其他技术取决于算法。例如,对 Blum Blum Shub 执行此操作等效于整数分解,这通常被认为是一个难以计算的问题。从这个意义上说,其他更快的 PRNG 可能不太“安全”。任何用于加密目的的 PRNG,例如在流密码中,几乎都需要没有已知的可行方法。