、、およびような無理数には、小数点の後に一意の非反復シーケンスがあります。このような数値から番目の数字を抽出し(はメソッドが呼び出される回数)、数字をそのまま使用して数字を作成する場合、完全な乱数ジェネレーターを取得する必要はありませんか?たとえば、、および場合、最初の数値は123、2番目の数値は471、次の数値は184などです。
、、およびような無理数には、小数点の後に一意の非反復シーケンスがあります。このような数値から番目の数字を抽出し(はメソッドが呼び出される回数)、数字をそのまま使用して数字を作成する場合、完全な乱数ジェネレーターを取得する必要はありませんか?たとえば、、および場合、最初の数値は123、2番目の数値は471、次の数値は184などです。
回答:
最も明らかな欠点は、無理数に基づいたPRNGアルゴリズムの不必要な複雑さです。たとえば、生成された桁ごとに、LCGよりもはるかに多くの計算が必要です。通常、この複雑さはシーケンスを進めていくにつれて大きくなります。2兆番目のビットで256ビットのπを計算するには、1000台のコンピューターで23日かかりました(2010年に遡ります)-RNGにとってかなり法外な複雑さです。
完全の合理的な定義については、説明するメカニズムは完全な乱数ジェネレーターではありません。
繰り返さないだけでは十分ではありません。10進数は繰り返しありませんが、答えは「常に」ゼロ、場合によっては1であり、それ以外のものではないので、ランダムな数字のひどいジェネレータです。
実際に、または 10進展開ですべての数字が同じ頻度で発生するかどうかはわかりません(そうなると思われますが)。
多くの場合、乱数は予測不可能である必要があります(実際、ランダムな人に「ランダム」の意味を尋ねると、おそらく予測不可能なことを言うでしょう)。既知の定数の数字は完全に予測可能です。
通常、乱数を合理的に迅速に生成したいのですが、数学定数の連続した数字を生成するのは非常に高価になる傾向があります。
しかし、と 数字が統計的にランダムに見えるのは、数字の可能なすべてのシーケンスがほぼ必要な頻度で発生するように見えるという意味で真実です。そのため、たとえば、各数字は10分の1に非常に近い頻度で発生します。100に1に非常に近い各2桁のシーケンスなど。
攻撃者はすべての数字を予測できるため、暗号的には役に立ちません。また、非常に時間がかかります。
/dev/random
を立ち上げると、/dev/urandom
誰かが必ず暗号を立ち上げるでしょう。
(乱数ジェネレーターは単一の通常シーケンスと同じものではないことを多くの人々が指摘した後に更新されました)
から通常のシーケンスを取得できるかどうか(つまり、すべての数値が均一に表示されるかどうか)を尋ねると、mathoverflowにはいくつかの答えがあります。たとえば、Piの数字の分布に関する答えは次のとおりです。
... πは通常の数であると考えられています(〜すべての数字列の均一な分布)。
桁分布データについては、http://www.eveandersson.com/pi/precalculated-frequenciesまたはhttps://thestarman.pcministry.com/math/pi/RandPI.html(最初の1000桁)を参照してください。
mathoverflowには、次の優れた回答もあります。
一般的に、このアプローチは機能しません。「ランダム性」は、多くの異なる数字を取得することを意味しませんが、他の側面もあります。たとえば、古典的なテストでは、2桁または3桁などのすべての組み合わせが同じ頻度で発生するかどうかを確認します。これは非常に単純なテストであり、明らかな非ランダムな結果を除外できますが、実際にはランダムな動作をチェックするにはあまりにも単純すぎます。
これに関する主要な情報源へのリンク集として、ランダムネステストに関するウィキペディアのページを参照してください。彼らはかなり複雑な響きの概念をたくさん述べています。これについて深く掘り下げることはそれほど重要ではありませんが、特定の番号をそのような数字の良いソースとして宣言することは直感的に不可能であることは明らかです。
肯定的な注意:特定の無理数については、もちろんそれを試してみてください。すなわち、十分に大きな桁までの数を計算し、すべての既知のテストを実行します(そのためのツールがあります。上記のリンクを参照してください)。対策は、あなたのユースケースのための良い十分であり、あなたが認識している場合、これは暗号学的用途のために明らかに無用であること、そしてあなたは、最初からやり直す必要がある場合は、必ず同じ番号を取得し、あなたが乗り越える場合品質が低下する可能性がある場合はn
、あなたが選びましたランダム性をテストするには、これらの数値を使用できます。ただし、専用の(擬似)乱数ジェネレーターを使用する方がはるかに優れています。そして、ランダム性の良い物理的ソースに勝るものはありません。
多くの擬似乱数と同様に、それがどのように生成されたかがわかるまで、適切な乱数を提供します。選択した非合理的(非代数的および非超越的)な数字は一般的であり、他の数字よりも簡単に推測できます。あまり一般的ではないジェネレータを選択した場合、この方法で問題は発生しません。