1

我想创建一个使用JavaScript的指数随机数生成器,它使用以前的StackOverflow答案中的方法。 :这个指数分布采样器是密码保密的吗?

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

不过,我后来发现,使用Math.random()是不是从另一个StackOverflow答案加密安全。但是,我不完全确定它是否对我来说是密码保密的,因为它使用u的统一随机性对指数分布进行抽样,但我认为它不安全。

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

关于我能做些什么的见解?

+0

你是什么意思的“数学安全”?密码安全涉及状态空间太大而不能暴力,以及根据过去的输出预测未来输出的计算不可行性。在蒙特卡罗模拟(这是主要的指数随机变量将被使用的地方)等事情中,这些考虑都不是非常重要。你试图抵御什么样的攻击? –

+0

@JohnColeman我的歉意,我认为他们是同义词。我试图实现密码安全 – user153882

+1

你想达到什么作为最终目标?指数分布和密码安全的组合看起来有些奇怪。 – kraskevich

回答

2

,呈现的指数分布采样器是加密不安全。 JavaScript的Math.random()加密不安全,您用于抽取分布的inverse transform method不会改变这一事实。

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

但是,您可能对术语感到困惑。你是否真的需要大量的密码学不可预测性,或者只是大量的统计随机性?

如果你真的需要密码学的安全性,然后用CSPRNG转化为浮点区间[0,1),而不是Math.random(),否则你应该罚款用一个简单的高品质PRNG