【问题标题】:Are true random values generated in the past and stored still considered random?过去生成并存储的真实随机值是否仍被视为随机?
【发布时间】:2014-10-11 09:54:50
【问题描述】:

假设我有一个客户端服务,每 10 秒需要真正的随机整数值(4 个字节)。

因此,我购买了一个硬件,它可以根据大气噪声生成真正的随机值。该设备每秒最多可生成 8 个字节的随机数据。

就我现在的情况,每 10 秒,我的客户端服务可以查询设备,并从生成的 8 个字节中提取 4 个字节。该值被客户端服务立即使用,并被认为是真正的随机。

现在假设我实例化了 3 个新的客户端服务(总共 4 个),运行相同的算法。服务都是同步的,所以会同时查询设备。

现在发生的情况是,在 10 秒标记处,只有 2 个服务(共 4 个)会立即收到随机值,而其他 2 个服务必须等待长达 1 秒才能收到它们的值.这是不可取的。

由于我宁愿最大限度地利用我昂贵的设备,我想出了这个解决方案:位于服务器(连接设备的地方)上的软件实际上会收集设备中的所有值,并将它们存储在一个队列(如果它对 RAM 来说太大,它将自动出队)。现在,当客户端服务进行查询时,随机值将从该队列中出列,而不是直接从设备中提取。和以前一样,每个随机值只使用一次,但在这种情况下,队列中的一些值可能已经坐了很长时间。

我担心我可能会以错误的方式使用此解决方案。我无法摆脱那种烦人的感觉,即使用过去生成的值,而不是“新鲜”的值,我以某种方式将其变回伪随机生成器。我的恐惧是正确的,还是没有根据的?

【问题讨论】:

  • 如果一棵树倒在森林里……
  • 如果我掷骰子,然后闭上眼睛几秒钟,然后看看我掷的是什么。那卷不再是随机的了吗?

标签: random prng


【解决方案1】:

归根结底,唯一重要的是您的 random 函数会生成一系列统计随机值。

为此,您的实现是一次获取一个值,还是一次获取所有值并将它们放入队列中并不重要。只要它们足够随机,就可以了。

【讨论】:

    【解决方案2】:

    我必须同意三十二上校的观点。并不是说客户服务可以选择他们想要使用的特定时间或价值。只要该值尚未被使用,它就不是问题。

    您可以做的就是在所有 4 台设备都向设备请求新值后清除生成的值。既然你说它们都是同时连接和查询的,那么这应该是每 10 秒一次。这应该是足够的时间来生成至少 4 个新的随机数。

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2013-11-09
      • 2013-10-06
      • 2016-03-08
      • 2020-12-15
      • 1970-01-01
      • 2021-04-23
      相关资源
      最近更新 更多