Qu'est-ce qu'une clé de session ? | Clés de session et handshake TLS

Le protocole SSL/TLS utilise à la fois la clé publique et le chiffrement symétrique. De nouvelles clés de chiffrement symétrique doivent être générées pour chaque session de communication. Ces clés sont appelées « clés de session ».

Share facebook icon linkedin icon twitter icon email icon

Clé de session

Objectifs d’apprentissage

Après avoir lu cet article, vous pourrez :

  • Découvrez ce qu'est une session, ce qu'est une clé et quand de nouvelles clés de session doivent être créées
  • Comprendre les différences entre le chiffrement asymétrique et symétrique
  • Découvrez comment le protocole de chiffrement SSL/TLS utilise les deux types de chiffrements
  • Découvrez les 4 types de clés de session utilisées pour le chiffrement symétrique dans SSL/TLS

Qu'est-ce qu'une clé de session ?

Une clé de session est une clé de chiffrement utilisée pour chiffrer symétriquement une seule session de communication. En d'autres termes, il s'agit d'une clé temporaire qui n'est utilisée qu'une seule fois, pendant une durée, pour chiffrer et déchiffrer des données. Les conversations futures entre les deux parties seront chiffrées avec des clés de session différentes. Une clé de session est comme un mot de passe qu'une personne réinitialise à chaque connexion.

En SSL/TLS, les deux parties communicantes (le client et le serveur) génèrent quatre clés de session au début de toute session de communication, pendant le handshake TLS. Le RFC officiel de TLS n'appelle pas réellement ces clés « clés de session », mais de manière fonctionnelle c'est exactement ce qu'elles sont.

Qu'est-ce qu'une session ?

Une session est essentiellement une conversation. Une session se déroule sur un réseau et commence lorsque deux appareils se reconnaissent mutuellement et ouvrent une connexion virtuelle. Elle se termine lorsque les deux appareils ont obtenu les informations qu'ils ont besoin d'obtenir l'un de l'autre et envoient les messages « finished », mettant fin à la connexion, un peu comme si deux personnes s'envoient des SMS et arrêtent la conversation en disant : « À plus ». La connexion peut également expirer en raison de l'inactivité, comme lorsque deux personnes s'envoient des SMS et cessent simplement de se répondre.

Une session peut être un ensemble de périodes définies, ou elle peut durer aussi longtemps que les deux parties communiquent. Dans le premier cas, la session expirera après un certain temps. Dans le cadre du chiffrement TLS, les deux appareils devront alors échanger des informations et générer de nouvelles clés de session pour rouvrir la connexion.

Qu'est-ce qu'une clé cryptographique ?

En chiffrement, une clé est une chaîne de données qui est utilisée pour modifier les messages afin qu'ils soient chiffrés. En d'autres termes, pour que les données apparaissent de manière aléatoire ou brouillées. Une clé est également utilisée pour déchiffrer les données c'est-à-dire les traduire depuis leur forme brouillée pour les remettre dans leur forme d'origine. (Pour en savoir plus, voir Qu'est-ce qu'une clé cryptographique ?.)

Qu'est-ce que le chiffrement symétrique ? Qu'est-ce que le chiffrement asymétrique ?

Dans le chiffrement symétrique, la même clé est utilisée des deux côtés d'une conversation, pour le chiffrement et le déchiffrement. Dans une session qui utilise le chiffrement symétrique, plusieurs clés peuvent être utilisées, mais un message chiffré avec une clé est déchiffré avec cette même clé.

Dans le chiffrement asymétrique, il existe deux clés et les données chiffrées avec une clé ne peuvent être déchiffrées qu'avec l'autre clé, contrairement au chiffrement symétrique, lorsque la même clé chiffre et déchiffre à la fois. Le chiffrement asymétrique est également appelé chiffrement à clé publique, car l'une des clés est partagée publiquement.

HTTPS utilise-t-il un chiffrement symétrique ou asymétrique ?

HTTPS, qui est HTTP avec le protocole de chiffrement TLS, utilise les deux types de chiffrements. Toutes les communications via TLS commencent par un handshake TLS. Le chiffrement asymétrique est crucial pour que le handshake TLS fonctionne.

Au cours d'un handshake TLS, les deux appareils communicants établiront les quatre clés de session qui seront utilisées pour le chiffrement symétrique pour le reste de la session. Habituellement, les deux appareils communicants sont un client, ou un appareil utilisateur comme un ordinateur portable ou un smartphone, et un serveur, qui est n'importe quel serveur web hébergeant un site web. (Pour en savoir plus, voir Qu'est-ce que le modèle client-serveur ?)

Comment fonctionne un handshake TLS ?

Au cours d'un handshake TLS, le client et le serveur s'envoient des données aléatoires qu'ils utilisent pour effectuer des calculs séparément, puis produisent les mêmes clés de session. Trois types de données générées aléatoirement sont envoyées d'un côté à l'autre :

  • Le « client random » : il s'agit d'une chaîne aléatoire d'octets que le client envoie au serveur.
  • Le « serveur random » : il est similaire au client random, mais c'est le serveur qui l'envoie au client.
  • Le « secret pre-maître » : il s'agit encore d'une autre chaîne de données. Dans certaines versions du handshake TLS, le client génère le « secret pré-maître » (premaster secret) et l'envoie au serveur chiffrée avec la clé publique. Dans d'autres versions, le client et le serveur génèrent eux-mêmes le secret pre-maître, en utilisant des paramètres d'algorithme convenus pour arriver au même résultat.

Le handshake TLS utilise un chiffrement asymétrique soit pour masquer le server random contre les pirates (en le chiffrant avec une clé privée), soit pour permettre au serveur de « signer » numériquement l'un de ses messages afin que le client sache que le serveur est bien celui qu'il prétend être (tout comme une signature permet de vérifier l'identité d'une personne dans la vie réelle). Le serveur chiffre certaines données avec la clé privée, et le client utilise la clé publique pour les déchiffrer, prouvant que le serveur a la bonne clé et est légitime.

Qu'est-ce que le « secret maître » dans un handshake TLS ?

Le master secret, ou secret maître, est la clé finale résultant de la combinaison du client random, du serveur random et du secret pré-maître via un algorithme. Le client et le serveur ont chacun ces trois messages, ils devraient donc arriver au même résultat pour le master secret.

Le client et le serveur utilisent ensuite le master secret pour calculer plusieurs clés de session à utiliser dans cette session uniquement (quatre clés de session, pour être précis).

Quelles sont les quatre clés de session générées à partir du master secret principal dans un handshake TLS ?

Les quatre types de clés de session créées dans chaque handshake TLS sont les suivantes :

  • La « clé écrite par le client » (client write key)
  • La « clé écrite par le serveur » (server write key)
  • La « client_write_MAC_key »
  • La « server_write_MAC_secret »

La clé écrite par le client (client write key) est la clé que le client utilise pour chiffrer ses messages. La clé écrite par le client est une clé symétrique, elle est en possession du client et du serveur. Cela permet au serveur de déchiffrer les messages du client à l'aide de la même clé.

La server_write_key est la clé écrite par le serveur, elle est identique à la clé écrite par le client (client_write_key), sauf qu'elle est du côté serveur. En résumé : les messages du client au serveur sont chiffrés avec la clé écrite par le client et le serveur utilise la clé écrite par le client pour les déchiffrer. Les messages adressés du serveur au client sont chiffrés avec la clé écrite par le serveur et le client utilise la clé écrite par le serveur pour les déchiffrer. (L'ensemble de ce processus est géré par l'appareil ou le navigateur du client. Les utilisateurs eux-mêmes n'ont pas à effectuer de chiffrement ou de déchiffrement.)

Les clés MAC (message authentification code) sont utilisés pour signer numériquement les messages. Le serveur signe ses messages avec la clé MAC écrite par le serveur (server_write_MAC_key) et lorsque le client reçoit le message, il peut vérifier la clé MAC utilisée par rapport à son propre enregistrement de la clé MAC écrite par le serveur pour s'assurer qu'elle est légitime. Le client signe ses messages avec la clé MAC écrite par le client (client_write_MAC_key).

Un ensemble de quatre clés de session entièrement nouvelles est créé à chaque nouvelle session de communication et nouveau handshake TLS. Il y aura une nouvelle clé écrite par le client, une nouvelle clé écrite par le serveur etc., mais ces quatre types de clés seront créés à chaque fois.