MD5, SHA-1, SHA-256: qué hash y para qué
Publicado el 1/7/2026 · 16 min de lectura · Herramientas para desarrolladores
Daniel Okonkwo — Desarrollador front-end y redactor de Tecnología en OneKitly
Rendimiento web · Formatos de archivo
Verificado con 6 fuentes
A una función hash se le piden tres garantías distintas, y caen en momentos distintos. Resistencia a preimagen: dado un resumen, no puedes encontrar ninguna entrada que lo produzca. Resistencia a segunda preimagen: dada una entrada, no puedes encontrar otra distinta con el mismo resumen. Resistencia a colisiones: no puedes encontrar dos entradas cualesquiera que colisionen. MD5 perdió la resistencia a colisiones en 2004 (Wang et al.) y SHA-1 la perdió en 2017, cuando Google y el CWI de Ámsterdam publicaron dos PDF distintos con el mismo resumen SHA-1 tras 9 223 372 036 854 775 808 evaluaciones — exactamente 2^63. Ninguno ha perdido la resistencia a preimagen. Por eso «MD5 está roto» es cierto y se aplica mal continuamente. Cotejar un archivo descargado contra una suma MD5 para detectar una transferencia truncada sigue funcionando, porque una corrupción accidental no es un adversario eligiendo los dos archivos. Aceptar un certificado firmado con MD5 no, porque ahí el adversario elige los dos. Usa SHA-256 para todo lo nuevo: md5("hello") es 5d41402abc4b2a76b9719d911017c592 y sha256("hello") es 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824. Y ninguno es un hash de contraseñas. Están hechos para ser rápidos — medidos aquí entre 632 MB/s y 1 357 MB/s en un solo núcleo — y guardar contraseñas exige lentitud. Ese trabajo es de bcrypt, scrypt o Argon2.
MD5 está roto y MD5 va perfectamente, según cuál de las tres propiedades de seguridad necesitaras. Esto es lo que significan de verdad la resistencia a colisiones, a segunda preimagen y a preimagen, qué algoritmo conserva cuál, y por qué ninguno debe acercarse a una contraseña.
Tres propiedades, no una
Casi toda discusión sobre funciones hash se tuerce en la primera frase, porque la palabra «seguro» está sustituyendo a tres garantías distintas. La resistencia a preimagen dice que, teniendo solo un resumen, no puedes retroceder hasta ninguna entrada que lo produzca. La resistencia a segunda preimagen dice que, dada una entrada concreta — este contrato, este binario —, no puedes encontrar otra distinta con el mismo resumen. La resistencia a colisiones dice algo más fuerte y más raro: no puedes encontrar ningún par de entradas que colisionen, aunque elijas las dos y ninguna signifique nada.
Las tres se ordenan por dificultad para el atacante, y la paradoja del cumpleaños explica por qué. Encontrar una preimagen de un resumen de n bits cuesta unas 2^n operaciones; encontrar una colisión cuesta solo unas 2^(n/2), porque no apuntas a un objetivo: esperas a que dos de tus candidatos coincidan. Para SHA-256 eso es 2^256 frente a 2^128 — ambos inalcanzables. Para MD5 es 2^128 frente a un 2^64 genérico, y el criptoanálisis empujó la cifra real muy por debajo. Así que la resistencia a colisiones es siempre la primera en caer, y cae muchísimo antes que la resistencia a preimagen.
Qué se rompió exactamente
MD5 cayó primero. Xiaoyun Wang y sus coautores publicaron colisiones prácticas en 2004 y, en pocos años, la técnica se refinó en colisiones de prefijo elegido, donde el atacante controla el principio de los dos mensajes en colisión y puede por tanto hacer que cada uno sea un documento con sentido. Eso es lo que hace posible falsificar una firma: consigues que un tercero de confianza firme la mitad inofensiva de un par en colisión y luego pegas su firma a la otra mitad. Hoy una colisión MD5 simple tarda segundos en hardware corriente.
SHA-1 aguantó hasta febrero de 2017, cuando el CWI de Ámsterdam y Google Research publicaron SHAttered: dos archivos PDF visiblemente distintos con idéntico resumen SHA-1. Su anuncio cifra el coste en 9 223 372 036 854 775 808 cálculos SHA-1. Ese número no es arbitrario: es exactamente 2^63, holgadamente por debajo de los 2^80 que exigiría un ataque de cumpleaños genérico sobre un resumen de 160 bits. Tres años después, Leurent y Peyrin extendieron el resultado a colisiones de prefijo elegido, y en ese momento SHA-1 quedó liquidado para todo uso adversario; las autoridades de certificación y los sistemas de control de versiones que aún lo emitían empezaron la larga migración.
Fíjate en lo que ninguno de los dos resultados le da al atacante. Nadie puede tomar un resumen MD5 que publiques y recuperar la entrada. Nadie puede tomar un archivo existente y fabricar un segundo archivo con el mismo MD5. Ambos ataques exigen que el adversario construya las dos mitades desde el principio. Esa es exactamente la frontera entre una suma de verificación que detecta una descarga corrupta — la corrupción no eligió nada — y una firma que debe sobrevivir a alguien que construye deliberadamente los dos documentos.
Los resúmenes, uno al lado del otro
Pasa la cadena «hello» por cada algoritmo y las diferencias saltan a la vista. MD5 da 5d41402abc4b2a76b9719d911017c592, treinta y dos caracteres hexadecimales para 128 bits. SHA-1 da aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d, cuarenta caracteres para 160 bits. SHA-256 da 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824, sesenta y cuatro caracteres para 256 bits. Cada carácter hexadecimal lleva cuatro bits, así que la longitud en caracteres siempre es la longitud en bits dividida entre cuatro — una forma rápida de identificar un hash sin etiquetar en un registro o una columna de base de datos.
Ahora añade un simple punto. sha256("hello.") es 1589999b0ca6ef8814283026a9f166d51c70a910671c3d44049755f07f2eb910 — ni un carácter en común con el resumen de "hello" en ninguna posición predecible. Es el efecto avalancha, y se cumple con la misma fuerza en MD5, cuyo resumen de "hello." es d94c10e437d18531e122ed0b45badd2a. La avalancha no es la propiedad que falló. MD5 sigue revolviendo estupendamente; simplemente, un atacante lo bastante hábil sabe dirigir dos revoltijos al mismo sitio.
Una falsificación reproducible: la extensión de longitud
MD5, SHA-1, SHA-256 y SHA-512 comparten la construcción de Merkle-Damgard: el mensaje se rellena, se parte en bloques fijos y cada bloque actualiza un estado interno acumulado. El resumen que publicas es ese estado interno. Lo que significa que cualquiera que tenga tu resumen puede volver a cargarlo en el algoritmo y seguir hasheando, como si hubiera estado ahí desde el principio. Es la propiedad de extensión de longitud, y no es un fallo de ninguna de estas funciones — es lo que hace la construcción.
Aquí está ejecutada. Toma una etiqueta de autenticación ingenua construida como sha256(secreto + mensaje), con un secreto de 32 bytes y el mensaje user=alice&role=viewer. La etiqueta legítima empieza por 0556f5e825e91626. Un atacante que solo conoce el mensaje, la etiqueta y la longitud del secreto — no el secreto — puede reanudar SHA-256 desde esa etiqueta, añadir los diez bytes de relleno 800000000000000001b0 que el hasheo original habría insertado y luego añadir &role=admin. La etiqueta resultante es cca75089ae751c4359a577329d74d9ba345ed7e5f83f988583b2baa16cad5efe, y es byte a byte el resumen que el servidor calcula sobre el mensaje extendido. La falsificación se verifica. El secreto nunca se conoció.
El arreglo no es un resumen más largo ni otra variante de SHA-2. Es HMAC, que anida el hash dos veces con dos claves derivadas, de modo que la etiqueta publicada ya no es un estado interno reanudable. HMAC-SHA-256 sobre la misma clave y el mismo mensaje da 2ad69479d608c0fc4c89387db138aebb0bbee3b35d46057726228cacfc8a1478, y ninguna cantidad de añadidos te da una extensión válida. SHA-3 es inmune por otra razón: su construcción de esponja solo emite parte del estado interno, así que el resumen no te dice dónde estaba el algoritmo.
Ninguno de estos es un hash de contraseñas
Este es el error que más cuesta, y no tiene nada que ver con las colisiones. Los hashes de propósito general están diseñados para el rendimiento, y lo entregan. Medido en un solo núcleo sobre un búfer de 64 MB, MD5 va a 632 MB/s, SHA-256 a 1 075 MB/s y SHA-1 a 1 357 MB/s. El orden merece una segunda mirada: aquí SHA-256 es un 70 % más rápido que MD5, porque los procesadores modernos traen instrucciones SHA dedicadas y ninguna instrucción MD5. «MD5 es más rápido» dejó de ser fiable hace años.
La velocidad es justo la propiedad equivocada para una contraseña almacenada, porque el atacante que tiene tu base de datos se beneficia mucho más que tú. Tú hasheas una contraseña por inicio de sesión; él hashea miles de millones por segundo en un bastidor de GPU. Las funciones de hash de contraseñas invierten ese trato a propósito. En la misma máquina, PBKDF2-SHA-256 con 600 000 iteraciones tarda 148 milisegundos por contraseña, y scrypt con N = 131 072 tarda 397. Eso son unas siete contraseñas por segundo en vez de millones — una penalización deliberada que tú pagas una vez por inicio de sesión y el atacante una vez por intento.
Así que la respuesta correcta a «qué hash para contraseñas» es: ninguno de los de este artículo. Usa Argon2id cuando puedas elegir libremente, bcrypt cuando la plataforma no te dé otra cosa, scrypt o PBKDF2 cuando una norma los exija, siempre con una sal aleatoria única por usuario. SHA-256 mantiene su sitio dentro de esas construcciones — PBKDF2-SHA-256 se apoya en él — pero es la primitiva, no el esquema.
SHA-3 no es un SHA-2 más grande
La numeración invita a la conclusión equivocada. SHA-2 sucedió a SHA-1 como un diseño mejorado del mismo linaje; SHA-3 no sucedió a SHA-2 en ese sentido en absoluto. Salió de un concurso abierto que el NIST convocó en 2007, lo ganó el equipo Keccak y se normalizó en FIPS 202 en 2015 — mientras SHA-2 seguía perfectamente sano, y lo sigue estando. El NIST nunca ha pedido a nadie que abandone SHA-2.
El sentido de SHA-3 es la diversidad arquitectónica. Como es una esponja y no una cadena de Merkle-Damgard, un ataque que rompiera SHA-2 con mucha probabilidad no lo tocaría, y el mundo tendría un reemplazo listo. La esponja elimina además gratis la extensión de longitud, razón por la que algunos diseños ya lo prefieren. Su coste es la velocidad: SHA3-256 midió 317 MB/s en el mismo hardware donde SHA-256 alcanzó 1 075 MB/s, en buena parte porque el hardware acelera uno y no el otro. Elige SHA-3 cuando quieras la construcción distinta, no cuando quieras más bits — SHA3-256 y SHA-256 ofrecen los mismos 256.
Una breve lista de decisión
Firmar cualquier cosa, verificar una descarga venida de una red hostil, construir un árbol de Merkle, derivar una dirección de contenido: SHA-256. Guardar una contraseña o derivar de ella una clave: Argon2id, bcrypt o scrypt, nunca un hash desnudo. Autenticar un mensaje con un secreto compartido: HMAC-SHA-256, no sha256(secreto + mensaje), por la razón demostrada arriba. Deduplicar archivos, indexar una caché, repartir una tabla hash, detectar una transferencia truncada: MD5 sigue valiendo y sigue siendo bastante rápido, siempre que nadie en el cuadro se beneficie de una colisión.
Una sola prueba zanja los casos dudosos. Pregúntate si quien se beneficia de que dos entradas compartan resumen puede además elegir esas entradas. Si la respuesta es no — un fallo de disco, un cable defectuoso, una subida parcial —, una resistencia a colisiones rota no te cuesta nada. Si la respuesta es sí, o puede llegar a serlo en cuanto el dato sale de tu máquina, necesitas un hash con la resistencia a colisiones intacta: SHA-256 o mejor.
| Algoritmo | Resumen | Resistencia a colisiones | Resistencia a preimagen | Uso razonable en 2026 |
|---|---|---|---|---|
| MD5 | 128 bits, 32 caracteres hex | Rota desde 2004; colisiones en segundos | Sigue intacta | Sumas de verificación no adversarias, claves de caché, deduplicación |
| SHA-1 | 160 bits, 40 caracteres hex | Rota desde 2017 (2^63 evaluaciones) | Sigue intacta | Solo compatibilidad heredada; ninguna firma nueva |
| SHA-256 | 256 bits, 64 caracteres hex | Intacta; el mejor ataque es genérico, 2^128 | Intacta, 2^256 | El valor por defecto para firmas, integridad, compromisos |
| SHA-512 | 512 bits, 128 caracteres hex | Intacta, 2^256 | Intacta, 2^512 | Misma familia que SHA-256; más rápido en software de 64 bits sin instrucciones SHA |
| SHA3-256 | 256 bits, 64 caracteres hex | Intacta; construcción distinta (esponja Keccak) | Intacta; inmune a la extensión de longitud | Un seguro estructural ante una futura rotura de SHA-2, no más robustez |
Preguntas frecuentes
- ¿Es seguro usar MD5 en 2026?
- Solo donde ningún adversario se beneficie de una colisión. MD5 perdió la resistencia a colisiones en 2004 y hoy una colisión tarda segundos, así que cualquier uso en el que alguien pueda ganar haciendo que dos entradas distintas compartan resumen — firmas, certificados, comprobaciones de integridad sobre una red no fiable, deduplicación de archivos suministrados por el atacante — es inseguro. Los usos cuya única amenaza es el accidente siguen bien: verificar que una copia no se truncó, indexar una caché, repartir datos entre servidores, comparar copias de seguridad locales. MD5 no ha perdido la resistencia a preimagen, así que un resumen publicado tampoco revela su entrada. La regla pragmática: MD5 es una huella rápida, no un control de seguridad. Además ya ni siquiera es la opción más rápida: medido en un núcleo, SHA-256 fue a 1 075 MB/s frente a los 632 MB/s de MD5, porque los procesadores llevan instrucciones SHA. Si la velocidad era tu motivo, ha caducado.
- ¿Se puede descifrar o revertir un hash SHA-256?
- No, y la palabra descifrar no aplica — hashear no es cifrar, porque no hay clave ni camino de vuelta previsto. SHA-256 lleva entradas de cualquier longitud a 256 bits, así que infinitas entradas comparten cada resumen y la original no puede aislarse ni en principio. Recuperar una entrada significa fuerza bruta: adivinar candidatos y hashear cada uno hasta que coincida. Por eso funcionan los llamados sitios de «rotura de hash». No revierten nada; guardan tablas precalculadas de resúmenes de entradas comunes y buscan el tuyo. Frente a un valor aleatorio de 32 bytes la búsqueda falla y quedan 2^256 intentos. Frente a la cadena «password» acierta al instante. Consecuencia práctica: el resumen de un secreto de baja entropía apenas es un secreto, que es justo la razón por la que el almacenamiento de contraseñas añade una sal por usuario (contra las tablas compartidas) y una función deliberadamente lenta (contra la adivinación rápida).
- ¿Debería usar SHA-512 en vez de SHA-256 para más seguridad?
- Rara vez merece la pena. SHA-256 ofrece 128 bits de resistencia a colisiones y 256 de resistencia a preimagen; SHA-512 duplica ambos, a 256 y 512. Como ningún ataque contra SHA-256 se acerca a 2^128, el margen extra no compra nada señalable, mientras el resumen se duplica a 128 caracteres hexadecimales en cada columna, URL y línea de registro que deba llevarlo. Hay dos razones reales para elegir SHA-512. El rendimiento en software de 64 bits sin aceleración SHA por hardware, donde las palabras de 64 bits de SHA-512 pueden adelantar a SHA-256 — aunque en hardware que acelera SHA-256 el orden se invierte, como aquí, 1 075 MB/s frente a 516 MB/s. Y una especificación que lo exija. SHA-512/256, variante truncada definida en FIPS 180-4, da la velocidad de las palabras de 64 bits con salida de 256 bits, y es el compromiso más limpio cuando necesitas ambas cosas.
- ¿Por qué no puedo hashear contraseñas con SHA-256 y una sal?
- Una sal arregla un problema y deja intacto el mayor. Detiene las tablas precalculadas y obliga al atacante a atacar cada cuenta por separado — algo de valor real. Lo que no puede cambiar es el coste por intento. SHA-256 está hecho para ser barato, y un atacante con tu base salada ataca cada cuenta al ritmo que su hardware permita, que en un bastidor de GPU es enorme. La defensa tiene que encarecer cada intento individual, y eso hace una función de hash de contraseñas. Medido aquí, PBKDF2-SHA-256 con 600 000 iteraciones cuesta 148 ms por contraseña y scrypt con N = 131 072 cuesta 397 ms; Argon2id añade encima un coste de memoria, de modo que una GPU no puede ejecutar miles de instancias en paralelo. Sal y lentitud son ambas necesarias, y solo la segunda depende del algoritmo que elijas. Usa Argon2id, bcrypt o scrypt y deja a SHA-256 dentro de ellos, donde le corresponde.
- ¿Qué es la extensión de longitud y me afecta?
- Solo te afecta si construiste una etiqueta de autenticación como hash(secreto + mensaje). Como MD5, SHA-1 y la familia SHA-2 publican su estado interno en forma de resumen, quien tenga ese resumen puede reanudar el cálculo y producir una etiqueta válida para el mensaje con datos añadidos, sin llegar a conocer el secreto. No es teórico: partiendo de una etiqueta real sobre un secreto de 32 bytes y user=alice&role=viewer, añadiendo los diez bytes de relleno 800000000000000001b0 y luego &role=admin, sale cca75089ae751c4359a577329d74d9ba345ed7e5f83f988583b2baa16cad5efe, exactamente lo que calcula el servidor. Como los analizadores de consulta suelen quedarse con la última aparición de una clave repetida, esa extensión cambia el rol. Dos arreglos funcionan: usar HMAC, diseñado para autenticación con clave y no extensible, o usar SHA-3, cuya esponja nunca expone el estado completo. Si solo hasheas un archivo sin ningún secreto, la extensión de longitud no te hace nada.
- ¿Tengo que migrar de SHA-2 a SHA-3?
- No. El NIST normalizó SHA-3 en FIPS 202 como alternativa, no como sustituto, y sigue aprobando la familia SHA-2 en FIPS 180-4 sin obsolescencia a la vista. SHA-3 existe porque depender de una sola construcción es un riesgo sistémico: SHA-1 y SHA-2 comparten linaje de diseño, así que un avance contra uno hizo temer razonablemente por el otro. La esponja de Keccak es un mecanismo completamente distinto, y ese es todo el sentido. Recurre a SHA-3 en tres situaciones. Cuando un protocolo o un regulador lo exija. Cuando quieras inmunidad a la extensión de longitud sin envolverlo todo en HMAC. Cuando diseñes algo pensado para sobrevivir al consenso criptográfico actual y quieras diversidad de construcción. Por lo demás, SHA-256 sigue siendo el valor por defecto sensato, y suele ser más rápido porque los procesadores lo aceleran: aquí 1 075 MB/s frente a 317 MB/s de SHA3-256. Ten en cuenta además que el nivel de seguridad es idéntico — SHA3-256 y SHA-256 dan resúmenes de 256 bits y 128 bits de resistencia a colisiones.
Artículos que podrían interesarte
Todas las guías →Herramientas relacionadas
Fuentes
- NIST — FIPS 180-4, Secure Hash Standard (SHS)
- NIST — FIPS 202, SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions
- NIST — SP 800-131A Rev. 2, Transitioning the Use of Cryptographic Algorithms and Key Lengths
- CWI Amsterdam and Google Research — SHAttered: the first SHA-1 collision
- IETF — RFC 6151, Updated Security Considerations for MD5 and HMAC-MD5
- OWASP — Password Storage Cheat Sheet
¿Has detectado un error en este artículo?