¿Qué es un hash? MD5 vs SHA-256 y cuándo usar cada uno
Security Tools

¿Qué es un hash? MD5 vs SHA-256 y cuándo usar cada uno

Qué es realmente un hash

Una función hash criptográfica es una máquina de un solo sentido: le das datos de cualquier tamaño — una palabra, un documento, una imagen de disco de varios gigabytes — y devuelve una cadena de caracteres de longitud fija llamada digest. El digest es determinista (la misma entrada siempre da la misma salida) y es una huella de los datos, no una copia. No puedes hacer funcionar la máquina al revés para recuperar la entrada a partir del digest. Si quieres probar todo esto mientras lees, abre el Generador de Hash en otra pestaña y hashea algunas frases.

Dos propiedades hacen útiles a los hashes. Primera, la longitud de salida es fija independientemente del tamaño de entrada: MD5 siempre produce 128 bits, SHA-256 siempre 256 bits. Segunda, la salida es muy sensible a la entrada — cambia un solo carácter y todo el digest cambia de forma impredecible. Este "efecto avalancha" es lo que permite que un hash actúe como un sello a prueba de manipulaciones sobre los datos.

Un ejemplo rápido del efecto avalancha

Hashea la palabra hello con SHA-256 y obtienes 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824. Hashea Hello — con H mayúscula — y obtienes algo completamente distinto, sin relación visual con el primero. No existe el "casi": un cambio de un bit en la entrada altera aproximadamente la mitad de los bits de salida. Precisamente por eso un hash es una buena comprobación de integridad. Si dos archivos tienen el mismo digest SHA-256, son — a todos los efectos prácticos — el mismo archivo, byte a byte.

Los algoritmos principales, en breve

MD5 (128 bits)

MD5 es rápido, produce un digest hexadecimal corto de 32 caracteres y está por todas partes en sistemas heredados. También está criptográficamente roto. Los investigadores demostraron colisiones prácticas — dos entradas distintas con el mismo digest — ya en 2004, y hoy cualquiera con un portátil puede generarlas. Eso hace que MD5 sea inseguro para cualquier cosa que un atacante pueda atacar: certificados, firmas o verificar que un archivo procede de una fuente de confianza. Sigue siendo válido para usos no adversariales como detectar archivos duplicados por accidente o una transferencia corrupta donde no interviene ningún atacante.

SHA-1 (160 bits)

SHA-1 fue el caballo de batalla durante años, pero ahora está en la misma categoría que MD5. En 2017, un equipo de Google y CWI Ámsterdam produjo dos PDF distintos con un hash SHA-1 idéntico (el ataque "SHAttered"), y el coste de tales ataques solo ha bajado desde entonces. Las autoridades de certificación TLS y los navegadores lo han abandonado. Git usaba históricamente SHA-1 para los identificadores de objetos y está migrando a SHA-256. Usa SHA-1 solo para interoperabilidad heredada, nunca para trabajo de seguridad nuevo.

SHA-256 y SHA-512 (familia SHA-2)

Son el estándar actual, definido por el NIST en FIPS 180-4. SHA-256 emite un digest hexadecimal de 64 caracteres y SHA-512 uno de 128. Ambos son resistentes a colisiones sin ataques prácticos, y aseguran TLS, la firma de código, las criptomonedas y la distribución de software. Cuando importa la seguridad y eliges hoy, elige SHA-256 o SHA-512. SHA-512 no es significativamente "más seguro" para necesidades típicas — es más ancho, y en CPU de 64 bits puede ejecutarse más rápido que SHA-256.

MD5 vs SHA-256: la comparación práctica

Quien busca "MD5 vs SHA-256" suele querer responder a una pregunta: ¿cuál debo usar? La versión corta es que resuelven problemas solapados con seguridades muy distintas. MD5 es más rápido y más corto, por eso perdura en checksums y protocolos antiguos. SHA-256 es algo más lento y produce un digest más largo, pero es resistente a colisiones, cosa que MD5 no es. Para cualquier fin donde alguien pueda intentar deliberadamente falsificar una coincidencia — verificar descargas de internet, firmar, deduplicar en un contexto sensible a la seguridad — SHA-256 es la elección correcta y MD5 es un riesgo. Para una comprobación puramente local de que un archivo se copió bien en tu propia máquina, la velocidad de MD5 es inofensiva. Ante la duda, usa SHA-256 por defecto; la diferencia de rendimiento es irrelevante para todo lo que no sea hashear terabytes.

Hashear no es cifrar

Esto confunde a mucha gente, así que conviene decirlo con claridad: hashear y cifrar son herramientas distintas para trabajos distintos. El cifrado es reversible — con la clave correcta, el texto cifrado vuelve a ser el texto original. El hash no tiene clave y no es reversible; no existe la operación "descifra este SHA-256", y cualquier sitio que afirme hacerlo en realidad solo busca tu digest en una tabla precalculada de entradas comunes. Cuando ves un digest, no puedes recuperar los datos a partir de él. Lo que puede hacer un atacante es adivinar: hashear miles de millones de entradas candidatas y buscar una coincidencia. Ese único hecho determina la regla práctica más importante sobre hashes y contraseñas.

¿Qué es un hash? MD5 vs SHA-256 y cuándo usar cada uno

Por qué no debes almacenar contraseñas con un hash simple

Como MD5, SHA-1 y SHA-256 son rápidos, son la herramienta equivocada para almacenar contraseñas. Un atacante que robe una base de datos de hashes SHA-256 de contraseñas puede probar miles de millones de intentos por segundo en GPU comunes, descifrando rápidamente contraseñas débiles y medias. La defensa es una función de hash de contraseñas específica — bcrypt, scrypt o Argon2 — deliberadamente lenta y con alto coste de memoria, más una sal aleatoria única por usuario para que contraseñas idénticas no compartan digest. Si estás construyendo autenticación, usa Argon2id, no SHA-256. Usa la familia SHA de propósito general para integridad y huellas, y si generas credenciales para almacenar, hazlo con un buen generador de contraseñas y guárdalas en un gestor de contraseñas.

El uso cotidiano: verificar una descarga

La razón más común para recurrir a un generador de hash es comprobar que una descarga está intacta y es auténtica. Un proyecto de confianza publica el checksum SHA-256 de cada versión junto al enlace de descarga. Tras descargar, hasheas el archivo tú mismo y comparas. Si los dos digests coinciden carácter por carácter, el archivo que tienes es idéntico byte a byte al que publicó el proyecto — una descarga truncada o un archivo manipulado producirían un digest distinto. Para hacerlo aquí, abre el Generador de Hash, cambia a la pestaña Archivo, elige el archivo descargado y compara la salida SHA-256 con el valor publicado. Prioriza SHA-256 sobre cualquier MD5 que el proyecto también pueda listar, ya que un MD5 coincidente puede, en principio, falsificarse.

Una advertencia: un checksum publicado en la misma página que la descarga solo protege contra corrupción accidental y errores de transporte, porque un atacante que pudiera reemplazar el archivo también podría reemplazar el checksum. Para garantías más fuertes, los proyectos publican un archivo de checksums firmado (con GPG) para que puedas verificar tanto integridad como autoría. La comparación de hash sigue siendo una valiosa primera línea de defensa y detecta el caso, abrumadoramente común, de una descarga defectuosa o interrumpida.

¿Cómo de grande es 2²⁵⁶? Por qué las colisiones no ocurren por casualidad

A veces se teme que dos archivos corrientes compartan al azar un digest SHA-256. En la práctica esto nunca ocurre por casualidad, y la razón es el tamaño enorme del espacio de salida. SHA-256 tiene 2²⁵⁶ digests posibles — un número de 78 cifras, mayor que la cantidad estimada de átomos del universo observable. Incluso la famosa "paradoja del cumpleaños", que dice que las colisiones se vuelven probables tras aproximadamente la raíz cuadrada del espacio, deja a SHA-256 necesitando unos 2¹²⁸ elementos hasheados antes de que una colisión accidental sea probable. A mil billones de hashes por segundo, eso es mucho más que la edad del universo. Así que cuando decimos que SHA-256 es "resistente a colisiones", en parte es matemática (no se conoce ningún atajo) y en parte es simplemente escala: la fuerza bruta es inútil. Los algoritmos rotos fallaron no porque el espacio sea pequeño, sino porque se encontraron atajos matemáticos ingeniosos que evitan la fuerza bruta por completo — que es exactamente lo que significa "roto" para un hash.

Breve historia de las roturas de funciones hash

El ciclo de vida de una función hash merece entenderse, porque explica por qué la elección segura de hoy puede convertirse en el algoritmo heredado de mañana. MD5 se publicó en 1991 y se confió en él durante los años 90; en 2004 los investigadores encontraron colisiones completas, y en 2008 usaron la debilidad para falsificar una autoridad de certificación fraudulenta. SHA-1, estandarizado en 1995, se debilitó teóricamente durante los 2000 y se rompió definitivamente en 2017 con SHAttered. Cada vez hubo una brecha de años entre "teóricamente débil" y "explotado en la práctica", durante la cual los ingenieros prudentes ya habían migrado. SHA-2 (incluidos SHA-256 y SHA-512) ha aguantado desde 2001 sin debilidad práctica, y SHA-3 — un diseño estructuralmente distinto elegido mediante una competición pública en 2015 — existe como alternativa lista por si SHA-2 flaqueara alguna vez. La lección para el profesional es sencilla: prefiere el estándar actual, sigue las noticias de criptografía y diseña los sistemas para que el algoritmo de hash pueda cambiarse sin reescribir todo.

Elegir la herramienta correcta, en una frase

Usa SHA-256 (o SHA-512) para todo lo relacionado con la seguridad, trata MD5 y SHA-1 solo como herramientas de checksum heredadas, nunca almacenes contraseñas con un hash simple, y recuerda que un hash pone huella a los datos pero nunca los oculta ni los cifra. Con esas cuatro reglas acertarás en casi cualquier situación — y puedes confirmar cualquiera de ellas en segundos con el Generador de Hash.

← Volver al Blog