Guide
Hashing criptográfico explicado: MD5, SHA-1, SHA-256, SHA-512
Tres propiedades, cuatro algoritmos que vale la pena conocer y un error — usar SHA-256 para contraseñas — que aparece en la mitad de los informes de brechas.
By Buğra SözeriPublished
Un hash criptográfico es una función que convierte una entrada arbitraria en una huella digital de tamaño fijo. La palabra “criptográfico” está haciendo un trabajo real en esa oración: no toda función hash califica, y usar una no criptográfica (o la incorrecta) es cómo los sistemas se vuelven inseguros silenciosamente.
Qué es un hash criptográfico
Formalmente, una función hash H toma una cadena de bytes arbitraria y devuelve una salida de longitud fija llamada el resumen. SHA-256 devuelve 256 bits, SHA-512 devuelve 512, MD5 devuelve 128. La misma entrada siempre produce la misma salida; la misma salida no revela nada sobre la entrada.
Cualquiera puede verificar un hash; solo una copia de la entrada original puede producir uno. Esa asimetría es lo que hace útiles los hashes para verificaciones de integridad, deduplicación, direccionamiento de contenido, firmas digitales y (con advertencias que llegaremos) almacenamiento de contraseñas.
Las tres propiedades que importan
Una función cuenta como criptográficamente segura cuando proporciona las tres en la práctica:
1. Resistencia de preimagen
Dado un resumen d, debería ser computacionalmente inviable encontrar cualquier entrada mtal que H(m) = d. Esto es lo que hace que los hashes sean una función unidireccional — no puedes revertir el resumen al mensaje. Para un hash de 256 bits, el costo de fuerza bruta es aproximadamente 2^256operaciones, lo que es astronómico.
2. Resistencia de segunda preimagen
Dada una entrada específica m1, debería ser inviable encontrar una entrada diferente m2 tal que H(m1) = H(m2). Esta es la propiedad que protege la integridad: un atacante que puede reemplazar tu archivo pero no puede cambiar su hash publicado necesita falsificar una segunda preimagen de tu entrada exacta, lo que es mucho más difícil que una colisión genérica.
3. Resistencia a colisiones
Debería ser inviable encontrar cualquier dos entradas distintas m1 != m2 con H(m1) = H(m2). Por la paradoja del cumpleaños, encontrar una colisión genérica en un hash de N bits cuesta aproximadamente 2^(N/2)operaciones, no 2^N. Por eso la salida de 160 bits de SHA-1 ya no es suficiente — 2^80 está bien al alcance de un adversario determinado en 2026.
El efecto avalancha
Una propiedad no formal pero práctica: un cambio de un bit en la entrada debería producir un resumen completamente diferente, con aproximadamente la mitad de los bits de salida invertidos. Esto es lo que hace útiles los hashes para la comparación diferencial — no puedes saber si dos entradas eran “casi iguales” por sus resúmenes, que es todo el punto.
Los obsoletos — y por qué
MD5 (1992)
Salida de 128 bits. Las colisiones fueron publicadas por primera vez en 2004 por Xiaoyun Wang; para 2008 los investigadores usaron colisiones MD5 para falsificar una Autoridad de Certificación fraudulenta. Hoy puedes encontrar una colisión MD5 en una laptop en minutos. MD5 está muerto para cualquier propósito de seguridad — firmas, certificados, deduplicación donde la entrada adversarial es posible, cualquier cosa que necesite resistencia a colisiones.
MD5 sigue siendo aceptable como una suma de verificaciónno criptográficapara la corrupción accidental — una descarga de ISO de CD-ROM, una clave de caché interna — pero nunca lo etiquetes como “seguro” en una hoja de especificaciones.
SHA-1 (1995)
Salida de 160 bits. El ataque SHAttered de 2017 de Google y CWI produjo dos PDFs distintos con el mismo hash SHA-1 a un costo de aproximadamente 2^63operaciones — costoso pero factible. NIST deprecó formalmente SHA-1 para firmas digitales en 2011 y lo prohibió para uso federal en 2030. Todos los principales navegadores dejaron de confiar en los certificados TLS de SHA-1 en 2017.
Git es el caso prominente que permanece, con mitigaciones (detección de SHAttered) compensando la debilidad subyacente. Los nuevos protocolos no deben usar SHA-1.
La familia SHA-2
SHA-2 es una familia de hashes diseñada por la NSA y publicada por NIST en 2001: SHA-224, SHA-256, SHA-384, SHA-512, más las variantes truncadas SHA-512/224 y SHA-512/256. El número es la longitud de salida en bits.
A pesar de compartir nombre, SHA-2 es estructuralmente no relacionado con SHA-1; los ataques que rompieron SHA-1 no se trasladan. Después de veinticinco años de criptoanálisis, SHA-256 permanece sin romper — los mejores ataques conocidos afectan solo versiones de juguete con rondas reducidas.
- SHA-256 es el predeterminado práctico en 2026. Resúmenes de 256 bits, seguridad de colisión de 128 bits, aceleración de hardware en cada CPU moderna.
- SHA-512 es más rápido en máquinas de 64 bits y produce un resumen más largo. Úsalo cuando quieras un margen mayor a 128 bits de seguridad de colisión.
- SHA-224 y SHA-384 son SHA-256 y SHA-512 con la salida truncada. Existen para compatibilidad heredada (coincidencia de longitud de clave con curvas elípticas); los nuevos diseños deben usar las formas no truncadas por defecto.
Puedes verificar cualquiera de estos en segundos con nuestro generador de hash en el navegador — se ejecuta localmente con la API Web Crypto, por lo que nada sale del dispositivo.
SHA-3 y cuándo importa
NIST realizó una competencia abierta de 2007 a 2012 para seleccionar un respaldo estructural para SHA-2. El ganador fue Keccak, estandarizado como SHA-3 en 2015. SHA-3 usa una construcción fundamentalmente diferente (la funciónesponja) por lo que una hipotética ruptura de la estructura Merkle-Damgård de SHA-2 no rompería SHA-3.
SHA-3 es generalmente más lento que SHA-2 en software pero comparable o más rápido en hardware. Es la elección correcta cuando específicamente quieres diversidad algorítmica (por ejemplo, firmar los mismos datos tanto con SHA-2 como con SHA-3 para defensa en profundidad), o cuando estás en una plataforma con hardware SHA-3 dedicado. Para todo lo demás, SHA-256 sigue siendo el predeterminado práctico.
Por qué no hasheas contraseñas con SHA-256
Este es el error más común en todo este tema. SHA-256 es rápido — una GPU moderna puede calcular miles de millones por segundo. Para un atacante que ha robado tu base de datos de contraseñas, esa velocidad es exactamente la propiedad incorrecta: cada intento que quieren verificar cuesta nanosegundos.
Las funciones de hashing de contraseñas están diseñadas para ser deliberadamente lentas e intensivas en memoria, de modo que escalar un ataque con hardware personalizado (ASICs, FPGAs) se vuelve costoso en lugar de gratuito. Los tres nombres que vale la pena conocer en 2026:
- bcrypt (1999). Factor de trabajo ajustable (parámetro de costo). Todavía seguro; el límite es su tope de entrada de 72 bytes. Elección predeterminada al integrar con bibliotecas existentes.
- scrypt (2009). Intensivo en memoria, más difícil de acelerar con ASICs que bcrypt. Usado por Litecoin y un puñado de bases de datos de contraseñas.
- Argon2(ganador de PHC 2015). La recomendación actual. Argon2id es la variante a usar — es resistente tanto a los ataques de canal lateral como a los de GPU. Especificado en
RFC 9106.
Los tres aceptan una sal (un valor aleatorio por usuario añadido a la contraseña antes de hashear). La sal elimina los ataques de tabla arco iris y garantiza que dos usuarios con la misma contraseña obtengan diferentes hashes almacenados. Las bibliotecas modernas manejan la generación de sal por ti; no la omitas.
HMAC: hashing con una clave
Un hash responde “¿estos datos no han cambiado?”. Un HMAC responde “¿estos datos no han cambiadoyalguien que conoce el secreto compartido produjo este MAC?”.
HMAC está construido sobre cualquier hash criptográfico — HMAC-SHA-256 es el común — a través de una construcción específica definida en RFC 2104. La alternativa ingenua, H(clave || mensaje), es vulnerable a los ataques de extensión de longitud en los hashes Merkle-Damgård (que incluye SHA-256). La construcción anidada de HMAC previene esto. Usa siempre HMAC, no la forma ingenua.
HMAC es el caballo de batalla de la firma de API (AWS SigV4, firmas de webhook, HS256 de JWT), la autenticación de la capa de registro TLS y cualquier protocolo que necesite la garantía de “esto vino de alguien con la clave”. La misma primitiva aparece en el ecosistema de autenticación más amplio — las cookies de sesión, los tokens bearer de OAuth y los tokens de doble envío CSRF se apoyan en HMAC o un hash para vincular un valor a un secreto que el servidor mantiene.
Casos de uso reales
Verificación de integridad
Publica el SHA-256 de una descarga junto al archivo. Cualquiera puede hashear su copia y comparar. Así es como cada distribución Linux distribuye ISOs y cómo los gestores de paquetes verifican las dependencias. El hash en sí debe entregarse por un canal de confianza (HTTPS al sitio del proyecto, firmado por la clave de firma del proyecto) — un atacante que puede modificar el archivo generalmente también puede modificar el hash si están en el mismo canal.
Direccionamiento de contenido
Git, IPFS, las capas de Docker y muchos otros sistemas direccionan objetos por su hash. El hash es el nombre. Esto proporciona deduplicación gratuita (el contenido idéntico tiene hashes idénticos) e integridad gratuita (si el hash coincide, los bytes coinciden).
Firmas digitales
Firmar directamente un archivo de varios megabytes con una clave RSA o ECDSA sería lento. El patrón estándar es hashear el archivo y firmar el hash. La seguridad de la firma hereda la resistencia a colisiones del hash — por eso los navegadores ya no confían en las firmas SHA-1.
Prueba de trabajo en blockchain
La prueba de trabajo de Bitcoin pide a los mineros que encuentren una entrada cuyo SHA-256 (dos veces, en realidad) comience con un cierto número de bits cero. No hay atajo, por lo que la única forma de encontrar tal entrada es probar muchos candidatos — que es el “trabajo” en la prueba de trabajo. Ethereum se alejó de la prueba de trabajo en 2022 hacia la prueba de participación, pero la primitiva subyacente basada en hash sigue siendo ubicua en las criptomonedas.
Deduplicación
Dropbox, Backblaze y todos los almacenes de objetos modernos deduplicam a nivel de bloque hasheando cada bloque y manteniendo una copia por hash único. SHA-256 es excesivo para la deduplicación no adversarial; muchos sistemas usan un hash no criptográfico más rápido (BLAKE3, xxHash) y aceptan la probabilidad de colisión astronómicamente pequeña.
Referencia rápida
| Algoritmo | Bits de salida | Estado 2026 | Usar para |
|---|---|---|---|
| MD5 | 128 | Roto | Solo sumas de verificación no adversariales |
| SHA-1 | 160 | Obsoleto | Solo compatibilidad heredada |
| SHA-256 | 256 | Seguro | Predeterminado de propósito general |
| SHA-512 | 512 | Seguro | Cuando quieres margen extra o velocidad de 64 bits |
| SHA-3-256 | 256 | Seguro | Diversidad estructural, aceleración de hardware |
| bcrypt / Argon2 | varía | Seguro | Almacenamiento de contraseñas |
| HMAC-SHA-256 | 256 | Seguro | Integridad de mensajes autenticados |
La conclusión honesta
Para el hashing de propósito general en 2026, usa SHA-256. Para contraseñas, usa Argon2id. Para tokens de autenticación, usa HMAC-SHA-256 (o una biblioteca de JWT adecuada que use uno internamente). Para la integridad de las descargas, publica resúmenes SHA-256 por HTTPS.
Las respuestas incorrectas — MD5 donde la seguridad importa, SHA-1 para nuevas firmas, SHA-256 para contraseñas — son los errores más comunes en los informes de brechas. Elegir correctamente es principalmente cuestión de saber qué pregunta está diseñado para responder cada algoritmo.
Frequently asked questions
- ¿Está SHA-256 roto todavía?
- No. A partir de 2026 no hay ningún ataque de colisión o preimagen publicado en SHA-256 mejor que la fuerza bruta. Los mejores resultados criptanalíticos conocidos afectan solo a variantes con rondas reducidas. NIST continúa recomendando SHA-256 para hashing de propósito general y firmas digitales.
- ¿Por qué no simplemente usar SHA-256 para hashear contraseñas?
- Porque SHA-256 está diseñado para ser rápido — miles de millones de hashes por segundo en una GPU moderna. Esa es exactamente la propiedad incorrecta para el almacenamiento de contraseñas, donde quieres que los atacantes pasen segundos por intento, no nanosegundos. Usa bcrypt, scrypt o Argon2 — estos son deliberadamente lentos, intensivos en memoria y tienen un factor de trabajo ajustable que puedes aumentar a medida que el hardware se vuelve más rápido.
- ¿Es SHA-3 más rápido que SHA-2?
- Generalmente más lento en CPU, más rápido en hardware. SHA-3 (Keccak) fue seleccionado como respaldo estructural para SHA-2, no como reemplazo — su construcción de esponja es matemáticamente distinta, por lo que una hipotética ruptura de SHA-2 no se trasladaría a SHA-3. Para software en 2026, SHA-256 sigue siendo el predeterminado práctico; recurre a SHA-3 cuando específicamente necesites la diversidad estructural o cuando estés apuntando a hardware con un acelerador SHA-3.
- ¿Cuál es la diferencia entre un hash y un HMAC?
- Un hash plano toma datos y devuelve un resumen. Un HMAC toma datos más una clave secreta y devuelve un resumen que solo puede reproducir alguien que conoce la clave. Usas hashes planos para integridad (¿coincide este archivo con la suma de verificación publicada?) y HMACs para autenticidad (¿conocía el remitente el secreto compartido?). Añadir ingenuamente una clave a los datos y hashearlos no es lo mismo que HMAC y tiene debilidades conocidas — siempre usa la construcción HMAC real.
- ¿Cuánto tiempo se tarda realmente en encontrar una colisión SHA-256?
- Por la paradoja del cumpleaños, encontrar una colisión en una salida de 256 bits requiere aproximadamente 2^128 operaciones de hash. A un billón (10^12) de hashes por segundo en un millón de máquinas, eso sigue siendo alrededor de 10^19 años — cómodamente más largo que la edad del universo. SHA-1 por contraste tiene una salida de 160 bits (límite de cumpleaños 2^80) y el ataque SHAttered de Google en 2017 demostró una colisión en aproximadamente 2^63 operaciones — al alcance de un adversario determinado.
- ¿Por qué git todavía usa SHA-1?
- Principalmente inercia más mitigaciones. El almacenamiento con dirección de contenido de git no depende de la resistencia a colisiones contra un adversario que controla ambas entradas — depende de la resistencia de segunda preimagen, que sigue siendo fuerte para SHA-1. El git moderno también implementa la detección de SHAttered para rechazar las entradas específicas conocidas como malas. La transición a SHA-256 está en marcha pero es lenta; los nuevos repositorios pueden optar con git init --object-format=sha256.
Related
- Generador de hash (MD5, SHA-1, SHA-256, SHA-512)Calcula hashes en el navegador; nada sale de tu dispositivo
- SHA-256 vs MD5Por qué uno es aceptable y el otro es una responsabilidad
- SHA-1 vs SHA-256Comparación lateral sobre resistencia a colisiones y casos de uso
- Glosario de SHA-256Referencia corta para el algoritmo y su salida
- Cómo elegir una contraseña seguraLa pieza complementaria para la pregunta sobre el hashing de contraseñas
Published May 31, 2026