Java 的 KeyGenerator 默认是随机安全的吗?

Is Java's KeyGenerator random secure by default?

以下行通过 jdk 的 KeyGenerator.

生成 sha512 机密
SecretKey secretKey = KeyGenerator.getInstance("HmacSHA512").generateKey();

我想知道随机密钥是否安全?

或者,我应该在生成密钥之前使用 SecureRandom 实例显式初始化生成器吗?

为了完整起见,您可以使用 512 位的密钥大小调用 init 方法。但是,HMAC 的默认密钥大小与输出的大小相同。所以从这个意义上说,假设这个密钥大小是默认设置的是非常合理的。实际上,应避免使用常量值调用 init 方法。

至于实现,如果您不显式调用 init 方法,则很可能会假定默认值并选择 SecureRandom 实例。但是,从某种意义上说,这是一个逻辑提供程序默认值,您是正确的;它应该 已被指定为对所有提供商的要求。

这里发生的事情的一些想法在 KeyGeneratorCore 中。所有的提供程序代码都在线,所以找不到它是因为看得不够深入,尽管你需要一些 Google foo 才能找到它。