cours1 min de lecture

Chiffrement symétrique

Une clé secrète partagée entre les deux parties, la même pour chiffrer et déchiffrer — du XOR illustratif à AES en mention, le socle du chiffrement classique.
programme

Introduction

Vous souhaitez envoyer un message confidentiel à quelqu'un. Le message voyage sur un réseau public — Internet — où n'importe qui peut intercepter les paquets en transit. Comment garantir que seul le destinataire comprend ce que vous écrivez ? C'est la question que résout la cryptographie, une discipline ancienne — la machine Enigma de chiffrement utilisée par l'Allemagne durant la Seconde Guerre mondiale, cassée par les équipes alliées dont Alan Turing, en est un jalon célèbre. La méthode la plus classique, et toujours la plus utilisée pour le gros du trafic, est le chiffrement symétrique : expéditeur et destinataire partagent une même clé secrète qu'ils utilisent pour chiffrer et déchiffrer. Imagez-la comme un cadenas à clé identique dont Alice et Bob possèdent chacun un exemplaire — n'importe lequel des deux peut fermer ou ouvrir la boîte. Le programme officiel () demande d'en décrire le principe.

Le principe en deux fonctions

Notons MM le message clair (en clair, lisible) et CC le message chiffré (chiffré, illisible). Soit kk la clé partagée. Le chiffrement symétrique repose sur deux fonctions :

C=Ek(M)M=Dk(C)C = E_k(M) \qquad M = D_k(C)
  • EkE_k est la fonction de chiffrement paramétrée par la clé kk.
  • DkD_k est la fonction de déchiffrement, l'inverse de EkE_k.
  • La même clé kk est utilisée des deux côtés — d'où le qualificatif symétrique.

L'expéditeur calcule C=Ek(M)C = E_k(M) et envoie CC. Le destinataire reçoit CC et calcule M=Dk(C)M = D_k(C). Tout intercepteur qui ne connaît pas kk ne voit que CC, illisible.

Le secret repose entièrement sur kk. L'algorithme EE est public — tout le monde sait comment il fonctionne. Ce qui doit rester secret, c'est la clé. C'est le principe de Kerckhoffs, posé en 1883.

Un exemple illustratif : le XOR bit à bit

Pour saisir le principe sans entrer dans les détails d'un vrai chiffrement moderne, voici un mécanisme jouet utilisable en classe : le XOR bit à bit.

Soit le message clair MM codé en binaire et une clé kk de même longueur (également binaire). Le chiffrement est :

C=MkC = M \oplus k

\oplus est l'opérateur OU exclusif (XOR). La propriété magique du XOR est que Xkk=XX \oplus k \oplus k = X — appliquer la même clé deux fois annule l'opération. Donc :

M=CkM = C \oplus k

Le déchiffrement utilise exactement la même opération que le chiffrement.

def chiffrer_xor(message: bytes, cle: bytes) -> bytes:
    return bytes(m ^ k for m, k in zip(message, cle))

cle = b"\x5a\x5a\x5a\x5a"
clair = b"\x48\x49\x21\x21"      # 'HI!!'
chiffre = chiffrer_xor(clair, cle)
print(chiffre)                    # b'\x12\x13\x7b\x7b'

dechiffre = chiffrer_xor(chiffre, cle)
print(dechiffre)                  # b'HI!!'
Ne prenez pas le XOR comme un chiffrement réel. Avec une clé courte réutilisée, il se casse trivialement par analyse statistique. Il n'est robuste que si la clé est aussi longue que le message et utilisée une seule fois (one-time pad) — schéma théoriquement parfait mais impraticable à grande échelle.

En chiffrement symétrique, l'expéditeur et le destinataire utilisent…

Les chiffrements réels — AES en mention

Les chiffrements symétriques utilisés aujourd'hui ne reposent pas sur un simple XOR. Ils combinent des substitutions (remplacement d'octets selon une table) et des permutations (mélange de positions), répétées sur plusieurs tours. Le représentant emblématique est :

  • AES (Advanced Encryption Standard), adopté en 2001 par le NIST, utilise des clés de 128, 192 ou 256 bits, et opère sur des blocs de 128 bits. C'est aujourd'hui le standard de fait — utilisé dans HTTPS, Wi-Fi WPA2/3, le chiffrement de disque, les messageries sécurisées.

Vous n'avez pas à mémoriser l'algorithme interne d'AES — savoir qu'il existe, qu'il chiffre par blocs avec une clé symétrique de 128/256 bits, et qu'il est considéré comme sûr (avec les bons modes d'opération) suffit au niveau Terminale.

Le problème : partager la clé

Le chiffrement symétrique est rapide, efficace, et utilisé pour chiffrer le gros des communications. Mais il pose un problème pratique décisif : comment Alice et Bob se mettent-ils d'accord sur la clé kk sans qu'un espion l'intercepte ?

  • S'ils se rencontrent physiquement, pas de souci — ils se passent la clé en main propre.
  • Sur Internet, entre deux machines qui ne se sont jamais vues, c'est le cœur du problème.

Cette question — l'échange de clé — est résolue par le chiffrement asymétrique, vu au cours suivant. HTTPS combine en réalité les deux : asymétrique pour échanger une clé, symétrique pour la suite de la communication.

Activité débranchée : distribuez à deux élèves Alice et Bob une carte clé identique (par exemple 01010101). Donnez à Alice un mot binaire à chiffrer par XOR avec la clé. Transmettez le chiffré en main. Bob applique la même clé pour retrouver le mot. Un troisième élève « espion » voit passer le chiffré mais ne peut rien en faire sans la clé. L'activité illustre à la fois la robustesse du XOR avec clé suffisante et la difficulté d'échanger la clé sans contact préalable.

Le principe de Kerckhoffs dit que…

Pour aller plus loin

Au-delà d'AES, les modes d'opération (CBC, GCM, CTR) déterminent comment le chiffrement par blocs s'applique à un message long. Le mode GCM, en particulier, fournit en plus de la confidentialité une authentification du message — il garantit que le contenu n'a pas été modifié. C'est ce que HTTPS utilise en pratique aujourd'hui.