JEP 273: DRBG-Based SecureRandom | 基于 DRBG 的 SecureRandom 实现 Implementations
摘要
实现 NIST 800-90Ar1 中描述的三种确定性随机比特生成器(DRBG)机制。
非目标
不提供熵输入源(SEI)的 API,也不在所有平台上实施已获得 NIST 或 FIPS 批准的 SEI。
动机
JDK 有两种 SecureRandom
实现。一种是基于平台的,基于本机调用或操作系统设备,如在 Unix 上读取 /dev/{u}random
,在 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 机制,然后该机制能够持续生成“随机”的比特序列。
API
为与 800-90C 匹配的
SecureRandom
新增方法,允许配置SecureRandom
对象并在种子生成、重新种子生成和随机比特生成过程中指定附加输入。在
SecureRandomSpi
中新增方法,以实现上述新方法。新增
SecureRandomParameters
接口,以便为新的SecureRandom
方法提供附加输入。
这些新 API 应该足够通用,适用于任何 SecureRandom
的变种(不仅仅是 DRBG),并且可以添加到 SecureRandom
和 SecureRandomSpi
中。
- 新增
DrbgParameters
类(及其内部类),实现SecureRandomParameters
接口,供 DRBG 使用。
实现
- 在所有平台上实现 800-90Ar1 中的三个 DRBG 机制(Hash_DRBG,HMAC_DRBG,CTR_DRBG)。
附带产品
按照 FIPS 180-4 中描述的方式实现 SHA-512/224 和 SHA-512/256 安全散列算法。
测试
DRBG 实现必须通过 CAVP 测试向量。
SHA-512/224 和 SHA-512/256 测试向量。