1

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 に大きく依存するアプリケーションを作成している場合、その目的のためにこのスクリプトに依存することが間違いである理由を誰かが理解できますか?

4

1 に答える 1

1

「真の乱数ジェネレーター」が何を意味するのかは明確ではありませんが、コードは確かにそうではありません。真の乱数にはそのような依存関係はありませんが、システムが for ループの 100 万回の反復を実行するのにかかる時間にかなり明確に依存しています。

上記の出力からわかるように、このスクリプトは非常にうまく機能しているようです。

この文はそのままではあまり意味がありません。おそらく約 200 万の可能な出力を提供できるジェネレーターの 5 つの出力のみを示しています。RNG がうまく機能するかどうかを判断するために作成された一連の標準テストがあります。これは主に、そのような RNG のテストが微妙で難しいためです。目のテストでは十分ではありません。たとえば、ここを参照してください。

ここにいくつかの洞察を与えるスタックオーバーフローの質問がありますが、主なポイントは、乱数のテストはおそらくあなたが思っているよりもはるかに難しく、「真の」乱数ジェネレーターはソフトウェアだけでは不可能だということです:

ランダム性をテストする方法 (適切なケース - シャッフル)

疑似乱数ジェネレーターを単体テストする方法は?

要約すると、あなたの質問に答えるには:

高品質の TRNG に大きく依存するアプリケーションを作成している場合、その目的のためにこのスクリプトに依存することが間違いである理由を誰かが理解できますか?

主な理由は、真にランダムであることを示していないことです。私の推測では、このコードでいくつかのテストを実行すると、特定の範囲の値が他の範囲よりもはるかに頻繁に表示されることがわかるでしょう。これは、ランダムではないと見なすのに十分であり、それを拒否するのに十分です.

于 2014-01-27T03:14:22.707 に答える