Chiffrement symétrique
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 le message clair (en clair, lisible) et le message chiffré (chiffré, illisible). Soit la clé partagée. Le chiffrement symétrique repose sur deux fonctions :
- est la fonction de chiffrement paramétrée par la clé .
- est la fonction de déchiffrement, l'inverse de .
- La même clé est utilisée des deux côtés — d'où le qualificatif symétrique.
L'expéditeur calcule et envoie . Le destinataire reçoit et calcule . Tout intercepteur qui ne connaît pas ne voit que , illisible.
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 codé en binaire et une clé de même longueur (également binaire). Le chiffrement est :
où est l'opérateur OU exclusif (XOR). La propriété magique du XOR est que — appliquer la même clé deux fois annule l'opération. Donc :
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!!'
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é 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.
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.