Volver al inicio

Fuerza de la contraseña: Cálculos para desarrolladores

El artículo desglosa la fuerza matemática de la contraseña con cálculos de fuerza bruta, amenazas de ataques de diccionario y recomendaciones de almacenamiento (Argon2, sal). Para desarrolladores: ralentización, 2FA, unicidad. Para usuarios: frase de contraseña y gestores.

Cálculo de la fuerza de la contraseña: Por qué la longitud importa más
Advertisement 728x90

Análisis de Fortaleza de Contraseñas: Cálculos y Recomendaciones para Desarrolladores

Las contraseñas siguen siendo la base de la autenticación por su simplicidad y familiaridad entre los usuarios. Un nombre de usuario identifica una cuenta, mientras que una contraseña confirma el conocimiento de un secreto. A pesar de alternativas como claves de hardware, OTPs, biometría y WebAuthn, las contraseñas aún dominan los sistemas de inicio de sesión de bajo esfuerzo.

Por ejemplo, WebAuthn utiliza cifrado asimétrico: la clave privada permanece en el dispositivo, y el servidor verifica la firma usando la clave pública. Los datos biométricos se almacenan localmente—nunca se envían a servidores—reduciendo así los riesgos de exposición.

Seguridad Real: La Matemática detrás de los Ataques por Fuerza Bruta

Toda contraseña puede ser rota mediante fuerza bruta, pero la seguridad depende de que este proceso sea económicamente inviable. Calculemos los tiempos de ataque para distintas configuraciones.

Google AdInline article slot

Un PIN de 5 dígitos (10^5 = 100,000 combinaciones) tarda segundos a 10 intentos por segundo. Con una botnet de 10,000 dispositivos (100,000 intentos por segundo), robar una contraseña de 5 caracteres con un alfabeto de 36 caracteres (letras + dígitos) toma menos de 9 minutos.

Al ampliar el conjunto de caracteres:

  • 62 caracteres (mayúsculas/minúsculas + dígitos): 62^5 ≈ 916 millones → ~2,5 horas con una botnet.
  • 95 caracteres (incluyendo símbolos especiales): 95^5 ≈ 7,7 mil millones → ~21 horas.

La longitud es el factor clave. Para 8 caracteres con 95 posibles: 95^8 ≈ 6,6×10^15 → más de 2,000 años a 100,000 intentos por segundo. Incluso sin símbolos especiales (62^8 ≈ 2,2×10^14) → ~70 años.

Google AdInline article slot

| Conjunto de Caracteres | Longitud | Combinaciones | Tiempo (100k/sec) |

|------------------------|----------|---------------|-------------------|

| 36 | 5 | 52 millones | 9 minutos |

Google AdInline article slot

| 62 | 5 | 916 millones | 2,5 horas |

| 95 | 5 | 7,7 mil millones | 21 horas |

| 62 | 8 | 218 billones | 70 años |

| 95 | 8 | 6,6 quintillones | 2,000+ años |

El control de tasa es esencial: límites de solicitudes por IP obligan a los atacantes a usar botnets distribuidas, aumentando drásticamente sus costos.

Ataques por Diccionario y Patrones Comunes

El ataque por fuerza bruta completo es ineficiente contra contraseñas largas. El verdadero peligro son los ataques por diccionario y el uso de credenciales robadas.

Ejemplos de contraseñas débiles:

  • Qwertyuio1 — patrón de teclado.
  • Abcdefghi0 — letras secuenciales.
  • P@ssW0rD36 — sustituciones tipo leetspeak.
  • Ghbdtn — disposición QWERTY para "Hola" (en ruso).

Recomendación: Usa frases de contraseña formadas por 4–6 palabras aleatorias (de un diccionario de 20,000 palabras: 20,000^4 = 1,6×10^17 combinaciones → decenas de miles de años para romper). Evita comillas o frases predecibles; usa separadores como guiones o espacios.

Los códigos PIN (4 dígitos) no son seguros por su baja entropía—se protegen mediante límites de intentos (3–10 pruebas) y protección basada en hardware del hash.

Errores Comunes de los Desarrolladores en el Almacenamiento de Contraseñas

Nunca se deben almacenar contraseñas en texto plano. En su lugar, usa algoritmos de hashing potentes como bcrypt, Argon2 o scrypt. Errores frecuentes:

  • Almacenar contraseñas en texto claro o usar hashes débiles como MD5/SHA-1.
  • Ausencia de sal—lo que permite ataques con tablas de arcoíris.
  • Hashing débil sin suficientes iteraciones—facilitando el cracking rápido con GPU.
  • Falta de límites de tasa o protección CAPTCHA.
  • Ignorar verificaciones contra uso de credenciales robadas—no comprobar si pares de inicio de sesión aparecen en bases de datos de filtraciones (por ejemplo, Have I Been Pwned?).

Prácticas recomendadas:

  • Usa Argon2id con parámetros resistentes a memoria.
  • Asigna una sal única por usuario.
  • Implementa límites de tasa (por ejemplo, 5 intentos por minuto por IP).

Recomendaciones Prácticas

Para usuarios:

  • Usa una contraseña única para cada servicio.
  • Apunta a ≥12 caracteres o una frase de contraseña (4+ palabras aleatorias).
  • Usa gestores de contraseñas:

* Solo local (KeePassXC): control total, sincronización manual.

* En la nube (Bitwarden): sincronización automática, protección con contraseña maestra.

  • Activa la autenticación de dos factores (TOTP preferido—evita SMS).

Para desarrolladores:

  • Requiere frases de contraseña o contraseñas mínimas de 16 caracteres.
  • Hashea con Argon2 (p=2, m=64MB, t=3).
  • Aplica límites de tasa con retroceso exponencial.
  • Adopta Passkeys/WebAuthn en nuevos sistemas.
  • Monitorea filtraciones con herramientas como Have I Been Pwned?

Conclusiones Clave

  • Longitud supera complejidad: 95^8 ofrece mucho más fortaleza que 62^12.
  • Límites de tasa + botnets = aumento exponencial de costos para atacantes.
  • Frases de contraseña aleatorias generan >10^17 combinaciones posibles.
  • Almacena solo hashes salados con Argon2; texto plano = compromiso inmediato.
  • Contraseñas únicas evitan ataques por uso de credenciales robadas.

— Editorial Team

Advertisement 728x90

Leer después