首页 > 解决方案 > 结合 PRNG 和“真正的”随机、快速和(也许)愚蠢的方式

问题描述

采用像 xoroshiro 或 xorshift 这样的快速 PRNG 和像 /dev/random 这样的基于“真实”熵的生成器。

使用“真”随机播种 PRNG,但也从“真”随机中获取单个数字,并使用它对来自 PRNG 的所有结果进行异或运算以产生最终输出。

然后,每隔一段时间替换一次这个数字(例如,在生成 10000 个随机数之后)。

也许这很幼稚,但我希望这可以改善 PRNG 的某些方面,例如周期大小,而对速度的影响可以忽略不计。我怎么了?

我在这里关心的是生成 UUID(快速),它们基本上是 128 位数字,应该是“真正唯一的”。我担心的是,使用像 xorshift 系列这样的现代 PRGN,其周期接近“仅”2 ^ 128,熵种子 PRNG 生成器的碰撞机会并不像真正随机数那样可以忽略不计。

标签: algorithmrandom

解决方案


与普通的 PRNG 相比,这些改进只是很小的。例如,用于屏蔽结果的单个真随机数可以通过对连续结果进行异或来消除。这将与连续的普通 PRNG 数字的 XOR 相同。因此,如果您可以预测 PRNG,那么对改进后的序列做同样的事情并不太难。


推荐阅读