ClientHello
Le client ouvre la connexion. Il propose TLS 1.3, offre trois suites de chiffrement AES/ChaCha, liste les groupes d’échange de clés qu’il prend en charge, X25519MLKEM768 en tête, et envoie une key share pour chacun de ses deux groupes préférés, dont la key share hybride de 1216 octets. Ce message circule en clair : rien n’est encore secret.
Sur le réseau · 1 483 octets
- Les données de cet enregistrement (1 478 octets) correspondent à ce qu’OpenSSL a affiché avec -msg.
Mode de calculLes key shares du client
Avant même d’envoyer quoi que ce soit, le client génère les clés éphémères qu’il proposera. Pour le groupe hybride, il s’agit d’une paire de clés ML-KEM-768 et d’une paire de clés X25519, dont les parties publiques sont concaténées en une seule key share de 1216 octets ; le groupe X25519 autonome reçoit sa propre clé, distincte.
Définition
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)
Valeurs de cette session
- d (32 octets) : étendu en vecteur secret
- 84745c7adf177dfb94e15c7cdef6f8006897b295bdafaadd090ef050c004b212
- z (32 octets) : le secret de rejet implicite
- 921eb10b6b41e8f0221e0f7f164aadef44f4cba1139edd522c9f0860db6b0cde
- SHA-256 de la clé d’encapsulation de 1184 octets
- 4a2903bee32a7a18d3294d93a4d24d6ecc8c07bc098bab31899689f87a572be8
- clé privée X25519 du client (key share hybride)
- 784edfa4400a57540a7cbd71957c8ab182ae801a5c519755abe69f553b9e8c5d
- clé publique X25519 du client (key share hybride)
- 09e0802926363ed192b02f5261520f2056ba7af9a0acd1eee5bbe50181e0cf29
- clé privée X25519 du client (key share autonome)
- d81df8305a5f24f9077b3d669885d0d7b93ec55fe405ccde814bac62e778f656
- clé publique X25519 du client (key share autonome)
- 67aab4deeec206fa89034014d772bdd47cedd7930610e81f634871565424f14d
Ce que cela prouve
- La génération de clés ML-KEM-768 à partir de la graine redonne la clé d’encapsulation présente dans la key share du client.
- Les 768 coefficients de la clé d’encapsulation sont tous inférieurs à q = 3329 (le plus grand vaut 3326) : le serveur l’accepte donc (FIPS 203 §7.2).
- La clé privée X25519 redonne la valeur publique présente dans la key share hybride du client.
- La key share X25519 autonome utilise sa propre clé, différente de celle de la key share hybride.
Reproduisez-le vous-même
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
affiche 4a2903bee32a7a18d3294d93a4d24d6ecc8c07bc098bab31899689f87a572be8
printf '%s' 302e020100300506032b656e04220420784edfa4400a57540a7cbd71957c8ab182ae801a5c519755abe69f553b9e8c5d | unhex > x25519.der openssl pkey -inform DER -in x25519.der -pubout -outform DER | tail -c 32 | tohex
affiche 09e0802926363ed192b02f5261520f2056ba7af9a0acd1eee5bbe50181e0cf29