OpenSSL

密码学和 SSL/TLS 工具包

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 中获取副本。