Cryptographie
CBC : Cipher Block Chaining. « Chaînage des blocs chiffrés », par analogie avec une rangée de dominos où la chute de chaque pièce dépend de celle qui la précède.
Mécanisme : Chaque bloc clair est combiné par XOR avec le bloc chiffré précédent avant de passer dans le chiffrement par blocs ; le premier utilise un IV (Initialization Vector, vecteur d'initialisation), qui doit être imprévisible pour chaque message. Le chiffrement est donc séquentiel, le déchiffrement parallélisable.
Remplissage : Le message doit être complété jusqu'à un multiple de la taille de bloc, en général avec le remplissage PKCS#7. Un serveur qui signale différemment un remplissage invalide devient un oracle de padding capable de déchiffrer le message octet par octet.
Pas d'intégrité : CBC assure la confidentialité, rien d'autre. Il faut lui adjoindre un MAC en encrypt-then-MAC, comme les algorithmes JOSE (JSON Object Signing and Encryption) A128CBC-HS256 et A256CBC-HS512 qui combinent AES-CBC (AES en mode CBC) et HMAC.
Déclin : TLS 1.3 a retiré les suites CBC au profit des AEAD. Vingt ans d'attaques par oracle de padding apprennent que le problème tenait moins au mode qu'à l'ordre dans lequel on vérifiait les choses.
Ce qui arrive si on s'en passe
Sans chaînage, un chiffrement par blocs appliqué bloc par bloc produit le même chiffré pour deux blocs clairs identiques : la structure des données reste visible, au point qu'une image chiffrée ainsi garde ses contours. CBC supprime cette fuite, à condition d'utiliser un IV imprévisible et neuf pour chaque message ; un IV prévisible a déjà permis des attaques pratiques contre d'anciennes versions de TLS. CBC seul ne protège en revanche pas l'intégrité : un attaquant peut modifier des bits du bloc précédent pour altérer le clair, ou exploiter un oracle de padding. Un MAC vérifié avant tout déchiffrement, ou un mode AEAD, reste indispensable.
Explication de la marmotte
Pour brouiller un long message, on le découpe en petits paquets de taille égale. Si on brouillait chaque paquet séparément, deux paquets identiques donneraient le même résultat, et un espion repérerait les répétitions. Ici, avant de brouiller un paquet, on le mélange avec le résultat du paquet précédent. Chaque morceau dépend donc de tout ce qui vient avant, comme une chaîne dont chaque maillon s'accroche au précédent. Pour le tout premier paquet, on utilise une valeur de départ tirée au hasard. En revanche, cette méthode ne détecte pas si quelqu'un a modifié le message.
Où ce terme est utilisé
- Transformer un bloc en chiffrement de message (14 occurrences)
- Exploiter un padding oracle CBC avec PKCS#7 (13 occurrences)
- Chiffrer par blocs : de l’héritage DES à AES (2 occurrences)
- Comprendre la cryptanalyse sans perdre le fil pratique (2 occurrences)
- La poignée de main TLS 1.3 en une page (2 occurrences)
- Lire une garantie sans la surinterpréter (2 occurrences)
- Migrer TLS legacy sans casser les clients anciens (2 occurrences)
- Protéger une information en environnement hostile (2 occurrences)
- Protocole SSH, clés d'hôte, authentification et durcissement (2 occurrences)
- Prouver qu’un message vient du bon secret (2 occurrences)
