ClientHello
客户端发起连接:提议使用 TLS 1.3,提供三个 AES/ChaCha 密码套件,列出所支持的密钥交换组(X25519MLKEM768 排在首位),并为最优先的两个组各发送一个密钥共享——其中包括 1216 字节的混合密钥共享。这条消息以明文传输;此时还没有任何内容是保密的。
网络传输数据 · 1,483 字节
- 这 1,478 字节与 OpenSSL 用 -msg 为该记录打印的内容一致。
计算方式客户端的密钥共享
在发出任何消息之前,客户端先生成它要提供的临时密钥。对于混合组,这是一个 ML-KEM-768 密钥对加上一个 X25519 密钥对,两者的公钥拼接成一个 1216 字节的密钥共享;独立的 X25519 组则有自己单独的密钥。
定义
d, z ←$ B^32 FIPS 203 §7.1 (ek, dk) = ML-KEM-768.KeyGen_internal(d, z) FIPS 203 §6.1 x_c ←$ B^32, X_c = X25519(x_c, 9) RFC 7748 §5 share = ek ‖ X_c 1184 + 32 = 1216 RFC 10024 §4.1 y_c ←$ B^32, Y_c = X25519(y_c, 9) key_share: x25519 (0x001d)
本次会话中的值
- d(32 字节)——扩展为秘密向量
- 84745c7adf177dfb94e15c7cdef6f8006897b295bdafaadd090ef050c004b212
- z(32 字节)——隐式拒绝秘密值
- 921eb10b6b41e8f0221e0f7f164aadef44f4cba1139edd522c9f0860db6b0cde
- 1184 字节封装密钥的 SHA-256
- 4a2903bee32a7a18d3294d93a4d24d6ecc8c07bc098bab31899689f87a572be8
- 客户端 X25519 私钥(混合密钥共享)
- 784edfa4400a57540a7cbd71957c8ab182ae801a5c519755abe69f553b9e8c5d
- 客户端 X25519 公钥(混合密钥共享)
- 09e0802926363ed192b02f5261520f2056ba7af9a0acd1eee5bbe50181e0cf29
- 客户端 X25519 私钥(独立密钥共享)
- d81df8305a5f24f9077b3d669885d0d7b93ec55fe405ccde814bac62e778f656
- 客户端 X25519 公钥(独立密钥共享)
- 67aab4deeec206fa89034014d772bdd47cedd7930610e81f634871565424f14d
这证明了什么
- 用种子执行 ML-KEM-768 密钥生成,得到的封装密钥与客户端密钥共享中的一致。
- 封装密钥的全部 768 个系数都小于 q = 3329(最大为 3326),因此服务器接受该密钥(FIPS 203 §7.2)。
- 由该 X25519 私钥算出的公开值与客户端混合密钥共享中的一致。
- 独立的 X25519 密钥共享使用自己的密钥,与混合密钥共享中的不同。
手动复现
printf '%s' 3054020100300b06096086480165030404020442804084745c7adf177dfb94e15c7cdef6f8006897b295bdafaadd090ef050c004b212921eb10b6b41e8f0221e0f7f164aadef44f4cba1139edd522c9f0860db6b0cde | unhex > client-mlkem.der openssl pkey -inform DER -in client-mlkem.der -pubout -outform DER | tail -c 1184 | openssl dgst -sha256 -binary | tohex
输出 4a2903bee32a7a18d3294d93a4d24d6ecc8c07bc098bab31899689f87a572be8
printf '%s' 302e020100300506032b656e04220420784edfa4400a57540a7cbd71957c8ab182ae801a5c519755abe69f553b9e8c5d | unhex > x25519.der openssl pkey -inform DER -in x25519.der -pubout -outform DER | tail -c 32 | tohex
输出 09e0802926363ed192b02f5261520f2056ba7af9a0acd1eee5bbe50181e0cf29