Vous êtes victime d’un incident de sécurité ? Contactez notre CERT

11/04/2025

Blog technique

La cryptographie post-quantique dans TLS

Lucile Razé

TLS est un protocole permettant d’assurer la confidentialité et l’intégrité des échanges entre un client et un serveur et à minima l’authenticité du serveur. Dernièrement, la cryptographie post-quantique (abrégée PQC) y a été intégrée.

Les spécificités de TLS1.3

La dernière version de TLS est la 1.3, sortie en 2018. Les principales améliorations entre TLS1.2 et TLS1.3 sont la réduction du nombre d’échanges dans la poignée de main pour une meilleure efficacité et le chiffrement d’une partie de la poignée de main. Une autre différence concerne les suites de chiffrement. Jusqu’à TLS1.2, les suites négociées par le client et le serveur incluaient, pour chaque communication :

  • Un mécanisme d’échange de clé ;
  • Un mécanisme d’authentification ;
  • Un mécanisme de chiffrement symétrique assurant la confidentialité et l’intégrité ;
  • Une fonction de hachage pour les dérivations de secrets.

Voici un exemple de suite de chiffrement dans TLS1.2 : TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384.

Schéma de la suite de chiffrement TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

Dans TLS1.3, les suites de chiffrement incluent seulement :

  • Un algorithme de chiffrement assurant la confidentialité et l’intégrité ;
  • Une fonction de hachage.

Les mécanismes d’échange de clé et d’authentification sont spécifiés dans des extensions. Voici les cinq suites de chiffrement définies par l’IANA pour TLS1.3 :

  • TLS_AES_256_GCM_SHA384 ;
  • TLS_CHACHA20_POLY1305_SHA256 ;
  • TLS_AES_128_GCM_SHA256 ;
  • TLS_AES_128_CCM_8_SHA256 ;
  • TLS_AES_128_CCM_SHA256.
Schéma de la suite de chiffrement TLS_AES_256_GCM_SHA384

L’attaque Store Now Decrypt Later

Bien qu’aucun ordinateur quantique efficace ne semble exister pour le moment, il est important d’utiliser le plus tôt possible des algorithmes post-quantiques. En effet, un attaquant pourrait stocker des communications dont l’échange de clé et les données chiffrées. Si l’attaquant a accès, par la suite, à un ordinateur quantique permettant de retrouver les clés de session négociées, il pourra alors déchiffrer l’ensemble des communications stockées . C’est pourquoi il est nécessaire de se protéger dès maintenant des attaques pouvant être réalisées par un ordinateur quantique.

L’hybridation

Utiliser des algorithmes post-quantiques permet donc de se protéger des attaques Store Now Decrypt Later, mais il peut être difficile de leur accorder une confiance totale. L’hybridation est un compromis combinant un algorithme traditionnel avec un algorithme post-quantique.

L’intégration de la PQC dans TLS

Pour permettre d’utiliser de la cryptographie post-quantique dans TLS, plusieurs contraintes ont été énoncées. En voici les principales :

  • Aucun aller-retour ne doit être ajouté dans la poignée de main.
  • L’utilisation de nouveaux algorithmes ne doit pas être excessivement couteuse.
  • Les clients et les serveurs utilisant ces nouveaux algorithmes doivent rester rétro compatibles avec les autres parties n’utilisant pas ces algorithmes.

La cryptographie post-quantique ne concerne que les échanges de clés dans un premier temps. Adapter les extensions précisant les mécanismes d’échange de clé est donc suffisant. Plus précisément, seules les extensions supported_groups et key_share sont impactées. L’intégration du post-quantique dans TLS est (relativement) facile ; il n’est donc pas nécessaire de mettre à jour le protocole avec une version 1.4 ou 2.0. Les deux paragraphes suivants détaillent comment ces deux extensions sont modifiées.

L’extension supported_groups

Cette extension permet de préciser l’algorithme pour l’échange de clé. Traditionnellement, la courbe elliptique y est indiquée, par exemple SecP256r1. Il est maintenant possible d’y indiquer un algorithme post-quantique tel que MLKEM768 ou une combinaison d’un algorithme traditionnel et post quantique tel que SecP256r1MLKEM768.

Attention certains groupes sont déjà obsolètes comme SecP256r1Kyber768Draft00 et ne doivent pas être utilisés. Voici un tableau récapitulant l’ensemble des valeurs fixées par l’IANA et les tailles des données pour chacun des groupes avec du post-quantique.

Groupe
Valeur
Taille de la clé publique
Taille du chiffré

Conformité

MLKEM512
512 (0x0200)
800
768

Non

MLKEM768
513
(0x 0201)
1184
1088

Oui

MLKEM1024
514
(0x 0202)
1568
1568

Oui

SecP256r1MLKEM768
4587 (0x11EB)
65 + 1184 = 1249
65 + 1088 = 1153

Oui

X25519MLKEM768
4588 (0x11EC)
1184 + 32 = 1216
1088 + 32 = 1120

Oui

SecP384r1MLKEM1024
4589 (0x11ED)
97 + 1568 = 1665
97 + 1568 = 1665

Oui

X25519Kyber768Draft00
25497 (0x6399)
1184 + 32 = 1216
1088 + 32 = 1120

Non

SecP256r1Kyber768Draft00
25498 (0x636A)
65 + 1184 = 1249
65 + 1088 = 1153

Non

Dans un contexte ou l’hybridation n’est pas souhaitée, ML-KEM-768 et ML-KEM-1024 peuvent être utilisés. ML-KEM-512 a une sécurité pouvant être jugée insuffisante . La plupart des agences nationales de sécurité conseillent les niveaux de sécurité les plus élevées. X25519Kyber768Draft00 et SecP256r1Kyber768Draft00 sont des ébauches avant que le standard de Kyber, ML-KEM ne soit publié par le NIST.

L’extension key_share

Cette extension est utilisée pour le partage des clés publiques dans le cas d’un échange de clés Diffie-Hellman classique, mais pour un KEM elle est utilisée pour stocker la clé publique dans le Client Hello et le chiffré dans le Server Hello. Lorsqu’un mécanisme hybride est choisi les données hybrides sont transmises dans cette extension également .

Comme chaque combinaison d’échange de clés est considérée comme une nouvelle méthode d’échange de clés unique, les clés de chacun des algorithmes sous-jacents sont concaténées. Les tailles de chaque clé étant connue à l’avance, aucun codage supplémentaire n’est nécessaire pour indiquer la longueur des données. Il est important que la clé publique de chaque algorithme soit générée de manière indépendante. Il est cependant possible de réutiliser une clé publique pour différents groupes en la dupliquant . Cette duplication ne pose pas de problème de sécurité car une seule clé publique sera finalement utilisée mais elle peut augmenter significativement la taille de l’extension key_share.

La règle pour l’ordre des données est de respecter l’ordre dans le nom du groupe. Par exemple pour le groupe SecP384r1MLKEM1024, les données relatives à SecP384r1 seront placées en première position et celle relatives à MLKEM1024 en seconde. Cependant, quand un des deux groupes n’est pas reconnu par le NIST, comme c’est le cas pour x25519 (cf section 3.2.2.1 du NIST SP 800-186), ces données sont placées en dernières.

Après l’échange de clé hybride, deux clés de 32 octets sont connues par le client et le serveur. Chacun doit calculer la clé de session avec une fonction de dérivation KDF : session_key = HKDF(PSK,k1||k2), où PSK signifie Pre Shared Key. Cette clé pré-partagée peut être issue d’une session TLS1.3 précédente ou avoir été partagée de manière indépendante du protocole en amont de l’établissement de la session courante. Cette dérivation est indispensable ; sa suppression expose à des attaques si un oracle de décapsulation existe.

L’analyse d’une poignée de main TLS avec de la PQC

Pour analyser une telle poignée de main, il faut un client et un serveur qui soient tous deux compatibles.

La compatibilité des clients et des serveurs

Côté client, de nombreux navigateurs offrent des suites hybrides ; c’est notamment le cas des navigateurs Chromium (Google Chrome, Microsoft Edge, …) mais aussi de Firefox. Par défaut, ces navigateurs proposent le groupe X25519MLKEM768. Il est possible de désactiver ce groupe dans les paramètres des navigateurs.

  • Pour Firefox : dans about:config avec la variable tls.enable_kyber qui contrairement à ce que son nom indique offre bien un schéma hybride avec MLKEM et non avec Kyber.
  • Pour Google Chrome : dans chrome://flags avec #enable-tls12-kyber et #use-ml-kem. Attention le flag #enable-tls12-kyber est expérimental et permet d’utiliser le groupe X25519Kyber768Draft00 si #use-ml-kem est désactivé.
Image de configuration de Chrome pour l'activation de ML-KEM
Configuration de Firefox pour l'activation de Kyber

Côté serveur, les sites web hébergés chez Cloudflare acceptent les groupes hybrides.

La page https://pq.cloudflareresearch.com/ permet de savoir facilement si notre navigateur est compatible post-quantique.

L’analyse d’une capture avec Wireshark

En écoutant une communication avec Wireshark entre un navigateur et un site web compatible PQC (comme celui d’Amossys !), il est possible de regarder en détails les extensions key_share et supported_groups. Dans le Client Hello, comme attendu, le groupe X25519MLKEM768 est bien proposé ; c’est le groupe inconnu 0x11ec sur la photo car l’outil Wireshark, utilisé pour obtenir la capture réseau, ne l’identifie pas pour le moment .

Dans key_share, les clés publiques de MLKEM768 et de X25519 sont envoyées ; leur taille concaténée est bien cohérente à celle attendue. Dans cette extension le numéro du groupe apparaît en décimal et non en hexadécimal comme dans supported_groups.

keyshare client hello pqc

Dans la réponse du serveur, le groupe choisi est bien X25519MLKEM768 et la taille des données échangées correspond bien à la taille des chiffrés concaténées.

Analyse Wireshark d'un Server Hello TLS 1.3 montrant l'extension key_share avec un groupe post-quantique X25519MLKEM768

La cryptographie post-quantique est donc bien présente et utilisée dans TLS1.3 au niveau des échanges de clés !

Et les signatures post-quantiques ?

Les signatures sont également impactées par l’arrivée des ordinateurs quantiques, notamment pour les signatures des certificats mais cela est jugé moins urgent que pour les échanges de clés. En effet, les certificats sont utilisés pour réaliser une authentification en temps réels. Effectuer une attaque des années plus tard n’a que peu d’intérêt. C’est pourquoi les décisions à ce sujet sont bien moins avancées que celle sur l’échange de clés. Mais comme tous les changements à grandes échelles sont lents et que les certificats peuvent avoir une durée de validité relativement longue, il est nécessaire d’y réfléchir dès maintenant.

Voir les derniers articles de notre Blog technique et les dernières actualités

11 mars 2025
In the previous article, we explained how to find a Local Privilege Escalation using DLL sideloading. At the end, we […]
28 janvier 2025
[...] As part of this activity, we developed a tool being able to realize RFID relay attacks on access control […]
9 janvier 2025
Contrairement à une évaluation de sécurité réalisée dans un objectif de certification (CSPN ou Critères Communs), la recherche de vulnérabilités […]
20 décembre 2024
La sécurité informatique peut paraître, pour beaucoup, comme un centre de coût et de complexité : plan d’audits à mettre en […]
16 décembre 2024
Après avoir exploré les vulnérabilités inhérentes aux modèles de langage à grande échelle (LLM) dans notre série d'articles, il est […]
28 novembre 2024
L'exfiltration de modèles LLM (Model Theft in english) par des acteurs malveillants ou des groupes de cyberespionnage avancés est une […]
26 novembre 2024
La surconfiance (Overreliance en anglais) peut survenir lorsqu'un LLM produit des informations erronées et les présente de manière autoritaire [...]
25 novembre 2024
Avec une souche éprouvée, des outils bien choisis et des cibles stratégiques, 8Base se distingue comme une menace particulièrement redoutable. […]
13 novembre 2024
Un système basé sur les LLM (Large Language Models) est souvent doté d'un certain degré d'autonomie par son développeur, [...]
12 novembre 2024
Les plugins pour LLM sont des extensions qui, lorsqu'ils sont activés, sont automatiquement appelés par le modèle pendant les interactions […]