采用快速prng,比如xoroshiro或xorshift,以及基于“真”熵的生成器,比如/dev/random。
种子PRNG与'真'随机,但也得到一个单一的数字从'真'随机,并使用它异或所有的结果,从PRNG产生最终输出。
然后,每隔一段时间更换一次这个数字(例如,生成10000个随机数之后)。
也许这是幼稚的,但我希望这可以改善一些方面的prng类周期大小,对速度的影响可以忽略不计。我错了什么?
我关心的是生成uuid(fast),它基本上是128位的数字,应该是“真正唯一的”。我所关心的是,使用周期接近'just'2^128的现代PRGN-like-xorshift族,熵种子PRNG发生器的碰撞几率并不像真正随机数的碰撞几率那么小。
最佳答案
与普通的prng相比,这些改进只是很小的。例如,通过对连续结果进行异或运算,可以消除用于掩盖结果的单个真随机数。这将与连续的普通PRNG数的异或值相同所以,如果你能预测PRNG,对改进后的序列做同样的预测并不难。