問題タブ [prng]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - シードをランダム化すると、より多くの乱数が作成されますか?
RNGについて3つ質問があります。
1 つ目は、シードとして使用できるデータです。私はいつも時間を使ってきましたが、他にも簡単に入手できる種があるはずです.
c++ にはどのような簡単に利用できるシードがありますか?
RNG から出てくる次の値に基づいてランダムな間隔で RNG を再シードし、質問 1 への回答からランダムにシードを選択した場合、予測が困難でよりランダムな疑似ランダム チェーンが作成されますか?
最後に、C++ で範囲内の乱数を取得する最良の方法は何ですか? 私はモジュラス演算子を使用してきましたが、範囲内で均等に分散し、AI の決定のように高低を優先しないものが必要です。
security - 予測可能な乱数ジェネレーターは、出力をSHA-1した後、どのようにしてより安全になりますか?
この記事は次のように述べています
メルセンヌツイスターは非常に優れた疑似乱数ジェネレーターであるという事実にもかかわらず、非常に単純な理由から、それ自体では暗号的に安全ではありません。ジェネレータの将来のすべての状態は、ジェネレータが常に持つ状態から判断でき、その状態を提供するには、624個の32ビット出力または19,937個の1ビット出力で十分です。暗号化に役立つキーストリームを取得する1つの方法として、メルセンヌツイスターの出力でSHA-1などの暗号的に安全なハッシュ関数を使用することが推奨されています。
しかし、出力をダイジェストすると安全性が高まる理由については言及されていません。そして正直なところ、なぜそうなのかわかりません。メルセンヌツイスターの周期は2^19937-1ですが、私の推論は、線形合同法などの定期的なPRNGにも当てはまると思います。安全な一方向性関数hの特性により、hは単射関数と考えることができます(そうでない場合は衝突が発生する可能性があります)。したがって、定義域から範囲に値を1対1でマッピングするだけです。
この考えを念頭に置いて、ハッシュ値は元のメルセンヌツイスターが行ったのとまったく同じ定期的な動作を生成すると主張します。これは、1つの期間のすべての値を観察し、値が繰り返し開始された場合、将来のすべての値を完全に予測できることを意味します。
これは、パスワードベースの暗号化( PKCS#5 )に適用されるのと同じ原則に関連していると思います-パスワードのドメインは十分なエントロピーを提供しないため、パスワードをハッシュするだけでは追加のエントロピーは追加されません-それが必要な理由ですパスワードをハッシュする前にソルトします。ここでもまったく同じ原理が当てはまると思います。
最終的に私を納得させた1つの簡単な例:常に1の「乱数」を生成する非常に悪いPRNGがあるとします。次に、SHA-1が完全な一方向性関数であっても、SHA-1を出力に適用すると常に同じ値を生成するため、出力は以前と同じように予測可能になります。
それでも、その記事には真実があると信じたいので、確かに何かを見落としていたに違いありません。あなたは私を助けることができます?大部分、私は私の議論からシード値を省略しました-多分これは魔法が起こる場所ですか?
security - 乱数生成のシードとして時間を使用することの何が (他に) 間違っていますか?
time はシード空間のサイズを効果的に縮小するため、乱数生成のシードとして安全ではないことを理解しています。
しかし、私はセキュリティを気にしないと言います。たとえば、カード ゲームのモンテカルロ シミュレーションを行っているとします。ただし、可能な限り真のランダム性に近づけることに気を配っています。シードとしての時間は出力のランダム性に影響しますか? この場合、PRNG の選択はシードよりも重要だと思います。
c - WELL512を使用して特定の範囲の乱数を取得する
この論文で説明されているWELL512疑似乱数ジェネレータ関数を使用しています。この関数はランダムなunsigned long
値を返します。
この戻り値を使用して、特定の範囲内のランダムな実数を生成するにはどうすればよいですか。たとえば、340.92491から859812.53198までの浮動小数点数です。
C rand()関数のドキュメントは、modの使用に対して警告しているようです。
c++ - 乱数発生器にバイアスをかけるにはどのような方法がありますか?
私は単語ジェネレーターを構築しました。それは長さを選択し、アルファベットの文字をランダムに選択して単語を構成します。
プログラムは動作しますが、出力の 99% は英語の構造を観察していないためゴミです。
一般的な文字をより頻繁に使用するように RNG にバイアスをかけるための私のオプションは何ですか?
私は stl から rand() を使用しています。
linux - RNG は /dev/random よりも高速ですが、暗号学的に有用ですか?
特定の暗号化アプリケーションの初期化ベクトルに一度に 32 バイトなど、品質のランダムなバイトを必要とするいくつかの作業を開始しました。/dev/random
私の問題は、これが同時に複数回呼び出される可能性があり、ブロックの問題がエントロピーの収集を待つ余裕がないことです。
それを使用して、他のアルゴリズムをシードすることもでき/dev/urandom
ます。私は、ある種の明確に定義された方法を好みます。
(同時)キー生成などに使用するのに十分適した、標準のPRNGよりも考えられる方法を知っていますか?
大きなシードを持つ RC4 などの特定の暗号は、ランダムな出力を生成するのに十分でしょうか? (これを使用する /dev/frandom 実装を見たことがありますが、完全には確信が持てません。)
それが何かを意味する場合、私はヘッドレス Debian サーバーを使用しています。これは、エントロピー収集が不足しているためです。
c# - 2つの数値の間でシャッフルされた整数のリストを生成するにはどうすればよいですか?
次のようなシャッフルされた整数のセットを作成したいと思います。
- 同じシードが与えられると、シャッフルは毎回同じになります
- 繰り返しますが、シャッフルされたセットのすべての番号は、繰り返される前に1回だけ使用されます。
- 大規模なセットで機能します(0から20億の間のすべての数値が必要です)
- たとえば、100〜150の範囲で生成されます。
このオプションは、たとえば、0から指定された数までのすべての数値が必要な場合に優れたソリューションを提供します。シャッフルではなくPRNGを使用してシャッフルされた範囲を生成する
何か案は?
javascript - JavaScript疑似乱数シーケンスジェネレータ
最初のシードを指定して、決定論的な(つまり繰り返し可能な)疑似乱数のシーケンスを生成し、そのシーケンスからn番目の項目を選択する必要があります。
JavaScriptのランダム関数がシード可能である場合、私は次のことを行うことができます。
ただし、そうではなく、代替のシード可能なPRNGは少し遅いように見えます。250番目の番号を要求すると高額になります。
ハッシュは私がここで欲しいものだと思います。おそらく次のようなものですmd5(seed + seq) % max
が、JavaScriptにはmd5()がなく、コードでそれを行う場合は、おそらくハッシュのより良い選択があります。
ここで関数が欲しいのですが
x = randomNth(seed, seq, maxVal) // x is int && x >= 0 && x < maxVal
または、理想的には
x = randomNth(seed, seq) // x >= 0 && x < 1, same as Math.random()
その他の要件:
- node.jsとブラウザで実行する必要があります
- 数値は統計的にランダムである必要があります(または期間が短くなるため、十分に近い)
- O(1)であり、適度にパフォーマンスが高い必要があります
php - スクラッチ カードのコード
私はシンプルで、明確で、直接的であるように努めます。私の問題は次のとおりです。スクラッチ カードのコードを生成する必要があるプロジェクトがあります。スクラッチ カードは、携帯電話の充電に使用するものと同じように印刷されています。
システムは、人々がカードを購入し、カードのコードを取得し、TOIP サーバー (アスタリスク) を呼び出してコードを挿入し、サービスにアクセスするというものです。正しいコードの入力を 3 回試行します。
これらのコードを生成する PHP プログラムを作成しようと考えたので、必ず PRNG (Pseudo Random Number Generator) を経由する必要があります。私の制約は次のとおりです。
-人々が電話をかけているので、コードは長すぎてはいけませんが、セキュリティを確保するのに十分な長さであるべきです.
-入力されたコードとデータベースに保存されているコードを比較するときに、システムが十分に高速である必要があります (統計目的で必要です)。
だから私の質問は:
-PRNG を使用するのは正しいですか?
- はいの場合、適切な乱数を生成するのに十分強力なものを知っていますか?
-業界で使用されている標準は何ですか?
-比較が何百万ものコードで行われる場合、比較アルゴリズムを十分に高速にするにはどうすればよいですか?
お時間とご回答ありがとうございます。
language-agnostic - PRNGの初期シード値を抽出していますか?
私は最近、次の場合に PRNG の結果を予測できることを読みました。
- どのアルゴリズムが使用されているかを把握します。
- 連続したデータ ポイントがあります。
データポイントのみから PRNG に使用されるシードを把握することは可能ですか?