1

Java 9 (JSR 379)引入了JEP 273中指定的 NIST DRBG。然而,NIST 文档SP 800-90Ar1(NIST Special Publication 800-90A Revision 1: Recommendation for Random Number Generation Using Deterministic Random Bit Generators)指定了树机制的总数:

在 800-90Ar1(所有平台)中实现三种 DRBG 机制(Hash_DRBG、HMAC_DRBG、CTR_DRBG)。

但是,尽管您可能期望我们现在可以使用三种方法来创建此类安全随机算法:

  1. SecureRandom.getInstance("Hash_DRBG")
  2. SecureRandom.getInstance("HMAC_DRBG")
  3. SecureRandom.getInstance("CTR_DRBG")

可能有各种配置参数,我们似乎只有一个:

  1. SecureRandom.getInstance("DRBG")

那么开发者如何配置和检测使用了哪一种算法呢?

4

2 回答 2

3

来自JEP

一个新的SecureRandomParameters接口,以便可以为新的 SecureRandom 方法提供额外的输入。

从那里我们到达DrbgParameters它说

实施说明:

以下注释适用于 JDK 参考实现的 SUN 提供者中的“DRBG”实现。此实现支持具有 DRBG 算法 SHA-224、SHA-512/224、SHA-256、SHA-512/256、SHA-384 和 SHA-512 以及 CTR_DRBG 的 Hash_DRBG 和 HMAC_DRBG 机制(都使用推导函数而不使用推导功能)使用 DRBG 算法 AES-128、AES-192 和 AES-256。

机制名称和 DRBG 算法名称由安全属性 securerandom.drbg.config 确定。默认选择是带有 SHA-256 的 Hash_DRBG。

因此,依赖于实现并使用默认 impl,只能使用属性进行切换。

于 2019-10-09T12:44:06.500 回答
3

在调用 SecureRandom 之前使用 Security.SetProperties:

Security.setProperty("securerandom.drbg.config", "Hash_DRBG");

SecureRandom random = SecureRandom.getInstance("DRBG");

有关更多信息,本文提供了一些深入的信息: https ://metebalci.com/blog/everything-about-javas-securerandom/

于 2019-10-09T12:47:58.547 回答