如何使用OpenSSL 1.1.1实施HDF提取?

时间:2019-10-01 15:29:07

标签: openssl hkdf

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

1 个答案:

答案 0 :(得分:1)

HKDF在RFC5869中进行了描述,该文件定义了HKDF-Extract操作,如下所示:

  

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()

指定正在使用的摘要