TRNG Perl脚本查询

时间:2014-01-27 00:35:31

标签: perl random numbers trng

我认为我似乎已经成功创建并测试了一个非常简单的脚本,该脚本在Windows VPS上运行时可用作真随机数生成器的构建块。因此,我想知道,如果这很容易,那么伪随机数发生器有什么意义呢?

这是脚本。

#! /usr/bin/perl
use Time::HiRes qw(gettimeofday);

($seconds, $microseconds[0]) = gettimeofday;

for ($count = 1; $count <= 1000000; $count++)
  {
  }

($seconds, $microseconds[1]) = gettimeofday;

$difference = $microseconds[1] - $microseconds[0];

print "Content-type:text/html\n\n";
print "$difference";

典型输出:
46980个
-953586
47168个
67242个
59319

从上面的输出可以看出,这个脚本似乎运行得很好。

这个脚本在具有非常快的CPU的专用服务器上是否也能正常工作? VPS服务器上的时间特别不稳定吗?这个脚本在所有Windows系统上都能正常工作吗?

如果我创建的应用程序严重依赖于高质量的TRNG,那么任何人都可以看到为什么依赖此脚本可能是错误的原因吗?

1 个答案:

答案 0 :(得分:1)

“真随机数生成器”的含义并不完全清楚,但您的代码肯定不是一个。它显然取决于系统运行一百万次for循环所需的时间,而一个真正随机的数字则没有任何这样的依赖。

  

从上面的输出可以看出,这个脚本似乎运行得很好。

这句话现在没有多大意义。您只显示了发电机的5个输出,可能提供大约200万个可能的输出。已经制定了一系列标准测试来确定RNG是否工作良好 - 主要是因为这种RNG的测试是微妙和困难的 - 眼睛测试是不够的。见here for example.

以下是一些stackoverflow问题,也提供了一些见解,但主要的一点是,随机数测试可能比你想象的要难得多,并且“真正的”随机数生成器在单独的软件中是不可能的:

How to test randomness (case in point - Shuffling)

How to unit test a pseudo random number generator?

总而言之,回答你的问题:

  

如果我创建的应用程序严重依赖于高质量的TRNG,那么任何人都可以看到为什么依赖此脚本可能是错误的原因吗?

主要原因是你没有证明它是真正随机的。我的猜测是,如果你要对这段代码进行一些测试,你会发现某些值的范围会比其他值更频繁地出现。这足以被认为不是随机的,足以拒绝它。