使用单个随机数生成器 (RNG) 生成多个数字与每个生成器生成一个数字并丢弃它之间有区别吗?两种实现都生成同样随机的数字吗?正常的 RNG 和安全的 RNG 之间有区别吗?
我有一个 Web 应用程序,它应该代表客户生成一个随机数列表。也就是说,从每个客户的角度来看,这些数字应该是随机的。这是否意味着我需要为每个客户端 session 保留一个单独的随机 RNG?或者我可以在所有 session 中共享一个 RNG 吗?或者我可以根据每个请求创建和丢弃 RNG 吗?
更新 : 这个问题与 Is a subset of a random sequence also random? 有关
最佳答案
基于硬件的、真正的 [1] 随机数生成器是可能的,但不是微不足道的,而且通常具有较低的平均速率。可用性也可能是一个问题[2]。结合“随机数发生器”搜索“散粒噪声”或“放射性衰变”应该会返回一些命中。
这些系统不需要维护状态。可能不是你要找的。
正如其他人所指出的,软件系统只是伪随机的,必须保持状态。
一种折衷方案是使用基于硬件的 RNG 来提供熵池(存储状态),该池可用于播种 PRNG。这在/dev/random [3] 和/dev/urandom [4] 的 linux 实现中非常明确地完成。
这些是关于/dev/random 熵池的默认输入到底有多随机的一些争论。
脚注:
关于random - 是否存在无状态随机数生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/203382/