systemslibrarian/crypto-lab-pq-tls-handshake
GitHub: systemslibrarian/crypto-lab-pq-tls-handshake
一个在浏览器中演示 TLS 1.3 混合后量子密钥交换(X25519MLKEM768)的教育模拟工具。
Stars: 0 | Forks: 0
# crypto-lab-pq-tls-handshake
浏览器端基于 X25519MLKEM768 混合后量子密钥交换(draft-ietf-tls-ecdhe-mlkem-04,2026 年 2 月,命名组代码点 0x11EC)的 TLS 1.3 握手模拟。
## 它是什么
该项目完全在浏览器中(无需后端服务器)演示 TLS 1.3 握手双方,使用混合密钥交换 `X25519MLKEM768`:
- 客户端密钥共享构造:
- `X25519_pub (32)` + `ML-KEM-768_pub (1184)` = `1216` 字节
- 服务器密钥共享构造:
- `X25519_pub (32)` + `ML-KEM-768_ciphertext (1088)` = `1120` 字节
- 混合共享密钥:
- `X25519_shared (32)` + `ML-KEM_shared (32)` = `64` 字节
混合共享密钥通过 `HKDF-Extract` 与 `HKDF-Expand-Label` 输入标准 TLS 1.3 密钥调度(RFC 8446 第 7.1 节),与 TLS 对 `(EC)DHE` 的预期完全一致。
应用包含与纯 X25519 TLS 的并排对比,以可视化大小增加与延迟影响。
## 何时使用
当您希望了解以下情况时,请使用此演示:
- 理解现代浏览器和 CDN 在当前真实 HTTPS 连接上协商的内容
- 教授 TLS 1.3 部署的混合 PQ 迁移策略
- 检查字节级握手帧格式与线上的 `0x11EC` 组
- 研究为何 TLS 1.3 密钥调度逻辑无需协议变更即可支持混合共享密钥
- 在单一交互工具中比较经典与混合握手的大小与延迟行为
本工具不用于生产 TLS:这是一个教育模拟,并非 hardened TLS 栈。生产环境请使用成熟的库与运行时。
## 在线演示
https://systemslibrarian.github.io/crypto-lab-pq-tls-handshake/
## 可能的问题
- **ClientHello 分片**:1216 字节的密钥共享载荷可能将握手消息推至 MTU 边界附近,触发对分片敏感的中间设备。
- **实现侧信道**:JavaScript/TypeScript 中的教学代码不是恒定时间的,不适合保护长期密钥。
- **降级与互操作陷阱**:组支持不匹配、扩展处理或中间设备篡改可能强制非混合路径。
- **未来密码分析意外**:混合方案在至少一个原语幸存时提供保护,但假设仍需持续审查与修补。
- **慢链路延迟放大**:更大的 Hello 消息在受限或高丢包网络上可能更明显地增加握手延迟。
## 实际使用
`X25519MLKEM768`(`0x11EC`)在 `draft-ietf-tls-ecdhe-mlkem-04` 中定义,并取代早期部署标识符如 `X25519Kyber768Draft00`(`0x6399`,已弃用)。
截至 2025 年 9 月中旬,Cloudflare 报告约 43% 的人工 HTTPS 连接使用混合后量子密钥交换。Chrome 在 M124 中默认启用混合,Firefox、Edge、Brave 与 Opera 亦提供支持。
这使得混合 PQ TLS 成为活跃互联网中使用最广泛的 post-quantum 密码机制之一。
## 本地开发
```
npm install
npm run dev
```
## 验证
```
npm run verify:phase1
npm run verify:phase2
npm run verify:phase3
npm run verify:phase7
npm run build
```
标签:0x11EC 组, HKDF, HTTPS, key share 构造, MTU 边界, PQ 迁移, Side-by-side 比较, SSL/TLS 握手, TLS 1.3, X25519MLKEM768, X25519 仅加密, 代码片段, 共享秘密, 前端密码学, 字节级帧, 实时演示, 密钥调度, 延迟影响, 开源实验, 握手大小, 数据可视化, 暗色界面, 浏览器模拟, 混合后量子密码, 演示工具, 自动化攻击, 草案 draft-ietf-tls-ecdhe-mlkem-04