SecureRandom.getInstance(“ DRBG”)使用什么实际算法?

时间:2019-10-09 12:33:08

标签: java random cryptography secure-random

Java introduces the NIST DRBG's中指定的Java 9(JSR 379)JEP 273。但是,NIST文档SP 800-90Ar1(NIST特殊出版物800-90A修订版1:关于使用确定性随机位生成器的随机数生成的建议)指定了总共一种树机制:

  

在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")

那么开发人员如何配置和检测使用哪种算法?

2 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:2)

JEP

  

新的SecureRandomParameters界面,以便可以添加其他输入   提供给新的SecureRandom方法。

从那里我们到达DrbgParameters,其中说

  

实施说明:

     

以下说明适用于SUN中的“ DRBG”实现   JDK参考实现的提供者。这个实现   使用DRBG算法支持Hash_DRBG和HMAC_DRBG机制   SHA-224,SHA-512 / 224,SHA-256,SHA-512 / 256,SHA-384和SHA-512,以及   CTR_DRBG(均使用推导功能,而不使用推导   功能),并使用DRBG算法AES-128,AES-192和AES-256。

     

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

因此,依赖于实现,并且默认情况下,只能通过属性进行切换。