cours1 min de lecture

HTTPS — l'échange de clé symétrique

Comment HTTPS combine chiffrement asymétrique et symétrique — l'asymétrique pour échanger une clé, le symétrique pour la suite de la communication. Le handshake en version simplifiée, sans entrer dans SSL/TLS.
programme

Introduction

Vous avez vu le chiffrement symétrique (rapide, mais clé partagée à échanger) et le chiffrement asymétrique (échange sans contact préalable, mais lent). En pratique, le Web sécurise ses communications en combinant les deux : c'est exactement ce que demande . L'image qui aide à fixer le mécanisme est celle de la valise diplomatique : on commence par échanger une clé sous la protection d'un dispositif coûteux (l'asymétrique), puis cette clé sert à ouvrir et fermer une simple valise pour tout le reste de la correspondance (le symétrique). Le protocole qui orchestre cette combinaison s'appelle HTTPSHTTP over TLS. Quand vous voyez le cadenas dans la barre du navigateur, c'est HTTPS qui est à l'œuvre. Ce cours décrit le mécanisme central — l'échange de clé — sans entrer dans les détails de la négociation TLS, que le programme officiel exclut explicitement (« la négociation SSL n'est pas abordée »).

Pourquoi combiner les deux ?

Récapitulons ce que vous savez :

ChiffrementAvantageInconvénient
SymétriqueTrès rapide, peu coûteuxNécessite une clé partagée au préalable
AsymétriquePas de partage préalableLent, inadapté aux longs messages

L'idée d'HTTPS est de prendre le meilleur des deux :

  • L'asymétrique sert uniquement au démarrage, pour transmettre une clé symétrique fraîche.
  • Le symétrique prend ensuite le relais pour toute la conversation.

L'asymétrique n'intervient donc que sur quelques centaines d'octets — la clé de session. Le coût en performance est négligeable. Ensuite, AES (ou équivalent) chiffre les pages, les images, les requêtes — c'est rapide.

Le handshake HTTPS — version simplifiée

Quand votre navigateur ouvre une connexion vers https://nsi.rocks, il se passe (en gros, en ignorant les détails TLS) ceci :

  1. Le client ouvre la connexion vers le serveur sur le port 443.
  2. Le serveur envoie son certificat, qui contient sa clé publiqueKpubserveurK_{pub-serveur}. Le certificat est signé par une autorité reconnue, ce qui permet au navigateur de vérifier qu'il parle bien au bon serveur.
  3. Le client génère une clé symétrique aléatoire kk (par exemple 256 bits pour AES-256).
  4. Le client chiffre kk avec la clé publique du serveur : Ck=EKpubserveur(k)C_k = E_{K_{pub-serveur}}(k) et envoie CkC_k au serveur.
  5. Le serveur déchiffre CkC_k avec sa clé privée : k=DKprivserveur(Ck)k = D_{K_{priv-serveur}}(C_k) Client et serveur partagent maintenant kk, sans qu'elle ait jamais transité en clair.
  6. À partir d'ici, toute la communication est chiffrée symétriquement avec kk, via AES par exemple.
ServeurClientgénère kdéchiffre k avec K_privClientHello1Certificat (K_pub)2E_Kpub(k)3chiffré avec k4chiffré avec k5
Handshake HTTPS simplifié
Aucune partie sensible ne circule en clair. La clé publique est publique par construction ; le chiffré CkC_k ne révèle pas kk sans la clé privée du serveur ; les messages suivants sont chiffrés avec kk. Un espion sur la ligne ne voit que des octets aléatoires.

Pendant le handshake HTTPS, qu'est-ce qui circule chiffré par la clé publique du serveur ?

Pourquoi c'est sûr

Trois propriétés s'enchaînent :

  • L'attaquant ne connaît pas KprivserveurK_{priv-serveur}. Seul le serveur la possède. Il ne peut donc pas déchiffrer CkC_k, donc il n'apprend pas kk.
  • Sans kk, il ne peut pas lire les messages chiffrés par AES qui suivent.
  • Le certificat signé par une autorité reconnue atteste qu'on parle bien au bon serveur, pas à un imposteur qui aurait intercepté la connexion.

Si l'une de ces propriétés tombe — par exemple si KprivserveurK_{priv-serveur} fuite — toutes les communications passées et futures avec ce serveur sont compromises. C'est pourquoi les serveurs sérieux régénèrent leurs clés périodiquement (et utilisent en réalité des mécanismes plus sophistiqués, comme la forward secrecy, qui dépasse le programme).

Ce qu'il faut savoir au-delà du schéma

Le programme officiel précise : « La négociation de la méthode de chiffrement du protocole SSL n'est pas abordée. » Cela signifie que vous n'avez pas à connaître :

  • les versions de TLS (1.2, 1.3) et leurs différences ;
  • les cipher suites précises négociées ;
  • les phases internes ServerHello/ClientKeyExchange/Finished.

Vous devez savoir :

  • qu'HTTPS combine asymétrique et symétrique ;
  • que l'asymétrique sert à transmettre la clé symétrique ;
  • que la suite de la communication est symétrique ;
  • qu'un certificat sert à authentifier le serveur.

Une fois le handshake terminé, la page HTML que le serveur envoie au navigateur est chiffrée…

Récapitulatif visuel

ÉtapeCôtéActionClé utilisée
1ClientOuvre la connexion
2ServeurEnvoie son certificat (avec KpubK_{pub})
3ClientGénère kk aléatoire
4ClientEnvoie EKpub(k)E_{K_{pub}}(k)KpubserveurK_{pub-serveur}
5ServeurDéchiffre et obtient kkKprivserveurK_{priv-serveur}
6Les deuxCommunication chiffréekk (symétrique)

Pour aller plus loin

Le mécanisme décrit ici est l'idée centrale. En pratique, TLS 1.3 a remplacé l'envoi direct de kk chiffré par RSA par un échange Diffie-Hellman qui assure la forward secrecy : même si la clé privée du serveur fuite plus tard, les communications passées restent indéchiffrables. Le principe « asymétrique pour fonder un secret commun court, symétrique pour le gros du trafic » reste strictement le même.