ClientHello
Der Client eröffnet die Verbindung. Er schlägt TLS 1.3 vor, bietet drei Cipher Suites mit AES oder ChaCha an, listet die unterstützten Gruppen für den Schlüsselaustausch auf – X25519MLKEM768 zuerst – und sendet für jede seiner zwei bevorzugten Gruppen einen Key Share, darunter den hybriden mit 1216 Byte. Das ClientHello wird im Klartext übertragen; noch ist nichts geheim.
Auf der Leitung · 1.483 Byte
- Die 1.478 Byte stimmen mit dem überein, was OpenSSL mit -msg für diesen Record ausgegeben hat.
So wird es berechnetDie Key Shares des Clients
Bevor der Client ein Wort sagt, erzeugt er die ephemeren Schlüssel, die er anbieten wird. Für die hybride Gruppe sind das ein ML-KEM-768-Schlüsselpaar und ein X25519-Schlüsselpaar, deren öffentliche Teile zu einem einzigen Key Share mit 1216 Byte aneinandergehängt werden; die eigenständige Gruppe X25519 bekommt einen eigenen, separaten Schlüssel.
Definition
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)
Werte aus dieser Sitzung
- d (32 Byte) – expandiert zum geheimen Vektor
- 84745c7adf177dfb94e15c7cdef6f8006897b295bdafaadd090ef050c004b212
- z (32 Byte) – das Geheimnis für die implizite Zurückweisung
- 921eb10b6b41e8f0221e0f7f164aadef44f4cba1139edd522c9f0860db6b0cde
- SHA-256 des Kapselungsschlüssels mit 1184 Byte
- 4a2903bee32a7a18d3294d93a4d24d6ecc8c07bc098bab31899689f87a572be8
- Privater Schlüssel des Clients für X25519 (hybrider Key Share)
- 784edfa4400a57540a7cbd71957c8ab182ae801a5c519755abe69f553b9e8c5d
- Öffentlicher Schlüssel des Clients für X25519 (hybrider Key Share)
- 09e0802926363ed192b02f5261520f2056ba7af9a0acd1eee5bbe50181e0cf29
- Privater Schlüssel des Clients für X25519 (eigenständiger Key Share)
- d81df8305a5f24f9077b3d669885d0d7b93ec55fe405ccde814bac62e778f656
- Öffentlicher Schlüssel des Clients für X25519 (eigenständiger Key Share)
- 67aab4deeec206fa89034014d772bdd47cedd7930610e81f634871565424f14d
Was das beweist
- Die Schlüsselerzeugung von ML-KEM-768 aus dem Seed reproduziert den Kapselungsschlüssel im Key Share des Clients.
- Alle 768 Koeffizienten des Kapselungsschlüssels liegen unter q = 3329 (größter: 3326), daher akzeptiert der Server ihn (FIPS 203 §7.2).
- Der private Schlüssel für X25519 reproduziert den öffentlichen Wert im hybriden Key Share des Clients.
- Der eigenständige X25519-Key-Share verwendet einen eigenen Schlüssel, der sich von dem im hybriden Key Share unterscheidet.
Selbst nachvollziehen
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
liefert 4a2903bee32a7a18d3294d93a4d24d6ecc8c07bc098bab31899689f87a572be8
printf '%s' 302e020100300506032b656e04220420784edfa4400a57540a7cbd71957c8ab182ae801a5c519755abe69f553b9e8c5d | unhex > x25519.der openssl pkey -inform DER -in x25519.der -pubout -outform DER | tail -c 32 | tohex
liefert 09e0802926363ed192b02f5261520f2056ba7af9a0acd1eee5bbe50181e0cf29