使用时间作为随机数生成的种子有什么问题?

时间:2011-07-12 19:52:11

标签: security random simulation montecarlo prng

我知道时间是随机数生成的不安全种子,因为它有效地reduces the size of the seed space

但是说我不关心安全问题。例如,假设我正在为纸牌游戏进行蒙特卡罗模拟。但是,我要关心尽可能接近真正的随机性。作为种子的时间会影响我的输出的随机性吗?在这种情况下,我认为PRNG的选择比种子更重要。

4 个答案:

答案 0 :(得分:5)

出于安全考虑,您显然需要高熵种子。而时间本身无法提供。

出于模拟目的,种子的质量无关紧要,只要它是独一无二的。正如您所指出的那样,PRNG的质量在这里更为重要 甚至游戏中的PRNG也可能需要安全。例如,在多人游戏中,玩家可能会发现PRN​​G的内部状态并使用它来预测未来的随机事件,猜测对手牌,获得更好的战利品......

使用时间播种PRNG的一个常见缺陷是时间不会经常变化。例如,在Windows上,大多数时间相关的函数每隔几毫秒才改变它们的返回值。因此,使用该间隔创建的所有PRNG将返回相同的序列。

答案 1 :(得分:4)

仅仅为了完整起见,Matsumoto等人this paper。很好地说明了初始化方案(即选择种子的方式)对于模拟的重要性。原来糟糕的初始化方案可能会对结果产生强烈偏差,即使RNG算法原则上相当好。

答案 2 :(得分:2)

如果您只是运行程序的单个实例,那么应该没有太多问题。

然而,我看到有人同时启动多个程序,然后每个程序随时间播种。在这种情况下,所有程序都获得相同的随机数字序列 - 特别是我看到人们在每次调用时播种apache进程以使用随机数字作为会话 - id,只是为了找到同时点击网络服务器的不同人获得完全相同的ID。

因此,如果您希望运行多个同时版本的程序,那么使用时间是一个非常糟糕的主意。

答案 3 :(得分:1)

认为您的程序运行速度非常快,并要求系统以极快的间隔作为种子使用时间。您可以获得与答案相同的时间,因此最终会生成相同的随机数。因此,即使在模拟中,低熵也可能是个问题。

考虑到你的系统中有一些其他熵源并不难,甚至你的操作系统都可以提供一些几乎随机的数字,你可以使用它们来增加你的基于时间的种子的熵