这个指数分布采样器是加密安全的吗?

时间:2017-05-18 18:22:50

标签: 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),因为它不统一。

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

1 个答案:

答案 0 :(得分:2)

,呈现的指数分布式采样器加密不安全。 JavaScript Math.random()在加密方面不安全,而您用于对分发进行抽样的inverse transform method并未改变这一事实。

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

然而,您可能会对术语感到困惑。您是否真的需要大量的不可预测性来进行加密,或者只是需要大量的统计随机性?

如果你真的需要加密安全性,那么使用CSPRNG转换为浮点间隔[0,1,而不是Math.random(),否则你应该没有一个简单的高质量{ {3}}