L'attaque Force Brute — Fonctionnement exhaustif

Document de référence pour le projet Time2Crack
Destinataires : développeurs, chercheurs en sécurité, utilisateurs avancés

Table des matières

  • Vue d'ensemble
  • Contexte historique et académique
  • Fondements mathématiques : keyspace et entropie
  • Architecture d'une attaque brute force moderne
  • Vitesses de calcul par algorithme de hachage
  • Détection du charset dans Time2Crack
  • Calcul du temps de cracking : bruteTime()
  • Réduction par date détectée : detectDateAndReduce()
  • Le monotonicity guard : plancher des autres attaques
  • Calibration HF et rôle de la force brute
  • Comparaison avec les autres attaques
  • Limites théoriques et pratiques
  • Ce que la force brute ne dit pas
  • Défenses efficaces
  • Références bibliographiques

  • 1. Vue d'ensemble

    La force brute est l'attaque la plus fondamentale en cracking de mots de passe : elle consiste à tester systématiquement toutes les combinaisons possibles de caractères, dans l'ordre, jusqu'à trouver la bonne. Aucune intelligence, aucune heuristique — uniquement la puissance de calcul brute contre la taille de l'espace à parcourir.

    Dans Time2Crack, la force brute joue un double rôle :

  • Attaque modélisée : elle représente le temps théorique maximal qu'un attaquant mettrait, en supposant aucune autre vulnérabilité exploitable.
  • Plancher (monotonicity guard) : elle sert de borne inférieure pour toutes les autres attaques — aucune attaque spécialisée ne peut légitimement afficher un temps inférieur à celui que prendrait la force brute sur la sous-chaîne alphabétique du mot de passe.
  • En pratique, la force brute n'est presque jamais l'attaque la plus rapide sur un mot de passe humain réel — PCFG, Markov ou l'attaque hybride seront plus efficaces. Mais pour un mot de passe véritablement aléatoire et long, elle représente la réalité : l'attaquant n'a d'autre choix que de parcourir l'espace exhaustivement.

    2. Contexte historique et académique

    2.1 Origines

    La force brute précède l'informatique : le principe de tester toutes les combinaisons possibles est utilisé depuis les premières machines de chiffrement mécaniques (Enigma pendant la Seconde Guerre mondiale). La bombe d'Alan Turing était, dans un sens large, un dispositif de force brute contrainte par une hypothèse de cribs.

    Avec l'avènement des ordinateurs, la force brute sur mots de passe Unix a été formalisée dès les années 1970–1980 :

    AnnéeÉvénement
    ------------------
    1979Morris & Thompson : premier article académique sur la sécurité des mots de passe Unix, avec analyse de force brute sur /etc/passwd
    1988Worm de Morris : premier exploit de masse utilisant entre autres un crack de mots de passe par dictionnaire et force brute
    1993Crack 5.0 (Alec Muffett) : premier outil public de cracking par force brute sur Unix
    2004Ophcrack : tables rainbow + force brute sur LM/NTLM hashes Windows
    2007GPU-accelerated cracking (Elcomsoft) : premier usage public du GPU pour accélérer la force brute
    2012Hashcat open source : outil de référence, exploitation maximale des GPU
    2016Hive Systems : publication annuelle des tableaux "force brute par GPU" devenus référence industrielle

    2.2 Benchmarks de référence

    La révolution GPU a changé l'ordre de grandeur de la force brute. Sur CPU, un attaquant des années 1990 testait ~10 000 mots de passe MD5/seconde. Un RTX 4090 en 2024 en teste 168,9 milliards par seconde — soit une accélération de 16 millions de fois en 30 ans.

    Sources académiques clés :

    3. Fondements mathématiques : keyspace et entropie

    3.1 Le keyspace

    Le keyspace (espace de clés) est le nombre total de mots de passe possibles pour une longueur et un charset donnés :

    keyspace = charset_size ^ length

    Exemples :

    CharsetTailleLongueurKeyspaceNotation
    -----------------------------------------------
    Chiffres seuls10810⁸ = 100 000 000~10⁸
    Minuscules seules26826⁸ ≈ 208 milliards~2 × 10¹¹
    Alphanumérique62862⁸ ≈ 218 000 milliards~2 × 10¹⁴
    ASCII complet95895⁸ ≈ 6 634 milliards de milliards~6 × 10¹⁵
    ASCII complet951295¹² ≈ 5,4 × 10²³~5 × 10²³
    ASCII complet951695¹⁶ ≈ 4,4 × 10³¹~4 × 10³¹

    3.2 L'entropie binaire

    L'entropie (mesurée en bits) est la formulation logarithmique du keyspace :

    entropie = length × log₂(charset_size)

    Dans Time2Crack (fonction entropy()) :

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

    La relation entre entropie et keyspace :

    keyspace = 2^entropie
    entropie = log₂(keyspace)
    Exemples concrets :
    Mot de passeCharsetLongueurEntropieKeyspace
    ----------------------------------------------------
    "12345678"10 (digits)826,6 bits10⁸
    "password"26 (lower)837,6 bits26⁸
    "Password1"62 (alphanum)953,6 bits62⁹
    "P@ssw0rd!"95 (full ASCII)959,3 bits95⁹
    "xQz7@mK9#2pL"95 (full ASCII)1279 bits95¹²

    3.3 L'espérance mathématique : keyspace / 2

    Une force brute ne teste pas toujours les keyspace combinaisons en entier — en moyenne, elle trouve le mot de passe à mi-chemin, car la cible est équiprobablement répartie dans l'espace. L'espérance mathématique du nombre de tentatives est donc :

    tentatives_attendues = keyspace / 2

    C'est exactement ce que modélise bruteTime() dans 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
    }

    Cette division par 2 est correcte sous l'hypothèse que l'attaquant parcourt l'espace de façon linéaire (non-répétitive). Elle implique qu'un attaquant a 50% de chances de trouver le mot de passe en moins de keyspace/2 tentatives.


    14. Défenses efficaces

    14.1 Côté utilisateur : la longueur et l'aléatoire

    La force brute est vaincu par deux facteurs combinés :

    Longueur : chaque caractère supplémentaire multiplie le keyspace par charset_size. Passer de 8 à 12 caractères (charset 95) multiplie le keyspace par 95⁴ ≈ 81 millions.
    Aléatoire vrai : un générateur cryptographiquement sûr (CSPRNG) produit des mots de passe qui ne bénéficient d'aucune réduction probabiliste. Markov, PCFG et Neural n'ont aucun avantage sur un mot de passe réellement aléatoire.
    Recommandation pratique :

    14.2 Côté serveur : algorithmes résistants

    Le choix de l'algorithme de hachage multiplie ou divise le temps de force brute par des facteurs allant jusqu'à plusieurs millions :

    RecommandationAlgorithmeRaison
    -----------------------------------
    ✅ RecommandéArgon2idMemory-hard, résistant aux GPU
    ✅ Recommandébcrypt (cost ≥ 12)Intentionnellement lent, salé
    ⚠️ AcceptablescryptMemory-hard mais moins standardisé
    ❌ InsuffisantSHA-256 saléTrop rapide même avec sel
    ❌ DangereuxMD5, SHA-1, NTLMNon salés, extrêmement rapides

    15. Références bibliographiques

    Académiques

    Morris, R., & Thompson, K. (1979). Password security: A case history. Communications of the ACM, 22(11), 594–597. → Article fondateur sur la sécurité des mots de passe Unix
    Sprengers, M. (2011). GPU-based password cracking (Master's thesis). Radboud University Nijmegen. → Formalisation mathématique du cracking GPU, benchmarks sur single GPU
    Wheeler, D. L. (2016). zxcvbn: Low-Budget Password Strength Estimation. 25th USENIX Security Symposium. → Données sur keyspace effectif (Table 2 : -30% pour mots de passe structurés)
    Dürmuth, M. et al. (2015). OMEN: Ordered Markov ENumerator. ESORICS 2015. → Référence comparative pour les bornes probabilistes vs force brute

    Industrie

    Hive Systems. (2025). 2025 Hive Systems Password Table. https://www.hivesystems.io/password-table → Benchmarks annuels sur 12× RTX 4090, référence standard
    Gosney, J. (2012). 8x Nvidia GTX 1080 Hashcat benchmarks. GitHub Gist. → Premier benchmark public multi-GPU, référence historique
    Hashcat. (2024). Official Hashcat benchmarks v6.2.6. https://hashcat.net/hashcat/ → Vitesses officielles par algorithme, source des constantes de Time2Crack
    NIST SP 800-63B. (2017, updated 2024). Digital Identity Guidelines: Authentication and Lifecycle Management. → Recommandations officielles sur la longueur et la complexité des mots de passe
    OWASP. (2024). Password Storage Cheat Sheet. https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html → Recommandations sur bcrypt (cost ≥ 12), Argon2id comme standards modernes
    Document généré pour le projet Time2Crack — dernière mise à jour : 2026-04-18 Basé sur l'implémentation dans app.js, functions bruteTime(), getCharset(), et le monotonicity guard