開啟SSL

密碼編譯和 SSL/TLS 工具組

EVP_KEYMGMT-DSA

名稱

EVP_PKEY-DSA、EVP_KEYMGMT-DSA - EVP_PKEY DSA 金鑰類型和演算法支援

說明

對於 DSA,FIPS186-4 標準規定用於 FFC 參數產生的值也需要用於參數驗證。這表示可能需要儲存用於驗證目的的 種子pcountergindex 等 FFC 領域參數值。對於 DSA,這些欄位不會儲存在 ASN1 資料中,因此如果需要驗證,就需要將其儲存在外部。

DSA 參數

DSA 金鑰類型支援 FFC 參數(請參閱 EVP_PKEY-FFC(7) 中的「FFC 參數」)。

DSA 金鑰產生參數

DSA 金鑰類型支援 FFC 金鑰產生參數(請參閱 EVP_PKEY-FFC(7) 中的「FFC 金鑰產生參數」)。

下列限制套用於「pbits」欄位

對於「fips186_4」,這必須是 2048 或 3072。對於「fips186_2」,這必須是 1024。對於「group」,這可以是 2048、3072、4096、6144 或 8192 中的任何一個。

DSA 金鑰驗證

對於 DSA 金鑰,EVP_PKEY_param_check(3) 的行為方式如下:OpenSSL FIPS 提供者符合 FIPS186-4 標準中關於 FFC 參數驗證的規則。為了向後相容,OpenSSL 預設提供者使用更簡單的檢查(請參閱下方)進行參數驗證,除非設定種子參數。

對於 DSA 金鑰,EVP_PKEY_param_check_quick(3) 的行為方式如下:執行 L 和 N 以及部分 g 的簡單檢查。預設提供者也支援驗證舊版「fips186_2」金鑰。

對於 DSA 金鑰,EVP_PKEY_public_check(3)EVP_PKEY_private_check(3)EVP_PKEY_pairwise_check(3),OpenSSL 預設和 FIPS 提供者分別符合 SP800-56Ar3 中關於公用、私密和成對測試的規則。

範例

可以透過呼叫取得 EVP_PKEY 內容

EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_from_name(NULL, "DSA", NULL);

可以透過呼叫產生 DSA 領域參數

unsigned int pbits = 2048;
unsigned int qbits = 256;
int gindex = 1;
OSSL_PARAM params[5];
EVP_PKEY *param_key = NULL;
EVP_PKEY_CTX *pctx = NULL;

pctx = EVP_PKEY_CTX_new_from_name(NULL, "DSA", NULL);
EVP_PKEY_paramgen_init(pctx);

params[0] = OSSL_PARAM_construct_uint("pbits", &pbits);
params[1] = OSSL_PARAM_construct_uint("qbits", &qbits);
params[2] = OSSL_PARAM_construct_int("gindex", &gindex);
params[3] = OSSL_PARAM_construct_utf8_string("digest", "SHA384", 0);
params[4] = OSSL_PARAM_construct_end();
EVP_PKEY_CTX_set_params(pctx, params);

EVP_PKEY_generate(pctx, &param_key);
EVP_PKEY_CTX_free(pctx);

EVP_PKEY_print_params(bio_out, param_key, 0, NULL);

可以使用領域參數透過呼叫產生 DSA 金鑰

EVP_PKEY *key = NULL;
EVP_PKEY_CTX *gctx = NULL;

gctx = EVP_PKEY_CTX_new_from_pkey(NULL, param_key, NULL);
EVP_PKEY_keygen_init(gctx);
EVP_PKEY_generate(gctx, &key);
EVP_PKEY_CTX_free(gctx);
EVP_PKEY_print_private(bio_out, key, 0, NULL);

符合

FIPS186-4 的下列章節

A.1.1.2 使用核准的雜湊函數產生可能的質數 p 和 q。
A.2.3 產生正規產生器 g。
A.2.1 產生器 g 的不可驗證產生。

另請參閱

EVP_PKEY-FFC(7)EVP_SIGNATURE-DSA(7) EVP_PKEY(3)provider-keymgmt(7)EVP_KEYMGMT(3)OSSL_PROVIDER-default(7)OSSL_PROVIDER-FIPS(7)

版權所有 2020-2021 OpenSSL 專案作者。保留所有權利。

在 Apache License 2.0(「授權」)下授權。您只能在遵守授權的情況下使用此檔案。您可以在原始程式碼散佈中的 LICENSE 檔案或 https://www.openssl.org/source/license.html 取得一份副本。