¿Qué es un Checksum? Explicación de MD5, SHA-1 y SHA-256
Un checksum es una huella digital corta que permite verificar que un archivo no ha sido modificado ni dañado. Comprender qué algoritmo de hash utilizar — y en qué puntos falla el MD5 — te ahorrará errores comunes de seguridad.
¿Qué es un Checksum?
Un checksum es una cadena de longitud fija derivada de un fragmento de datos mediante la ejecución de una función hash. El checksum actúa como una huella dactilar: si incluso un solo bit de los datos originales cambia, el checksum cambia por completo. Esto hace que los checksums sean útiles para dos cosas:
- Verificación de integridad — ¿llegó este archivo sin corrupción ni alteraciones?
- Identidad — ¿es este archivo exacto (o fragmento de datos) el mismo que otra copia?
Cuando descargas software de un sitio oficial, la página de descarga suele mostrar un hash MD5 o SHA-256. Después de descargar, calculas el hash de tu archivo local y lo comparas. Si coinciden, el archivo está intacto.
Cómo funciona una función Hash
Una función hash criptográfica toma una entrada de cualquier longitud y produce un resumen (digest) de longitud fija. Cuatro propiedades definen una buena función hash:
- Determinista — la misma entrada siempre produce la misma salida
- Unidireccional — no puedes revertir un hash a la entrada original (en ningún tiempo razonable)
- Efecto avalancha — cambiar un solo carácter en la entrada cambia aproximadamente la mitad de los bits de la salida
- Resistente a colisiones — debe ser computacionalmente inviable encontrar dos entradas diferentes que produzcan el mismo hash
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824SHA-256("Hello") = 185f8db32921bd46d35e3a1a4e9a9b9c6a7e6a7d2d2c4e9d... (completamente diferente)
MD5 — Rápido, conocido y roto para seguridad
MD5 (Message Digest Algorithm 5) produce un resumen de 128 bits (32 caracteres hexadecimales). Fue diseñado en 1991 y se convirtió en el algoritmo de checksum por defecto en internet durante unas dos décadas.
Dónde MD5 sigue siendo aceptable:
- Comprobaciones de integridad no relacionadas con seguridad — verificar que una transferencia de archivo grande no se corrompió en tránsito
- Deduplicación — comprobar si dos archivos son idénticos (como una pre-comprobación rápida antes de una comparación byte por byte)
- Claves de caché y ETags donde los ataques de colisión no son una preocupación
Dónde MD5 no es aceptable:
- Almacenamiento de contraseñas — MD5 es extremadamente rápido, lo que hace que los ataques de fuerza bruta mediante GPU sean triviales. Es posible lograr miles de millones de hashes MD5 por segundo con hardware de consumo.
- Firmas digitales — se han demostrado ataques de colisión de MD5 en la práctica. Se pueden crear dos archivos diferentes para que tengan el mismo hash MD5.
- Huellas dactilares de certificados — el mismo problema de colisión se aplica.
md5($password) en código heredado, reemplázalo con password_hash() en PHP o bcrypt/Argon2 en cualquier otro lenguaje. MD5 no es un algoritmo de hashing de contraseñas — nunca fue diseñado para ser lento, y la lentitud es lo que hace que el hashing de contraseñas sea seguro.
SHA-1 — Obsoleto
SHA-1 produce un resumen de 160 bits (40 caracteres hexadecimales). Reemplazó a MD5 como el algoritmo recomendado a finales de la década de 1990 y fue ampliamente utilizado en certificados SSL/TLS, sistemas de control de versiones y comprobaciones de integridad de archivos.
En 2017, el equipo del Project Zero de Google demostró la primera colisión práctica de SHA-1 (el ataque "SHAttered"), que requirió aproximadamente 6,500 años CPU equivalentes de computación. Los principales navegadores y autoridades de certificación dejaron de aceptar certificados SHA-1 en 2017. Git todavía usa SHA-1 internamente para los hashes de commit, pero están en proceso de migración a SHA-256 como alternativa opcional.
Para aplicaciones nuevas, no uses SHA-1. Usa SHA-256 o SHA-512 en su lugar.
SHA-256 — El estándar actual
SHA-256 es parte de la familia SHA-2 diseñada por la NSA y publicada en 2001. Produce un resumen de 256 bits (64 caracteres hexadecimales). Hasta hoy, no existe ningún ataque práctico de colisión contra SHA-256.
Usa SHA-256 para:
- Verificación de integridad de archivos (descargas de software, copias de seguridad)
- Firmas digitales (certificados TLS, firma de código)
- Tokens de autenticación basados en HMAC (HMAC-SHA256)
- Blockchain y criptomonedas (Bitcoin usa doble SHA-256)
- Hashes de commit de Git en modo SHA-256
- Firmas JWT (JSON Web Token) cuando se usa HS256 o RS256
SHA-256 es la opción por defecto correcta para casi cualquier aplicación que necesite un hash seguro. En caso de duda, usa SHA-256.
SHA-512 — Cuando necesitas más
SHA-512 produce un resumen de 512 bits (128 caracteres hexadecimales). Es parte de la misma familia SHA-2 y es igualmente seguro. La principal diferencia práctica:
- En procesadores de 64 bits, SHA-512 puede ser en realidad más rápido que SHA-256 porque el algoritmo está optimizado para tamaños de palabra de 64 bits
- En sistemas y hardware de 32 bits, SHA-256 es más rápido
- SHA-512 tiene una salida más grande, lo que significa un almacenamiento y transmisión más largos
Usa SHA-512 cuando la aplicación requiera un resumen más grande o cuando estés en hardware donde SHA-512 tenga una ventaja de rendimiento. Para la mayoría de las aplicaciones web, SHA-256 es suficiente.
Una nota sobre el hashing de contraseñas
Ninguno de los algoritmos anteriores debe usarse directamente para el almacenamiento de contraseñas. MD5, SHA-1, SHA-256 y SHA-512 están diseñados para ser rápidos — y la rapidez es precisamente lo incorrecto para las contraseñas.
El hashing de contraseñas debe ser deliberadamente lento, para que una base de datos robada no pueda ser descifrada rápidamente. Usa algoritmos de hashing de contraseñas diseñados específicamente para ello:
- bcrypt — ha sido el estándar durante más de 20 años, compatible con prácticamente todos los lenguajes
- Argon2 (específicamente Argon2id) — ganador del Password Hashing Competition (2015), recomendado para aplicaciones nuevas
- scrypt — de memoria dura (memory-hard), también una opción sólida
En PHP: password_hash($password, PASSWORD_ARGON2ID). En Node.js: usa el paquete bcryptjs o argon2. Estos gestionan automáticamente la generación de sal y el ajuste del factor de trabajo.
Cómo verificar el checksum de un archivo
Cuando descargas software y el sitio proporciona un hash SHA-256:
shasum -a 256 downloaded-file.zip
# comparar la salida con el hash oficial
En Windows (PowerShell):
Get-FileHash downloaded-file.zip -Algorithm SHA256
Alternativamente, usa nuestro Generador de Hash para pegar el contenido del archivo o texto y calcular hashes MD5, SHA-1, SHA-256 o SHA-512 directamente en tu navegador — nada se envía a un servidor.
Generar MD5, SHA-256 y más
Calcula cualquier hash (MD5, SHA-1, SHA-256, SHA-512) a partir de texto o contenido de archivos en tu navegador — sin subidas, sin servidor.