【问题标题】:TRNG Perl script queryTRNG Perl 脚本查询
【发布时间】:2014-02-17 17:24:30
【问题描述】:

我认为我似乎已经成功地创建并测试了一个非常简单的脚本,当它在 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 的应用程序,任何人都可以看出为什么依赖此脚本来达到目的可能是错误的任何原因吗?

【问题讨论】:

  • 为什么您的应用程序严重依赖高质量的 TRNG?
  • @ysth 这个问题现在是假设性的。但是,我将来可能想创建一个尽可能公平的游戏,或者我可能想创建一个超安全的加密应用程序。
  • PRNG 尽可能地随机。编写自己的代码是为了“超安全”而做的最糟糕的事情;而是依赖于久经考验的库。
  • @ysth 非常感谢您的回复。但是,我仍然想知道查询中问题的答案。我读到 Windows PRNG 不是很好,将来可能有很多其他原因导致我想使用 TRNG。你能看出我的脚本有什么具体的潜在问题吗?
  • 这需要很长时间,并且会受到您无法控制的因素的影响(但可能会受到攻击者的影响)

标签: perl random numbers trng


【解决方案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 的应用程序,任何人都可以看出为什么依赖此脚本来达到目的可能是错误的任何原因吗?

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

【讨论】:

    猜你喜欢
    • 2020-06-29
    • 2014-03-10
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    相关资源
    最近更新 更多