首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TRNG Perl脚本查询

TRNG Perl脚本查询
EN

Stack Overflow用户
提问于 2014-01-27 08:35:31
回答 1查看 84关注 0票数 1

我想我似乎已经成功地创建并测试了一个非常简单的脚本,当在Windows VPS上运行时,它可以作为真随机数生成器的构建块。因此,我在想,如果真的这么简单,那么伪随机数生成器的意义是什么?

这是脚本。

代码语言:javascript
复制
#! /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的应用程序,那么有没有人知道为什么依赖这个脚本是错误的呢?

EN

回答 1

Stack Overflow用户

发布于 2014-01-27 11:14:23

你所说的“真随机数生成器”是什么意思还不是很清楚,但你的代码肯定不是。这显然取决于您的系统运行一百万次for循环所需的时间,而一个真正的随机数不会有任何这样的依赖关系。

正如您从上面的输出中所看到的,此脚本似乎工作得很好。

这句话没有多大意义。您只显示了生成器的5个输出,大概可以提供大约200万个可能的输出。请参阅here for example.

这里有几个堆栈溢出问题,它们也提供了一些见解,但主要的结论是,随机数测试可能比你想象的要难得多,“真”随机数生成器仅在软件中是不可能的:

How to test randomness (case in point - Shuffling)

How to unit test a pseudo random number generator?

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

如果我正在创建一个严重依赖于高质量TRNG的应用程序,有没有人知道为什么依赖这个脚本可能是一个错误的原因?

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21371267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档