Skip to content

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 库。最新版本的 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 机制,然后该机制能够持续生成“随机”的比特序列。

API

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

  • SecureRandomSpi 中新增方法,以实现上述新方法。

  • 新增 SecureRandomParameters 接口,以便为新的 SecureRandom 方法提供附加输入。

这些新 API 应该足够通用,适用于任何 SecureRandom 的变种(不仅仅是 DRBG),并且可以添加到 SecureRandomSecureRandomSpi 中。

  • 新增 DrbgParameters 类(及其内部类),实现 SecureRandomParameters 接口,供 DRBG 使用。

实现

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

附带产品

测试

DRBG 实现必须通过 CAVP 测试向量

SHA-512/224SHA-512/256 测试向量。

HmacSHA512/224 和 HmacSHA512/256 的非正式测试向量