EVP_KDF-TLS13_KDF
名称
EVP_KDF-TLS13_KDF - TLS 1.3 EVP_KDF 实现
描述
通过 EVP_KDF API 支持计算 TLS 1.3 版本的 HKDF KDF。
EVP_KDF-TLS13_KDF 算法实现 TLS 1.3 使用的 HKDF 密钥推导函数。
标识
"TLS13-KDF" 是此实现的名称;它可以与 EVP_KDF_fetch() 函数一起使用。
支持的参数
支持的参数是
- "properties" (OSSL_KDF_PARAM_PROPERTIES) <UTF8 字符串>
- "digest" (OSSL_KDF_PARAM_DIGEST) <UTF8 字符串>
- "key" (OSSL_KDF_PARAM_KEY) <八位字节字符串>
- "salt" (OSSL_KDF_PARAM_SALT) <八位字节字符串>
-
这些参数的工作方式如 "PARAMETERS" in EVP_KDF(3) 中所述。
- "prefix" (OSSL_KDF_PARAM_PREFIX) <八位字节字符串>
-
此参数在指定的 TLS 1.3 KDF 上下文中设置标签前缀。对于 TLS 1.3,这应设置为 ASCII 字符串 "tls13 ",没有尾部零字节。有关详细信息,请参阅 RFC 8446 第 7.1 节“密钥调度”。
- "label" (OSSL_KDF_PARAM_LABEL) <八位字节字符串>
-
此参数在指定的 TLS 1.3 KDF 上下文中设置标签。有关详细信息,请参阅 RFC 8446 第 7.1 节“密钥调度”。
- "data" (OSSL_KDF_PARAM_DATA) <八位字节字符串>
-
此参数在指定的 TLS 1.3 KDF 上下文中设置上下文数据。有关详细信息,请参阅 RFC 8446 第 7.1 节“密钥调度”。
- "mode" (OSSL_KDF_PARAM_MODE) <UTF8 字符串> 或 <整数>
-
此参数设置 TLS 1.3 KDF 操作的模式。目前定义了两种模式
- "EXTRACT_ONLY" 或 EVP_KDF_HKDF_MODE_EXTRACT_ONLY
-
在此模式下,调用 EVP_KDF_derive(3) 将只执行提取操作。返回值将是中间固定长度的伪随机密钥 K。keylen 参数必须与 K 的大小匹配,可以在设置模式和摘要后调用 EVP_KDF_CTX_get_kdf_size() 来查找。
在推导出密钥之前,必须设置摘要、密钥和盐值,否则会发生错误。
- "EXPAND_ONLY" 或 EVP_KDF_HKDF_MODE_EXPAND_ONLY
-
在此模式下,调用 EVP_KDF_derive(3) 将只执行扩展操作。输入密钥应设置为从先前提取操作返回的中间固定长度伪随机密钥 K。
在推导出密钥之前,必须设置摘要、密钥和 info 值,否则会发生错误。
注释
此 KDF 旨在供 libssl 中的 TLS 1.3 实现使用。它不支持 HKDF 的所有选项和功能。
传递给 EVP_KDF_derive(3) 或 EVP_KDF_CTX_set_params(3) 的 OSSL_PARAM 数组必须指定所有必需的参数。此 KDF 不支持分段提供这些参数的方法。
可以通过调用以下方法获取 TLS 1.3 KDF 的上下文
EVP_KDF *kdf = EVP_KDF_fetch(NULL, "TLS13-KDF", NULL);
EVP_KDF_CTX *kctx = EVP_KDF_CTX_new(kdf);
TLS 1.3 KDF 扩展操作的输出长度通过 keylen 参数指定给 EVP_KDF_derive(3) 函数。在使用 EVP_KDF_HKDF_MODE_EXTRACT_ONLY 时,keylen 参数必须等于中间固定长度伪随机密钥的大小,否则会发生错误。对于该模式,可以通过在 EVP_KDF_CTX 上设置模式和摘要后调用 EVP_KDF_CTX_get_kdf_size() 来查找固定输出大小。
符合
RFC 8446
另请参见
EVP_KDF(3), EVP_KDF_CTX_new(3), EVP_KDF_CTX_free(3), EVP_KDF_CTX_get_kdf_size(3), EVP_KDF_CTX_set_params(3), EVP_KDF_derive(3), "PARAMETERS" in EVP_KDF(3), EVP_KDF-HKDF(7)
历史记录
此功能在 OpenSSL 3.0 中添加。
版权
Copyright 2021 The OpenSSL Project Authors. 保留所有权利。
根据 Apache 许可证 2.0(“许可证”)许可。除非遵守许可证,否则您不得使用此文件。您可以在源代码分发中的 LICENSE 文件中或在 https://www.openssl.org/source/license.html 中获取副本。