SecureRandom 在内部使用了其他算法,例如 in case of Linux
,使用NativePRNG
which 反过来又使用/dev/urandom
. 但/dev/urandom
实际上是使用中断事件等来生成类似于真随机数生成器 (TRNG) 的熵。那么为什么SecureRandom
叫PseudoRandom
数字生成器,虽然它依赖于它所使用的算法的实现呢?
谢谢
我希望这与保证有关。的保证/dev/urandom
是,如果可用,它将使用随机数据,并在必要时填充伪随机数据以避免阻塞。因此,如果您使用/dev/urandom
,则不能声称真正的随机性,即使有时您会得到它。
在它的文档中SecureRandom
说:
许多
SecureRandom
实现采用伪随机数生成器 (PRNG) 的形式,这意味着它们使用确定性算法从真正的随机种子生成伪随机序列。其他实现可能会产生真正的随机数,而其他实现可能会使用这两种技术的组合。
因此,SecureRandom
如果允许任何实现这样做,则只能保证它以伪随机方式工作。它也许可以做得更好,但这不是合同。
并非所有操作系统都为 /dev/random 实现相同的功能,并且不能保证它会是算法以外的任何东西(尽管大多数现代系统确实使用中断等)。这就是 Java 将其称为 PRNG 的原因。
Linux 上的 /dev/random 是一个 TRNG。