Escritos

El eslabón más débil de tu sistema: la falacia de MD5 y el hash seguro de contraseñas

Guardar contraseñas en texto plano o con MD5 en tu base de datos es un error enorme. Para evitar que se descifren en segundos con rainbow tables, hay que aceptar que la velocidad es una vulnerabilidad.

Furkan Özay18 de septiembre de 2026 · 3 min de lectura
czCZAY.DEV // EDITORIALES
DATABASE INTERNALS

#Veritabanı · 3 MIN DE LECTURA

FURKAN ÖZAYVOL. 2026 // #1A85

¿Cuál es el eslabón más débil de tu sistema? ¿Tu base de datos o tu arquitectura de cifrado? No: la mayoría de las veces, la mayor debilidad es la propia arquitectura con la que haces el hash de las contraseñas. Guardar la contraseña de un usuario en texto plano (como "123456") compromete todo el sistema.

La falacia de MD5

Guardar las contraseñas aplicándoles un "hash" es obviamente necesario, pero usar algoritmos antiguos como MD5 no te protege: solo da una falsa sensación de seguridad. Algoritmos como MD5 se diseñaron a propósito para ejecutarse muy rápido. Esa velocidad es una enorme ventaja para un atacante. Gracias a las enormes Rainbow Tables disponibles libremente en internet, miles de millones de contraseñas con hash MD5 pueden revertirse y descifrarse en segundos. El tiempo de descifrado es literalmente de unos 0,01 segundos.

La solución: salt y Bcrypt

La solución a este problema es sencilla: la misma contraseña debe producir un resultado distinto. A la contraseña de cada usuario se le añade un salt completamente aleatorio. Así, aunque dos usuarios elijan exactamente la misma contraseña ("admin123"), los valores guardados en la base de datos son totalmente diferentes. Este método deja las Rainbow Tables precalculadas completamente inservibles.

Pero el salt por sí solo no basta. La velocidad es una vulnerabilidad. Por ejemplo, SHA-256 puede generar decenas de miles de millones de hashes por segundo, lo que sigue siendo una velocidad fantástica para un atacante. Bcrypt, en cambio, se ralentiza deliberadamente para garantizar la seguridad. Un retraso extra de 200 milisegundos en el servidor no supone una carga para tu sistema ni para un usuario normal, pero alarga el trabajo de un atacante, que necesita probar miles de millones de combinaciones, a años o incluso siglos.

Estándares de ingeniería

Los verdaderos estándares de ingeniería se reducen a unas pocas reglas sencillas:

  1. No uses MD5 ni SHA. El estándar para guardar contraseñas exige algoritmos como Bcrypt, Argon2 o PBKDF2. Bcrypt es el estándar de facto en la mayoría de los lenguajes.
  2. No añadas salts manuales. No intentes inventar tu propio esquema de hash concatenando cadenas arbitrarias. Bcrypt ya se encarga del salt internamente.
  3. No inventes tu propio algoritmo. El concepto de "crea el tuyo propio" no funciona en el mundo de la seguridad. Confía en estándares probados de la industria.

Nota: Correos de contraseña olvidada

Si la función de "Olvidé mi contraseña" de un sistema alguna vez te envía por correo tu contraseña anterior en texto plano, ese sistema guarda tus contraseñas en texto plano (o en un formato reversible). ¡Eso es una enorme señal de alarma sobre su arquitectura!

Para terminar

La seguridad de tus datos empieza con una buena arquitectura. Tampoco deberías conocer la contraseña del usuario (incluidos los administradores del sistema). Ralentiza tus datos a propósito y ¡frena en seco a los atacantes!

Hoja de ruta y herramienta interactivas

Sigue leyendo