Cómo verificar la integridad de un archivo con hashes
Cuando descargas software, firmware o documentos importantes, ¿cómo sabes que el archivo es exactamente lo que el editor pretendía? El hashing de archivos te da una huella criptográfica, una cadena única que cambia si incluso un solo byte del archivo es diferente. Verificar un hash lleva segundos y puede salvarte de instalar software manipulado, flashear un firmware corrupto que bricke un dispositivo, o confiar en una copia de seguridad alterada que falle cuando realmente necesitas restaurarla.
Breve historia de las funciones hash
La idea de un checksum es más antigua que la informática, los contables usaban sumas de dígitos para detectar errores de transcripción mucho antes de que hubiera archivos que verificar. Los hashes criptográficos aparecieron a finales de los 80. Ron Rivest publicó MD4 en 1990 y MD5 en 1991, que se convirtió en el checksum de facto durante dos décadas. NIST estandarizó SHA-0 en 1993, luego lo retiró rápidamente en favor de SHA-1 en 1995 tras descubrirse un fallo. La familia SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512) siguió en 2001 para abordar la debilidad inminente de SHA-1.
Cada generación fue retirada por ataques que resultaron más baratos de lo esperado. Las colisiones MD5 se demostraron en 2004, se hicieron prácticas para certificados digitales en 2008, y ahora son triviales. SHA-1 cayó con el ataque SHAttered de Google en 2017, cuando investigadores produjeron dos PDF diferentes con huellas SHA-1 idénticas. SHA-2 ha aguantado desde 2001, y SHA-3 (Keccak, estandarizado en 2015) proporciona un respaldo estructuralmente diferente por si SHA-2 alguna vez se rompe. La lección es que los algoritmos de hash tienen vida útil; el algoritmo correcto hoy puede tener que reemplazarse en una década.
Cómo funciona el hashing de archivos
Una función hash lee cada byte de un archivo y produce una cadena de longitud fija. El mismo archivo siempre produce el mismo hash. Cambia un byte, y el hash cambia por completo, esto se llama efecto avalancha y es la propiedad que hace útiles a los hashes para verificación.
Ejemplo:
- Archivo original (SHA-256):
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 - Mismo archivo, un byte cambiado:
d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592
Los dos hashes no comparten ningún patrón reconocible aunque los archivos difieran en un solo bit. Esa sensibilidad es lo que hace posible la verificación: genera el hash, compáralo con el hash publicado, y sabrás al instante si el archivo es auténtico.
Internamente, las funciones hash modernas trocean el archivo en bloques de tamaño fijo (64 bytes para SHA-256, 128 para SHA-512), pasan cada bloque por una función de compresión y encadenan el estado adelante. La salida es el estado final tras incorporar el último bloque. Como la cadena depende de cada byte, ningún atajo permite a un atacante cambiar contenido sin reescribir todo el hash.
Cómo verificar un archivo
- Encuentra el hash oficial, el editor de software típicamente lista los hashes de archivo en su página de descarga, a menudo etiquetados como "checksum SHA-256" o "archivo SHA256SUMS".
- Sube tu archivo descargado: selecciona el archivo en el calculador de hash. El hash se computa localmente en tu navegador; el archivo nunca sale de tu máquina.
- Compara los hashes: si tu hash calculado coincide exactamente con el hash oficial, el archivo es auténtico y no está corrupto. Copia-pega ambos en un diff de texto si las cadenas son largas.
- Empareja el algoritmo: los hashes SHA-256 solo coinciden con otros hashes SHA-256. Si el editor te da SHA-512, genera SHA-512 también; mezclar algoritmos es el error de "no coinciden" más común.
- Verifica el hash publicado en sí cuando puedas: un archivo SHA256SUMS firmado (firmado con la clave GPG del editor) te dice que la lista de hashes no fue alterada, lo que el hash desnudo en una página de descarga no hace.
Cuándo verificar hashes de archivo
- Descargas de software: verifica que instaladores y actualizaciones no han sido manipulados o corrompidos durante la descarga. Cualquiera que te sirva el binario, tu ISP, una CDN, un mirror, podría en teoría cambiarlo por algo hostil.
- Actualizaciones de firmware: un archivo de firmware corrupto puede brickear un dispositivo. Verifica siempre antes de flashear un router, dispositivo IoT o BIOS de placa madre, la recuperación a menudo requiere hardware especial.
- Imágenes ISO: las imágenes de sistema operativo deben verificarse antes de grabarlas a USB o instalarlas. Las distribuciones Linux publican universalmente tanto hashes SHA-256 como firmas GPG sobre esos hashes; verifica ambos.
- Documentos legales y financieros: verifica que contratos, informes de auditoría o estados financieros no han sido alterados tras firmar o compartir. Los hashes proporcionan un recibo a prueba de manipulación.
- Verificación de copias de seguridad, confirma que los archivos de respaldo son idénticos a los originales. La corrupción silenciosa de disco es real, y un respaldo cuyo hash haya derivado desde la creación puede no restaurarse limpiamente.
- Artefactos CI/CD: fijar un artefacto de build por su SHA-256 en un pipeline de despliegue garantiza que el binario que probaste es el binario que despliegas. Las imágenes de contenedor hacen esto por diseño con sus huellas direccionables por contenido.
- Auditorías de cadena de suministro: cuando un aviso de seguridad dice "esta versión tiene el hash X", la única forma de confirmar qué hay en tus servidores es hashear el archivo allí y comparar. Sin eso, confías en la cadena de versión, que el atacante controla.
Algoritmos soportados
| Algoritmo | Longitud del hash | Bits de salida | Recomendación |
|---|---|---|---|
| MD5 | 32 hex | 128 | Solo heredado, roto, solo para corrupción accidental |
| SHA-1 | 40 hex | 160 | Solo heredado, roto, no confiar para seguridad |
| SHA-224 | 56 hex | 224 | De nicho; prefiere SHA-256 |
| SHA-256 | 64 hex | 256 | Estándar general recomendado |
| SHA-384 | 96 hex | 384 | Alta seguridad, usado en suites de cifrado TLS 1.3 |
| SHA-512 | 128 hex | 512 | Fuerza máxima de SHA-2, rápido en CPU 64 bits |
| SHA3-256 | 64 hex | 256 | Diseño interno diferente de SHA-2, a prueba de futuro |
| BLAKE2b/BLAKE3 | varía | 256 o 512 | Hashes modernos más rápidos, usados por rsync, restic |
| CRC32 | 8 hex | 32 | Solo detección de error, no es un hash de seguridad |
Si puedes elegir, SHA-256 es el valor por defecto correcto. Usa SHA-512 en máquinas de 64 bits para rendimiento ligeramente mejor (el algoritmo está afinado para palabras de 64 bits). Recurre a BLAKE3 cuando importe más el rendimiento, puede saturar SSD NVMe modernos de formas que SHA-256 no puede.
Hash vs firma digital
Un hash te dice si un archivo cambió. Una firma digital te dice si cambió Y quién creó el hash. Una firma es un hash cifrado con la clave privada del editor; lo descifras con su clave pública, recomputas el hash, y compruebas que ambos coincidan. Si coinciden, sabes que el archivo está intacto Y que el editor (o alguien con su clave privada) lo aprobó.
Cuando una página de descarga muestra tanto un hash SHA-256 como un archivo .sig o .asc, el hash protege contra la corrupción y la alteración accidental, pero la firma protege contra un atacante que vulneró el servidor de descarga. El atacante puede cambiar el archivo y actualizar el hash mostrado; no puede falsificar una firma válida sin la clave del editor.
Errores comunes
- Comparar el algoritmo equivocado, MD5 y SHA-256 producen cadenas de longitud diferente; algoritmos mal emparejados nunca coincidirán, incluso en archivos idénticos.
- Confiar en el hash servido desde el mismo lugar que el archivo, si ambos están en el mismo mirror comprometido, ambos pueden reemplazarse. Siempre que sea posible, obtén el hash desde un dominio diferente (la página de releases de GitHub del proyecto, un archivo SHA256SUMS firmado).
- Sensibilidad a mayúsculas hex, los hashes son insensibles a mayúsculas (
a3fyA3Frepresentan el mismo byte). La comparación de cadenas puede aun así marcarlos como diferentes. Pon ambos lados en minúsculas o compara como bytes. - Espacios finales y BOM, un hash copiado con un salto de línea final o carácter invisible se verá idéntico pero no coincidirá. Recorta ambos lados antes de comparar.
- Hashear el archivo equivocado, en Windows la ruta de descarga puede ser
Descargas\archivo (1).exeen vez deDescargas\archivo.exesi lo descargaste dos veces. Verifica la ruta antes de hashear. - Tratar MD5 o SHA-1 como garantías de seguridad, un atacante puede producir un archivo de aspecto benigno con el mismo MD5 que uno malicioso en segundos. Para seguridad, usa siempre SHA-256 o más fuerte.
- Verificar lo equivocado, si el editor hashea el
.tar.gzcomprimido y tú hasheas el contenido extraído, ninguno coincidirá. Hashea lo que se hasheó; normalmente el archivo descargado en sí. - Ignorar la firma GPG, mucha gente verifica el hash pero salta la firma. La firma es lo que defiende contra el atacante que controla el mirror.
- Fallos silenciosos de corrupción de red, una descarga truncada puede coincidir con un hash de archivo parcial si ambos se truncaron idénticamente. Hashea siempre el archivo completo que pretendes usar, no un fragmento.
- Caché de navegador de descargas antiguas, un archivo cacheado obsoleto puede engañar a un paso de verificación. Fuerza una descarga fresca si el hash no coincide y sospechas del caché.
Herramientas y contextos alternativos
Un calculador de hash web es el camino más rápido cuando tienes un archivo que verificar. Para uso repetido o scripting, las herramientas de línea de comandos son el estándar.
| Herramienta | Plataforma | Fortaleza | A tener en cuenta |
|---|---|---|---|
| Calculador de hash web | Navegador | Sin instalación, el archivo nunca se sube | Un archivo a la vez |
sha256sum | Linux | Rápido, scriptable, GNU coreutils | --check lee archivos SHA256SUMS |
shasum -a 256 | macOS, BSD | Incluido, mismo formato de salida | Nombre de binario diferente al de Linux |
Get-FileHash | Windows PowerShell | De primera clase en Windows | Formato de salida difiere de sha256sum |
certutil -hashfile | Windows cmd | Disponible en cada Windows | Salida verbosa necesita parsing |
openssl dgst -sha256 | Multiplataforma | Si ya tienes OpenSSL | Más lento que herramientas dedicadas |
b3sum | Multiplataforma | BLAKE3, rendimiento multi-GB/s | Más nuevo, menos omnipresente |
rhash | Multiplataforma | Computa muchos algoritmos a la vez | Instalación extra |
En pipelines CI/CD la misma tarea normalmente corre como sha256sum file > file.sha256 durante el build y sha256sum -c file.sha256 durante la verificación, a veces envuelto en un manifiesto firmado. El principio (computar, publicar, comparar al recuperar) es idéntico al que la herramienta del navegador hace interactivamente.
Privacidad y el calculador de hash
El calculador de hash corre enteramente en tu navegador. El archivo que seleccionas se lee con la API FileReader, se pasa por la interfaz SubtleCrypto de Web Crypto, y el hash resultante se te muestra. Los bytes del archivo nunca viajan a nuestros servidores, no hay subida, ni registro de qué archivos se hashearon, ni analítica sobre tamaños o extensiones de archivo. Para material sensible, contratos, registros médicos, claves privadas, la diferencia entre una herramienta que sube y una que hashea localmente es la diferencia entre confiar en un tercero y no confiar en ninguno. Un hash es una salida diminuta (64 caracteres hex para SHA-256), pero la entrada que resume puede ser muy reveladora. Mantener esa entrada del lado del cliente es el valor por defecto correcto para cualquier tarea de verificación.
Preguntas frecuentes
¿Cómo comparar el hash de un archivo con el oficial?
Tras generar el hash, compáralo carácter por carácter con el hash publicado por la fuente (normalmente en la página de descarga). Si todos los caracteres coinciden, el archivo es auténtico y no está corrupto. Una sola diferencia significa que el archivo se ha modificado.
¿Qué algoritmo de hash usar?
SHA-256 es el estándar para la verificación de archivos. Usa el que proporcione el editor. Si puedes elegir, SHA-256 ofrece un buen equilibrio entre seguridad y rendimiento.
¿Puede un archivo corrupto tener el hash correcto?
Es teóricamente posible (una colisión), pero estadísticamente insignificante con SHA-256. Las probabilidades son tan astronómicamente bajas que, en la práctica, hashes idénticos garantizan archivos idénticos.
¿Se envía mi archivo a un servidor?
No. El hash se calcula íntegramente en tu navegador. Tu archivo nunca sale de tu dispositivo, lo cual lo hace seguro para cualquier tipo de documento, incluido el sensible.
What is the difference between a hash and a digital signature?
A hash proves a file has not changed since the hash was computed; anyone can verify it. A digital signature proves both integrity AND identity, the publisher signs the hash with their private key, and you verify with their public key. Hashes alone do not protect against a hacker who replaced both the file and the published hash on the same compromised mirror.
Why are MD5 and SHA-1 considered insecure?
Researchers have demonstrated practical collision attacks for both. In 2017 Google produced two different PDFs with identical SHA-1 hashes (the SHAttered attack), and MD5 collisions can be generated in seconds on a laptop. For deliberate-tamper detection use SHA-256 or stronger; MD5 and SHA-1 still work for catching accidental corruption but should never be trusted as security boundaries.