Séquence 8 · Cybersécurité
8.2

Chiffrement

Du chiffrement de César à AES, puis la clé publique / clé privée qui permet à HTTPS de sécuriser vos échanges sans jamais faire circuler de secret en clair.

clair
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
chiffré
DEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABC
BONJOUR → ERQMRXU

01 Pourquoi chiffrer une communication ?

Un message circule sur le réseau en passant par de nombreux routeurs intermédiaires avant d'atteindre son destinataire. Chacun de ces intermédiaires pourrait, en théorie, lire le contenu des paquets qui transitent par lui. Pour l'empêcher, on chiffre les données : on les transforme selon une règle secrète, de façon à ce qu'elles soient incompréhensibles pour quiconque ne possède pas la clé permettant de les déchiffrer.

Vous avez déjà croisé cette idée à deux reprises : le protocole SSH, qui sert à la connexion à distance sécurisée, et le S de HTTPS, qui signifie Secure et indique que les échanges entre votre navigateur et le serveur sont chiffrés.

02 Un chiffrement historique : le chiffrement de César

L'un des chiffrements les plus anciens connus est le chiffrement de César, utilisé par Jules César pour ses correspondances militaires. Le principe : on décale chaque lettre du message d'un nombre fixe de rangs dans l'alphabet. Essayez ci-dessus avec le curseur : la clé de ce chiffrement est simplement le nombre de décalage.

C'est un exemple de chiffrement symétrique : la même clé (le décalage) sert à la fois à chiffrer et à déchiffrer. Il est cependant extrêmement fragile aujourd'hui : il n'existe que 25 décalages possibles, un ordinateur peut donc tous les essayer en une fraction de seconde — une attaque par force brute, comme vu dans la fiche précédente.

Activité 8.2.1

Programmer le chiffrement de César

  1. Écrivez une fonction chiffrer_cesar(message, decalage) qui prend en paramètre un message (en majuscules, sans accents ni espaces) et un décalage, et renvoie le message chiffré. Indice : ord(lettre) renvoie le code numérique d'un caractère, chr(code) fait l'inverse, et A a le code 65 — pour rester dans l'alphabet : chr((ord(lettre) - 65 + decalage) % 26 + 65).
  2. Écrivez une fonction dechiffrer_cesar(message, decalage) qui fait l'opération inverse.
  3. Écrivez une fonction casser_cesar(message) qui essaie automatiquement les 26 décalages possibles et affiche chaque résultat, afin de retrouver le message d'origine sans connaître la clé. Combien de temps mettrait un ordinateur à l'exécuter ?

03 Le chiffrement symétrique moderne

Les chiffrements symétriques actuels (le plus utilisé s'appelle AES) suivent exactement le même principe que le chiffrement de César — une seule clé pour chiffrer et déchiffrer — mais avec des clés bien plus longues et des transformations mathématiques bien plus complexes, rendant toute attaque par force brute impossible avec les ordinateurs actuels.

Ce type de chiffrement pose cependant un problème pratique : comment transmettre la clé à son correspondant sans qu'un espion situé sur le chemin (un routeur malveillant, par exemple) ne l'intercepte ? Si la clé circule en clair sur le réseau, tout le chiffrement devient inutile.

04 Le chiffrement asymétrique : la solution au problème de la clé

Le chiffrement asymétrique résout ce problème en utilisant deux clés différentes et complémentaires : une clé publique, que l'on peut diffuser librement, et une clé privée, gardée secrète par son propriétaire. Tout ce qui est chiffré avec la clé publique ne peut être déchiffré qu'avec la clé privée correspondante (et inversement).

Analogie — la clé publique est comme une boîte aux lettres ouverte : n'importe qui peut y déposer une lettre (chiffrer). Mais seul le propriétaire, qui détient la clé privée de la boîte, peut ensuite la relever et lire son contenu (déchiffrer).

05 HTTPS en pratique : le cadenas du navigateur

Quand votre navigateur se connecte à un site en HTTPS, voici, très simplifié, ce qui se passe :

  1. le navigateur contacte le serveur et demande une connexion sécurisée ;
  2. le serveur présente son certificat, qui contient sa clé publique ;
  3. le navigateur vérifie que ce certificat est authentique, délivré par une autorité de confiance ;
  4. navigateur et serveur s'en servent pour se mettre d'accord sur une clé secrète commune ;
  5. toute la suite de la communication est chiffrée avec cette clé (chiffrement symétrique, plus rapide).

Ce certificat est délivré par une autorité de certification, qui vérifie l'identité du propriétaire du nom de domaine avant de le signer. C'est ce mécanisme que le petit cadenas affiché par le navigateur vous signale : la connexion est chiffrée, et l'identité du site a été vérifiée par un tiers de confiance.

Activité 8.2.2

Observer un certificat réel

  1. Rendez-vous sur un site en HTTPS, puis cliquez sur le cadenas affiché à côté de l'URL dans la barre d'adresse.
  2. Trouvez l'option affichant les détails du certificat (le nom exact varie selon le navigateur : « Connexion sécurisée », « Certificat », « Plus d'informations »…).
  3. Relevez le nom de domaine concerné, l'autorité de certification qui l'a signé, ainsi que ses dates de début et de fin de validité.
  4. Que se passerait-il avec un certificat expiré ou invalide ? Vous pouvez tester votre hypothèse sur expired.badssl.com, volontairement configuré avec un certificat expiré.
→ pixees.fr/informatiquelycee
À retenir

Chiffrer un message le rend illisible sans la bonne clé. Le chiffrement symétrique (César, ou AES aujourd'hui) utilise une seule clé partagée. Le chiffrement asymétrique utilise une paire de clés (publique / privée) et résout le problème de l'échange de la clé. HTTPS combine les deux : l'asymétrique sert à établir une connexion sécurisée, puis le symétrique protège le reste des échanges, une fois l'identité du site vérifiée grâce à son certificat.