具有多线程的真正随机数

时间:2015-03-04 14:03:35

标签: multithreading random

程序只能生成伪随机数,因为它总是确定性的。但是对于多线程,你会得到非确定性,因为调度/缓存/交换的所有影响等等。 您是否可以使用此效果生成真实的随机数,因为这不仅取决于确定性代码,还取决于物理现象作为延迟等。

1 个答案:

答案 0 :(得分:1)

这一直在使用。如果您在许多类Unix系统上阅读/dev/random,那么您可能会将“环境”效应混合到熵中。但是不要过度阅读这个“真正的随机数”。您描述的效果仍然只在有限的范围内变化,并且在某些情况下可能会在非常有限的范围内变化,因此它们非常接近确定性(如果您的话,“接近”通常就足够了)围绕您的RNG建立安全性。)

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

这样做的一个教训是避免发明自己的RNG,特别是如果您正在构建安全系统。研究您的系统提供的RNG,并使用它们(或在开始新的解决方案之前研究加密随机数生成)。

如果您对此主题感兴趣,random.org有一些很好的介绍性材料,以及基于大气数据的实施。 (即使这是“真正的随机”还是仅仅是“基于我们不知道的状态的确定性”,对于物理学家来说也是一个论据,但它与我们的关系一样接近。)