1

JavaScript を使用して指数乱数ジェネレーターを作成しようとしています。これは、以前のStackOverflow回答のメソッドを使用して機能します。:

function randomNumGen() {
        var u = Math.random();
        var mu = 0.3;
        return -Math.log(1.0 - u) / mu;
}

ただし、別のStackOverflowの回答Math.random()から、 using が暗号的に安全ではないことが後でわかりました。ただし、指数分布に対する均一なランダム性を使用してサンプルを作成するため、私の場合、暗号的に安全かどうかは完全にはわかりませんが、安全ではないと思います。u

2 番目のサイトでは、他のライブラリを推奨していますが、それらは指数関数的ではなく、異なる分布を使用しています。Math.random()統一されていないため、単にそれらのもの(window.crypto.getRandomValuesなど)に置き換えることはできないと思います。

私に何ができるかについての洞察はありますか?

4

1 に答える 1

2

いいえ、提示された指数分布サンプラーは暗号的に安全ではありません。JavaScriptMath.random()は暗号的に安全ではなく、分布のサンプリングに使用する逆変換方法はこの事実を変えません。

なぜ暗号学的に安全なランダム性のソースを本当に使用したいのかは私には明らかではありませんが、よろしければ使用できます。

ただし、用語について混乱している可能性があります。暗号化の目的で大量の予測不可能性が本当に必要なのか、それとも単に大量の統計的ランダム性が必要なのか?

暗号化セキュリティが本当に必要な場合は、の代わりに浮動小数点間隔 [0, 1) に変換されたCSPRNGMath.random()を使用します。それ以外の場合は、単純な高品質のPRNGで問題ありません。

于 2017-05-27T12:45:22.147 に答える