質問

このような方法でPRNGを簡単に構築することはできませんか?なぜ行われないのですか?

つまり、私が知っている限りでは、シードnを取得するPRNGを単純に作成できます。ランダムビットを要求すると、計算可能な通常数のバイナリ展開のn番目の桁を取得し、nをインクリメントします。

最初に考えたのは、おそらく計算可能な通常の数字を見つけられなかったが、 have 。残りの考えは、そうしない正当な理由があるということです-そのような方法にはないPRNGのいくつかの特性があるか、どういうわけか非実用的であるか、そうでなければ他の方法に打ち勝ちます。

役に立ちましたか?

解決

それにより、出力の予測が非常に簡単になります。

たとえば、整数0x54a30b7fを生成するとします。 4GiBのpi(またはランダムノイズまたは実際の通常の数値)がある場合、その特定の整数が1つ(またはほんの少し)しか発生しない可能性があり、将来のすべての数値をかなり高い確率で予測できます。これは、暗号的に強力なPRNGの場合には深刻な問題です。単純なシーケンシャルスキャンの代わりに何らかの関数を使用する場合は、その関数に従う必要があります。それを追跡するのが十分に困難な場合は、それ自体がPRNGになります。

ジェネレータの暗号強度を気にしない場合は、乱数を生成するよりコンパクトな方法があります。たとえば、 Mersenne Twister は、4GiBルックアップテーブルを必要とせずにはるかに長い期間があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top