Logo EMF

114 - Chiffrement - AES

1. AES : le chiffrement symétrique de référence

Page de complément : ce chapitre n'est pas dans les supports de cours, il prolonge les pages « Base64 et XOR » et « PGP ».

Advanced Encryption Standard

AES est un chiffrement symétrique par blocs : la même clé chiffre et déchiffre, et le message est découpé en blocs de 128 bits (16 octets).

Standard américain du NIST depuis 2001 (FIPS 197), issu de l'algorithme Rijndael des Belges Joan Daemen et Vincent Rijmen. Il a remplacé le DES (clé de 56 bits, devenue trop faible).

Où le trouve-t-on ?

🌐 HTTPS / TLS   📶 Wi-Fi WPA2 / WPA3   🔐 VPN

💽 BitLocker, FileVault, LUKS (disques chiffrés)

📦 Archives 7-Zip / ZIP chiffrées   💬 Messageries

✉️ PGP : AES chiffre le message, RSA protège la clé de session.

Les trois variantes

VarianteCléBlocTours
AES-128128 bits128 bits10
AES-192192 bits128 bits12
AES-256256 bits128 bits14

Un « tour » est une suite de 4 opérations répétée plusieurs fois (onglet suivant). Plus la clé est longue, plus il y a de tours.

Symétrique, rappel

Une clé secrète rapide, adaptée aux gros volumes, mais il faut la partager en sécurité : c'est pourquoi on l'associe à RSA (chiffrement hybride).

2. Un bloc de 16 octets traverse les tours

Les 16 octets forment une matrice 4 × 4 (l'« état »), lue colonne par colonne. Chaque tour applique SubBytes, ShiftRows, MixColumns et AddRoundKey (le dernier tour n'a pas MixColumns). Calcul réel d'AES-128.

Avant
→
Après

3. Les modes de fonctionnement : comment enchaîner les blocs

AES chiffre un seul bloc de 16 octets. Pour un message plus long, un mode décide comment enchaîner les blocs. Le choix du mode est aussi important que celui de l'algorithme.

ECB Chaque bloc séparément

Deux blocs identiques donnent deux blocs chiffrés identiques : les motifs du message restent visibles. À proscrire.

CBC Chaînage

Chaque bloc est combiné (XOR) avec le bloc chiffré précédent ; le premier avec un IV aléatoire. Les blocs identiques ne se ressemblent plus.

CTR Compteur (et GCM)

AES chiffre un compteur et le XOR avec le message : on obtient un chiffrement de flux. GCM y ajoute une vérification d'intégrité (complément).

Même image, trois résultats

Original
Chiffré en ECB
Chiffré en CBC

Chaque pixel est un octet. En ECB, les zones unies donnent des blocs identiques : on voit encore le dessin. En CBC, on ne voit que du bruit.

Avec du texte

4. La taille de la clé : combien d'essais pour tout tester ?

Calculateur de force brute

Repères

AlgorithmeCléÉtat
DES56 bitsCassé en moins d'une journée dès 1999 (22 h 15 min)
3DES112 bits effectifsObsolète, retiré progressivement
AES-128128 bitsSûr
AES-256256 bitsSûr, marge maximale

On teste en moyenne la moitié des clés avant de trouver la bonne. Chaque bit de clé en plus double le travail. Aucune attaque pratique n'est connue contre AES complet : les failles réelles sont ailleurs (mauvais mot de passe, clé volée, mauvaise utilisation).

5. Atelier : chiffrer et déchiffrer avec AES

🔐 Chiffrer

Clé dérivée
IV / compteur
Chiffré (hex)
Chiffré (Base64)

🔓 Déchiffrer

Essaie de changer une lettre du mot de passe : sans la bonne clé, le résultat est du bruit (ou une erreur de remplissage).

La clé est ici dérivée par un simple SHA-256 du mot de passe. En vrai : Argon2 ou PBKDF2 avec un sel (voir la page « Hachage »).

6. Bonnes pratiques

🚫 Pas d'ECB

Il laisse apparaître les motifs du message. Préférer GCM (ou CBC / CTR si nécessaire).

🎲 IV et nonce uniques

Un IV est aléatoire et imprévisible en CBC. En CTR / GCM, ne jamais réutiliser le même nonce avec la même clé : la sécurité s'effondre.

🛡️ Chiffrer ≠ authentifier

CBC et CTR n'empêchent pas de modifier le message chiffré. AES-GCM ajoute une étiquette d'authentification qui détecte toute modification.

🔑 La clé

Aléatoire (générateur sécurisé), ou dérivée d'un mot de passe fort par Argon2 / PBKDF2 avec un sel. Jamais en dur dans le code.

📚 Ne rien inventer

Utiliser des bibliothèques éprouvées (Web Crypto, OpenSSL, libsodium). Ne pas écrire son propre AES en production : les attaques visent souvent l'implémentation.

🔗 Hybride avec RSA

AES chiffre les données, RSA (ou un échange de clés) protège la clé AES : c'est le principe de PGP et de HTTPS.

Dans le navigateur (Web Crypto)

const key = await crypto.subtle.generateKey( {name:'AES-GCM', length:256}, true, ['encrypt','decrypt']); const iv = crypto.getRandomValues(new Uint8Array(12)); const ct = await crypto.subtle.encrypt( {name:'AES-GCM', iv}, key, new TextEncoder().encode('Bonjour'));

En ligne de commande (OpenSSL)

# chiffrer, puis déchiffrer un fichier openssl enc -aes-256-cbc -pbkdf2 -salt -in fichier.txt -out fichier.enc openssl enc -d -aes-256-cbc -pbkdf2 -in fichier.enc -out fichier.txt

7. Défi CFC · Vérifie tes connaissances

Choisis une réponse par question. La correction apparaît immédiatement.