如果 PRNG 有足够长的数字序列,为什么它可以被暴力破解?

If a PRNG has a long enough sequence of numbers, why can it be bruteforced?

我读到在伪随机生成中种子需要不可预测,因为如果他们可以将可能的种子缩小到合理数量的不同值,那么暴力攻击是可能的。

然而,这让我感到困惑。想象一下,如果我使用一种生成伪随机数的算法。从理论上讲,它们会在某个时候循环,但在实践中,根据许多人的说法,这显然很少发生。 如果是这种情况,假设攻击者已将种子缩小到 50k 个不同的种子(攻击者知道该种子是这 50k 个种子之一)。并且攻击者也有一个基于这个随机生成器的登录 cookie(攻击者知道制作登录 cookie 的算法)。

如果攻击者然后检查这 50k 个可能种子的每个种子值,并将结果与​​他自己的登录 cookie 进行比较,以便查明所使用的种子...有什么保证攻击者生成的登录 cookie 使用伪随机序列的值与登录 cookie 相同?如果伪随机生成器在此特定登录 cookie 上的循环之前使用序列中的 "last" 数字会怎样。这不会迫使攻击者为每个种子迭代数十亿次(或更多次)来尝试,因为攻击者需要尝试 PRNG 可以生成的每个可能的值吗?

一个伪随机数列毕竟是随机的,只要它是无限的或者接近无限的没有循环。

希望我能把我的问题说清楚。

假设受害者只是在为攻击者生成 cookie 之前刚刚播种了他们的 PRNG。攻击者用所有可能的种子模拟该程序(只是它关心的位)。当攻击者的模拟发出与受害者发送的相同的值时,攻击者会假设他们的模拟与受害者处于相同的状态,并且进一步的模拟将揭示受害者接下来要做什么。

如果种子是很久以前设置的,并且攻击者不知道对 rand()(或等效)进行了多少次调用,那么该模拟最终变得不可能,因为它必须尝试导致 cookie 生成的所有可能的控制流排列。

不同的 类型的攻击中,PRNG 的周期很短(因此状态很小 space),攻击者可以忽略种子,而是通过 PRNG 的整个状态 space 试图强制它发出相同的输出。那么受害者多久之前使用过种子就没有关系了。