← [ BACK_TO_NOTES ]

TLS 1.3 Key Schedule

TLS 1.3 通过 (EC)DHE/PSK 输入 HKDF key schedule,逐层派生 handshake traffic secrets、application traffic secrets、finished/resumption 等用途隔离密钥,再交给 AEAD 保护记录;证书签名负责认证,不直接生成会话加密密钥。

#synthesis #evergreen #network #crypto #tls

[!info] related notes

TLS 1.3 Key Schedule

一句话关系

TLS 1.3 的核心不是“客户端生成一个 session key 再用服务器公钥加密”。

现代主线是:

(EC)DHE / PSK input
→ HKDF key schedule
→ handshake traffic secrets
→ application traffic secrets
→ AEAD keys / IVs

证书与数字签名负责认证服务器身份;它们和 traffic key derivation 是不同职责。

两类输入 Secret

RFC 8446 的 key schedule 主要可以吸收两类 secret:

  • PSK;
  • (EC)DHE shared secret。

典型完整新连接通常使用 ephemeral (EC)DHE。

PSK 可以来自:

  • 外部预共享密钥;
  • 之前连接的 resumption secret。

HKDF

TLS 1.3 使用 HKDF 的:

  • HKDF-Extract;
  • HKDF-Expand / HKDF-Expand-Label;

逐步派生不同用途 secret。

核心价值:

从输入 keying material 派生彼此用途隔离、和握手 transcript 绑定的多个 secret。

简化层级

可以先用这张简化图:

PSK
→ Early Secret

(EC)DHE shared secret
→ Handshake Secret

handshake transcript
→ client/server handshake traffic secret

继续派生
→ Master Secret

application transcript
→ client/server application traffic secret

后续还可派生:

  • exporter master secret;
  • resumption master secret;
  • finished key;
  • traffic key / IV。

真实 RFC 图更细,但这条主线足够建立心智模型。

Certificate 的角色

Server Certificate 提供:

  • public key;
  • identity binding;
  • certificate chain。

CertificateVerify 用 server private key 对 handshake transcript 做签名。

所以:

certificate private key
→ authenticate server / transcript

而不是:

certificate public key
→ encrypt session key

TLS 1.3 已不再使用旧式 static RSA key transport。

Finished

Finished message 使用由 key schedule 派生的 finished key 对握手 transcript 做认证。

它证明:

  • 双方拥有一致的握手 secrets;
  • transcript 没被中间人悄悄修改。

因此 certificate authentication 与 Finished transcript authentication 也是不同层。

Application Traffic Secret

握手完成后,双方拥有方向分离的 traffic secret:

  • client application traffic secret;
  • server application traffic secret。

再从各自 secret 派生:

  • AEAD key;
  • IV。

因此:

client→server key
≠ server→client key

这种方向隔离降低 key reuse 风险。

AEAD

TLS 1.3 cipher suite 只选择 AEAD + hash 组合。

例如:

  • AES-GCM;
  • ChaCha20-Poly1305;

用于 record protection。

cipher suite 不再像 TLS 1.2 那样同时编码 certificate/key-exchange algorithm 的巨大组合。

Forward Secrecy

使用 ephemeral (EC)DHE 时:

  • 每次连接生成临时 key agreement material;
  • session traffic secret 不只取决于长期 certificate private key。

因此未来长期 signing key 泄漏,不会自动恢复过去已记录 session 的 traffic keys。

PSK / Resumption

TLS 1.3 resumption 使用上一连接派生出的 resumption secret 建立 PSK。

这可以:

  • 减少握手成本;
  • 支持 0-RTT early data。

但 0-RTT 存在 replay 风险,所以有副作用业务请求必须特别谨慎。

Key Update

长连接中可以通过 KeyUpdate 机制演进 application traffic keys。

这避免一个 traffic key 永久保护无限量数据。

与 Password KDF 不同

TLS 的 HKDF 目标不是故意“算得很慢”。

HKDF 处理的是高质量 keying material,用于:

  • extract;
  • expand;
  • domain separation;
  • key hierarchy。

它和 Argon2/PBKDF2 这种针对低熵 password 的 password-based KDF 是不同问题。

学习检查

  1. TLS 1.3 为什么不能再用“公钥加密 premaster secret”作为主心智模型?
  2. certificate private key 与 (EC)DHE ephemeral key 分别做什么?
  3. HKDF-Extract / Expand 在 key schedule 中解决什么问题?
  4. 为什么 client 和 server application traffic keys 要分开?
  5. Finished message 认证的是哪一层内容?
  6. TLS 1.3 cipher suite 为什么比 TLS 1.2 简化?
  7. ECDHE 怎样提供 Forward Secrecy?
  8. resumption PSK 与 0-RTT 为什么会引入 replay 边界?
创建于 2026/9/30 更新于 2026/9/30
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本