我正在尝试实现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
。
答案 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()