Les modes sûrs
Le mode CBC (chaînage)
Le défaut d'ECB vient de son absence de mémoire : chaque bloc ignore les autres. Le mode CBC corrige cela en enchaînant les blocs, de sorte que chacun dépende de tout ce qui le précède.
L'idée du chaînage
CBC signifie Cipher Block Chaining (chaînage de blocs chiffrés). Avant de chiffrer un bloc clair, on le combine par un XOR avec le bloc chiffré précédent.
clair_i XOR chiffré_(i-1) --[ AES, clé K ]--> chiffré_i
Ainsi, le résultat d'un bloc influence le suivant, qui influence le suivant, et ainsi de suite : une réaction en chaîne.
Le vecteur d'initialisation
Un problème demeure : le premier bloc n'a pas de prédécesseur. On introduit alors un vecteur d'initialisation (IV), un bloc aléatoire qui joue le rôle du « chiffré précédent » pour le tout premier bloc.
IV clair_1 clair_2 clair_3
| | | |
+--> XOR +--> XOR +--> XOR ...
| ^ | ^ |
[AES K] | [AES K] | [AES K]
| | | | |
+--> chiffré_1 +--> chiffré_2 ...
|___________| |_________|
(réinjecté) (réinjecté)
Chaque bloc chiffré est réinjecté dans le XOR du bloc suivant. L'IV n'est pas secret : on le transmet en clair avec le message. Mais il doit être aléatoire et unique à chaque chiffrement.
Pourquoi ça règle le problème du pingouin
Grâce au chaînage et à l'IV aléatoire, deux blocs clairs identiques donnent des blocs chiffrés différents : chacun a été XORé avec un chiffré précédent différent.
Même clair, deux chiffrements avec IV différents :
chiffrement 1 : [ 2C9F... ] [ A047... ] ...
chiffrement 2 : [ E1B3... ] [ 5D8A... ] ...
-> aucune ressemblance visible
Chiffré deux fois, le même message donne deux résultats totalement différents. Le pingouin, en CBC, devient un vrai nuage de bruit.
L'importance vitale de l'IV
L'IV doit être imprévisible et ne jamais se répéter avec la même clé. Réutiliser un IV fait fuir de l'information : si deux messages commencent pareil, un IV constant produira des premiers blocs chiffrés identiques — le défaut d'ECB revient par la fenêtre.
| Règle sur l'IV | Conséquence si violée |
|---|---|
| Aléatoire | motifs de début prévisibles |
| Unique par message | fuite entre messages |
| Peut être public | (aucun problème, ce n'est pas un secret) |
En résumé
- CBC enchaîne les blocs : chaque clair est XORé avec le chiffré précédent avant d'être chiffré.
- Un vecteur d'initialisation (IV) aléatoire sert de point de départ pour le premier bloc.
- Résultat : des blocs clairs identiques donnent des chiffrés différents — le défaut d'ECB disparaît.
- L'IV doit être aléatoire et unique ; il peut être public, mais jamais réutilisé avec la même clé.

