どちらがよりランダムですか?
rand()
また
rand() + rand()
また
rand() * rand()
どうすればこれを判断できますか?つまり。これは本当に私を困惑させています!それらはすべて等しくランダムであるかもしれないと感じるが、どうして絶対に確信できるのだろうか?!
誰?
「よりランダム」であるという概念は、実際には意味がありません。3つの方法では、乱数の分布が異なります。これはMatlabで説明できます。f
最初に、呼び出されたときに10,000個の乱数の配列を提供する関数を定義します。
f = @() rand(10000,1);
次に、3つのメソッドの分布を見てください。
最初の方法でhist(f())
は、一様分布が得られます。
2番目の方法hist(f() + f())
では、中央でピークに達する分布が得られます。
3番目の方法hist(f() .* f())
では、ゼロに近い数値が発生する可能性が高い分布が得られます。
エントロピーの量に関しては、私は推測します。
現在持っているよりも多くのエントロピー(ランダム性)が必要な場合は、暗号的に強力なランダムジェネレーターを使用してください。
なぜそれらが比較可能であるか---攻撃者がによって返される次の疑似乱数値を推測できる場合
rand()
彼が次に推測するのはそれほど難しくないでしょう
rand()*rand()
それにもかかわらず、さまざまな分布についての議論は重要で有効です!