タイトルはそれを要約します。 DateTime.Nowや、光センサーなどから生成された数値など、他のソースのランダム性に依存せずに、同じ入力が与えられた場合に可変出力を生成できるアルゴリズムが存在するかどうか知りたい。さらに、アルゴリズムを実行できない順番に、異なる出力を生成する2つの異なる無関係な実行。
DateTime.Nowや光センサーなどから生成された数値などのランダム性を他のソースに依存せずに、同じ入力を指定して可変出力を生成できるアルゴリズムが存在するかどうか知りたいです。
いいえ、それは根本的に不可能です。なぜなら、アルゴリズムの定義自体は、アルゴリズムが明確で決定論的であることです。つまり、同じ入力を指定すると、常に同じ出力が生成されます。ランダム化されたアルゴリズムがありますが、入力としてランダム性が必要です。
さらに、決定論はtheコンピュータハードウェアの最も重要な設計目標です。同じ入力が与えられても同じ出力を生成しないCPUは、ほとんどの目的でまったく役に立たないでしょう。
いいえ、疑似乱数生成アルゴリズムは、同じシード(つまりpseudo-random)を指定すると、常に同じ出力を生成します。
「プログラム」ではなく「アルゴリズム」という言葉を使ったのは面白いと思います。これには、特定のクラスのイエスの回答(RAMのソフトエラー、マルチスレッドRNGでの異なるスレッドインターリーブなど)は含まれません。アルゴリズムのすべての実行で、各反復で同じ入力がランダム性なしに適切に指定されていると仮定すると、実行ごとに同じ出力が生成されます。
そうは言っても、CPU温度のような基本的なものでさえも、それらが適切に正規化されていれば、エントロピーソースとして機能するには予測不可能です。したがって、これが実行された時刻がわかっていれば、「暗号的に安全な」乱数ジェネレータを予測できるとは考えていません。それらの多くは、システムで生成されたエントロピーフィードを利用しています。
同じ種が与えられれば、同じ乱数列が毎回生成されることを保証するために人々が一生懸命働いていることをご存知ですか?これは、結果が完全に再現可能であることを意味するため、モンテカルロシミュレーションなどの場合に望ましい特性です。シードを指定しない場合、時間などが使用されますが、その正確な再現性が本当に望まれます。
これが本当に望ましくない唯一のRNGは、暗号化に使用されるものであり、それらは通常、オペレーティングシステム自体の乱数ソースを使用してこれを実現します(通常の状況では巻き戻しできませんかもしれない豪華なハードウェアを使用)彼らの種を提供する。
アルゴリズムをさまざまなハードウェアプラットフォームに実装し、整数から中央のNビットを取得するなどの手法を使用した場合、整数のエンコーディングが異なる(ビッグ/リトル/ミッドエンディアン)と異なる答えが得られると考えられます。また、浮動小数点数を操作している場合とは異なり、FPUを備えたマシンで実行するときに問題が発生する可能性があります。おそらくデスクトップクラスのマシンでは問題ではありませんが、電話では問題になる可能性があります。