0

乱数とその発生器に関するさまざまな記事を読んでいます。それらから私が導き出す重要な結論は通常 3 つあります。

  • 乱数は本当にランダムではない
  • 多くの場合、バイアスがあります (モジュロ バイアス)。
  • 人間は、「ランダムに行動」しようとするとき、乱数ジェネレーターになることができません

したがって、これらの観察の後者のほとんどを念頭に置いて、どうすれば

  1. 私たちが見ている数列が本当にランダムかどうかを教えてください。さらに重要なことは、
  2. 上記のシーケンスが本当にランダムであることを証明できる方法はありますか?
4

4 に答える 4

0

非常に簡単なテスト:

本当に乱数をテストしたい場合は、例として 1 ~ 100 の乱数を 100 回出力するプログラムをシミュレートできます。次に、それらの数字を見て、パターンがあるかどうかを確認します。次に、プログラムを数回再起動してプロセスを繰り返すことにより、そのテストに従います。すべてのデータを調べて、乱数が常にランダムなのか、個々のテストでランダムなだけなのか、まったくランダムでないのかを判断します。:P

于 2012-08-17T15:05:34.973 に答える
0

1,000,000 以上の十分な大きさのサンプル セットを生成する限り、多かれ少なかれ (疑似) 乱数の均一な分散が発生するはずです。ただし、数学の天才の中には、これを信用しない方法があると確信しています。確率の法則により、他の数列と同じように 1 つの数字の連続を得ることができるからです。

私が読んだことから、乱数が本当に必要な場合は、暗号化ライブラリが使用するものを試して再利用するのが最善です。暗号化の分野は明らかに複雑で、鍵の生成に乱数を使用しています。「リバーシブル認証トークン」というタイトルのOWASPガイドのセクションから、これは...

安全な認証トークンを生成する唯一の方法は、それらのシーケンスを予測する方法がないことを確認することです。つまり、真の乱数です。

コンピューターは真の乱数を生成できないと主張することもできますが、マウスの動きやキーストロークを読み取るなどの新しい手法を使用してエントロピーを改善することで、乱数ジェネレーターのランダム性が大幅に向上しました。これを自分で実装しようとしないことが重要です。既存の実証済みの実装を使用することが強く望まれます。

ほとんどのオペレーティング システムには、ほぼすべてのプログラミング言語から呼び出すことができる乱数を生成する関数が含まれています。

私の見解では、自分で暗号化ライブラリをコーディングしているのでなければ (Java 暗号化拡張機能を使用するなど)、暗号化ライブラリを信頼して、自分で証明する必要はありません。

于 2012-08-17T15:22:04.477 に答える
0

乱数ジェネレーターのテストは、おそらく探したいもの次第です。純粋な非反復性でさえ、ランダム性を保証するものではありません。

認証の目的で乱数ジェネレーターをテストする会社がいくつかあります (オンライン カジノなど)。私がすぐに見つけたのは iTech Labs と呼ばれるものですが、そのテスト方法のページには、技術的な詳細に関して多くの要望が残されています。

他のテスターや認証機関は、認証に必要なデータを公開しています。ここにはより具体的な詳細がありますが、必要なほど多くはありません。

潜在的に統計分析を行い、乱数ジェネレーターの結果を「真の」乱数ソースと比較することはできますが、真の乱数ソースを可能性空間に変換しようとすることによる偏りについて議論がなされる可能性があります。

于 2012-08-17T15:06:33.207 に答える
0

ランダム性テストは、シーケンスの数学的特性を検証します。たとえば、エントリ頻度 (すべてのシンボルが同じ頻度を持つことが期待される)、ローカル分散、シーケンス分析 (シンボルの確率は前のものに依存してはなりません)。明確な証拠は存在しませんが、品質係数 (シーケンスが本当にランダムである確率) があります。別の基準は、圧縮性に基づいている可能性があります。真のランダム性には最大のエントロピーがあり、したがって圧縮できません。もちろん、このテストはランダム性について信頼できるものではありませんが、zlib などの既製のツールを使用して、迅速で汚れたテストを行うことができます。

于 2012-08-17T15:17:03.150 に答える