TLS 1.3双方证书认证下的密钥导出过程
TLS1.3 的密钥导出过程说复杂也复杂,说简单也挺简单。只要你搞清楚HKDF-Extract和HKDF-Expand这俩函数在干嘛,整套流程其实就是“提取-扩展-再提取-再扩展”。
从Early Secret到Handshake Secret,每一步都和对称加密脱不开关系。你只要记住一个点:这些密钥不是拍脑袋出来的,都是通过有章法的哈希派生出来的。
比如HKDF_Extract
其实就是个带盐的哈希,把原始密钥搞得更“随机”;HKDF_Expand
则是按需“拉长”密钥长度——就像拧毛巾一样,把它能的熵全榨干。
在 TLS1.3 的流程里,Early Secret用来帮你跟对端搞出共享密钥(ECDHE 那一步),Handshake Secret再用来撑起握手阶段的各种密钥。都离不开HMAC
、Hash
、Transcript-Hash
这些老朋友。
想深挖的你,还可以看看下面这几个资源:有 Nginx 支持 TLS1.3 的教程,有 fizz 的 C++实现源码,还有原版的 RFC 文档,都挺实用的。
如果你正好在用证书双向认证,那这篇文章能帮你彻底理清 TLS1.3 下密钥是怎么一环接一环算出来的,避免你在调试握手失败时一头雾水。
下载地址
用户评论