Seguridad

Qué es una función hash y qué no puede hacer

Una huella de longitud fija para cualquier cantidad de datos: sirve exactamente para tres cosas, y no sirve para una cuarta que la gente insiste en intentar.

Una función hash toma cualquier entrada —una sola letra, una imagen de disco de 4 GB, un archivo vacío— y devuelve un string de longitud fija llamado digest. La misma entrada siempre da el mismo digest. Una entrada distinta da uno completamente diferente. Y no hay forma de ejecutar la función al revés para recuperar la entrada. Esa es toda la idea: una huella corta y estable que identifica los datos sin contenerlos.

Dale la palabra hash a SHA-256 y obtienes 64 caracteres hexadecimales. Dale las obras completas de Shakespeare y obtienes 64 caracteres hexadecimales. No le des nada en absoluto y sigues obteniendo 64 caracteres hexadecimales, todos distintos entre sí.

Qué diferencia a una función hash de cualquier otra función

Cinco propiedades, y las dos últimas son las que separan un hash criptográfico de uno barato:

La propiedad de avalancha es más fácil de creer cuando la ves. Escribe una frase en el generador de hash de esta página, cambia una letra y cada digest de la página se reemplaza por completo. Los cinco algoritmos también discrepan entre sí por completo, algo que conviene ver antes de pasar una tarde preguntándote por qué tu checksum no coincide con el de otra persona.

Por qué dos archivos pueden compartir un hash, y por qué eso está bien

Hay infinitas entradas posibles y exactamente 2256 digests SHA-256 posibles. Las colisiones no son un fallo del diseño; son una certeza matemática. La afirmación de seguridad es más estrecha y más extraña: las colisiones existen, y nadie puede encontrar una.

Para SHA-256 la cifra relevante no es 2256 sino aproximadamente 2128, el punto en el que el problema del cumpleaños te da una probabilidad del cincuenta por ciento de que dos digests aleatorios colisionen. Son unos 340 sextillones de intentos. No es un número al que llegue nadie.

Lo que importa en la práctica es la diferencia entre dos tipos de rotura. Una colisión significa que un atacante construye dos entradas con el mismo digest y puede elegir las dos, algo útil para colar un segundo documento bajo una firma. Una preimagen significa que parte de un digest que ya tienes y encuentra algo que coincide con él. Las colisiones son mucho más fáciles de encontrar, y por eso MD5 y SHA-1 cayeron ante ataques de colisión mucho antes de que nadie se acercara a una preimagen en ninguno de los dos.

Para qué usa la gente los hashes en realidad

Aparte de eso, el "hash" de una tabla hash significa algo relacionado pero mucho más débil. Esas funciones existen para repartir claves entre buckets de forma rápida y uniforme, y son trivialmente reversibles por diseño. Nunca recurras a una de esas cuando necesites las garantías criptográficas de arriba, y nunca recurras a SHA-256 para indexar un diccionario.

Lo que un hash no es

No es cifrado

El cifrado es un viaje de ida y vuelta: una clave convierte el texto plano en texto cifrado y la misma clave lo devuelve. El hashing no tiene clave ni camino de vuelta. El digest de un archivo de 4 GB ocupa 32 bytes, así que casi toda la información se descartó, no se escondió. Si necesitas leer los datos otra vez más adelante, lo que querías era cifrado con una contraseña, no un digest. Quien "hashea" un mensaje para enviarlo en privado simplemente lo destruyó.

No vuelve privados los datos pequeños y predecibles

Calcular el hash de una dirección de correo, un número de teléfono o un número de documento de identidad no anonimiza nada. El atacante no necesita revertir nada: calcula el hash de todos los valores posibles y busca el tuyo. No hay tantos números de teléfono. Las tablas precalculadas lo abaratan todavía más. Un hash solo oculta una entrada que ya era imposible de adivinar desde el principio.

Es la herramienta equivocada para guardar contraseñas por sí sola

Un SHA-256 a secas de una contraseña se calcula rápido, y ese es exactamente el problema: una GPU moderna prueba miles de millones de candidatas por segundo. Guardar contraseñas necesita un salt por usuario para que una sola tabla no pueda atacar todas las cuentas a la vez, y una función construida a propósito para ser lenta. bcrypt, scrypt y Argon2 —este último elegido por la Password Hashing Competition en 2015— son las que hay que usar. Ninguno de los cinco algoritmos de la herramienta de arriba tiene nada que hacer cerca de una base de datos de contraseñas.

¿Qué algoritmo deberías usar?

AlgoritmoDigestVeredicto
SHA-25664 caracteres hexLa opción por defecto. No se conoce ningún ataque práctico.
SHA-512128 caracteres hexMisma familia, palabras de 64 bits. Suele ser más rápido en hardware de 64 bits.
SHA-3variableUn diseño interno distinto, estandarizado en 2015. Un seguro, no una mejora.
SHA-140 caracteres hexColisiones demostradas por CWI Ámsterdam y Google en 2017. No para firmas.
MD532 caracteres hexColisiones desde 2004, segundos en una laptop. Solo para checksums heredados.

Elige SHA-256 a menos que algo te obligue a otra cosa. NIST anunció en diciembre de 2022 que SHA-1 debería estar fuera de uso para finales de 2030, y el plazo es generoso: lleva años sin ser apto para firmas. MD5 y SHA-1 todavía detectan una descarga corrupta, porque nadie tiene un ataque de preimagen práctico contra ninguno de los dos, y siguen sin ofrecer ninguna protección frente a alguien que controlaba el archivo desde el principio.

Qué demuestra realmente un checksum que coincide

Demuestra que los bytes que tienes son los bytes que describía quien publicó ese checksum. Eso es menos de lo que parece. Si el enlace de descarga y el checksum están en la misma página, un atacante que reemplazó el archivo reemplazó el número de debajo en la misma edición. Verificaste el archivo contra sí mismo.

La autenticidad de verdad necesita una firma: un digest firmado con una clave en la que ya confías, comprobado con algo como gpg --verify. El hash sigue haciendo el trabajo ahí dentro —firmar 32 bytes sale barato donde firmar un gigabyte no— pero la confianza viene de la clave, no del digest. Un checksum a secas es una comprobación de consistencia. Trátalo como tal y resulta genuinamente útil.

Si quieres ver todo esto en vez de creerlo por fe, el generador de hash produce los cinco digests a la vez para texto o para un archivo, y acepta un checksum publicado para compararlo, así no tienes que leer 64 caracteres hexadecimales en dos pantallas. No se sube nada: el archivo se lee y se hashea en tu propia computadora.

La propiedad de un solo sentido solo se cumple cuando la entrada era imposible de adivinar, lo que convierte "¿se puede revertir este hash?" en una pregunta completamente distinta sobre cuántas candidatas puede probar un atacante. Cuánto tardarían en descifrar tu contraseña repasa la aritmética, y la diferencia entre el mejor y el peor caso es más grande de lo que espera la mayoría.

Preguntas frecuentes

¿Qué es una función hash en palabras simples?

Es una función que convierte cualquier cantidad de datos en un string corto y de longitud fija llamado digest. La misma entrada siempre da el mismo digest, y cambiar un solo carácter de la entrada cambia el digest entero. No hay forma de volver del digest a los datos originales.

¿Cuál es la diferencia entre hashing y cifrado?

El cifrado es reversible: una clave convierte los datos en texto cifrado y los vuelve a convertir. El hashing es de un solo sentido y no tiene clave, así que los datos originales no se pueden recuperar en absoluto. Usa cifrado cuando necesites leer los datos más adelante, y hashing cuando solo necesites comprobar si dos cosas son idénticas.

¿Se puede revertir un hash?

No directamente. Un digest tiene el mismo tamaño sin importar lo grande que fuera la entrada, así que la mayor parte de la información ya no existe. Los sitios de consulta parecen revertir hashes porque calculan de antemano el hash de miles de millones de entradas probables y buscan una coincidencia, lo que funciona contra valores cortos o comunes y falla por completo contra valores largos y aleatorios.

¿Qué algoritmo de hash debería usar?

SHA-256, a menos que tengas una razón concreta para no hacerlo. Es rápido, está disponible en todos los lenguajes y navegadores, y no tiene ningún ataque práctico en su contra. SHA-512 es una alternativa razonable y suele ser más rápido en hardware de 64 bits a pesar de su salida más larga.

¿Por qué MD5 ya no es seguro?

Se pueden fabricar dos archivos distintos que produzcan el mismo digest MD5 en segundos con hardware corriente, una técnica publicada en 2004. Eso rompe cualquier uso en el que un digest sustituya a un documento, como una firma. MD5 todavía detecta una descarga corrompida por accidente, porque encontrar una entrada para un digest que no elegiste tú sigue siendo impracticable.

¿Es seguro guardar contraseñas con un hash SHA-256?

No. SHA-256 está hecho para ser rápido, y una tarjeta gráfica puede probar miles de millones de intentos por segundo contra él. Guardar contraseñas necesita un salt por usuario y una función deliberadamente lenta como bcrypt, scrypt o Argon2.

Última actualización 19 de septiembre de 2026