这个指数分布采样器在密码学上是安全的吗?

Is this exponential distribution sampler cryptographically secure?

我正在尝试使用 JavaScript 创建一个指数随机数生成器,它使用之前 Whosebug 答案中的方法工作。 :

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

但是,我后来发现使用 Math.random() 从另一个 Whosebug 答案来看在密码学上并不安全。但是,我不完全确定它在我的情况下是否在密码学上是安全的,因为它使用 u 的均匀随机性反对指数分布来制作样本,但我认为它不安全。

在第二个站点中,它推荐其他库,但是它们使用不同的分布,而不是指数分布。我想我不能简单地将 Math.random() 替换为他们的(例如 window.crypto.getRandomValues),因为它不统一。

对我能做什么有什么见解吗?

,所呈现的指数分布采样器加密不安全。 JavaScript 的 Math.random() 在密码学上是不安全的,您用于对分布进行采样的 inverse transform method 不会改变这一事实。

虽然我不清楚你为什么真的想使用加密安全随机源,但如果你愿意,你可以。

但是您可能对术语感到困惑。出于加密目的,您真的需要大量的不可预测性,还是只需要大量的统计随机性?

如果您确实需要密码安全,请使用 CSPRNG transformed to the floating-point interval [0, 1) instead of Math.random(), otherwise you should be fine with a simple high-quality PRNG