采用像 xoroshiro 或 xorshift 这样的快速 PRNG 和像/dev/random 这样的“真正的”基于熵的生成器。
使用“真”随机数作为 PRNG 的种子,但也从“真”随机数中获取单个数字,并使用它对来自 PRNG 的所有结果进行异或以产生最终输出。
然后,每隔一段时间(例如生成 10000 个随机数后)替换这个数字。
也许这很天真,但我希望这会改进 PRNG 的某些方面,例如周期大小,而对速度的影响可以忽略不计。我哪里错了?
我在这里关心的是生成 UUID(快速),它们基本上是 128 位数字,应该是“真正唯一的”。我担心的是,使用现代 PRGN,例如周期接近“恰好”2^128 的 xorshift 系列,熵种子 PRNG 生成器发生碰撞的可能性并不像真正的随机数那样可以忽略不计。
最佳答案
与普通 PRNG 相比,改进很小。例如,可以通过对连续结果进行异或来消除用于屏蔽结果的单个真随机数。这将与连续的普通 PRNG 数字的 XOR 值相同。因此,如果您可以预测 PRNG,那么对改进后的序列做同样的事情并不难。
关于algorithm - 结合 PRNG 和 'true' 随机,快速和(也许)愚蠢的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51999745/