真正的多线程随机数

Genuine Random Numbers with Multithreading

程序只能生成伪随机数,因为它始终是确定性的。但是使用多线程你会得到不确定性,因为 scheduling/cache/swaps 等的所有影响。 你能用这个效果来产生真正的随机数吗,因为这不仅取决于确定性代码,还取决于延迟等物理现象

这个一直在用。如果您在许多类 Unix 系统上从 /dev/random 读取数据,您可能会将 "environmental" 效果混合到熵中。但不要过分解读,因为 "real random numbers." 您所描述的效果仍然只在有限范围内变化,在某些情况下可能会在 非常 有限范围内变化,例如它们非常接近确定性(如果您围绕 RNG 构建安全性,"close" 通常就足够了)。

此问题的经典版本是路由器启动并使用来自网络的延迟信息为其 RNG 播种。在一个非常嘈杂的网络中,这可能是非常随机的。在相当安静的网络中,这可能是非常可预测的。这是一个非常现实的问题,在嵌入式系统中很难解决。

从中吸取的教训是避免发明自己的随机数生成器,尤其是当您在它们之上构建安全系统时。研究您的系统提供的 RNG,并使用它们(或在着手新解决方案之前研究加密随机数生成)。

如果您对这个主题感兴趣,random.org 有一些很好的介绍材料,以及基于大气数据的实现。 (无论是 "true random" 还是只是 "deterministic based on a state we don't know" 都是物理学家的争论,但它与我们所得到的一样接近。)