Remplissage (padding)

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche

Portail > Fondamentaux

Le remplissage (padding) complète le dernier bloc d'un message quand sa longueur n'est pas un multiple de la taille de bloc, afin que le chiffrement par bloc puisse l'opérer. Mal géré, il ouvre la porte à des attaques.

Pourquoi padder

Un mode comme CBC traite des blocs entiers (ex. 16 octets). Si le message fait 30 octets, le dernier bloc est incomplet : on le complète par un remplissage déterministe, retiré au déchiffrement. Les modes de type flot (CTR, GCM, CFB/OFB) n'ont pas besoin de padding.

PKCS#7

Le schéma le plus courant est PKCS#7 : on ajoute N octets valant chacun N, où N est le nombre d'octets manquants (de 1 à la taille de bloc). Si le message est déjà aligné, on ajoute un bloc entier de padding, pour que la présence de padding soit non ambiguë.

Exemple (bloc de 8, message « ABC » = 3 octets, manque 5) :

41 42 43 05 05 05 05 05      # "ABC" + cinq octets 0x05

Au déchiffrement, on lit le dernier octet (N) et on retire N octets, après vérification de leur cohérence.

Danger : l'oracle de padding

Si un système révèle (par un message d'erreur ou un délai) que le padding déchiffré est invalide, un attaquant peut, en CBC sans contrôle d'intégrité, déchiffrer le message octet par octet : c'est l'attaque par oracle de padding (ex. POODLE, Lucky13).

Parade : ne jamais s'appuyer sur CBC + padding seul. Vérifier l'intégrité avant de toucher au padding (Encrypt-then-MAC), ou — mieux — utiliser un mode AEAD qui supprime le problème.

Alternative : vol de chiffré (ciphertext stealing)

Le ciphertext stealing (CTS) évite le padding en réarrangeant les deux derniers blocs pour conserver la taille exacte du clair. Plus complexe, peu courant ; les modes flot/AEAD règlent généralement le besoin plus simplement.

Points clés à retenir

  • Le padding ne concerne que les modes par bloc (CBC…) ; CTR/GCM s'en passent.
  • PKCS#7 : N octets valant N ; bloc entier ajouté si déjà aligné.
  • CBC + padding sans intégrité = risque d'oracle de padding.
  • Préférer l'AEAD, ou à défaut Encrypt-then-MAC.

Voir aussi

Cryptographie symétrique — Portail
Fondamentaux Principe · Bloc et flot · Modes opératoires · Padding · IV et nonces
Intégrité / auth. MAC et HMAC · AEAD
Gestion des clés Aléa / CSPRNG · KDF · Échange de clés · Stockage / rotation
Algorithmes AES · ChaCha20/Salsa20 · DES / 3DES · Blowfish et Twofish · RC4 · Camellia, ARIA et SM4 · AES-GCM · ChaCha20-Poly1305 · Hachage
Applications Données au repos · En transit / hybride
Sécurité avancée Attaques · Conformité · Post-quantique