開啟SSL

密碼學和 SSL/TLS 工具包

EVP_RAND-CTR-DRBG

名稱

EVP_RAND-CTR-DRBG - CTR DRBG EVP_RAND 實作

說明

透過 EVP_RAND API 支援計數器確定性亂數產生器。

身分

「CTR-DRBG」是此實作的名稱;可搭配 EVP_RAND_fetch() 函式使用。

支援的參數

支援的參數包括

「狀態」(OSSL_RAND_PARAM_STATE) <整數>
「強度」(OSSL_RAND_PARAM_STRENGTH) <無符號整數>
「最大要求」(OSSL_RAND_PARAM_MAX_REQUEST) <無符號整數>
「重新產生要求」(OSSL_DRBG_PARAM_RESEED_REQUESTS) <無符號整數>
「重新產生時間間隔」(OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL) <整數>
「最小熵長度」(OSSL_DRBG_PARAM_MIN_ENTROPYLEN) <無符號整數>
「最大熵長度」(OSSL_DRBG_PARAM_MAX_ENTROPYLEN) <無符號整數>
「最小亂數長度」(OSSL_DRBG_PARAM_MIN_NONCELEN) <無符號整數>
「最大亂數長度」(OSSL_DRBG_PARAM_MAX_NONCELEN) <無符號整數>
「最大個人化長度」(OSSL_DRBG_PARAM_MAX_PERSLEN) <無符號整數>
「最大附加資料長度」(OSSL_DRBG_PARAM_MAX_ADINLEN) <無符號整數>
「重新產生計數器」(OSSL_DRBG_PARAM_RESEED_COUNTER) <無符號整數>
「屬性」(OSSL_DRBG_PARAM_PROPERTIES) <UTF8 字串>
「密碼」(OSSL_DRBG_PARAM_CIPHER) <UTF8 字串>

這些參數的運作方式如 EVP_RAND(3) 中的「參數」 所述。

「使用衍生函數」(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 取得。