Comparison
SHA-256 vs MD5: nunca uses MD5 para seguridad
Uno está muerto para la seguridad. El otro es el valor predeterminado moderno. No los confundas.
By Buğra SözeriPublished
Resumen. MD5 ha estado criptográficamente roto desde 2004 — las colisiones pueden encontrarse en menos de una hora en un portátil — así que nunca lo uses para seguridad. SHA-256 no tiene ninguna colisión práctica conocida y es el valor predeterminado moderno para TLS, JWT, Bitcoin, Git (nuevos repositorios) y HMAC. Ambos están bien para sumas de comprobación no adversariales, pero SHA-256 no es significativamente más lento en CPUs modernas.
MD5 y SHA-256 son ambas funciones hash criptográficas — toman entrada de cualquier longitud y producen una salida de longitud fija (128 bits para MD5, 256 bits para SHA-256). Ambas son deterministas, ambas son rápidas, y parecen superficialmente intercambiables. No lo son. MD5 ha estado criptográficamente roto desde 2004. SHA-256 está bien.
El resumen
| Propiedad | MD5 | SHA-256 |
|---|---|---|
| Tamaño de salida | 128 bits (32 caracteres hex) | 256 bits (64 caracteres hex) |
| Publicado | 1991 | 2001 (NIST FIPS 180-2) |
| Colisión encontrada | 2004 (Wang et al.) | Aún no (2026) |
| Colisiones de prefijo elegido | Prácticas desde 2007 | Ninguna conocida |
| ¿Usado para TLS, JWT, cripto? | No | Sí |
Por qué MD5 está roto
Una función hash criptográfica debe hacer computacionalmente inviable encontrar dos entradas diferentes que produzcan la misma salida (una “colisión”). En 2004 Xiaoyun Wang y su equipo publicaron un método para encontrar colisiones MD5 en aproximadamente una hora en un ordenador personal.
Empeoró. En 2007 surgió un ataque de colisión de prefijo elegido — dados dos encabezados de archivo arbitrarios, un atacante podía añadir bytes cuidadosamente elaborados para hacer que ambos archivos colisionaran en MD5. Esto se usó en 2008 para falsificar una firma de autoridad de certificación usando un clúster de 657 $ de PlayStation 3.
Para propósitos de seguridad, MD5 está muerto. Quien use MD5 para verificación de firmas, integridad de contenido o hash de contraseñas está usando criptografía rota.
Dónde MD5 sigue siendo aceptable
MD5 no está roto en absoluto; está roto para usos criptográficos. Dos categorías donde todavía está bien:
- Sumas de comprobación no adversariales. Verificar que una descarga no fue corrompida, o que una entrada de caché coincide con una clave. No hay atacante; solo necesitas una huella digital rápida y determinista. MD5 sirve.
- Deduplicación. Detectar que dos archivos son idénticos, donde falsificar una colisión no ayudaría a ningún atacante plausible (sistema de almacenamiento, caché de compilación).
Incluso en estos casos, SHA-256 rara vez es significativamente más lento en hardware moderno — los CPUs Intel y AMD tienen instrucciones SHA nativas. No hay razón real para usar MD5 por defecto.
Dónde SHA-256 es la elección correcta
- Handshakes TLS y firmas de certificados. SHA-256 es el estándar moderno.
- Firmas JWT (HS256, RS256, ES256). El 256 se refiere a SHA-256.
- Hashes de bloques de Bitcoin. Bitcoin usa SHA-256 dos veces en su prueba de trabajo.
- Hashes de objetos Git. Git está migrando de SHA-1 (que también ha sido roto) a SHA-256; los nuevos repositorios deben usar SHA-256 desde el principio.
- Autenticación de mensajes basada en HMAC. HMAC-SHA256 es el estándar.
¿Qué hay de SHA-1?
SHA-1 (160 bits) se sitúa entre MD5 y SHA-256 en la línea temporal. Las colisiones teóricas se predijeron en 2005; la primera colisión práctica (SHAttered) fue publicada en 2017 por Google. SHA-1 está deprecado para usos de seguridad, aunque Git todavía lo usa (con extensiva detección de colisiones superpuesta) hasta que se complete la migración a SHA-256.
¿Qué hay de MD5 para contraseñas?
No lo hagas. Tampoco uses SHA-256 directamente. El hash de contraseñas requiere una función lenta y de uso intensivo de memoria — bcrypt, scrypt o argon2. SHA-256 puro es demasiado rápido: un atacante con GPUs modernas puede calcular ~10.000 millones de SHA-256 por segundo, haciendo fuerza bruta a contraseñas débiles en minutos. Las funciones de hash lentas hacen que este ataque sea económicamente inviable.
La regla pragmática
Si estás hasheando por cualquier razón que toque la seguridad — autenticación, verificación de firmas, integridad de contenido que un atacante podría querer engañar — usa SHA-256 o superior.
Si estás hasheando para huellas digitales no adversariales — deduplicación, almacenamiento direccionable por contenido donde controlas todas las entradas — MD5 es técnicamente correcto, pero SHA-256 no es más lento en hardware moderno, así que úsalo de todas formas. El coste de equivocarse sobre la categoría en la que estás es alto; el coste de usar siempre SHA-256 es esencialmente cero.
Usa nuestro generador de hash para cualquiera de los dos a través de Web Crypto — aunque cabe señalar que no incluimos MD5 en la interfaz, porque el navegador no lo proporciona de forma nativa y preferimos no fomentar su uso.
Datos numéricos
- Longitud de salida: MD5 = 128 bits / 32 chars hex; SHA-256 = 256 bits / 64 chars hex — exactamente 2× los bits.
- Resistencia a colisiones: MD5 ~2¹⁸ hoy (literalmente segundos en un portátil); SHA-256 ~2¹²⁸ — una proporción de 2¹¹⁰×.
- Rendimiento en AMD Zen 4 con SHA-NI: MD5 ~700 MB/s; SHA-256 ~1,9 GB/s. Con aceleración por hardware SHA-256 es ahora ~2,5× más rápido que MD5 — el argumento de velocidad para MD5 se invirtió.
- Sin aceleración: MD5 ~500 MB/s, SHA-256 ~250 MB/s — la brecha histórica de 2×.
- Ataque de Wang (2004): primera colisión práctica de MD5 encontrada en ~1 hora en un solo PC. Los ataques modernos (HashClash) encuentran colisiones en menos de 30 segundos en GPUs de consumidor.
- Explotación de CA falsa de 2008: Sotirov et al. falsificaron un certificado firmado por CA usando 200 consolas PlayStation 3 (~657 $ de cómputo) y una colisión de prefijo elegido de MD5.
- Velocidad de fuerza bruta con GPU (RTX 4090): ~50 mil millones de MD5/s, ~9 mil millones de SHA-256/s — ambos demolerían hashes de contraseñas sin sal en minutos.
- Coste predeterminado de Argon2id (OWASP 2024): 19 MiB de memoria, 2 iteraciones, 1 paralelismo — ~50 ms por hash frente a nanosegundos para SHA-256 puro.
Matriz de decisión
| Caso de uso | Hash |
|---|---|
| Firma de certificado TLS | SHA-256+ |
| Firma JWT | SHA-256 (HS256/RS256/ES256) |
| Firma de código / binario | SHA-256 |
| Prueba de trabajo Bitcoin / blockchain | SHA-256 (doble) |
| Firma de solicitudes de API con HMAC | HMAC-SHA-256 |
| ETag de S3 (subida de una sola parte) | MD5 — bloqueado por contrato de AWS |
Archivo md5sums de paquete Linux | MD5 — heredado, pero las nuevas distros añaden SHA-256 |
| Deduplicación interna, entradas confiables | Cualquiera; SHA-256 por defecto en CPUs modernas |
| Hash de contraseña | argon2id / bcrypt / scrypt — ninguno de los dos en bruto |
Fuentes
- Wang, X. et al. — Collisions for Hash Functions MD4, MD5, HAVAL-128 and RIPEMD, CRYPTO 2004 — eprint.iacr.org/2004/199.
- Sotirov, A. et al. — MD5 considered harmful today: Creating a rogue CA certificate, 25C3 (2008) — win.tue.nl/hashclash/rogue-ca.
- NIST FIPS 180-4 — Secure Hash Standard (SHS) — csrc.nist.gov.
Frequently asked questions
- ¿Es MD5 seguro para el hash de contraseñas?
- No, e incluso SHA-256 no es la elección correcta para contraseñas. Ambos son demasiado rápidos — un atacante con GPUs modernas puede calcular ~10.000 millones de SHA-256 por segundo, haciendo fuerza bruta a contraseñas débiles en minutos. Usa bcrypt, scrypt o argon2; son deliberadamente lentos y consumen mucha memoria.
- ¿Cuándo sigue siendo aceptable MD5?
- Solo para huellas digitales no adversariales donde ningún atacante se beneficia de una colisión: verificaciones de integridad de archivos en descargas confiables, derivación de claves de caché, deduplicación en un sistema que controlas de extremo a extremo. En cualquier lugar donde la seguridad dependa del hash, usa SHA-256 o superior.
- ¿Es SHA-256 reversible?
- No — las funciones hash criptográficas son unidireccionales por diseño. No puedes derivar la entrada desde la salida. La ‘reversión’ basada en búsquedas (tablas rainbow) solo funciona para entradas que han sido hasheadas antes, y el salado derrota completamente las tablas rainbow.
- ¿Por qué MD5 sigue estando en todas partes si está roto?
- Compatibilidad retroactiva e inercia. La cabecera Content-MD5, los gestores de paquetes de Linux, el ETag de S3 para subidas no multiparte y numerosas herramientas internas todavía emiten MD5 porque el coste de cambiar el protocolo supera el coste del riesgo residual. Los nuevos sistemas deben usar SHA-256 por defecto.
Related
Published May 14, 2026