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
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 :
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 |
| ------- | ----------- |
| 1979 | Morris & Thompson : premier article académique sur la sécurité des mots de passe Unix, avec analyse de force brute sur /etc/passwd |
| 1988 | Worm de Morris : premier exploit de masse utilisant entre autres un crack de mots de passe par dictionnaire et force brute |
| 1993 | Crack 5.0 (Alec Muffett) : premier outil public de cracking par force brute sur Unix |
| 2004 | Ophcrack : tables rainbow + force brute sur LM/NTLM hashes Windows |
| 2007 | GPU-accelerated cracking (Elcomsoft) : premier usage public du GPU pour accélérer la force brute |
| 2012 | Hashcat open source : outil de référence, exploitation maximale des GPU |
| 2016 | Hive 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 :- Gosney, J. (2012) : premier benchmark public multi-GPU sur LM/NTLM, démontrant 180 GH/s avec 8 GPU
- Hive Systems (2025) : tableaux annuels calibrés sur 12× RTX 4090, cités par Forbes, CNBC, BBC
- Sprengers, M. (2011) : thèse de Radboud University sur le cracking GPU, formalisation mathématique
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 :
| Charset | Taille | Longueur | Keyspace | Notation |
| --------- | -------- | ---------- | ---------- | ---------- |
| Chiffres seuls | 10 | 8 | 10⁸ = 100 000 000 | ~10⁸ |
| Minuscules seules | 26 | 8 | 26⁸ ≈ 208 milliards | ~2 × 10¹¹ |
| Alphanumérique | 62 | 8 | 62⁸ ≈ 218 000 milliards | ~2 × 10¹⁴ |
| ASCII complet | 95 | 8 | 95⁸ ≈ 6 634 milliards de milliards | ~6 × 10¹⁵ |
| ASCII complet | 95 | 12 | 95¹² ≈ 5,4 × 10²³ | ~5 × 10²³ |
| ASCII complet | 95 | 16 | 95¹⁶ ≈ 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 passe | Charset | Longueur | Entropie | Keyspace |
| ------------- | --------- | ---------- | ---------- | ---------- |
| "12345678" | 10 (digits) | 8 | 26,6 bits | 10⁸ |
| "password" | 26 (lower) | 8 | 37,6 bits | 26⁸ |
| "Password1" | 62 (alphanum) | 9 | 53,6 bits | 62⁹ |
| "P@ssw0rd!" | 95 (full ASCII) | 9 | 59,3 bits | 95⁹ |
| "xQz7@mK9#2pL" | 95 (full ASCII) | 12 | 79 bits | 95¹² |
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 parcharset_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 :
- Gestionnaire de mots de passe + génération aléatoire ≥ 16 caractères avec charset complet = hors de portée de toute force brute dans un horizon de vie humaine
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 :
| Recommandation | Algorithme | Raison |
| --------------- | ------------ | -------- |
| ✅ Recommandé | Argon2id | Memory-hard, résistant aux GPU |
| ✅ Recommandé | bcrypt (cost ≥ 12) | Intentionnellement lent, salé |
| ⚠️ Acceptable | scrypt | Memory-hard mais moins standardisé |
| ❌ Insuffisant | SHA-256 salé | Trop rapide même avec sel |
| ❌ Dangereux | MD5, SHA-1, NTLM | Non 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 UnixSprengers, 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 standardGosney, 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