“Tu contraseña debe tener al menos 8 caracteres, una mayúscula, un número y un símbolo especial.”
Este requisito, que encuentras en casi cualquier web, está basado en una intuición errónea sobre cómo funcionan los ataques a contraseñas. El resultado es que millones de personas usan contraseñas como P@ssw0rd! o Tr0ub4dor&3 creyendo que son seguras, cuando en realidad son bastante fáciles de romper para un atacante con las herramientas adecuadas.
La contraseña correct horse battery staple, cuatro palabras aleatorias en minúsculas sin ningún símbolo especial, es órdenes de magnitud más segura. Y más fácil de recordar.
Este artículo explica por qué, usando los conceptos de entropía, fuerza bruta y rainbow tables. Al final entenderás exactamente cuánto tiempo tardaría un atacante en romper distintos tipos de contraseñas, y qué deberías hacer con las tuyas. Puedes calcular la entropía de cualquier contraseña con el generador de contraseñas del laboratorio de Analytics Lane, que muestra los bits de entropía y el tiempo estimado de crackeo en tiempo real.
Cómo se rompen las contraseñas
Antes de hablar de qué hace segura una contraseña, hay que entender cómo las rompen los atacantes. Hay tres métodos principales:
Ataque de diccionario
El atacante prueba palabras comunes, nombres propios, variaciones conocidas y combinaciones frecuentes. Las herramientas modernas como Hashcat tienen diccionarios de miles de millones de contraseñas reales filtradas en brechas de seguridad anteriores.

password, 123456, qwerty, letmein caen en segundos. Pero también caen variaciones predecibles como P@ssw0rd, p4ssw0rd o passw0rd! — los atacantes conocen las sustituciones típicas (a→@, o→0, i→1, e→3) y las aplican automáticamente.
Ataque de fuerza bruta
El atacante prueba sistemáticamente todas las combinaciones posibles de caracteres hasta encontrar la contraseña. La velocidad depende del hardware del atacante y de cómo está almacenada la contraseña.
Con hardware moderno (una GPU de gama alta) se pueden probar:
- Hasta 100.000 millones de combinaciones por segundo contra hashes MD5
- Hasta 10.000 millones por segundo contra SHA-256
- Hasta 100.000 por segundo contra bcrypt (diseñado específicamente para ser lento)
Estos números cambian todo el análisis sobre qué hace segura una contraseña.
Rainbow tables
Una rainbow table es una tabla precomputada que asocia hashes con sus contraseñas originales. En lugar de calcular el hash de cada contraseña durante el ataque, el atacante simplemente busca el hash en la tabla.
Si tu contraseña es password y el sistema la guarda como el hash SHA-256 5e884898da..., un atacante con una rainbow table encuentra la contraseña original en milisegundos. Las rainbow tables cubren todas las contraseñas de hasta cierta longitud con ciertos alfabetos.
La defensa contra las rainbow tables es el salt, un valor aleatorio único que se añade a cada contraseña antes de calcular el hash. Con salt, aunque dos usuarios tengan la misma contraseña, sus hashes son distintos y las rainbow tables precomputadas son inútiles.
Entropía: la medida real de la seguridad
La entropía es la medida correcta de cuánto tiempo tardaría un atacante en romper una contraseña por fuerza bruta. Se mide en bits y se calcula como: H = L \times \log_2(N) donde:
- H es la entropía en bits
- L es la longitud de la contraseña
- N es el tamaño del alfabeto, el número de caracteres posibles
Cada bit adicional de entropía dobla el tiempo necesario para romper la contraseña por fuerza bruta. Con 10 bits de entropía hay 2^{10} = 1.024 combinaciones posibles. Con 20 bits hay 2^{20} = 1.048.576. Con 60 bits hay 2^{60} \approx 1.000 billones.
El alfabeto importa menos de lo que parece
Veamos cómo contribuye cada tipo de carácter al tamaño del alfabeto:
| Tipo de carácter | Caracteres disponibles |
|---|---|
| Solo minúsculas (a-z) | 26 |
| Minúsculas + mayúsculas | 52 |
| Minúsculas + mayúsculas + números | 62 |
| Minúsculas + mayúsculas + números + símbolos (~32 símbolos) | ~94 |
La diferencia entre usar solo minúsculas (26 caracteres) y usar el alfabeto completo con símbolos (94 caracteres) es un factor de 94/26 ≈ 3,6 por carácter. En términos de bits de entropía, añadir símbolos aporta: \log_2(94) - \log_2(26) = 6,55 - 4,70 = 1,85 \text{ bits por carácter}
Menos de 2 bits adicionales por carácter. Que el atacante tenga que probar 94 combinaciones por posición en lugar de 26 es una mejora modesta.
La longitud importa mucho más
Añadir un carácter a la contraseña multiplica el espacio de búsqueda por el tamaño del alfabeto. Con minúsculas solamente (26 caracteres), cada carácter adicional multiplica el espacio por 26, equivalente a 4,70 bits adicionales de entropía.
Comparemos dos contraseñas:
P@ssw0rd!— 9 caracteres con el alfabeto completo (94 caracteres): H = 9 \times \log_2(94) \approx 9 \times 6,55 = 58,9 \text{ bits}correcthorsebatterystaple— 25 caracteres solo minúsculas (26 caracteres): H = 25 \times \log_2(26) \approx 25 \times 4,70 = 117,5 \text{ bits}
La segunda contraseña tiene el doble de entropía aunque use solo minúsculas. Con 100.000 millones de intentos por segundo:
P@ssw0rd!: tiempo esperado para romper por fuerza bruta ≈ 1,5 añoscorrecthorsebatterystaple: tiempo esperado ≈ $2^{117}$ segundos ≈ más tiempo que la edad del universo
Pero espera, P@ssw0rd! tampoco tardaría 1,5 años en la práctica. Un diccionario la encontraría en milisegundos porque es exactamente el tipo de contraseña que los atacantes conocen y buscan primero.
El problema de las contraseñas “complejas” predecibles
El requisito de mayúsculas, números y símbolos no hace las contraseñas más seguras si los usuarios las crean de forma predecible. Y los humanos somos extremadamente predecibles.
Los patrones más comunes que usan las personas cuando se les exige complejidad:
Sustituciones de letras
- a → @
- o → 0
- i → 1 o !
- e → 3
- s → $
Posición de los elementos
- Mayúscula al inicio:
Password - Números al final:
password123 - Símbolo al final:
password! - Año al final:
password2024
Palabras base
Las contraseñas “complejas” más usadas en el mundo son variaciones de palabras del diccionario con estas sustituciones. Los atacantes lo saben y las tienen en sus diccionarios con todas las combinaciones de sustituciones posibles.
P@ssw0rd! no es más difícil de romper que password para un atacante moderno, simplemente requiere buscar también en el diccionario de variaciones. Proceso que lleva segundos.
La paradoja de la complejidad
Hay otra razón por la que los requisitos de complejidad son contraproducentes: hacen las contraseñas más difíciles de recordar, lo que lleva a comportamientos peores.
Cuando una web exige mínimo 8 caracteres, una mayúscula, un número y un símbolo, los usuarios tienden a:
- Reutilizar contraseñas: la misma contraseña “compleja” en 20 sitios distintos. Si uno es vulnerado, todos caen.
- Hacer mínimas variaciones:
Password1!,Password2!,Password3!para distintos sitios. - Escribirlas en un papel o en notas del teléfono: eliminando cualquier ventaja de seguridad.
- Usar contraseñas más cortas de lo que usarían si no hubiera requisitos: para poder recordarlas.
Una contraseña larga, aleatoria y única para cada sitio, aunque solo use minúsculas, es mejor que una contraseña corta “compleja” reutilizada en todas partes.
El método correcto: palabras aleatorias (diceware)
El método más práctico para crear contraseñas seguras y recordables es el diceware: elegir varias palabras al azar de un diccionario.
correct horse battery staple, cuatro palabras aleatorias, tiene una entropía de aproximadamente:
Si el diccionario tiene 7.776 palabras (la lista diceware estándar): H = 4 \times \log_2(7.776) \approx 4 \times 12,9 = 51,7 \text{ bits}
Con solo cuatro palabras. Con cinco palabras: H = 5 \times 12,9 = 64,6 \text{ bits}
Y con seis palabras: H = 6 \times 12,9 = 77,4 \text{ bits}
77 bits de entropía con seis palabras comunes es prácticamente irrompible por fuerza bruta con la tecnología actual y es perfectamente recordable.
La clave es que las palabras sean realmente aleatorias, no las que se te ocurran a ti. Los humanos somos pésimos generando aleatoriedad. correct horse battery staple parece aleatorio pero si lo eligieras tú mismo probablemente no lo sería, tenderías a elegir palabras relacionadas, palabras que te gustan o palabras que empiezan por la misma letra.
El método correcto es usar dados (de ahí “diceware”) o un generador de contraseñas criptográficamente seguro.
Gestores de contraseñas: la solución real
La conclusión lógica de todo lo anterior es que la mejor contraseña es la que no tienes que recordar, una cadena completamente aleatoria de 20 o más caracteres generada por un gestor de contraseñas.
Un gestor de contraseñas como Bitwarden, 1Password o KeePass:
- Genera contraseñas completamente aleatorias de cualquier longitud
- Las almacena cifradas con tu contraseña maestra
- Las rellena automáticamente en los formularios
- Te permite tener una contraseña única y diferente para cada sitio
Con un gestor de contraseñas solo necesitas recordar una única contraseña maestra, que sí deberías crear con el método diceware de varias palabras aleatorias.
Cuánta entropía necesitas realmente
La respuesta depende de cómo se va a usar la contraseña y con qué tipo de hash está almacenada:
- Para servicios online (login en web): Los servicios online limitan los intentos de login, después de 10 intentos fallidos bloquean la cuenta o añaden un retraso. El atacante no puede hacer 100 millones de intentos por segundo. Con esta limitación, 40-50 bits de entropía son suficientes.
- Para archivos cifrados o hashes robados: Si el atacante tiene el hash de tu contraseña, obtenido en una brecha de seguridad, puede atacar offline sin limitaciones. Aquí la velocidad importa. Con algoritmos modernos de hashing de contraseñas como bcrypt, Argon2 o scrypt, diseñados para ser lentos, incluso los atacantes con hardware potente están limitados a miles de intentos por segundo en lugar de miles de millones. Con bcrypt y 80 bits de entropía, el tiempo de crackeo se mide en miles de millones de años.
- Para la contraseña maestra del gestor de contraseñas: Esta es la más crítica, protege todas las demás. Usa al menos 6 palabras aleatorias (≈77 bits) o una cadena aleatoria de al menos 20 caracteres con el alfabeto completo.
La tabla que resume todo
Con una GPU moderna atacando hashes bcrypt (el escenario más realista para contraseñas robadas de servicios bien configurados):
| Tipo de contraseña | Ejemplo | Entropía | Tiempo estimado |
|---|---|---|---|
| 8 chars, solo minúsculas | password | 37,6 bits | Segundos (diccionario) |
| 8 chars, compleja predecible | P@ssw0rd | 52,4 bits | Segundos (diccionario) |
| 8 chars, aleatoria completa | xK#9mP2! | 52,4 bits | Semanas |
| 12 chars, solo minúsculas aleatorias | qztmvbkrxpln | 56,4 bits | Meses |
| 4 palabras diceware | correct horse battery staple | 51,7 bits | Décadas |
| 6 palabras diceware | lamp correct tower blue fish river | 77,4 bits | Billones de años |
| 20 chars aleatorios, completo | xK#9mP2!vR@5nL&8qT$w | 131 bits | Más que la edad del universo |
La lección es clara: la longitud y la aleatoriedad son lo que importa. La complejidad (mezclar tipos de caracteres) ayuda, pero mucho menos de lo que se suele creer.
Cómo usar el generador de contraseñas del laboratorio
El generador de contraseñas del laboratorio de Analytics Lane genera contraseñas criptográficamente seguras con los parámetros que configures. Pero más útil aún para este artículo: muestra en tiempo real los bits de entropía de la contraseña generada y el tiempo estimado de crackeo con distintos escenarios de ataque.
Prueba estos experimentos:
- Experimento 1 — Longitud vs complejidad: Genera una contraseña de 8 caracteres con todos los tipos activados y otra de 16 caracteres solo con minúsculas. Compara la entropía. La de 16 caracteres tendrá más entropía aunque use un alfabeto más pequeño.
- Experimento 2 — El coste real de los símbolos: Genera contraseñas de la misma longitud con y sin símbolos. Observa cuántos bits adicionales de entropía aportan los símbolos, menos de 2 bits por carácter.
- Experimento 3 — La importancia del algoritmo de hashing: Compara el tiempo estimado de crackeo con MD5 (muy rápido, inseguro) vs bcrypt (lento por diseño). La misma contraseña puede tardar segundos con MD5 y años con bcrypt, la responsabilidad de usar el algoritmo correcto es del servicio, no del usuario.
Conclusiones
La intuición de que una contraseña con mayúsculas, números y símbolos es segura está equivocada, o al menos incompleta. La seguridad de una contraseña depende fundamentalmente de su entropía: cuántas combinaciones posibles tiene. Y la entropía crece mucho más rápido con la longitud que con la complejidad del alfabeto.
Una contraseña larga y aleatoria de palabras comunes es más segura que una contraseña corta llena de símbolos. Y ambas son infinitamente más seguras que cualquier contraseña predecible, independientemente de los requisitos de complejidad que cumpla.
Las tres reglas que realmente importan son:
- Larga: mínimo 12-15 caracteres, idealmente más
- Aleatoria: generada por un software, no por tu cabeza
- Única: diferente para cada sitio
Todo lo demás es secundario. Y la forma más práctica de cumplir las tres reglas a la vez es usar un gestor de contraseñas.
Nota: La imagen de este artículo fue generada utilizando un modelo de inteligencia artificial.
Deja una respuesta