EVP_RAND-HASH-DRBG
名称
EVP_RAND-HASH-DRBG - HASH DRBG EVP_RAND 实现
描述
通过EVP_RAND API 支持哈希确定性随机比特生成器。
标识
“HASH-DRBG” 是此实现的名称;它可以与 EVP_RAND_fetch() 函数一起使用。
支持的参数
支持的参数为:
- "state" (OSSL_RAND_PARAM_STATE) <整数>
- "strength" (OSSL_RAND_PARAM_STRENGTH) <无符号整数>
- "max_request" (OSSL_RAND_PARAM_MAX_REQUEST) <无符号整数>
- "reseed_requests" (OSSL_DRBG_PARAM_RESEED_REQUESTS) <无符号整数>
- "reseed_time_interval" (OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL) <整数>
- "min_entropylen" (OSSL_DRBG_PARAM_MIN_ENTROPYLEN) <无符号整数>
- "max_entropylen" (OSSL_DRBG_PARAM_MAX_ENTROPYLEN) <无符号整数>
- "min_noncelen" (OSSL_DRBG_PARAM_MIN_NONCELEN) <无符号整数>
- "max_noncelen" (OSSL_DRBG_PARAM_MAX_NONCELEN) <无符号整数>
- "max_perslen" (OSSL_DRBG_PARAM_MAX_PERSLEN) <无符号整数>
- "max_adinlen" (OSSL_DRBG_PARAM_MAX_ADINLEN) <无符号整数>
- "reseed_counter" (OSSL_DRBG_PARAM_RESEED_COUNTER) <无符号整数>
- "properties" (OSSL_DRBG_PARAM_PROPERTIES) <UTF8 字符串>
- "digest" (OSSL_DRBG_PARAM_DIGEST) <UTF8 字符串>
-
这些参数的工作方式如"EVP_RAND(3) 中的参数" 中所述。
注释
当使用-no_drbg_truncated_digests 选项安装 FIPS 提供程序时,仅允许以下摘要(根据FIPS 140-3 IG D.R)。
- SHA-1
- SHA2-256
- SHA2-512
- SHA3-256
- SHA3-512
可以通过调用以下方法获取 HASH DRBG 的上下文:
EVP_RAND *rand = EVP_RAND_fetch(NULL, "HASH-DRBG", NULL);
EVP_RAND_CTX *rctx = EVP_RAND_CTX_new(rand, NULL);
示例
EVP_RAND *rand;
EVP_RAND_CTX *rctx;
unsigned char bytes[100];
OSSL_PARAM params[2], *p = params;
unsigned int strength = 128;
rand = EVP_RAND_fetch(NULL, "HASH-DRBG", NULL);
rctx = EVP_RAND_CTX_new(rand, NULL);
EVP_RAND_free(rand);
*p++ = OSSL_PARAM_construct_utf8_string(OSSL_DRBG_PARAM_DIGEST, SN_sha512, 0);
*p = OSSL_PARAM_construct_end();
EVP_RAND_instantiate(rctx, strength, 0, NULL, 0, params);
EVP_RAND_generate(rctx, bytes, sizeof(bytes), strength, 0, NULL, 0);
EVP_RAND_CTX_free(rctx);
符合
NIST SP 800-90A 和 SP 800-90B
参见
EVP_RAND(3),"EVP_RAND(3) 中的参数",openssl-fipsinstall(1)
历史
OpenSSL 3.1.1 引入了-no_drbg_truncated_digests 选项到 fipsinstall,当在兼容模式下使用 FIPS 提供程序时,它会限制允许的摘要。有关详细信息,请参阅FIPS 140-3 IG D.R。
版权
版权所有 2020-2023 OpenSSL 项目作者。保留所有权利。
根据 Apache 许可证 2.0(“许可证”)获得许可。除非符合许可证,否则您不得使用此文件。您可以在源代码分发版中的 LICENSE 文件或https://www.openssl.org/source/license.html中获取副本。