“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.
Antes de hablar de qué hace segura una contraseña, hay que entender cómo las rompen los atacantes. Hay tres métodos principales:
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.
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:
Estos números cambian todo el análisis sobre qué hace segura una contraseña.
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.
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:
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.
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.
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 universoPero 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 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:
Passwordpassword123password!password2024Las 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.
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:
Password1!, Password2!, Password3! para distintos sitios.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 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.
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:
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.
La respuesta depende de cómo se va a usar la contraseña y con qué tipo de hash está almacenada:
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.
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:
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:
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.
Cuando un analista de riesgo presenta un nuevo scorecard ante el comité de dirección, la…
Si revisáis código o documentación de otros programadores, tarde o temprano os toparéis con dos…
Los dos artículos anteriores cubrieron el CLV clásico —una fórmula útil pero que trata a…
Hay un momento muy concreto en la vida de casi todo análisis: el código que…
Has construido un nuevo modelo de credit scoring. Las métricas de validación son mejores que…
Comparar dos hipotecas parece sencillo: la que tenga el TIN más bajo es la mejor…
This website uses cookies.