1

SecureRandom 在内部使用了其他算法,例如 in case of Linux,使用NativePRNGwhich 反过来又使用/dev/urandom. 但/dev/urandom实际上是使用中断事件等来生成类似于真随机数生成器 (TRNG) 的熵。那么为什么SecureRandomPseudoRandom数字生成器,虽然它依赖于它所使用的算法的实现呢?

谢谢

4

2 回答 2

3

我希望这与保证有关。的保证/dev/urandom是,如果可用,它将使用随机数据,并在必要时填充伪随机数据以避免阻塞。因此,如果您使用/dev/urandom,则不能声称真正的随机性,即使有时您会得到它。

在它的文档中SecureRandom说:

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

因此,SecureRandom如果允许任何实现这样做,则只能保证它以伪随机方式工作。它也许可以做得更好,但这不是合同。

于 2011-11-24T15:21:45.263 回答
1

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

Linux 上的 /dev/random 是一个 TRNG。

于 2011-11-24T15:29:10.350 回答