Saltar al contenido
uencoder

PKCS#7 Padding

El relleno PKCS#7 añade n bytes de valor n (1 ≤ n ≤ tamaño_de_bloque) al final del texto claro; reversible y autoverificable, es el relleno de facto del modo CBC.

Propósito

Proporciona un relleno reversible y verificable para que el descifrador determine la longitud real del texto claro y detecte errores de relleno.

Mecanismo

Si la longitud del texto claro ya es múltiplo del tamaño de bloque, se añade igualmente un bloque completo de relleno (cada byte con el valor del tamaño de bloque) para preservar la reversibilidad. Al descifrar, se lee el valor n del último byte y se eliminan los últimos n bytes tras comprobar que todos valen n. Un fallo en la comprobación indica un cifrado corrupto o manipulado.

Casos de uso

  • Relleno predeterminado de AES-CBC
  • Formatos de mensajes CMS/PKCS#7
  • Java PKCS5Padding (equivalente a PKCS7)
  • Relleno predeterminado de OpenSSL

Ejemplos

  • entrada
    block=16, data=13 bytes
    Output
    appends 03 03 03

    Pads with three 0x03 bytes

Errores comunes

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

Términos relacionados

Herramientas relacionadas

References