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 OpenSSL 项目作者。保留所有权利。
根据 Apache 许可证 2.0(“许可证”)授权。除非符合许可证,否则您不得使用此文件。您可以在源代码分发中的 LICENSE 文件或 https://www.openssl.org/source/license.html 中获取副本。