伪随机生成器可以是真正随机的吗?

Can a pseudorandom generator ever be true random?

我可以理解如何使用种子作为伪随机生成(例如时间)并不能使其真正随机;但是当伪随机生成器从硬件随机数生成器获取种子时,伪随机生成器不会变成真随机,因为它的种子是从 TRNG 收集的?

首先,要意识到单个数字不是随机的或非随机的:只有大量的数字。

如果您从真正随机的源中播种 PRNG,然后继续调用 PRNG 以获得更多数字,那么您将得到一个伪随机 序列 的数字,尽管播种好。

如果您使用真正随机的源为 PRNG 播种,然后仅从 PRNG 中获取一个值,那么您将获得一个真正随机数的哈希值。如果 PRNG 的种子哈希函数很好,这将与其输入一样随机。如果不是,它可能更可预测(例如,只有 64 位内部状态的 PRNG 只会产生 2^64 个不同的值,无论你用多少位作为种子)。

这并不是说这是个坏主意——游戏模拟和 Monte Carlo 系统 应该 使用从 TRNG 源播种的快速 PRNG 以获得最佳折衷速度和质量。但是加密应用程序需要加密安全的随机值,这比较棘手。

没有

好种子是必要的,但它们不会改变 PRNG 的性质(和缺陷)。

例如,即使有好的绝对真实的随机种子 RNG,如 LCG,仍然会在高维度上进行相关采样