0

我正在尝试实现部分 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.

4

1 回答 1

1

HKDF 在 RFC5869 中有描述,它定义了 HKDF-Extract 操作,如下所示:

HKDF-Extract(salt, 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()

于 2019-10-01T16:29:36.553 回答