EVP_KEYEXCH-ECDH
名稱
EVP_KEYEXCH-ECDH - ECDH 金鑰交換演算法支援
說明
ECDH 金鑰類型的金鑰交換支援。
ECDH 金鑰交換參數
- "ecdh-cofactor-mode" (OSSL_EXCHANGE_PARAM_EC_ECDH_COFACTOR_MODE) <整數>
-
設定或取得與關聯金鑰交換 ctx 相關的 ECDH 作業模式。
在橢圓曲線 Diffie-Hellman 金鑰交換的脈絡下,此參數可選擇金鑰交換演算法的純 Diffie-Hellman (DH) 或 Cofactor Diffie-Hellman (CDH) 變體。
設定時,值應分別為 1、0 或 -1,強制啟用、停用共因子模式,或將其重設為與給定金鑰交換 ctx 關聯的私密金鑰的預設值。
取得時,值應分別為 1 或 0,表示共因子模式已啟用或停用。
另請參閱 provider-keymgmt(7),以取得相關的 OSSL_PKEY_PARAM_USE_COFACTOR_ECDH 參數,該參數可設定為每個金鑰。
- "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) <八位元組字串>
範例
可在 demos/keyexch 中找到金鑰協定的範例。
主機和對等方的金鑰必須如 EVP_PKEY-EC(7) 中的「範例」 所示,使用相同的曲線名稱產生。
產生一般情況下共用密碼的程式碼與 EVP_KEYEXCH-DH(7) 中的「範例」 相同。
使用主機的金鑰和對等方的公開金鑰,但同時使用 X963KDF 和使用者金鑰資料,在主機上衍生共用密碼
/* It is assumed that the host_key, peer_pub_key and ukm are set up */
void derive_secret(EVP_PKEY *host_key, EVP_PKEY *peer_key,
unsigned char *ukm, size_t ukm_len)
{
unsigned char secret[64];
size_t out_len = sizeof(secret);
size_t secret_len = out_len;
unsigned int pad = 1;
OSSL_PARAM params[6];
EVP_PKEY_CTX *dctx = EVP_PKEY_CTX_new_from_pkey(NULL, host_key, NULL);
EVP_PKEY_derive_init(dctx);
params[0] = OSSL_PARAM_construct_uint(OSSL_EXCHANGE_PARAM_PAD, &pad);
params[1] = OSSL_PARAM_construct_utf8_string(OSSL_EXCHANGE_PARAM_KDF_TYPE,
"X963KDF", 0);
params[2] = OSSL_PARAM_construct_utf8_string(OSSL_EXCHANGE_PARAM_KDF_DIGEST,
"SHA1", 0);
params[3] = OSSL_PARAM_construct_size_t(OSSL_EXCHANGE_PARAM_KDF_OUTLEN,
&out_len);
params[4] = OSSL_PARAM_construct_octet_string(OSSL_EXCHANGE_PARAM_KDF_UKM,
ukm, ukm_len);
params[5] = OSSL_PARAM_construct_end();
EVP_PKEY_CTX_set_params(dctx, params);
EVP_PKEY_derive_set_peer(dctx, peer_pub_key);
EVP_PKEY_derive(dctx, secret, &secret_len);
...
OPENSSL_clear_free(secret, secret_len);
EVP_PKEY_CTX_free(dctx);
}
另請參閱
EVP_PKEY-EC(7) EVP_PKEY(3), provider-keyexch(7), provider-keymgmt(7), OSSL_PROVIDER-default(7), OSSL_PROVIDER-FIPS(7),
版權
版權所有 2020-2022 The OpenSSL Project Authors。保留所有權利。
根據 Apache 授權條款 2.0 版(「授權條款」)授權。您不得使用此檔案,除非符合授權條款。您可以在原始程式碼散佈中的 LICENSE 檔案或 https://www.openssl.org/source/license.html 取得副本。