【问题标题】:What actual algorithm is used by SecureRandom.getInstance("DRBG")?SecureRandom.getInstance("DRBG") 使用什么实际算法?
【发布时间】:2020-02-06 19:05:30
【问题描述】:

Java 9 (JSR 379) introduces the NIST DRBG'sJEP 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")

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

【问题讨论】:

  • [临时评论]:亲爱的 Maarten,很抱歉在这里打扰您。您是否有使用不返回任何 ATR 的芯片卡的经验?您知道 WaveLight 在其产品中使用哪种类型的卡吗?
  • 14443 B 型卡不返回 ATR 或 ATS,并在 13.something MHz 上工作。不应拿起感应卡。我认为最初的 MiFare 卡也不使用 ATS,但现在它们通常提供兼容层。不,我不知道他们使用什么卡或 IC。
  • 感谢亲爱的 Marteen 提供的信息。顺便说一句,卡片是联系方式。
  • 你确定在这种情况下没有 ATR 吗?因为在 ATR 中没有历史字节更有意义。
  • 是的,亲爱的 Maarten,我确定没有 ATR。我想我发现了一些相关的东西。一旦我确定了,我会与你分享数据。

标签: java random cryptography secure-random


【解决方案1】:

来自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。

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

【讨论】:

  • @MaartenBodewes 嗯?我想我会读到相同的属性...
  • 是的,我刚刚意识到这一点,它可能比使用SecureRandom.toString() 更好——至少对于 OpenJDK 实现——也返回字符串中的算法。
  • @MaartenBodewes 那么您可能只想使用SecureRandom.getAlgorithm(),尽管它可以返回unknown 并且可能更多。
  • 现在一个不起作用,它只返回"DRBG" 而不是实际的算法(老实说,我希望它会这样)。
  • 我认为应该突出显示默认值。
【解决方案2】:

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

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

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

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

【讨论】:

  • 这似乎工作正常,谢谢。您能否指出是否有任何要求/访问条件才能配置确切的算法?我很惊讶它可以工作(尽管 Java 有很多可以从代码中的任何位置设置的静态配置选项)。
  • @MaartenBodewes 当周围没有 SecurityManager 时,你可以做很多事情,就像 enabling strong encryption 的老把戏和反射一样(这几天似乎没有必要)。
猜你喜欢
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
  • 1970-01-01
  • 1970-01-01
  • 2012-12-31
相关资源
最近更新 更多