Criptografía

Por Qué las Contraseñas Largas son más Seguras que las Complejas

“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ácterCaracteres disponibles
Solo minúsculas (a-z)26
Minúsculas + mayúsculas52
Minúsculas + mayúsculas + números62
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ños
  • correcthorsebatterystaple: 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:

  1. Reutilizar contraseñas: la misma contraseña “compleja” en 20 sitios distintos. Si uno es vulnerado, todos caen.
  2. Hacer mínimas variaciones: Password1!, Password2!, Password3! para distintos sitios.
  3. Escribirlas en un papel o en notas del teléfono: eliminando cualquier ventaja de seguridad.
  4. 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ñaEjemploEntropíaTiempo estimado
8 chars, solo minúsculaspassword37,6 bitsSegundos (diccionario)
8 chars, compleja predecibleP@ssw0rd52,4 bitsSegundos (diccionario)
8 chars, aleatoria completaxK#9mP2!52,4 bitsSemanas
12 chars, solo minúsculas aleatoriasqztmvbkrxpln56,4 bitsMeses
4 palabras dicewarecorrect horse battery staple51,7 bitsDécadas
6 palabras dicewarelamp correct tower blue fish river77,4 bitsBillones de años
20 chars aleatorios, completoxK#9mP2!vR@5nL&8qT$w131 bitsMá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:

  1. Larga: mínimo 12-15 caracteres, idealmente más
  2. Aleatoria: generada por un software, no por tu cabeza
  3. Ú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.

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

Gini, KS y AUC: Cómo Medir la Calidad de un Modelo de Credit Scoring

Cuando un analista de riesgo presenta un nuevo scorecard ante el comité de dirección, la…

2 días ago

Curiosidad: De dónde vienen foo, bar y foobar

Si revisáis código o documentación de otros programadores, tarde o temprano os toparéis con dos…

7 días ago

BG/NBD + Gamma/Gamma: el modelo probabilístico para CLV en compras continuas

Los dos artículos anteriores cubrieron el CLV clásico —una fórmula útil pero que trata a…

1 semana ago

Errores habituales al trabajar con DataFrames grandes en Pandas (y cómo evitarlos)

Hay un momento muy concreto en la vida de casi todo análisis: el código que…

2 semanas ago

Champion vs Challenger: Cómo los Bancos Validan Modelos Nuevos antes de Ponerlos en Producción

Has construido un nuevo modelo de credit scoring. Las métricas de validación son mejores que…

2 semanas ago

Cómo Comparar Dos Hipotecas con Todos los Gastos Incluidos

Comparar dos hipotecas parece sencillo: la que tenga el TIN más bajo es la mejor…

3 semanas ago

This website uses cookies.