EVP_KEYEXCH-DH
名稱
EVP_KEYEXCH-DH - DH 金鑰交換演算法支援
說明
DH 金鑰類型的金鑰交換支援。
DH 金鑰交換參數
- "pad" (OSSL_EXCHANGE_PARAM_PAD) <未簽署整數>
-
設定相關聯金鑰交換 ctx 的填補模式。設定值 1 會開啟填補。設定值 0 會關閉填補。如果填補關閉,則衍生的共用密碼可能會小於最大的可能密碼大小。如果填補開啟,則衍生的共用密碼會在必要時用 0 填滿其開頭位元組,以使共用密碼與最大的可能密碼大小相同。當 KDF 類型設定為 "X942KDF-ASN1" (OSSL_KDF_NAME_X942KDF_ASN1) 時,會忽略填補模式參數(並隱含啟用填補)。
- "kdf-type" (OSSL_EXCHANGE_PARAM_KDF_TYPE) <UTF8 字串>
- "kdf-digest" (OSSL_EXCHANGE_PARAM_KDF_DIGEST) <UTF8 字串>
- "kdf-digest-props" (OSSL_EXCHANGE_PARAM_KDF_DIGEST_PROPS) <UTF8 字串>
- "kdf-outlen" (OSSL_EXCHANGE_PARAM_KDF_OUTLEN) <未簽署整數>
- "kdf-ukm" (OSSL_EXCHANGE_PARAM_KDF_UKM) <八位元組字串>
- "cekalg" (OSSL_KDF_PARAM_CEK_ALG) <八位元組字串指標>
範例
範例假設主機和對等方都使用相同的名稱群組(或網域參數)產生金鑰。請參閱 EVP_PKEY-DH(7) 中的「範例」。主機和對等方都會將其公開金鑰傳輸給彼此。
若要將對等方產生的金鑰對轉換為 DER 格式的公開金鑰,以便傳輸至主機
EVP_PKEY *peer_key; /* It is assumed this contains the peers generated key */
unsigned char *peer_pub_der = NULL;
int peer_pub_der_len;
peer_pub_der_len = i2d_PUBKEY(peer_key, &peer_pub_der);
...
OPENSSL_free(peer_pub_der);
若要在主機上從 DER 格式轉換接收到的對等方公開金鑰
const unsigned char *pd = peer_pub_der;
EVP_PKEY *peer_pub_key = d2i_PUBKEY(NULL, &pd, peer_pub_der_len);
...
EVP_PKEY_free(peer_pub_key);
若要在主機上使用主機的金鑰和對等方的公開金鑰衍生共用密碼
/* It is assumed that the host_key and peer_pub_key are set up */
void derive_secret(EVP_KEY *host_key, EVP_PKEY *peer_pub_key)
{
unsigned int pad = 1;
OSSL_PARAM params[2];
unsigned char *secret = NULL;
size_t secret_len = 0;
EVP_PKEY_CTX *dctx = EVP_PKEY_CTX_new_from_pkey(NULL, host_key, NULL);
EVP_PKEY_derive_init(dctx);
/* Optionally set the padding */
params[0] = OSSL_PARAM_construct_uint(OSSL_EXCHANGE_PARAM_PAD, &pad);
params[1] = OSSL_PARAM_construct_end();
EVP_PKEY_CTX_set_params(dctx, params);
EVP_PKEY_derive_set_peer(dctx, peer_pub_key);
/* Get the size by passing NULL as the buffer */
EVP_PKEY_derive(dctx, NULL, &secret_len);
secret = OPENSSL_zalloc(secret_len);
EVP_PKEY_derive(dctx, secret, &secret_len);
...
OPENSSL_clear_free(secret, secret_len);
EVP_PKEY_CTX_free(dctx);
}
對等方可以使用非常類似的程式碼,使用主機的公開金鑰和對等方產生的金鑰對,來衍生相同的共享密碼。
另請參閱
EVP_PKEY-DH(7)、EVP_PKEY-FFC(7)、EVP_PKEY(3)、provider-keyexch(7)、provider-keymgmt(7)、OSSL_PROVIDER-default(7)、OSSL_PROVIDER-FIPS(7),
版權
版權所有 2020-2022 OpenSSL 專案作者。保留所有權利。
在 Apache 授權 2.0(「授權」)下授權。您只能在遵守授權的情況下使用此檔案。您可以在原始程式碼散佈中的 LICENSE 檔案或 https://www.openssl.org/source/license.html 取得副本。