Rust in Everything
基于 rustls 0.23.46

动手

前面各部分是读别人的代码,这一部分反过来:挑 TLS 1.3 里最「纯」的一段,也就是只吃字节、吐字节的密钥日程,用最少的代码自己写一遍,再拿外部测试向量和本卷的真实抓包当标准答案。目的不是造一个能用的库,而是看清 rustls 在同一件事上多做了什么、为什么要多做。

  1. 迷你密钥日程:只依赖 ring,281 行写出 HKDF、HKDF-Expand-Label、Derive-Secret、三级阶梯、Finished 和打开一条记录;RFC 5869、draft-07、NIST ACVP、rustls 自带的四组向量全部通过(含 rustls 没有的 e exp master);用 key log 里的秘密解开共享抓包的五条加密记录,两条 Finished 的 verify_data 逐字节重算一致;和 rustls 相比缺的东西(清零、转录维护、套件抽象、序列号管理)各链到一页。
flowchart TB
  hmac["ring HMAC"] --> hkdf["HKDF"]
  hkdf --> label["Expand-Label"]
  label --> ladder["三级阶梯"]
  ladder --> fin["Finished"]
  ladder --> keys["key 和 iv"]
  keys --> rec["打开记录"]

读这一页之前,最好先读过一次握手和密钥日程,知道抓包里的九条记录各是什么、rustls 的 KeySchedule* 类型链长什么样。

💬 关联讨论

发起讨论
加载中...