Archivo BZIP2 (.bz2)
Bzip2 EstándarBzip2 (BZ2) es una utilidad clásica de compresión de Unix libre de patentes y un formato de archivo creado por Julian Seward, que utiliza la transformada de Burrows-Wheeler para lograr una compresión significativamente mayor que el Gzip clásico.
Inspección y metadatos
Los sistemas operativos y analizadores de archivos identifican los archivos de BZ2 inspeccionando la secuencia de bytes binarios inicial:
Firma de cabecera a nivel de bytes (bytes mágicos)
Los sistemas operativos y analizadores de archivos identifican los archivos de BZ2 inspeccionando la secuencia de bytes binarios inicial:
FIRMA HEXADECIMAL (DESPLAZAMIENTO 0):
42 5A 68REPRESENTACIÓN ASCII: BZh
Estandarización: Bzip2 Open Source Standard
Especificaciones técnicas
| Arquitectura del contenedor | Cabecera de flujo ('BZh' + dígito de tamaño de bloque 1-9) seguida de bloques de datos comprimidos y CRC de 32 bits |
| Compresión | Transformada de Burrows-Wheeler (BWT), transformada Move-to-Front (MTF) y codificación Huffman |
| Orden de bytes (Endianness) | Estructura de flujo de bits big-endian |
| Espacios de color | N/D (Flujo de compresión de bytes) |
| Canales y estructura | Flujo de bytes comprimido de un solo archivo |
| Dimensiones máximas | Longitud de flujo ilimitada (admite tamaños de archivo arbitrarios) |
| Transparencia | Preservación de datos sin pérdida exacta bit a bit al 100% |
| Streaming y progresivo | Transmisión secuencial bloque por bloque con sumas de comprobación CRC independientes por bloque |
Matriz de comparación técnica: BZ2 frente a la competencia
| Atributo técnico | BZ2 (Actual) | GZ | XZ | ZSTD |
|---|---|---|---|---|
| Algoritmo principal | Transformada de Burrows-Wheeler (BWT) | Deflate (LZ77 + Huffman) | LZMA / LZMA2 | Entropía de estado finito + LZ77 |
| Compresión vs Gzip | Entra un 10 % y un 20 % más pequeño que Gzip | Estándar base | Entra un 20 % y un 30 % más pequeño que Gzip | entra un 10 % y un 20 % más pequeño que Gzip |
| Velocidad de descompresión | Lenta (aprox. 30-50 MB/s) | Rápida (aprox. 300 MB/s) | Moderada (aprox. 100 MB/s) | Muy rápida (>1,5 GB/s) |
| Sumas de comprobación de bloques | CRC de 32 bits por bloque | CRC32 de flujo único | CRC64 de flujo | xxHash64 de flujo |
Modos de corrupción comunes y guía de recuperación hexadecimal
La extracción se aborta con 'bzip2: Error de integridad de datos al descomprimir'.
Causa raíz: Bit invertido en el bloque comprimido que hace que la matriz de permutación inversa BWT falle en la validación CRC32.
Recuperación: Usa la utilidad «bzip2recover» para recuperar los bloques intactos que rodean el sector dañado.
Análisis de seguridad y vectores de ataque al analizador
Las implementaciones de Bzip2 implican una clasificación compleja de flujos de bits y el análisis de tablas de Huffman, que históricamente han presentado fallos de desbordamiento de enteros.
Vectores de ataque conocidos
- Desbordamiento de enteros en la asignación de matrices de ordenación BWT (p. ej. CVE-2016-3189).
- Escritura fuera de límites durante el construcción de la tabla de decodificación Huffman.
- Denegación de servicio mediante patrones de entrada maliciosos que provocan tiempos de ordenación BWT cuadráticos en el peor de los casos.
Mejores prácticas defensivas: Decodifica archivos BZ2 con decodificadores WASM seguros para la memoria y con límites de memoria impuestos.
Orígenes históricos e hitos
Ventajas principales
- Comprime entre un 10 % y un 20 % más que Gzip en paquetes TAR de código fuente, registros del sistema y bases de datos de texto.
- La arquitectura de bloques independientes (de 100 kB a 900 kB) incluye sumas de comprobación CRC de 32 bits por bloque para comprobar la integridad de forma fiable.
- Está disponible de forma nativa en muchas distribuciones de Linux, BSD y macOS; su inclusión depende de cada distribución.
Limitaciones técnicas
- Velocidades de compresión y descompresión significativamente más lentas en comparación con los algoritmos modernos como Zstandard.
- Compresión de un solo archivo únicamente: requiere combinarse con TAR (.tar.bz2) para empaquetar varios archivos o directorios.
- Mayor uso de CPU durante la descompresión que Gzip o Zstd.
Curiosidades técnicas interesantes
- Los bytes mágicos 'BZh' significan 'Burrows-Wheeler Zip Huffman', seguidos de un dígito ('1' a '9') que indica el tamaño del bloque en cientos de kilobytes (p. ej. 'BZh9' = 900 KB).
- El código fuente del kernel de Linux se distribuyó exclusivamente en formato .tar.bz2 durante más de una década antes de pasar a .xz.
- La transformada de Burrows-Wheeler no comprime los datos directamente; permuta el orden de los caracteres para que las letras idénticas se agrupen.
Preguntas técnicas frecuentes
¿Cuál es la diferencia entre .gz y .bz2?
.bz2 utiliza la transformada de Burrows-Wheeler para lograr tamaños de archivo más pequeños que .gz, pero tarda más en comprimirse y descomprimirse.
¿Por qué bzip2 tiene un comando 'bzip2recover'?
Debido a que bzip2 comprime los datos en bloques independientes de 900 KB, cada uno con su propio CRC, bzip2recover puede extraer bloques no dañados aunque parte del archivo esté dañada.
¿Cómo puedo extraer un archivo .tar.bz2?
Puedes descomprimir archivos .tar.bz2 directamente en tu navegador con File2File.app, sin tener que usar herramientas de línea de comandos.