FlowingDev

Fortaleza de contraseñas, explicado: el ingrediente secreto de tu secreto es... la matemática

Aprende cómo se mide la fortaleza de una contraseña usando entropía, un concepto de la teoría de la información que cuantifica la imprevisibilidad y estima el tiempo de crackeo.

Probar la herramienta: Fortaleza de contraseña

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:

  • N es el número de caracteres posibles en el conjunto de caracteres (el grupo de símbolos que puedes elegir).
  • L es 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.

  1. División en trozos (Chunking): Dividen la contraseña en trozos. Tr0ub4dor&3! se convierte en Tr0ub4dor, &, 3, !.
  2. Coincidencia de patrones: Analizan cada trozo contra múltiples patrones:
    • Palabras de diccionario: ¿Está troubador en un diccionario de inglés? (Sí). ¿Es común? (Sí).
    • Sustituciones comunes: ¿Se parece Tr0ub4dor a troubador con o -> 0 y a -> 4? (Sí).
    • Patrones de teclado: ¿Es una secuencia como qwerty o asdfg?
    • Fechas: ¿Se parece a 1999 o 2024?
    • Caracteres repetidos: ¿Es algo como aaaaaa?
  3. 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 password no es 8 * log₂(52); está más cerca de log₂(20000), ya que es un intento de una lista de las 20.000 contraseñas más comunes.
  4. 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-staple obtiene una puntuación mucho más alta que Tr0ub4dor&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 unidas es 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_caracteres y 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

Teoría lista. Hora de ensuciarse las manos — 100% en tu navegador.

Probar la herramienta: Fortaleza de contraseña