JEP 273:基于 DRBG 的 SecureRandom 实现
概括
实现NIST 800-90Ar1中描述的三种确定性随机位生成器 (DRBG) 机制。
非目标
为熵源输入 (SEI) 提供 API,或在所有平台上实施经批准的 SEI,其中“批准”是指经 NIST 或 FIPS 批准。
动机
JDK 有两种SecureRandom
实现。一种是依赖于平台的,基于本机调用或操作系统设备,例如/dev/{u}random
在 Unix 上读取、在 Windows 上使用 CryptoAPI 以及使用各种预配置的 PKCS11 库。最新版本的Solaris、Linux和Windows已经支持 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),并且可以添加到SecureRandom
和SecureRandomSpi
。
- 一个新
DrbgParameters
类(及其内部类)实现SecureRandomParameters
供 DRBG 使用。
执行
- 在 800-90Ar1(在所有平台上)中实现三种 DRBG 机制(Hash_DRBG、HMAC_DRBG、CTR_DRBG)。
副产品
-
SHA-512/224 和 SHA-512/256 安全哈希算法,如FIPS 180-4中所述。
测试
-
DRBG 实现必须通过CAVP 测试向量。
-
SHA-512/224和SHA-512/256测试向量。
-
HmacSHA512/224 和 HmacSHA512/256 的非正式测试向量。