我正在尝试使用 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/