Así funcionan los ataques de fuerza bruta

Por qué importa la longitud: ejemplos de cálculo y contramedidas.

En los ataques de fuerza bruta, los atacantes intentan adivinar una contraseña probando sistemáticamente todas las combinaciones de caracteres posibles. La idea subyacente es sencilla: probar el mayor número posible de combinaciones por segundo, idealmente en GPU o en sistemas distribuidos. También se habla de una búsqueda exhaustiva (exhaustive search).

En la práctica, lamentablemente, estos ataques suelen tener éxito porque muchas contraseñas son demasiado cortas, se limitan a unos pocos grupos de caracteres (solo letras) o aparecen en listas de palabras. Esto reduce drásticamente el espacio de búsqueda y hace que sea más fácil adivinarla. Aún más importante: se distingue entre ataques en línea (contra formularios de inicio de sesión, donde ayudan la limitación de intentos y el bloqueo de cuentas) y ataques fuera de línea (contra hash de contraseñas robadas, donde la función hash y la fuerza de la contraseña determinan el tiempo de ataque).

Descifrar contraseñas (offline) ≠ «descifrar»

Las contraseñas no se descifran, sino que se almacenan como valores hash y luego se buscan con tentativas + hash</ em> (fuerza bruta, ataques de diccionario/máscara). La velocidad de cálculo del hardware moderno se encuentra en el rango de miles de millones por segundo (para procesos hash rápidos), por lo que las contraseñas hash largas y con lentos (por ejemplo, Argon2, scrypt, PBKDF2, bcrypt) son decisivas.

Combinación y longitud de la contraseña

Los siguientes ejemplos muestran la influencia de la longitud y la selección de caracteres. A modo ilustrativo, se calculan 2000 millones de intentos por segundo (ordenador individual muy potente; los valores reales varían mucho en función del hardware y, en el caso offline, del método de hash).

Grupos de caracteres típicos:

  • Números (10: 0-9)
  • Letras (52: A-Z y a-z)
  • Caracteres especiales (≈ 32; depende del conjunto de caracteres permitido por el servicio)

El número de combinaciones posibles se calcula de la siguiente manera:

Combinaciones posibles = (conjunto de caracteres)longitud de la contraseña

Importante: la tabla muestra el tiempo de búsqueda máximo. Por promedio, el tiempo real es aproximadamente la mitad. Además, los ataques de diccionario, de reglas y de máscara reducen considerablemente el espacio de búsqueda, mientras que los métodos de hash de contraseñas lentos reducen drásticamente la tasa efectiva.

La contraseña consta de Posibles combinaciones (fórmula) Tiempo necesario (a 2 mil millones/s)

5 caracteres
(3 letras minúsculas,
2 números)

( 53) × 263 × 102 =
17 576 000

17 576 000 / 2 000 000 000 =
0,008788 segundos

7 caracteres
(1 mayúscula,
6 minúsculas)

( 71) × 261+6 =
56 222 671 232

56 222 671 232 / 2 000 000 000 =
28,111335616 segundos

8 caracteres
(4 letras minúsculas,
2 caracteres especiales,
2 números)

( 84) × ( 42 ) × 264 × 322 × 102 =
19 653 623 808 000

19 653 623 808 000 / 2 000 000 000 =
9 826,811904 segundos =
≈ 2,73 horas

9 caracteres
(2 mayúsculas,
3 minúsculas,
2 números,
2 caracteres especiales)

( 92 ) × ( 73) × ( 42 ) × 262+3 × 102 × 322 =
9.197.895.942.144.000

9.197.895.942.144.000 / 2.000.000.000 =
4.598.947,971072 segundos =
≈ 53,23 días

12 caracteres
(3 mayúsculas,
4 minúsculas,
3 caracteres especiales,
2 números)

( 123) × ( 94 ) × ( 53) × 263+4 × 323 × 102 =
7.295.525.784.083.496.960.000

7.295.525.784.083.496.960.000 / 2.000.000.000 =
3.647.762.892.041,74848 segundos =
≈ 115 590,63 años

14 caracteres
(4 mayúsculas,
4 minúsculas,
3 números,
3 caracteres especiales)

( 144 ) × ( 104) × ( 63 ) × 264+4 × 103 × 323 =
28 768 690 008 569 256 345 600 000

28 768 690 008 569 256 345 600 000 / 2 000 000 000 =
14 384 345 004 284 628,1728 segundos =
≈ 455 812 387,64 años

Conclusión: Cada carácter adicional multiplica el espacio de búsqueda. La longitud prevalece sobre las reglas de complejidad, especialmente contra ataques offline, siempre que los servicios utilicen algoritmos hash adecuados y lentos con sal.

Protección contra ataques de fuerza bruta

La medida de usuario más eficaz es una contraseña maestra larga y aleatoria o una frase de contraseña (por ejemplo, varias palabras aleatorias), única para cada servicio. Password Depot ayuda a generarla y muestra un tiempo de ataque estimado, que tiene en cuenta, además de la longitud y el conjunto de caracteres, las vulnerabilidades del diccionario.

  • Activar MFA/2FA (por ejemplo, aplicación TOTP o token de hardware); cuando sea posible, las claves de acceso son aún mejores. Véase las indicaciones de la BSI.
  • No reciclar contraseñas. Cada cuenta necesita una contraseña propia y segura.
  • Longitud en lugar de complejidad obligatoria. Los servicios deben permitir contraseñas/frases de contraseña largas (mínimo 64 caracteres) y bloquear las contraseñas comprometidas (lista negra).
  • Procedimientos de hash lentos en el lado del servidor (por ejemplo, Argon2, scrypt, PBKDF2, bcrypt) con salt y factores de trabajo adecuados; los hash rápidos como MD5/SHA-1 no son no son adecuados para el almacenamiento de contraseñas.
  • Limitación de velocidad/restricción y bloqueos: los ataques en línea deben frenarse mediante un número limitado de intentos fallidos, tiempos de espera progresivos y, si es necesario, CAPTCHA.

Además, Password Depot dificulta los intentos de tasa en línea bloqueando brevemente la máscara de entrada de la contraseña maestra después de entradas incorrectas, con un tiempo de espera cada vez mayor en caso de intentos fallidos repetidos.

Fuentes adicionales