跳到主要内容

JEP 273:基于 DRBG 的 SecureRandom 实现

概括

实现NIST 800-90Ar1中描述的三种确定性随机位生成器 (DRBG) 机制。

非目标

为熵源输入 (SEI) 提供 API,或在所有平台上实施经批准的 SEI,其中“批准”是指经 NIST 或 FIPS 批准。

动机

JDK 有两种SecureRandom实现。一种是依赖于平台的,基于本机调用或操作系统设备,例如/dev/{u}random在 Unix 上读取、在 Windows 上使用 CryptoAPI 以及使用各种预配置的 PKCS11 库。最新版本的SolarisLinuxWindows已经支持 DRBG,但旧版本和嵌入式系统可能不支持。另一种是纯 Java 实现,它使用较旧的基于 SHA1 的 RNG 实现,其不如已批准的 DRBG 机制使用的算法强大。

NIST 开发和批准的 DRBG 机制(如 SP 800-90Ar1)使用与 SHA-512 和 AES-256 一样强大的现代算法。这些机制中的每一种都可以配置不同的安全强度和功能,以满足用户的要求。在某些环境中,对这些机制的支持变得非常重要,尤其是对美国政府而言。

描述

根据 NIST SP 800-90,随机位生成器(RBG、800-90C )由熵输入源( 800-90B和 800-90C)和 DRBG 机制(800-90Ar1)构建。熵输入源提供新的随机性(熵)作为 DRBG 机制的种子,然后该机制能够连续生成“随机”比特序列。

蜜蜂

  • 匹配 800-90C的新方法SecureRandom,允许配置SecureRandom对象并在播种、重新播种和随机位生成过程中指定附加输入。

  • 中的新方法SecureRandomSpi,实现上面的新方法。

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

这些新的 API 应该足够通用,适合任何SecureRandom风格(不仅仅是 DRBG),并且可以添加到SecureRandomSecureRandomSpi

  • 一个新DrbgParameters类(及其内部类)实现SecureRandomParameters供 DRBG 使用。

执行

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

副产品

测试