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

标签 javascript random cryptography distribution exponential-distribution

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

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

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

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

关于我能做什么的任何见解?

最佳答案

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

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

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

如果您确实需要密码安全,请使用 CSPRNG转换为浮点区间 [0, 1) 而不是 Math.random(),否则你应该可以使用简单的高质量 PRNG .

关于javascript - 这个指数分布采样器在密码学上是安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44055263/

相关文章:

javascript - 无法使用 JavaScript 计算时差

javascript - 捕捉 SVG : Fixed bottom and animate height only

javascript - 使用 console.log 中的 Javascript 变量作为引用

PostgreSQL:在同一张表上使用 select 语句更新字段

python - 如何取消 PKCS#7/PKCS#5 填充?

javascript - Immer.js 和 eslint fp/no-mutation

java - 在 Java 中随机化整数数组的最快方法

python - 如何对两列的 Python 列表进行打乱?

swift - 海妖 EAPI : Invalid key

ios - Swift 中的 RSA 公钥加密