提取PRNG的初始种子值?

时间:2011-10-06 14:24:02

标签: language-agnostic random seed prng

我最近读到,如果您:

,您可以预测PRNG的结果
  1. 了解正在使用的算法。
  2. 有连续的数据点。
  3. 是否有可能仅从数据点中找出用于PRNG的种子?

3 个答案:

答案 0 :(得分:2)

我设法找到Kelsey et al的一篇论文,其中详细介绍了不同类型的攻击,并总结了一些现实世界的例子。似乎大多数攻击依赖于与密码系统相似的技术,并且在大多数情况下实际上利用了PRNG用于密码系统的事实。

答案 1 :(得分:1)

“足够多”的数据点是PRNG生成的绝对第一个数据点,没有间隙,当然。大多数PRNG功能都是可逆的,所以只需向后工作就可以获得种子。

例如,典型return seed=(seed*A+B)%N的倒数为return seed=((seed-B)/A)%N

答案 2 :(得分:0)

理论上,如果您“被允许”强制种子的所有可能值,并且如果您有足够的数据点,那么只有一个种子可以产生该输出,这在理论上是可行的。如果PRNG播种了时间,并且您大致知道发生了什么,那么这可能会非常快,因为没有太多合理的值可供尝试。如果PRNG用来自具有64位熵的真正随机源的数据播种,那么这种方法在计算上是不可行的。

是否有其他技术取决于算法。例如,对Blum Blum Shub执行此操作等同于整数分解,通常认为这是一个难以计算的问题。在这个意义上,其他更快的PRNG可能不那么“安全”。任何用于加密目的的PRNG,例如在流密码中,几乎都不需要有可行的方法来实现它。