Si alguna vez te has preguntado cómo es posible que las grandes plataformas sepan que tu contraseña es correcta sin tenerla guardada en un archivo de Excel llamado secretos.xlsx, bienvenido al maravilloso mundo del hashing.
Si por el contrario, eres de los que piensa que el hashing es lo mismo que el cifrado (encryption), por favor, respira hondo.
Estás a punto de aprender por qué confundir estos términos es el equivalente técnico a intentar abrir una lata de conservas con una cuchara de plástico: frustrante, inútil y peligroso.
Índice de contenidos
¿Qué es el hashing exactamente? (La metáfora de la batidora)
Imagina que metes un chuletón, una patata y una ramita de romero en una batidora industrial. Le das al botón y obtienes un puré marrón con un olor muy específico. Ese puré es el valor hash (hash value).
Cualquiera que vea el puré puede saber que es «tu puré», pero nadie, por mucha tecnología que tenga, puede reconstruir el chuletón original a partir de esa mezcla. Eso es una función unidireccional (one-way function). En el mundo digital, el hashing toma una entrada (input) de cualquier tamaño y la convierte en una cadena de caracteres de longitud fija.
Porque claro, ¿qué podría salir mal guardando las contraseñas tal cual las escribe el usuario? Exacto: todo. Si un atacante entra en tu base de datos y lee «Perrito123», ya tiene la llave de tu casa. Si lee e10adc3949ba59abbe56e057f20f883e, tiene un problema. Bueno, a menos que uses MD5, en cuyo caso el problema lo sigues teniendo tú por usar tecnología de la Edad de Bronce.
Las leyes sagradas de una buena función hash
Para que un algoritmo de hashing sea considerado serio y no un chiste de mal gusto, debe cumplir tres propiedades:
- Determinismo: Si le doy a la batidora los mismos ingredientes hoy y dentro de diez años, el puré tiene que ser exactamente igual.
- Resistencia a colisiones (collision resistance): Es matemáticamente improbable que dos entradas distintas produzcan el mismo hash. Si «Contraseña1» y «Contraseña2» dan el mismo resultado, tenemos una colisión (collision), y tu seguridad acaba de saltar por la ventana.
- Efecto avalancha (avalanche effect): Si cambias una sola letra de un libro de 500 páginas, el hash resultante debe ser totalmente irreconocible comparado con el anterior.
El cementerio de algoritmos: Lo que NO debes usar
Antes de entrar en lo bueno, hablemos de los «zombis» de la ciberseguridad que deberías evitar a toda costa:
- MD5 (Message Digest 5): Es rápido. Muy rápido. Tan rápido que un atacante con un portátil de hace cinco años puede generar miles de millones de hashes por segundo para romper tus contraseñas mediante fuerza bruta (brute force). Hoy en día, MD5 es tan seguro como cerrar tu casa con un trozo de hilo dental.
- SHA-1: El hermano mayor de MD5. Fue el estándar durante años hasta que se demostró que se podían generar colisiones de forma «económica». Si todavía lo usas, estás viviendo en una negligencia técnica constante.
Los algoritmos recomendados (El plato fuerte)
Aquí es donde nos ponemos serios. No todos los hashes sirven para todo. Dependiendo de si quieres verificar la integridad de un archivo o proteger una contraseña, elegirás un arma distinta.
1. Argon2 (El Rey de las contraseñas)
Si estás desarrollando una aplicación en 2025, Argon2id es el estándar de oro. Ganó la Password Hashing Competition y por buenas razones:
- Resistencia a GPU/ASIC: Está diseñado para que sea costoso de ejecutar no solo en tiempo, sino también en memoria (RAM). Esto significa que un hacker no puede simplemente alquilar una granja de tarjetas gráficas para reventar tus hashes; le costaría una fortuna en hardware.
- Configurable: Puedes ajustar qué tan «pesado» es el proceso según la potencia de tu servidor.
2. bcrypt
Un clásico que se niega a morir. Se basa en el cifrado Blowfish y tiene una característica maravillosa: el factor de trabajo (work factor) o coste. A medida que los ordenadores se vuelven más rápidos, tú simplemente subes el «coste» en la configuración y el algoritmo se vuelve más lento para compensar. Es como ponerle pesas a la batidora para que al atacante le cueste más girar la manivela.
3. SHA-256 (Parte de la familia SHA-2)
Es el estándar para verificar la integridad de datos (data integrity) y se usa en tecnologías como Bitcoin.
- ¿Cuándo usarlo? Es perfecto para verificar que un archivo de 4GB que te has descargado no ha sido modificado.
- El matiz: Para contraseñas es demasiado rápido. Si lo usas solo, un atacante podrá probar trillones de combinaciones por segundo.
Laboratorio de Hash: Manos a la consola
Ha llegado el momento de que dejes de creerme ciegamente y lo veas por ti mismo. Saca tu terminal y prepárate para jugar con los datos.
Práctica 1: La prueba del algodón con sha256sum
Casi todos los sistemas Linux/Mac tienen utilidades de hash integradas. Vamos a crear un archivo y ver su «huella»:
# Creamos un archivo con un secreto
echo "Mi jefe sigue usando Internet Explorer" > secreto.txt
# Generamos el hash SHA-256
sha256sum secreto.txtBashAhora, prueba a cambiar una sola letra del archivo y repite el comando. Verás que el código resultante no se parece en nada. Eso es el efecto avalancha.
Práctica 2: Scripting profesional en Python
Si quieres ver cómo se gestionaría esto en una aplicación real, Python es tu mejor amigo. No necesitas instalar nada, la librería hashlib ya viene incluida.
Copia y pega esto en tu intérprete de Python:
import hashlib
import os
password = "mi_password_seguro".encode()
# Generamos una "Sal" (Salt) aleatoria de 16 bytes
# Esto evita ataques de tablas arcoíris (rainbow tables)
salt = os.urandom(16)
# Usamos PBKDF2 (un estándar robusto) con SHA-256
key = hashlib.pbkdf2_hmac('sha256', password, salt, 100000)
print(f"Sal (en hex): {salt.hex()}")
print(f"Hash resultante: {key.hex()}")Python¿Qué acabas de hacer? Has aplicado salado (salting). Incluso si otro usuario tuviera tu misma contraseña, al tener una «sal» distinta, el hash guardado en la base de datos sería totalmente diferente. Esto es lo que separa a los adultos de los niños en ciberseguridad.
Checklist para no acabar en las noticias por un leak
- ¿Usas Argon2 o bcrypt para contraseñas? (Si usas MD5, borra el código y pide perdón).
- ¿Añades una «sal» (salt) aleatoria por cada usuario?
- ¿El «factor de coste» está actualizado? (Un hash debería tardar unos 100-200ms en generarse).
- ¿Diferencias hashing de cifrado? (Recuerda: el hash no se «descifra», se compara).
Conclusión
El hashing no es magia, es la barrera matemática que impide que un becario curioso o un hacker profesional se lleven la vida digital de tus usuarios en un pendrive. Usar algoritmos obsoletos es como poner una puerta blindada pero dejar la llave puesta por fuera. Implementa Argon2, añade sal a todo (menos a tu café) y duerme tranquilo.