如何使用OpenSSL 1.1.1来实现HDF-Extract?



我正在尝试实现 QUIC RFC 的一部分,他们注意到:

initial_salt = 0xc3eef712c72ebb5a11a7d2432bb46365bef9f502
initial_secret = HKDF-Extract(initial_salt,
client_dst_connection_id)

我只是想知道,如何将其映射到这里:https://www.openssl.org/docs/man1.1.1/man3/EVP_PKEY_CTX_set_hkdf_md.html

我明白这个:

EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY 在此模式下,调用 EVP_PKEY_derive(3( 将只执行提取操作。返回的值将是中间固定长度伪随机密钥 K。

必须在派生密钥或发生错误之前设置摘要、键和盐值。

但我在这里很困惑。我可以看到如何设置模式、算法、盐,但我迷失了在哪里设置client_dst_connection_id.

HKDF在RFC5869中描述,它定义HKDF提取操作如下:

HKDF-提取物(盐,IKM( -> PRK

选项: 哈希哈希函数;HashLen 表示 以八位字节为单位的哈希函数输出

输入: 盐可选盐值(非秘密随机值(; 如果未提供,则将其设置为一串 HashLen 零。 IKM 输入键控材料

输出: PRK 一个伪随机密钥(HashLen 八位字节(

因此,第二个参数(在本例中client_dst_connection_id(是"输入键控材料"。

在您链接到的 OpenSSL 手册页上,您可以看到可以使用EVP_PKEY_CTX_set1_hkdf_key()来设置密钥材料。

请注意,手册页还对EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY说了以下内容:

必须在派生密钥之前设置摘要、键和盐值,或者 发生错误。

因此,键值和盐值是明确的。您还需要通过EVP_PKEY_CTX_set_hkdf_md()指定正在使用的摘要

最新更新