¿Qué es ZIP?
ZIP es un formato de compresión de datos y archivado sin pérdidas creado por Phil Katz y Gary Conway en 1989. Fue diseñado como un formato abierto y se convirtió en el estándar de facto para distribución de archivos. La especificación fue publicada por PKWARE y ha sido extendida muchas veces; la versión actual es APPNOTE.TXT 6.3.10 (2023). ZIP es ahora compatible de forma nativa con todos los sistemas operativos principales — Windows, macOS, Linux, iOS, Android — lo que lo convierte en el formato de archivo más universalmente compatible.
ZIP es inusual entre los formatos de archivo porque almacena los archivos de forma independiente — cada archivo en el almacén se comprime con sus propios metadatos, sin necesidad de decodificar todo el almacén para extraer un solo archivo.
Arquitectura ZIP: Estructura Interna
[Cabecera local de archivo 1] [Datos del archivo 1]
[Cabecera local de archivo 2] [Datos del archivo 2]
...
[Cabecera local de archivo N] [Datos del archivo N]
[Directorio central]
[Entrada del directorio central 1]
[Entrada del directorio central 2]
...
[Registro de fin del directorio central]
El directorio central al final del archivo es la innovación clave: es un índice de todos los archivos con sus desplazamientos. Los lectores ZIP primero buscan al final del archivo, encuentran el registro de fin del directorio central, luego saltan al desplazamiento de cada archivo según sea necesario. Esto permite:
- Acceso aleatorio: extraer el archivo N sin leer los archivos 1 a N-1.
- Anexión en streaming: añadir archivos al final y actualizar el directorio central.
Métodos de Compresión
| Método | Código | Descripción |
|---|---|---|
| Stored | 0 | Sin compresión — bytes raw |
| Deflated | 8 | zlib/DEFLATE — el estándar, ~95% de los ZIPs |
| BZIP2 | 12 | Mejor ratio que DEFLATE, más lento |
| LZMA | 14 | 7-Zip LZMA — buen ratio, raramente usado en ZIP |
| Zstandard | 93 | Moderno, rápido, buen ratio |
Stored se usa para datos ya comprimidos (JPEG, PNG, MP4, PDF) — recomprimirlos desperdicia CPU sin ahorrar espacio.
Extensiones ZIP64
El formato ZIP original usaba campos de 32 bits, limitando:
- Tamaño de archivo a 4 GB
- Tamaño de almacén a 4 GB
- Número de archivos a 65.535
ZIP64 (introducido en PKZIP 4.5) extiende estos campos a 64 bits:
- Tamaño de archivo hasta 18 EB
- Número de archivos hasta 4.290 millones
ZIP64 se activa automáticamente por las herramientas modernas cuando se supera cualquier límite.
Cifrado en ZIP
Cifrado PKZIP tradicional (ZipCrypto): un cifrado de flujo con una clave de 96 bits. Gravemente débil — los ataques de texto claro conocido pueden recuperar la clave con ~12 bytes de contenido conocido. No usar para datos sensibles.
Cifrado AES (extensión WinZip/APPNOTE): AES-128 o AES-256 con derivación de clave PBKDF2 y autenticación HMAC-SHA1. Seguro con contraseña fuerte.
# ZIP con AES-256 en Linux
zip -e --password "contraseña-fuerte" almacen.zip archivos/
# 7-zip AES-256 en contenedor ZIP
7z a -tzip -mem=AES256 -p"contraseña-fuerte" almacen.zip archivos/
Nota: los nombres de archivo y la estructura de directorios en un ZIP NO están cifrados incluso con AES. Usa el formato 7z con AES para cifrado completo incluyendo nombres de archivo.
ZIP como Contenedor de Software
ZIP es el contenedor elegido para distribuir paquetes de software de múltiples archivos:
- JAR (Java Archive): ZIP con archivos
.classde Java yMETA-INF/MANIFEST.MF. - APK (Android Package): ZIP con el bytecode DEX de Android, recursos y firma.
- DOCX / XLSX / PPTX: Office Open XML — ZIP con archivos XML y activos.
- EPUB: ZIP con XHTML, CSS e imágenes.
- ODF (.odt, .ods, .odp): OpenDocument Format — ZIP con archivos XML.
- wheel (.whl): formato de distribución de paquetes Python.
Para inspeccionar estos: renombra a .zip o usa unzip -l archivo.docx.
Uso en Línea de Comandos
# Crear ZIP
zip almacen.zip archivo1.txt archivo2.txt
zip -r almacen.zip directorio/ # recursivo
zip -9 almacen.zip archivos/ # compresión máxima
# Extraer
unzip almacen.zip
unzip almacen.zip -d /directorio/salida/
# Listar contenido
unzip -l almacen.zip
# Comprobar integridad
unzip -t almacen.zip
Windows PowerShell:
Compress-Archive -Path .\archivos\ -DestinationPath almacen.zip
Expand-Archive -Path almacen.zip -DestinationPath .\salida\
Vulnerabilidades ZIP
Zip Slip: vulnerabilidad de recorrido de rutas donde las entradas del almacén contienen secuencias ../, causando que la extracción escriba archivos fuera del directorio objetivo. Sanitiza siempre las rutas de entrada antes de la extracción.
Zip Bomb: un ZIP que contiene una pequeña carga comprimida que se expande a un tamaño enorme (p. ej., 42.zip son 42 KB comprimidos → 4,5 PB sin comprimir). Mitiga rastreando el tamaño sin comprimir durante la extracción.
ZIP vs. Otros Formatos de Archivo
| Formato | Compresión | Cifrado | Acceso aleatorio | Archivo sólido |
|---|---|---|---|---|
| ZIP | Deflate/etc. | ZipCrypto, AES | Sí | No |
| 7z | LZMA2 | AES-256 | Sí (parcial) | Sí |
| TAR.GZ | DEFLATE | No (separado) | No | Sí |
| RAR | RAR4/5 | AES-256 | Sí | Sí |
| XZ | LZMA2 | No | No | Sí |
La compatibilidad universal de ZIP lo hace el predeterminado para distribución al consumidor; 7z/XZ ganan en ratio de compresión.
Buenas Prácticas
- Usa el método Stored para archivos ya comprimidos (JPEG, MP4, ZIP).
- Usa cifrado AES-256 (no ZipCrypto) para cualquier almacén sensible.
- Habilita ZIP64 cuando los archivos o almacenes puedan superar los 4 GB.
- Sanitiza las rutas de entrada durante la extracción para prevenir ataques Zip Slip.
- Establece un límite de tamaño durante la extracción para prevenir denegación de servicio por Zip Bomb.
- Usa
-rrecursivo al comprimir directorios para preservar el árbol completo. - Comprueba la integridad con
unzip -tantes de distribuir almacenes. - Para máxima compresión de contenido no nativo de ZIP, considera 7z LZMA2.
Conversiones relacionadas
Conversiones de archivos comprimidos más usadas: