<?xml version="1.0" encoding="utf-8"?>
<rfcdesc title="Post-Quantum/Traditional Hybrid Key Exchange with the Module-Lattice-Based Key-Encapsulation Mechanism for Use in SSH"
	 num="10042" status="informational" wg="sshm">
  <authors><author>P. Kampanakis (AWS)</author><author>D. Stebila
  (University of Waterloo)</author><author>T. Hansen
  (AWS)</author></authors>
  <rfcdate><month>August</month><year>2026</year></rfcdate>
  <date>2026-08-31</date>
<content>
  <p>Tout le monde (et son chat) se met à la <wikipedia name="Cryptographie post-quantique">cryptographie
  post-quantique</wikipedia> en ce moment et plus précisement à des
  systèmes hybrides, c'est-à-dire utilisant à la fois un algorithme
  traditionnel (comme <wikipedia name="Échange de clés Diffie-Hellman
  basé sur les courbes elliptiques">ECDH</wikipedia>) et un algorithme
  post-quantique (comme <wikipedia xml:lang="en">ML-KEM</wikipedia>). Ce <wikipedia
  name="Request for comments">RFC</wikipedia> décrit l'<link
  local="echange-cles">échange de clés</link> avec un système hybride
  dans le protocole <wikipedia name="Secure
  Shell">SSH</wikipedia>.</p>
  <p>Au début d'une connexion <wikipedia name="Secure
  Shell">SSH</wikipedia> (<rfc num="4251" local="true"/>, section 1),
  les deux parties qui communiquent procèdent en effet à un <link
  local="echange-cles">échange de clés</link> (section 7 du <rfc
  num="4253" local="true"/>) afin de parvenir à un accord sur la clé
  partagée qui sera utilisée pour <wikipedia name="Cryptographie
  symétrique">chiffrer</wikipedia> la communication. Jusqu'à
  récemment, cet échange de clés était fait en utilisant un algorithme
  reposant sur les <wikipedia name="Cryptographie sur les courbes elliptiques">courbes elliptiques</wikipedia> (<rfc
  num="5656" local="true"/> et <rfc num="8731" local="true"/>),
  algorithme qui est vulnérable aux futurs <wikipedia
  name="Calculateur quantique">calculateurs quantiques</wikipedia>. Si
  des calculateurs quantiques réellement utilisables (les CRQC,
  <foreign>Cryptographically Relevant Quantum Computers</foreign>)
  apparaissent un jour, l'ancien algorithme devra être abandonné. Et
  on ne peut pas attendre pour voir si des CRQC deviennent réellement
  disponibles : des attaquants sont peut-être aujourd'hui en train
  d'enregistrer des sessions SSH, afin de les décrypter plus tard
  lorsqu'on aura enfin des CRQC (<rfc num="9958" local="true"/>,
  section 1). Bref, il vaut mieux passer à des algorithmes
  <wikipedia name="Cryptographie post-quantique">post-quantiques</wikipedia> dès maintenant.</p>
  <p>Mais les algorithmes post-quantiques existants ne sont pas
  forcément sûrs face à la <wikipedia>cryptanalyse</wikipedia> ; on
  manque de recul à ce sujet. D'où l'idée de systèmes hybrides (<rfc
  num="9794" local="true"/>), ou PQ/T (pour
  <foreign>PostQuantum/Traditional</foreign>) combinant algorithme
  post-quantique et algorithme traditionnel, et obligeant l'attaquant
  à casser les deux s'il veut décrypter la communication. (Si vous
  voulez creuser la question de la sécurité des systèmes hybrides,
  regardez « <foreign><link
  url="https://eprint.iacr.org/2020/1364">Security of Hybrid Key
  Encapsulation</link></foreign> » et « <foreign><link
  url="https://eprint.iacr.org/2023/972">Security of Hybrid Key
  Establishment using Concatenation</link></foreign> ».) C'est ce
  genre de système que normalise notre <wikipedia name="Request for
  comments">RFC</wikipedia>. Il est sûr face à un attaquant actif,
  même si ce dernier dispose d'un calculateur quantique ou bien s'il a
  trouvé une faille dans l'algorithme post-quantique.</p>
  <p>Plus précisement, ce RFC va utiliser l'algorithme post-quantique
  <wikipedia xml:lang="en">ML-KEM</wikipedia> avec un choix d'algorithmes
  traditionnels.</p>
  <p>La section 2 du RFC décrit concrètement l'échange de clés avec le
  système hybride (relire les <rfc num="4251" local="true"/> et <rfc
  num="4253" local="true"/> peut être utile). Le client SSH, au lieu
  de commencer par <computer>SSH_MSG_KEXDH_INIT</computer> (<rfc
  num="4253" local="true"/>) ou
  <computer>SSH_MSG_KEX_ECDH_INIT</computer> (<rfc num="5656"
  local="true"/>), envoie un message
  <computer>SSH_MSG_KEX_HYBRID_INIT</computer> (valeur 30 dans le
  protocole) qui contient la concaténation des deux clés du client. Et
  la réponse, au lieu de <computer>SSH_MSG_KEXDH_REPLY</computer> ou
  <computer>SSH_MSG_KEX_ECDH_REPLY</computer> sera un
  <computer>SSH_MSG_KEX_HYBRID_REPLY</computer> (valeur 31 dans le
  protocole) contenant la concaténation des deux clés du serveur. Le
  choix du mécanisme hybride utilisé est indiqué dans le message
  <computer>SSH_MSG_KEXINIT</computer> (<rfc num="4253"
  local="true"/>, section 7.1) et peut valoir
  <computer>mlkem768nistp256-sha256</computer>,
  <computer>mlkem1024nistp384-sha384</computer> ou
  <computer>mlkem768x25519-sha256</computer> (désormais <link
  url="https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xml#ssh-parameters-16">enregistrés
  à l'IANA</link>). Rappelez-vous qu'on parle d'<link
  local="echange-cles">échange de clés</link> (symétriques), pas
  d'authentification, la réponse
  <computer>SSH_MSG_KEX_HYBRID_REPLY</computer> contient aussi la clé
  publique du serveur, celle qui sert à vérifier qu'on parle au bon
  serveur, mais celle-ci n'est pas concernée par ce RFC.</p>
  <p>Le mécanisme hybride va nous donner deux secrets partagés, un
  pour chaque algorithme (le post-quantique et le traditionnel) et le
  secret qui servira (après <wikipedia name="Fonction de dérivation de clé">dérivation</wikipedia>) de clé
  pour le <wikipedia name="Cryptographie symétrique">chiffrement
  symétrique</wikipedia> est la concaténation de ces deux secrets
  (c'est très proche de ce que fait <wikipedia name="Transport Layer
  Security">TLS</wikipedia>, dans le <rfc num="9954"
  local="true"/>).</p>
  <p>Un problème classique de la cryptographie post-quantique est la
  taille des clés, bien plus importante qu'avec les algorithmes
  traditionnels. (L'hybride est même un tout petit peu plus grand,
  avec la clé traditionnelle.) SSH a des limites de taille (section
  6.1 du <rfc num="4253" local="true"/>) mais les algorithmes
  spécifiés dans notre RFC ne les atteignent pas.</p>
  <p>La section 6 du RFC détaille les conséquences de ce schéma
  hybride sur la sécurité. Elle conseille par exemple d'utiliser
  <wikipedia>X25519</wikipedia> (<rfc num="8731" local="true"/>)
  plutôt que les courbes <wikipedia name="National Institute of
  Standards and Technology">NIST</wikipedia> comme P256, pour sa
  rapidité et sa meilleure résistance aux <wikipedia name="Attaque par canal auxiliaire">attaques par
  canal auxiliaire</wikipedia>, sauf si on veut de la conformité
  plutôt que de la sécurité et qu'on doit utiliser les courbes
  NIST.</p>
  <p>Côté mise en œuvre de ce système hybride,
  <wikipedia>OpenSSH</wikipedia> le connait (<computer>ssh -Q
  kex</computer> pour avoir la liste des algorithmes connus)
  et, depuis la version
  10.4, « <foreign>the hybrid post-quantum algorithm
  mlkem768x25519-sha256 is now used by default for key
  agreement</foreign> ». Par exemple :
  <code>
<![CDATA[
% ssh -v something.bortzmeyer.org
debug1: OpenSSH_10.4p1, OpenSSL 3.6.3 9 Jun 2026
…
debug1: kex: algorithm: mlkem768x25519-sha256
debug1: kex: host key algorithm: ssh-ed25519
debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: SSH2_MSG_KEX_ECDH_REPLY received
…
]]>
</code>
  Hmmm, ça aurait dû être
  <computer>SSH_MSG_KEX_HYBRID_REPLY</computer>, bizarre…
</p>
</content>
</rfcdesc>
