問題タブ [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.

0 投票する
8 に答える
2381 参照

php - Web アプリでエントロピーを収集して (より) 安全な乱数を作成する

数日間の研究と議論の後、訪問者からエントロピーを収集するこの方法を思いつきました (私の研究の歴史はここで見ることができます)

ユーザーが訪問すると、次のコードを実行します。

注: ペッパーは、手動で設定されたサイト/セットアップごとのランダムな文字列です。

次に、次の (My)SQL クエリを実行します。

つまり、訪問者のリクエストのエントロピーを他の人が既に収集したエントロピーと結合します。

それで全部です。

次に、乱数を生成する場合は、収集したエントロピーを出力と組み合わせます。

注: 最後の行は、phpseclib の crypt_rand 関数の修正版の一部です

エントロピー収集/乱数生成に関するスキームやその他のアイデア/情報についてのあなたの意見を教えてください.

ps: /dev/urandom のような乱数ソースについては知っています。このシステムは単なる補助システム、または (これらのソースにアクセスできない場合) フォールバック スキームです。

0 投票する
1 に答える
860 参照

c# - 単純なメソッド呼び出しは本当に遅いですか?

編集:問題を解決しました。原因はテスト手順の誤りであり、私自身の質問に回答できるようになったら詳しく説明します。

この種の質問は一般的に避けるべきであることはわかっていますが、理解できない非常に奇妙な状況に遭遇しました。私は PRNG を実装しようとしており、そのパフォーマンスを System.Random に対してテストしています。私のコードは最大 50 倍遅いことがわかりましたが、問題はアルゴリズムではなく、メソッドを呼び出すだけでした。定数を返しただけでも、何倍も遅くなります。

そこで、random.NextDouble() をラップするメソッド (-1 を返すメソッド) の呼び出しと、random.NextDouble() の直接呼び出しを比較する簡単なテスト プログラムを作成します。テストを Ideone で実行したところ、期待どおりの結果が得られました。すべての時間は似ていて、定数を返すのが最速でした。タイムはすべて0.1秒前後でした。

ただし、Visual Studio 2011 Beta または 2010 C# Express でコンパイルされた同じコードは、それぞれのケースで 4 秒、4 秒、0.1 秒になります。私は間違いなくリリースモードで実行しており、コードの最適化チェックボックスにチェックが入っており、Visual Studio の外部から起動しても同じ結果が得られます。では、Visual Studio では、このような単純なメソッド呼び出しが Ideone よりもはるかに遅いのはなぜでしょうか? ベンチマークに使用したコードは次のとおりです。

0 投票する
1 に答える
14386 参照

assembly - アセンブリ言語乱数ジェネレーター

最近アセンブリ言語を勉強し始めました。私が取り組んでいるプロジェクトでは、線形合同を使用して乱数ジェネレーターを作成する必要があります。3 つの数字を入力するとします。上限、下限、および必要な乱数の数。私が思いついた乱数を取得するための式については....

randomNumber = (シード % (上下) + 下限)

次に、これをコードに入れてみました。私はこれを思いついた

各ループサイクルの最後に乱数を出力する方法に興味があります。そして、上記のコードが意味をなす場合。

前もって感謝します!

0 投票する
4 に答える
14683 参照

c# - 等しい確率で範囲内の乱数

これはC#よりも数学に関連している可能性がありますが、C#ソリューションが必要なので、ここに配置します。

私の質問は、乱数ジェネレーターの確率についてです。より具体的には、可能な各値が等しい確率で返されるかどうかです。

最初の整数と最後の整数の間の数値を返すRandom.Next(int、int)メソッドがあることを知っています(最後は排他的です)。

Random.Next()[オーバーロードなし]は、0からInt32.MaxValue(2147483647)-1の間の値、つまり2147483646を返します。

1〜10の値が必要な場合は、これを呼び出すことができますが、Random.Next(1, 11)1〜10のすべての値が発生する確率は同じですか?

たとえば、範囲は10であるため、2147483646は10で完全に割り切れないため、値1〜6の確率はわずかに高くなります(理由2147483646 % 10 = 6)。もちろん、これは、Random.Next()[オーバーロードなし]内のすべての値が0から2147483646までの値を等しい確率で返すことを前提としています。

範囲内のすべての数値が同じ確率で発生することをどのように保証しますか?一部の人が他の人よりも高い能力を持っていることが不公平である宝くじタイプのシステムについて考えてみましょう。これにRNGに組み込まれたC#を使用するのではなく、単なる例として使用しました。

0 投票する
2 に答える
2696 参照

php - PHP の mt_rand() を使用してハッシュソルトを生成するセキュリティ?

フグのハッシュを生成しようとしていますが、ソルトを生成するためにmt_rand()を頼りにするのが安全かどうか疑問に思っていましたか?

上記の文字 $seed は、許容される 64 文字のフグ塩のアルファベットです。これを使用してパスワードを生成および比較する予定です。

編集

私はこれに気づきませんでしたが、@zerkmsの言うことは真実です. ソルトは、ハッシュにアクセスできるのと同じ時点で既知であるため、ソルトは再利用可能な事前計算された攻撃を防ぐためだけのものです。したがって、目標は非可逆的なソルトではなく、ランダムなソルトです。

それで、これで何か問題がありますか?

また、タイトルと上記のコードで述べたように、私は独自のハッシュ アルゴリズムを実装していません。

更新 2

ロードされている場合に mcrypt 拡張機能を使用すると、次のようになりuniqidます。

アップデート 3

base64_encode は md5 よりも高速ですが、のような無効なフグ文字が含まれてい+ます。だから今md5に変更しました。

0 投票する
4 に答える
586 参照

random - 真の乱数ジェネレータ

私が理解していることから、PRNGは、真にランダムではない数列を生成するシードを使用します。使用するたびに異なるシードでPRNGを繰り返し再利用することにより、真の乱数ジェネレーターを作成することは可能でしょうか。シードは、dev/randomまたは現在の時刻またはクロックティックから抽出できます。そうでない場合、ソフトウェアに実装されている真の乱数ジェネレーターはありますか?

ありがとう

0 投票する
3 に答える
310 参照

java - 特定のシードを持つランダムはまだランダムに見えます

何をする必要があるかを決定するために乱数を多用し、PRNGの出力に基づいて多くの実行パスを持つプログラムがあります。デバッグしようとして頭を悩ませた後、すべての PRNG 呼び出しが、インスタンス化時にハードコードされた番号にシードされた同じ Random インスタンスを参照するようにすることにしました。そうすれば、プログラムを実行するたびに同じバグが表示されるはずです。残念ながら、実行するたびに異なるバグが発生します (動作はほとんど同じように見えますが)。

コードを何度も検索して、Math.random() の呼び出しを逃したものがないことを確認しました。

何か案は?

編集:生成される数値は同じであることを確認しましたが、動作はまだ非決定論的です。このプログラムはマルチスレッドではありません。まだ完全に困惑しています。

したがって、PRNG は期待どおりに動作していますが、まだ非決定論があります。プログラムに非決定性がうっかり持ち込まれてしまう可能性のある方法にはどのようなものがありますか?

0 投票する
5 に答える
2259 参照

random - xy座標からシードを生成する方法

Iv'eはperlinスクリプトに取り組んでいますが、単純な疑似ランダム値の作成に問題があります。

xy座標からシード値を作成できる必要がありますが、x+yには繰り返し値に関する明らかな問題があります。また、それらは負のスペースに入るので、x^yは機能しません。

これがすでにどこかで答えられているが、私が理解できなかったか、それを見つけることができなかった場合は申し訳ありません。

0 投票する
1 に答える
112 参照

random - 乱数発生器の異なるインスタンスを組み合わせますが、依然として低い不一致を維持します

私は 300 の物から選ぶために約 1 億個の乱数を生成しています。それぞれ 10 回選択する 1,000 万の独立したインスタンス (異なるシード) を持つように設定する必要があります。目標は、各アイテムがほぼ同じ回数選択されるように、集計結果の不一致を非常に低くすることです。

問題は通常の prng にあり、一部の数字が他の数字よりも多く選択されます。(lcg と mersenne twister を試しました) 最も選ばれたものと最も選ばれなかったものとの差は、数千から 1 万になる可能性があります)均一な結果。これは、期間が非常に長く、おそらく 1 億では十分ではないためだと思います。理論的には、十分な数を選択すれば、結果は均一になるはずです。(期待値で落ち着くはず)

準乱数ジェネレーターである Sobol に切り替えたところ、1 インスタンスから 1 億のテストではるかに良い結果が得られました。(最多採点と最少採点の差は5程度) しかし、1000万回ずつ10回に分けると統一性がなくなり、prngと同様の結果になりました。Sobol はシーケンスに非常に敏感なようです。ランダムに先にスキップすると、均一性が低下します。

1,000 万の独立したインスタンスを組み合わせた場合でも、準ランダムのような低い不一致を維持できるランダム ジェネレーターのクラスはありますか? それとも理論上不可能なのでしょうか?私が今考えることができる 1 つの解決策は、1,000 万のインスタンス間で共有される 1 つの Sobol ジェネレーターを使用することです。これは事実上、1 つのインスタンスからの 1 億のテストと同じです。

0 投票する
0 に答える
86 参照

c# - Seed 値と出力に基づいて関数を再構築する

C# で書き直したプログラムがあります。書き直しで再作成したいコードを持っていない機能があります。私の調査に基づいて、これはある種の RNG であると考えています。

関数のシード値と出力を分離しました。プログラムの起動時に符号なし整数 (シード) を生成し、そのシードに基づいて 256 uint 配列を生成します。プログラムは配列内の値を使用し、プログラムが配列の最後に到達すると、シードが 1 ずつ増加し、配列の出力が変化します。

私が試したこと: 私が見つけることができるすべての一般的な (?) RNG/PRNG メソッド (mersenne twister、xor32 など) のアルゴリズムを使用してテストをセットアップしました。関数を作成するときにこれらのいずれかを使用した可能性があると考えましたが、出力を再現できませんでした。

私の質問は、出力とシードがある場合、この出力を生成した関数を再現する方法はありますか? できれば再現したい。