random - 是否存在无状态随机数生成器?

标签 random prng stateless

使用单个随机数生成器 (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 熵池的默认输入到底有多随机的一些争论。

脚注:

  • 以我们对物理学的理解的任何问题为模
  • 因为你在等待一个随机进程
  • /dev/random 具有直接访问从被认为是真正或接近随机的各种来源播种的熵池的功能,并在熵耗尽时阻塞
  • /dev/urandom 类似于/dev/random,但是当熵耗尽时,使用加密哈希,这使得熵池有效地成为有状态 PRNG
  • 关于random - 是否存在无状态随机数生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/203382/

    相关文章:

    apache-flink - Flink 用于无状态处理

    java - 我可以在无状态 session bean 中使用实例变量吗?

    c++ - 分布和内部状态

    php - 无状态增量文件哈希上下文恢复

    php - php中的测试数据

    c - Linux下socket如何生成随机文件名?

    java - 如何避免覆盖java中的按钮文本?

    swift - 按下按钮时如何在标签之间随机化?

    c++ - 并行RNG中的错误

    hash - 加密哈希算法可以用作 PRNG 吗?