En una frase
La fortaleza de una contraseña mide cuánta adivinanza (o "entropía") necesita un atacante para crackear tu secreto, traduciendo ese esfuerzo computacional bruto en una estimación de tiempo comprensible para los humanos.
El problema que resuelve
Al principio, existían las computadoras, y tenían datos, y eso era bueno. Pero luego otras personas quisieron ver esos datos, así que inventamos la contraseña. Al comienzo, las cosas eran simples. root, admin, guest. Se trataba menos de seguridad y más de un control de acceso básico, como un archivador con una cerradura endeble.
Luego llegó el internet. De repente, esas computadoras ya no estaban solo en una habitación cerrada; estaban conectadas a todas las demás computadoras del planeta. La cerradura endeble ahora protegía la puerta de entrada a tu vida digital, y los atacantes se estaban volviendo muy buenos en forzarla.
Primero vino el ataque de fuerza bruta: intentar cada combinación posible. 'a', 'b', 'c', ... 'aa', 'ab', ... y así sucesivamente. Esto funciona, pero es lento. Así que los atacantes se volvieron más listos. Se dieron cuenta de que los humanos somos perezosos y predecibles. Esto llevó al ataque de diccionario: en lugar de intentar axfsvj, ¿por qué no probar con password, sunshine o 123456? Fue devastadoramente efectivo.
Los administradores de sistemas contraatacaron con políticas: "¡Tu contraseña debe tener 8 caracteres de largo y contener un número y una letra mayúscula!". Los usuarios, siempre tan creativos para seguir las reglas, respondieron con Password1, Password2, y el clásico atemporal P@$$w0rd1. Las reglas de complejidad crearon una falsa sensación de seguridad.
Necesitábamos una mejor manera de medir la calidad de una contraseña. No marcando casillas de tipos de caracteres, sino midiendo su aleatoriedad real e impredecible. Necesitábamos una forma de cuantificar qué tan "difícil de adivinar" es. Ahí es donde entra el concepto de fortaleza de la contraseña, arraigado en el campo matemático de la teoría de la información. Proporciona una métrica formal —la entropía— para estimar cuánto tiempo puede resistir una contraseña el ataque de un adversario decidido con una supercomputadora.
Cómo funciona bajo el capó
En esencia, la estimación de la fortaleza de una contraseña es un juego de números. Estamos tratando de calcular el tamaño del pajar en el que un atacante tiene que buscar para encontrar tu única aguja que es la contraseña.
### Entropía: el número mágico
La unidad de medida para la fortaleza de una contraseña es la entropía, medida en "bits". En la teoría de la información, la entropía es una medida de incertidumbre o aleatoriedad. Para las contraseñas, cuantifica qué tan impredecible es tu contraseña.
La fórmula básica es hermosamente simple:
Entropía = log₂(Espacio de Búsqueda)
El "Espacio de Búsqueda" es el número total de contraseñas posibles dadas ciertas reglas. Para una contraseña simple generada aleatoriamente, el espacio de búsqueda se calcula como:
Espacio de Búsqueda = N ^ L
Donde:
Nes el número de caracteres posibles en el conjunto de caracteres (el grupo de símbolos que puedes elegir).Les la longitud de la contraseña.
Volvamos a meter eso en la fórmula principal: Entropía = log₂(N ^ L), que se simplifica a Entropía = L * log₂(N).
Algunos tamaños comunes de conjuntos de caracteres (N):
- Solo números (
0-9):N = 10 - Letras minúsculas en inglés (
a-z):N = 26 - Letras mayúsculas y minúsculas en inglés (
a-z,A-Z):N = 52 - Alfanuméricos + mayúsculas/minúsculas (
a-z,A-Z,0-9):N = 62 - Todos los símbolos del teclado ASCII:
N ≈ 95
Entonces, para una contraseña de 8 caracteres que solo usa letras minúsculas, la entropía es 8 * log₂(26), que es aproximadamente 8 * 4.7 = 37.6 bits.
¿Pero qué significa realmente "37.6 bits"? Cada bit de entropía duplica el espacio de búsqueda. Por lo tanto, una contraseña con 38 bits de entropía es el doble de difícil de crackear que una con 37 bits. Este crecimiento exponencial es la razón por la que agregar solo uno o dos caracteres aleatorios puede aumentar drásticamente la fortaleza.
### De la entropía al tiempo de crackeo
Los bits son geniales para las computadoras, pero los humanos pensamos en minutos, años y eones. Para obtener una estimación del tiempo de crackeo, necesitamos un ingrediente más: la velocidad de adivinanza del atacante.
Esto es muy variable. Un ataque online (adivinando contra un formulario de inicio de sesión en vivo) podría estar limitado a 10 intentos por segundo. Pero un escenario más realista es un ataque offline, donde el atacante ha robado una base de datos de hashes de contraseñas. Con GPUs modernas, pueden realizar miles de millones o incluso billones de hashes por segundo.
Supongamos que un atacante poderoso puede hacer 10 mil millones (10¹⁰) de intentos por segundo. El número de intentos necesarios para garantizar encontrarla es 2^Entropy. En promedio, la encontrarán a la mitad del camino, por lo que podemos estimar el tiempo:
Tiempo de Crackeo = (2^Entropía / 2) / IntentosPorSegundo
Así es como la cosa escala rápidamente:
| Entropía (bits) | Intentos Totales | Tiempo Prom. de Crackeo @ 10¹⁰ H/s | Nivel de Seguridad |
|---|---|---|---|
| 30 | ~1 mil millones | < 0.1 segundos | Trivial |
| 40 | ~1 billón | ~1 minuto | Muy Débil |
| 50 | ~1 mil billones | ~15 horas | Débil |
| 60 | ~1 trillón | ~1.8 años | Aceptable |
| 70 | ~1 mil trillones | ~1,800 años | Fuerte |
| 80 | ~1 cuatrillón | > Edad del universo | Muy Fuerte |
Esta tabla muestra por qué incluso unos pocos bits extra de entropía marcan una diferencia colosal.
### Más allá de la fuerza bruta: el problema de los patrones
La fórmula simple L * log₂(N) tiene un gran defecto: asume que cada caracter se elige con una aleatoriedad perfecta. Los humanos no funcionamos así. Usamos palabras, fechas y sustituciones predecibles. P@$$w0rd1 no es una secuencia aleatoria de 9 caracteres ASCII.
Aquí es donde los estimadores modernos de fortaleza de contraseñas se vuelven realmente ingeniosos. Los mejores, como la famosa librería de Dropbox zxcvbn, no solo calculan la entropía de forma ingenua. Actúan como un atacante e intentan encontrar la forma más "barata" de construir tu contraseña.
- División en trozos (Chunking): Dividen la contraseña en trozos.
Tr0ub4dor&3!se convierte enTr0ub4dor,&,3,!. - Coincidencia de patrones: Analizan cada trozo contra múltiples patrones:
- Palabras de diccionario: ¿Está
troubadoren un diccionario de inglés? (Sí). ¿Es común? (Sí). - Sustituciones comunes: ¿Se parece
Tr0ub4doratroubadorcono->0ya->4? (Sí). - Patrones de teclado: ¿Es una secuencia como
qwertyoasdfg? - Fechas: ¿Se parece a
1999o2024? - Caracteres repetidos: ¿Es algo como
aaaaaa?
- Palabras de diccionario: ¿Está
- Análisis de costo: Calculan la entropía para cada trozo basándose en su patrón. Una palabra común de diccionario tiene una entropía mucho menor que una cadena aleatoria de la misma longitud. La entropía de
passwordno es8 * log₂(52); está más cerca delog₂(20000), ya que es un intento de una lista de las 20.000 contraseñas más comunes. - Suma: Suman la entropía de los trozos más "baratos" para obtener una estimación de fortaleza realista y probada en batalla. Es por esto que
correct-horse-battery-stapleobtiene una puntuación mucho más alta queTr0ub4dor&3, aunque esta última "parezca" más compleja.
Historias del mundo real
### La política corporativa que salió por la culata
Una empresa de tecnología mediana implementó una nueva y estricta política de contraseñas: mínimo 10 caracteres, una mayúscula, un número, un símbolo. El objetivo era forzar contraseñas de alta entropía. Lo que obtuvieron fue una plantilla de usuarios creando contraseñas como Verano2024!, Otoño2024! y Invierno2025!. Un medidor de fortaleza ingenuo les daría una puntuación decente. Pero cuando un atacante comprometió una cuenta de bajo nivel y aprendió el patrón, no necesitaron aplicar fuerza bruta a nada. Simplemente escribieron un script para probar cada combinación de estación y año, y rápidamente obtuvieron acceso a docenas de cuentas.
Lección: La complejidad forzada a menudo genera patrones predecibles. Un buen medidor de fortaleza debería detectar y penalizar estos esquemas comunes.
### La epifanía de 'Correct Horse Battery Staple' de XKCD
El webcomic XKCD publicó una tira ahora legendaria que ilustra la fortaleza de las contraseñas. Comparaba Tr0ub4dor&3, una contraseña "compleja" típica, con correct horse battery staple, una frase de contraseña de cuatro palabras comunes pero aleatorias. Mientras que Tr0ub4dor&3 es difícil de recordar para un humano, su mezcla de sustituciones y patrones le da una entropía calculable que un cracker dedicado podría devorar en días. La frase de cuatro palabras, sin embargo, es fácil de recordar para un humano. Suponiendo un diccionario de 2048 palabras comunes, su entropía es log₂(2048^4), que es 4 * 11 = 44 bits de entropía significativa. Para crackearla por fuerza bruta, caracter por caracter, un atacante se enfrenta a una cadena de 28 caracteres, una tarea imposible.
Lección: La longitud es a menudo una defensa más poderosa y amigable para el usuario que la complejidad basada en símbolos. Las frases de contraseña son tus amigas.
### La contraseña 'aleatoria' que no lo era
A un desarrollador se le encargó crear un sistema que generara contraseñas iniciales seguras y aleatorias para nuevos usuarios. Usó la función random() por defecto de su lenguaje en un script simple. Las contraseñas se veían geniales: j8sL2!kP. De lo que el desarrollador no se dio cuenta fue que la función random() estándar era un Generador de Números Pseudoaleatorios (PRNG) que se sembraba con la hora del reloj del sistema. Un atacante, después de obtener solo una de estas contraseñas y su marca de tiempo de creación (de un correo electrónico, por ejemplo), pudo descifrar la semilla. Luego pudo regenerar la secuencia completa de contraseñas "aleatorias" para cada usuario creado aproximadamente en el mismo momento.
Lección: La fuente de aleatoriedad importa muchísimo. Para cualquier cosa relacionada con la seguridad, usa siempre un generador de números pseudoaleatorios criptográficamente seguro (CSPRNG), como window.crypto.getRandomValues() en un navegador o /dev/urandom en Linux.
Errores y trampas comunes
- Confundir complejidad con fortaleza.
P@$$w0rd!parece compleja, pero es una contraseña mala reconocida mundialmente.cuatro palabras al azar unidases simple en concepto pero mucho más fuerte en la práctica porque carece de patrones predecibles y es mucho más larga. - Confiar ciegamente en la 'barra verde'. Muchos medidores de fortaleza en la web son peligrosamente ingenuos. Realizan un simple cálculo de
longitud * conjunto_de_caracteresy no verifican diccionarios, patrones o datos de brechas públicas. Una calificación de "fuerte" de un medidor débil es una mentira. - Ignorar el vector de ataque offline. No midas la fortaleza de tu contraseña contra un formulario de inicio de sesión que te bloquea después de tres intentos. Asume que el atacante tiene tu contraseña hasheada y la está atacando con un rack de GPUs en su sótano. Siempre diseña para el peor escenario posible.
- Reutilizar contraseñas. La contraseña más brillante, con 128 bits de entropía, se vuelve inútil en el momento en que se expone en la brecha de datos de otro sitio web. Un atacante no la crackeará; simplemente la buscará en una lista y entrará como si nada.
- Pensar que algo corto está bien si es aleatorio. Una contraseña de 8 caracteres verdaderamente aleatoria que usa todos los símbolos del teclado tiene una entropía decente (~53 bits). Pero "decente" ya no es lo que era. Dado el costo decreciente de la computación, podría ser crackeada en cuestión de semanas o meses. La longitud proporciona un margen de seguridad mucho más cómodo.
Por qué deberías tenerlo en tu radar
Entender la fortaleza de las contraseñas no es solo para profesionales de la seguridad.
Como desarrollador, si estás construyendo cualquier tipo de autenticación, estás en la primera línea de batalla. En lugar de imponer reglas arbitrarias (debe incluir un caracter del alfabeto cirílico que solo se habla los martes), deberías guiar a los usuarios hacia lo que realmente funciona: longitud e imprevisibilidad. Integrar un estimador de fortaleza inteligente puede proporcionar retroalimentación en tiempo real que realmente ayuda a los usuarios, y conocer los principios te permite tomar mejores decisiones de arquitectura (como elegir un algoritmo de hashing lento y costoso como Argon2).
Como usuario, este conocimiento te transforma de un seguidor pasivo de reglas a un defensor activo de tus propios datos. Te da la intuición para crear secretos que son tanto memorables para ti como imposiblemente difíciles para ellos. Es el fundamento teórico para toda tu postura de seguridad digital.
Para profundizar
- NIST Special Publication 800-63B - Las directrices oficiales (y sorprendentemente legibles) del Instituto Nacional de Estándares y Tecnología de EE. UU. sobre identidad digital, incluidas las políticas de contraseñas.
- Fortaleza de la contraseña en Wikipedia - Un resumen completo de los conceptos, fórmulas e historia.
- Entropía (teoría de la información) en Wikipedia - Para una inmersión más profunda en los fundamentos matemáticos de todo esto.
- XKCD 936: Password Strength - El cómic original que cambió la forma en que muchas personas piensan sobre la creación de contraseñas seguras y memorables.
- Repositorio de GitHub de zxcvbn-ts - La implementación moderna en TypeScript del pionero estimador de fortaleza de contraseñas
zxcvbnde Dropbox. Leer su lógica es una clase magistral de análisis de seguridad del mundo real.