Ataque de la fuerza bruta - Operación integral

Documento de referencia del proyecto Time2Crack
Recipientes: desarrolladores, investigadores de seguridad, usuarios avanzados

Índice

  • Sinopsis
  • Antecedentes históricos y académicos
  • Matemáticas: espacio clave y entropía
  • Arquitectura de un ataque brutal fuerza moderna
  • Velocidades de cálculo por algoritmo de hash
  • Detección de tanques en Time2Crack
  • Cálculo del tiempo de crack: rawTime()
  • Reducción de la fecha detectada: detectDateAndReduce()
  • Monotonicity guard: piso de otros ataques
  • Calibración de HF y el papel de la fuerza bruta
  • Comparación con otros ataques
  • Limitaciones teóricas y prácticas
  • ¿Qué fuerza bruta no dice
  • Defensas eficaces
  • Referencias

  • 1. Sinopsis

    La fuerza bruta es el ataque más fundamental en el cracking de contraseña: consiste en pruebas sistemáticamente todas las combinaciones posibles No hay inteligencia, no heurística — sólo el poder de cálculo crudo contra el tamaño del espacio para viajar.

    En Time2Crack, la fuerza bruta juega un doble papel:

  • Ataque modelo Representa el tiempo teórico máximo que un atacante podría poner, asumiendo ninguna otra vulnerabilidad explotable.
  • Piso (Guardia de monoticidad) : sirve como terminal inferior para todos los otros ataques - ningún ataque especializado puede mostrar legítimamente un tiempo menos que el que tomaría fuerza cruda en la subcadena alfabética de la contraseña.
  • En práctica, la fuerza cruda casi nunca es el ataque más rápido a una contraseña humana real - PCFG, Markov o ataque híbrido será más eficaz. Pero para una contraseña verdaderamente aleatoria y larga, representa la realidad: el atacante no tiene más opción que navegar el espacio de manera exhaustiva.

    2. Antecedentes históricos y académicos

    2.1 Origen

    La fuerza prima precede al ordenador: el principio de probar todas las combinaciones posibles se utiliza desde las primeras máquinas de encriptación mecánica (Enigma durante la Segunda Guerra Mundial).La bomba de Alan Turing fue, en un sentido amplio, un dispositivo de fuerza cruda obligado por una hipótesis de cunas.

    Con el advenimiento de las computadoras, la fuerza de contraseña unix fue formalizada entre los años 70 y 1980:

    AñoEvento
    -----------------
    1979Morris & Thompson: Primer artículo académico sobre seguridad de contraseñas Unix, con análisis de fuerza en /etc/passwd
    1988Morris Worm: primera hazaña de masa usando, entre otras cosas, un diccionario y contraseña de fuerza cruda
    1993Crack 5.0 (Alec Muffett): primera herramienta pública de cracking por fuerza cruda en Unix
    2004Ophcrack : tablas de ranura + fuerza cruda en LM/NTLM hashes Windows
    2007GPU-accelerated cracking (Elcomsoft): first public use of the GPU to accelerate gross force
    2012Fuente abierta Hashcat: herramienta de referencia, operación GPU máxima
    2016Hive Systems: Publicación anual de tablas "fuerza bruta por GPU" se convierten en referencia industrial

    2.2 Puntos de referencia

    La revolución de la GPU cambió el orden de magnitud de la fuerza cruda. En la CPU, un atacante de la década de 1990 probó ~10,000 MD5/segundo contraseñas. 168.900 millones por segundo — una aceleración de 16 millones de veces en 30 años.

    Principales fuentes académicas :

    3. Bases de matemáticas: espacio clave y entropía

    3.1 Keyspace

    Keyspace (keyspace) es el número total de posibles contraseñas para una longitud y tanque dados:

    keyspace = charset_size ^ length

    Ejemplos:

    CharsetTamañoDuraciónKeyspaceValoración
    --------------------------------------
    dígitos individuales108108 = 100 millones~108
    Minuscules alone268268 millones~2 × 1011
    Alphanumeric628628 millones~2 × 1014
    Full ASCII958958 millones~6 × 1015
    Full ASCII95129512 - 5.4 × 1023~5 × 1023
    Full ASCII95169516 - 4.4 × 1031~4 × 1031

    3.2 binario entropy

    La entropía (medida en bits) es la formulación logarítmica del espacio clave:

    entropie = length × log₂(charset_size)

    En Time2Crack (función entropy())

    function entropy(pw) {
      return pw.length * Math.log2(getCharset(pw).size);
    }

    La relación entre la entropía y el espacio clave:

    keyspace = 2^entropie
    entropie = log₂(keyspace)
    Ejemplos concretos :
    ContraseñaCharsetDuraciónEntropyKeyspace
    ---------------------------------------------------
    "12345678"10 (digits)826.6 bits108
    "palabra"26 (más bajo)837,6 bits268
    Contraseña162 (alfanum)953.6 bits629
    "¡P@ssw0rd!"95 (lleno de ASCII)959,3 bits959
    xQz7@mK9#2pL95 (lleno de ASCII)1279 bits9512

    3.3 Esperanza Matemática: Keyspace / 2

    La fuerza bruta no siempre prueba keyspace Combinaciones enteros, en promedio, encuentra la contraseña a mitad de camino, ya que el objetivo está distribuido equitativamente en el espacio.expectativa matemática por lo tanto, el número de intentos es:

    tentatives_attendues = keyspace / 2

    Esto es exactamente lo que modelos bruteTime() en Time2Crack:

    // "For brute force: expected value is keyspace/2 (uniform random search)"
    function bruteTime(keyspace, rate) {
      const ls = Math.log(keyspace / 2) - Math.log(rate);
      return Math.exp(ls); // = (keyspace / 2) / rate
    }

    Esta división para 2 es correcta bajo la suposición de que el atacante viaja el espacio linealmente (no-repetitivo). keyspace/2 Intentos.


    14. Defensas eficaces

    14.1 lado del usuario: longitud y aleatoriedad

    La fuerza bruta es derrotada por dos factores combinados:

    Duración : cada personaje adicional multiplica el espacio clave por charset_sizeDe 8 a 12 caracteres (charset 95) multiplica el espacio clave por 954 - 81 millones.
    Verdadero azar : un generador criptográficamente seguro (CSPRNG) produce contraseñas que no se benefician de ninguna reducción probabilística. Markov, PCFG y Neural no tienen ventaja sobre una contraseña realmente aleatoria.
    Recomendación práctica :

    14.2 lado servidor: algoritmos resistentes

    La elección del algoritmo hash multiplica o divide el tiempo de fuerza cruda por factores hasta varios millones :

    RecomendaciónAlgoritmRazón
    .--------------
    RecomendadoArgon2idMemory-hard, resistente a GPU
    Recomendadobcrypt (cost ≥ 12)Intencionalmente lento, salado
    AceptablescryptMemoria dura pero menos estandarizada
    InadecuadoSHA-256 saladoDemasiado rápido incluso con sal
    PeligrosoMD5, SHA-1, NTLMNo salado, extremadamente rápido

    15. Referencias bibliográficas

    Academics

    Morris, R., " Thompson, K. (1979). Seguridad de contraseña: historial de casos. Comunicaciones de la ACM, 22(11), 594-597. → Artículo fundador sobre seguridad de contraseña de Unix
    Sprengers, M. (2011). Seguimiento de contraseñas basado en GPU (Tesis de maestría). Universidad Radboud Nijmegen. → formalización matemática de la grieta GPU, puntos de referencia sobre la GPU única
    Wheeler, D.L. (2016). zxcvbn: Estimación de la fuerza de contraseña de bajo costo. 25o Simposio de Seguridad USENIX. → Datos sobre el espacio clave eficaz (tabla 2: -30% para contraseñas estructuradas)
    Dürmuth, M. et al. (2015). Ordenado Markov Enumerator. ESORICS 2015. → Referencia comparativa para terminales probabilistas vs fuerza bruta

    Industria

    Hive Systems. (2025). 2025 Hive Systems Password Table. https://www.hivesystems.io/password-table → Puntos de referencia anuales de 12× RTX 4090, referencia estándar
    Gosney, J (2012). 8x Nvidia GTX 1080 Puntos de referencia Hashcat. GitHub Gist. → Primer punto de referencia multi-GPU público, referencia histórica
    Hashcat. (2024). Parámetros oficiales Hashcat v6.2.6. https://hashcat.net/hashcat/ → Velocidades oficiales por algoritmo, fuente de Time2Crack constantes
    NIST SP 800-63B. (2017, actualizado 2024). Directrices de identidad digital: autenticación y gestión del ciclo de vida. → Recomendaciones oficiales sobre la longitud y complejidad de la contraseña
    OWASP. (2024). Ficha de almacenamiento de contraseña. https://cheatssheetseries.owasp.org/cheatssheets/Password Storage Cheat Sheet.html → Recomendaciones sobre bcrypt (cost ≥ 12), Argon2id como estándares modernos
    Documento generado para el proyecto Time2Crack — última actualización: 2026-04-18 Basado en la implementación en app.js, funciones primasTime(), getCharset(), y monotonicity guard