Aller au contenu
uencoder

PKCS#7 Padding

Le remplissage PKCS#7 ajoute n octets de valeur n (1 ≤ n ≤ taille_de_bloc) à la fin du texte clair ; réversible et auto-vérifiable, c'est le remplissage de facto du mode CBC.

Objectif

Fournit un remplissage réversible et vérifiable afin que le déchiffreur détermine la vraie longueur du texte clair et détecte les erreurs de remplissage.

Mécanisme

Si la longueur du texte clair est déjà un multiple de la taille de bloc, on ajoute néanmoins un bloc entier de remplissage (chaque octet valant la taille de bloc) pour préserver la réversibilité. Au déchiffrement, on lit la valeur n du dernier octet et l'on retire les n derniers octets après avoir vérifié qu'ils valent tous n. Un échec de vérification indique un texte chiffré corrompu ou falsifié.

Cas d’usage

  • Remplissage AES-CBC par défaut
  • Formats de messages CMS/PKCS#7
  • Java PKCS5Padding (équivalent à PKCS7)
  • Remplissage OpenSSL par défaut

Exemples

  • entrée
    block=16, data=13 bytes
    Output
    appends 03 03 03

    Pads with three 0x03 bytes

Erreurs courantes

Non-constant-time padding verification falls to Padding Oracle attacks
Use AEAD, or compare padding in constant time

Termes associés

Outils associés

References