ランダムジェネレーターを作成する方法
On 2月 10, 2021 by adminランダムジェネレーターを実装するにはどうすればよいですか?
私は言語の呼び出しについて話していません mathRandom()メソッドですが、完全にランダムな数値を生成するルーチンの実装です。
コメント
- I ' true のランダム性は現在不可能であると思い切って言います。
- @Dynamic同じ考えだと思いますが、私はいつもそうしています必要に応じてランダム関数を呼び出しましたが、'ランダムメソッドの実装方法がわかりません。
- "完全にランダム"は非常に深いウサギの穴です。
- @Dynamic:シーケンスを真にランダムなデータと区別できないようにするのは、実際には簡単です。ハードウェアサポートで外の世界に目を向けてください。原子および亜原子物理学(原子崩壊、光子衝突センサータイプのイベント)は(拡張o f現在の科学理論)本当にランダムで測定が簡単です。大規模な熱力学は非常に混沌としているため、ミクロスケールなどでマクロシステムを検査するときにランダムと見なすことができます。デジタルカメラセンサーからのノイズが良い例です…..
回答
真に乱数の鍵は、ランダムなデータソースです。これは、キーボードイベントやネットワークイベントの遅延などの情報である場合があります。高品質のランダムデータが必要な場合は、放射性崩壊の可能性があります。 SGIは lavarand を実装しました。これは、溶岩ランプのデジタル画像から乱数ジェネレーターのシードを引き出しました。これは、乱数ジェネレーターと見なすには十分でした。
真にランダムなデータ以外では、決定論的でありながら混沌としたシステムで作業できます。たとえば、メルセンヌツイスターです。このような状況では、ジェネレーターに数値をシードし、それを前方に実行して疑似乱数を取得します。これらは、誰かがシード(およびシーケンス内の次の番号)を決定できるかどうかが重要ではないゲームなどには十分です。
特許 5,732,138 および http://www.lavarnd.org/ を参照してください。
コメント
- +1シードの気象測定などのさまざまなデータソースを検討します。 wiki.cdyne .com /?title = CDYNE_Weather
- @ emeraldcode.com気象測定の課題は、完全にランダムではないことです。気象の予測に関する分野全体があります。その後、気温は上昇する傾向があります。冬は夏よりも寒いです。hotbitsシステムは、予測不可能な2つの減衰イベントのタイミングのランダム性を使用します(イベント1からイベント2までの時間を測定し、イベント3からイベント4までの時間を測定します-1の場合:2 == 3:4、データを破棄します。1:2 3:4、ランダムビットは0です。1:2 > 3:4の場合、ランダムビットは1です。
- 'は、風速、気圧、温度、湿度などについて話します。測定値のサンプルを取得すると、その点でランダム性に異議を唱えるのに苦労する可能性があります。また、十分な精度で取得された温度だけでも非常にランダムです。
回答
どのようなランダムな話をしていますかについて?
数学的な意味でランダムに定義する2つの主要なプロパティがあります。1つ目は予測不可能性そして2番目は一様分布です。
あなたが話しているなら1つ目は、ソフトウェア内で完全に生成すること(および適切に実行すること)は一般にほとんど不可能です。ヒューマンインターフェイスデバイスからエントロピーを収集するなど、いくつかの方法があります。 Linuxでは/dev/random
ですが、有用であるためにかなり低いレベルのエントロピーを生成します。他の人はすでにいくつかのハードウェアの実装を指摘しています。それらはすべて物理理論の奥深くにルーツを持っています(光子が検出器に当たる正確な瞬間は本当にランダムであるという私たちの信念のように)。これには、 Blum-Blum-Shub などのソフトウェアアルゴリズムがいくつかあります。一般に、予測不可能性が必要な場合は、 PRNGを記述せず、確立されたものを使用する。これは特に暗号に当てはまります。
ランダム関数の他の重要なプロパティは、実際にはかなり簡単に満たすことができます。多くの例があります。このうち、 RC4 の背後にあるRNGのように、リニアフィードバックシフトレジスタ(これは実際に使用されました)暗号化についても、かつては安全性が不十分であることが判明した)など。標準Cライブラリrand()
でさえ、おそらくこの目的には問題なく機能します。
最も重要:2つのプロパティのどちらがニーズの基本であるかを確認してください。 予測不可能 PRNGも均一に分散されますが、その逆は当てはまりません。また、ある種の「エンジン」(ゲームエンジンなど)の内部でランダム性を公開する場合は、実際に簡単であることに驚かれる可能性があるため、他の人がシステムをゲームできないようにしてください。たとえば、CSS(DVD暗号化アルゴリズム)は暗号化の目的で2つのLSFRを使用し、かなり簡単に破られました。
回答
最初、ソフトウェアで真の乱数を生成することはできません。疑似乱数を生成できるさまざまなアルゴリズムがたくさんあります。疑似乱数が必要な理由に応じて(つまり、暗号化でそれらを使用している場合、要件は多くなります)異なる)、通常は GNU科学ライブラリの乱数ジェネレーターのようなものを使用します(もちろん、これは任意の言語で実装できます)。
回答
ハードウェア。どこからでもエントロピーを収集できるハードウェアに接続する必要があります。ラジオ、ラバランプにウェブカメラを置く、またはユーザーにギバリと入力させるか、マウスで遊んでください。現実の世界との接触がなければ、真のランダム性を生成することは不可能です。これは重要な領域です。 f研究、そして多くの仕事がそれに注がれました。 「新しい道を切り開くことになるので、巨人の肩の上に立ってウィキペディアのエントリを読み始める必要があります。
「乱数の生成は重要すぎて任せられません。チャンス。 “
-Robert R. Coveyou
編集
だから私は必要なハードウェアは実際には単なるCMOSチップであることを学びました。安いカメラの並べ替え。暗闇の中でそれを維持し、感度を高く設定するだけで、明らかにそれが観察する微小な変動は、量子力学にルーツがあります。これは、私たちが実生活でエントロピーを導き出す場所です。
回答
前回見たのは、かなり前のことでしたが、疑似乱数ジェネレーター(PRNG)の実装に関する正規のリファレンスです。 )は Knuth、Vol。 2、「半数値アルゴリズム」。
少なくともクヌースに目を通すまでは、独自のPRNGを実装しようとさえ考えないでください。
コメントを残す