为什么Java中的SecureRandom称为CS PRNG而不是TRNG?

时间:2011-11-24 15:18:21

标签: java prng

SecureRandom在内部使用其他算法(如Linux的情况),使用NativePRNG,后者又使用/dev/urandom。但/dev/urandom实际上是使用中断事件等来生成熵,类似于真随机数发生器(TRNG)。那么为什么SecureRandom被称为PseudoRandom数字生成器,虽然它依赖于它正在使用的算法的实现?

由于

2 个答案:

答案 0 :(得分:3)

我希望它与保证有关。 /dev/urandom的保证是它将使用随机数据(如果可用),如果需要填写伪随机数据以避免阻塞。因此,如果您使用的是/dev/urandom,则无法声明真正的随机性,即使有时您正在使用它。

documentation for SecureRandom中说:

  

许多SecureRandom实现采用伪随机数生成器(PRNG)的形式,这意味着它们使用确定性算法从真正的随机种子生成伪随机序列。其他实现可能会生成真正的随机数,而其他实现可能会使用这两种技术的组合。

因此,SecureRandom的保证只能是伪随机工作,如果允许任何实现的话。它可能会做得更好,但那不是合同。

答案 1 :(得分:1)

并非所有操作系统都为/ dev / random实现相同的功能,并且不能保证它不是算法(尽管大多数现代系统都使用中断等)。这就是为什么Java将其称为PRNG。

Linux上的

/ dev / random是一个TRNG。