这个指数分布采样器在密码学上是安全的吗?
Is this exponential distribution sampler cryptographically secure?
我正在尝试使用 JavaScript 创建一个指数随机数生成器,它使用之前 Whosebug 答案中的方法工作。
:
function randomNumGen() {
var u = Math.random();
var mu = 0.3;
return -Math.log(1.0 - u) / mu;
}
但是,我后来发现使用 Math.random()
从另一个 Whosebug 答案来看在密码学上并不安全。但是,我不完全确定它在我的情况下是否在密码学上是安全的,因为它使用 u
的均匀随机性反对指数分布来制作样本,但我认为它不安全。
在第二个站点中,它推荐其他库,但是它们使用不同的分布,而不是指数分布。我想我不能简单地将 Math.random()
替换为他们的(例如 window.crypto.getRandomValues),因为它不统一。
对我能做什么有什么见解吗?
否,所呈现的指数分布采样器加密不安全。 JavaScript 的 Math.random()
在密码学上是不安全的,您用于对分布进行采样的 inverse transform method 不会改变这一事实。
虽然我不清楚你为什么真的想使用加密安全随机源,但如果你愿意,你可以。
但是您可能对术语感到困惑。出于加密目的,您真的需要大量的不可预测性,还是只需要大量的统计随机性?
如果您确实需要密码安全,请使用 CSPRNG transformed to the floating-point interval [0, 1) instead of Math.random()
, otherwise you should be fine with a simple high-quality PRNG。
我正在尝试使用 JavaScript 创建一个指数随机数生成器,它使用之前 Whosebug 答案中的方法工作。 :
function randomNumGen() {
var u = Math.random();
var mu = 0.3;
return -Math.log(1.0 - u) / mu;
}
但是,我后来发现使用 Math.random()
从另一个 Whosebug 答案来看在密码学上并不安全。但是,我不完全确定它在我的情况下是否在密码学上是安全的,因为它使用 u
的均匀随机性反对指数分布来制作样本,但我认为它不安全。
在第二个站点中,它推荐其他库,但是它们使用不同的分布,而不是指数分布。我想我不能简单地将 Math.random()
替换为他们的(例如 window.crypto.getRandomValues),因为它不统一。
对我能做什么有什么见解吗?
否,所呈现的指数分布采样器加密不安全。 JavaScript 的 Math.random()
在密码学上是不安全的,您用于对分布进行采样的 inverse transform method 不会改变这一事实。
虽然我不清楚你为什么真的想使用加密安全随机源,但如果你愿意,你可以。
但是您可能对术语感到困惑。出于加密目的,您真的需要大量的不可预测性,还是只需要大量的统计随机性?
如果您确实需要密码安全,请使用 CSPRNG transformed to the floating-point interval [0, 1) instead of Math.random()
, otherwise you should be fine with a simple high-quality PRNG。