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 bytesOutputappends 03 03 03Pads 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
Padding
El relleno (padding) es el mecanismo que extiende el texto plano hasta un límite de bloque; los esquemas comunes incluyen PKCS#7, relleno con ceros e ISO 10126, mientras que los modos AEAD no lo necesitan. GLOSARIO
CBC (Cipher Block Chaining)
El modo CBC aplica XOR del bloque de texto cifrado anterior con el texto plano actual antes de cifrar, de modo que bloques idénticos producen cifrados distintos; requiere un IV aleatorio pero no aporta autenticación de integridad. GLOSARIO
Block Cipher
Un cifrador por bloques es un cifrado simétrico que cifra y descifra bloques de longitud fija (p. ej., 128 bits) y necesita un modo de operación para procesar datos de longitud arbitraria. GLOSARIO