开放SSL

密码学和 SSL/TLS 工具包

EVP_RAND-CTR-DRBG

名称

EVP_RAND-CTR-DRBG - CTR DRBG EVP_RAND 实现

描述

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

标识

“CTR-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 字符串>
"cipher" (**OSSL_DRBG_PARAM_CIPHER**) <UTF8 字符串>

这些参数的工作原理如 "参数" 在 EVP_RAND(3) 中所述

"use_derivation_function" (**OSSL_DRBG_PARAM_USE_DF**) <整数>

此布尔值指示是否应使用派生函数。非零值(默认值)使用派生函数。零值不使用。

备注

可以通过调用以下方法获取 CTR DRBG 的上下文

EVP_RAND *rand = EVP_RAND_fetch(NULL, "CTR-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, "CTR-DRBG", NULL);
rctx = EVP_RAND_CTX_new(rand, NULL);
EVP_RAND_free(rand);

*p++ = OSSL_PARAM_construct_utf8_string(OSSL_DRBG_PARAM_CIPHER,
                                        SN_aes_256_ctr, 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) 中所述

版权所有 2020-2021 The OpenSSL Project Authors。版权所有。

根据 Apache 许可证 2.0 版(“许可证”)授权。除遵守许可证外,您不得使用此文件。您可以在源代码分发中的 LICENSE 文件或 https://www.openssl.org/source/license.html 中获取副本。