Cifrado ZIP
El cifrado WinZip AES, explicado en detalle
El esquema moderno de cifrado ZIP combina AES con una función de derivación de clave lenta y autenticación por entrada. Juntas hacen que una contraseña incorrecta sea barata de descartar y una fuerte, impracticable de adivinar.
AES llega al formato ZIP
El cifrado ZIP tradicional nunca fue fuerte, así que WinZip introdujo un esquema basado en AES que la mayoría de las herramientas de archivado modernas ahora admiten. Sustituye el viejo cifrador, ZipCrypto, por el Estándar de Cifrado Avanzado, añade una función de derivación de clave adecuada y adjunta una comprobación de integridad real a cada entrada. El resultado es un cifrado que resiste el escrutinio, al coste deliberado de ser lento de probar.
Cómo se ve dentro del ZIP
Una entrada cifrada con AES no registra su verdadero método de compresión
en el lugar habitual. En su lugar, el campo de método se fija en
99, un marcador que significa "cifrado con AES", y el
método de compresión real se almacena en otra parte. Los detalles residen
en un campo extra con id de cabecera 0x9901. Ese campo
contiene una etiqueta de proveedor de dos caracteres, AE, un
número de versión que es AE-1 o AE-2, un byte de robustez y el método de
compresión real usado bajo el cifrado.
El byte de robustez rige el resto del esquema. Un valor de 1 significa AES-128, 2 significa AES-192 y 3 significa AES-256. A partir de ese único byte, una herramienta conoce la longitud de la clave, la longitud de la sal y cuánto material de clave debe derivar.
Derivación de clave
Tu contraseña nunca se usa directamente como clave. WinZip AES la pasa por PBKDF2-HMAC-SHA1 con 1000 iteraciones y una sal aleatoria almacenada con la entrada. La longitud de la sal depende de la robustez: 8 bytes para AES-128, 12 bytes para AES-192 y 16 bytes para AES-256. PBKDF2 estira la contraseña hasta un bloque de material de clave, que se divide en tres partes: la clave de cifrado AES, una clave de autenticación separada de la misma longitud y un valor de verificación de contraseña de 2 bytes.
Ese valor de 2 bytes se almacena en la entrada. Permite a una herramienta rechazar una contraseña incorrecta casi de inmediato, sin descifrar nada, porque la contraseña correcta reproduce los mismos dos bytes. Es solo un filtro rápido, no una prueba, ya que dos contraseñas distintas podrían en principio producir el mismo par de bytes. La confirmación definitiva proviene del código de autenticación.
| Byte de robustez | Longitud de clave AES | Longitud de la sal | Valor de verificación | HMAC almacenado |
|---|---|---|---|---|
| 1 | AES-128 (16 bytes) | 8 bytes | 2 bytes | 10 bytes |
| 2 | AES-192 (24 bytes) | 12 bytes | 2 bytes | 10 bytes |
| 3 | AES-256 (32 bytes) | 16 bytes | 2 bytes | 10 bytes |
Cifrado y autenticación
Los datos del archivo se cifran con AES en modo CTR, o contador. Esto convierte el cifrador de bloque en un flujo de clave y permite cifrar una entrada de cualquier longitud byte a byte. La integridad se gestiona por separado. Tras el cifrado, se calcula un HMAC-SHA1 sobre el texto cifrado usando la clave de autenticación, y los primeros 10 bytes de ese HMAC se almacenan al final de la entrada. Es un diseño cifrar-luego-autenticar: el código de autenticación cubre los bytes cifrados, de modo que una herramienta puede verificar que tanto la contraseña como los datos son correctos antes de intentar siquiera descomprimir.
Las dos versiones difieren en un detalle. AE-1 conserva la suma de comprobación CRC-32 de la entrada en la cabecera, lo que permite una segunda comprobación de integridad, más antigua, tras el descifrado. AE-2 pone a cero el campo CRC y se apoya por completo en el HMAC. Ambos usan el mismo cifrador y la misma derivación de clave; la diferencia está solo en cómo se registra la integridad.
Dos comprobaciones, un resultado confirmado
ZipRecover compara primero el valor de verificación de 2 bytes para descartar de forma económica las conjeturas incorrectas, y luego recalcula el HMAC-SHA1 de 10 bytes para confirmar una superviviente. Una contraseña reportada ha pasado la comprobación definitiva, no solo la rápida.
Por qué es fuerte, y lento
Dos propiedades hacen a WinZip AES resistente a la adivinación de contraseñas. Primero, el propio AES no tiene atajo práctico, así que un atacante no puede recuperar la clave directamente del texto cifrado. Segundo, las 1000 iteraciones de PBKDF2 están ahí a propósito. Derivar una clave a partir de una contraseña candidata cuesta mil operaciones HMAC-SHA1 por bloque de salida de 20 bytes (unas cuatro mil para AES-256), de modo que probar contraseñas es unas 375 veces más lento que con un esquema sin estiramiento en nuestra medición con un solo hilo (consulta cuánto tarda la recuperación). Ese coste es trivial para alguien que conoce su contraseña y la escribe una vez, pero encarece la adivinación a gran escala.
En la práctica, un archivo cifrado con AES y bloqueado con una contraseña fuerte y generada aleatoriamente no es recuperable por adivinación, por rápido que sea el hardware. La recuperación tiene una posibilidad real solo cuando la contraseña es corta, sigue un patrón que recuerdas o aparece en una lista de palabras que puedas aportar. Ese límite viene del propio esquema, y ninguna herramienta de recuperación, la nuestra incluida, lo esquiva. Cómo ZipRecover usa juntos el valor de verificación y el HMAC se describe en cómo funciona. La introducción a los archivos ZIP cifrados sitúa AES junto al esquema heredado, y ZipCrypto vs AES comparados pone los dos en paralelo.
Solo uso autorizado
Usa esta herramienta solo en archivos ZIP que te pertenecen o que estás autorizado a abrir. Intentar abrir archivos sin permiso puede infringir las leyes aplicables. Consulta nuestra Política de uso aceptable y las Condiciones de uso.
Preguntas frecuentes
¿Se puede recuperar una contraseña WinZip AES fuerte?
No adivinándola. AES no tiene un atajo práctico, y PBKDF2 hace lenta cada prueba, así que una contraseña larga y aleatoria es en la práctica irrecuperable. La recuperación tiene una posibilidad real solo cuando la contraseña es corta o sigue un patrón que recuerdas.
¿Cuál es la diferencia entre AE-1 y AE-2?
AE-1 conserva el CRC-32 de la entrada para una comprobación de integridad adicional tras el descifrado. AE-2 pone a cero el campo CRC y se apoya en su lugar en el HMAC-SHA1 de 10 bytes. Ambos usan el mismo cifrador AES y la misma derivación de clave PBKDF2.
¿Por qué AES es mucho más lento de probar que ZipCrypto?
WinZip AES ejecuta 1000 iteraciones de PBKDF2-HMAC-SHA1 por cada contraseña candidata, por diseño. En nuestra medición con un solo hilo, ese estiramiento deliberado hizo que probar una candidata AES fuera unas 375 veces más lento que con el esquema heredado ZipCrypto, que no tiene ese paso; consulta cuánto tarda la recuperación para ver las cifras.
¿Cómo sé qué tamaño de clave AES usa mi ZIP?
El byte de robustez en el campo extra 0x9901 lo registra: 1 significa AES-128, 2 significa AES-192 y 3 significa AES-256. ZipRecover lo lee automáticamente cuando seleccionas el archivo, así que no tienes que inspeccionarlo tú mismo.
Cifrado ZIP
Sigue explorando este tema
Temas relacionados: Recuperación de contraseñas ZIP Privacidad y procesamiento local
¿Todo listo para recuperar tu contraseña ZIP?
Se ejecuta localmente en tu navegador. Tu archivo nunca sale de tu dispositivo.