¿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:
- 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.
- No añadas salts manuales. No intentes inventar tu propio esquema de hash concatenando cadenas arbitrarias. Bcrypt ya se encarga del salt internamente.
- 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
System Design: escalar a un millón de usuarios
Añadir servidores no basta: un mapa de System Design, etapa por etapa, de por qué los sistemas se caen en un día grande y cómo se recorta la carga antes de que llegue a la base de datos.
¿SQL o NoSQL?
Responde seis preguntas y te diré qué tipo de base de datos encaja con tu proyecto, y por qué.
Sigue leyendo
- CZESDentro de PHP CVE-2026-115560: el desajuste entre Session Upload Progress y el serialize handler
Dentro de PHP CVE-2026-115560: el desajuste entre Session Upload Progress y el serialize handler
24 de octubre de 2026 · 4 min de lectura - CZES¿Qué es una vulnerabilidad IDOR? Autenticación vs. autorización y cómo prevenir BOLA
¿Qué es una vulnerabilidad IDOR? Autenticación vs. autorización y cómo prevenir BOLA
24 de octubre de 2026 · 3 min de lectura