0Pricing
Cryptology Academy · Lección

Fundamentos de los cifradores de bloque y padding

Comprenda el tamaño de bloque, el padding PKCS7 y la estructura de los cifradores.

Fundamentos de los cifradores de bloque y padding es una lección gratuita de Cryptology Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Cryptology Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Cryptology Academy incluye 4 lecciones en total.

Bienvenida

Los cifrados por bloques cifran bloques de tamaño fijo. Cuando el texto en claro no llena un bloque, necesitamos aplicar padding. En esta lección dominará la estructura de los cifrados por bloques, los esquemas de padding y por qué son importantes.

Repaso del tamaño de bloque

AES utiliza bloques de 128 bits (16 bytes). DES utilizaba bloques de 64 bits (8 bytes). Si el texto en claro tiene exactamente 16 bytes, ocupa un bloque. Un texto de 17 bytes requiere dos bloques.

Por qué se necesita padding

Si el texto en claro tiene 20 bytes, el segundo bloque contiene solo 4 bytes. El cifrado necesita un bloque completo de 16 bytes. Rellenamos los 12 bytes restantes con un esquema determinista y reversible.

Padding PKCS#7

PKCS#7 añade N bytes de padding, cada uno con el valor N: - Se necesitan 3 bytes → añadir: 03 03 03 - Se necesitan 12 bytes → añadir: 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C - Se necesitan 0 bytes → añadir un bloque completo de 16: 10×16

Añada siempre un bloque completo

Si el texto en claro tiene exactamente 16 bytes, PKCS#7 añade un bloque adicional completo de 0x10×16. Esto garantiza que el receptor siempre sepa dónde termina el padding: el valor del último byte indica cuántos bytes deben eliminarse.

PKCS#7 en Python

def pkcs7_pad(data: bytes, block_size: int = 16) -> bytes: n = block_size - (len(data) % block_size) return data + bytes([n] * n) def pkcs7_unpad(data: bytes) -> bytes: n = data[-1] return data[:-n]

Ataques de oráculo de padding

Si un servidor revela si el padding es válido después del descifrado (mediante un mensaje de error o el tiempo de respuesta), un atacante puede descifrar el texto cifrado byte a byte sin conocer la clave. Esto permitió vulnerar ViewState de ASP.NET en 2010.

Padding con ceros y ANSI X.923

Padding con ceros: se rellena con bytes 0x00 (es ambiguo, porque los datos originales podrían terminar en ceros). ANSI X.923: se rellena con ceros y el último byte indica la cantidad. ISO 7816-4: el primer byte de padding es 0x80 y el resto son 0x00. PKCS#7 no es ambiguo y es el esquema preferido.

Padding bit a bit (CTS)

Ciphertext Stealing (CTS) evita por completo el padding: reorganiza los dos últimos bloques para gestionar entradas cuyo tamaño no completa un bloque. Se utiliza en el cifrado de discos (Kerberos y algunas implementaciones de AES).

Impacto del tamaño de bloque en la seguridad

Con bloques de 64 bits (DES, 3DES y Blowfish), se produce una colisión de cumpleaños después de 2^32 bloques (~32 GB). Los navegadores desactivaron 3DES en TLS después de que el ataque SWEET32 demostrara este problema en 2016. Los bloques de 128 bits de AES requieren 2^64 bloques, por lo que son seguros en la práctica.

Modos sin padding

AES-CTR y AES-GCM no requieren padding: utilizan el cifrado por bloques como generador de un flujo de claves y aplican XOR a entradas de longitud arbitraria. El límite del bloque es un detalle interno de implementación.

Comprobación rápida

Al utilizar PKCS#7 con bloques de 16 bytes, ¿qué padding se añade a un mensaje de 13 bytes?

Resumen

¡Ya domina el padding de los cifrados por bloques! A continuación compararemos los modos ECB y CBC, empezando por el famoso ataque del pingüino de ECB.

Preguntas frecuentes

¿La lección «Fundamentos de los cifradores de bloque y padding» es gratis?

Sí — el texto completo de «Fundamentos de los cifradores de bloque y padding» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Cryptology Academy, actualiza a CoddyKit PRO. El curso de Cryptology Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Fundamentos de los cifradores de bloque y padding»?

Comprenda el tamaño de bloque, el padding PKCS7 y la estructura de los cifradores. Practicas Cryptology Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Cryptology Academy?

No se requiere experiencia previa. Cryptology Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Fundamentos de los cifradores de bloque y padding»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Cryptology Academy?

Sí. Cada lección de Cryptology Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Fundamentos de los cifradores de bloque y padding
  2. ECB frente a CBC: patrones y vectores de inicialización
  3. Modo CTR y comportamiento de los cifradores de flujo
  4. GCM y cifrado autenticado
← Volver a Cryptology Academy