我尝试使用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),因为它不统一。
关于我能做什么的任何见解?
答案 0 :(得分:2)
否,呈现的指数分布式采样器加密不安全。 JavaScript Math.random()
在加密方面不安全,而您用于对分发进行抽样的inverse transform method并未改变这一事实。
虽然我不清楚为什么你真的想要使用加密安全的随机源,但如果你愿意,你可以。
然而,您可能会对术语感到困惑。您是否真的需要大量的不可预测性来进行加密,或者只是需要大量的统计随机性?
如果你真的需要加密安全性,那么使用CSPRNG转换为浮点间隔[0,1,而不是Math.random()
,否则你应该没有一个简单的高质量{ {3}}