开放SSL

密码学和 SSL/TLS 工具包

EVP_RAND-HMAC-DRBG

名称

EVP_RAND-HMAC-DRBG - HMAC DRBG EVP_RAND 实现

描述

通过 EVP_RAND API 支持 HMAC 确定性随机位生成器。

身份

"HMAC-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 字符串>
"mac" (OSSL_DRBG_PARAM_MAC) <UTF8 字符串>
"digest" (OSSL_DRBG_PARAM_DIGEST) <UTF8 字符串>

这些参数的工作方式如 "PARAMETERS" in EVP_RAND(3) 中所述。

注意

使用 FIPS 提供程序时,仅允许以下摘要(根据 FIPS 140-3 IG D.R

SHA-1
SHA2-256
SHA2-512
SHA3-256
SHA3-512

可以通过调用以下命令获取 HMAC DRBG 的上下文

EVP_RAND *rand = EVP_RAND_fetch(NULL, "HMAC-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[3], *p = params;
unsigned int strength = 128;

rand = EVP_RAND_fetch(NULL, "HMAC-DRBG", NULL);
rctx = EVP_RAND_CTX_new(rand, NULL);
EVP_RAND_free(rand);

*p++ = OSSL_PARAM_construct_utf8_string(OSSL_DRBG_PARAM_MAC, SN_hmac, 0);
*p++ = OSSL_PARAM_construct_utf8_string(OSSL_DRBG_PARAM_DIGEST, SN_sha256, 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), "PARAMETERS" in 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 中获取副本。