L'attaque Markov (probabiliste) — 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
L'attaque Markov est une méthode de cracking de mots de passe probabiliste et statistique qui génère des candidats en s'appuyant sur les fréquences observées de transition entre caractères dans des mots de passe humains réels. Au lieu de tester toutes les combinaisons possibles dans l'ordre alphabétique — comme le fait la force brute —, elle trie les candidats du plus probable au moins probable, concentrant l'effort de calcul là où les mots de passe humains se trouvent réellement.
En termes simples : un attaquant qui dispose de suffisamment de GPU et d'un modèle Markov bien entraîné testera "letmein", "p@ssword" et "soleil2024" avant de tester "aaaaaa", "aaaaab" ou "xqzfkw" — car les humains créent des mots de passe qui ressemblent à des mots, pas à du bruit blanc. Efficacité mesurée : les recherches de Dürmuth et al. (2015) sur le corpus RockYou (14 millions de mots de passe) montrent qu'un modèle Markov d'ordre 5 réduit l'espace de recherche effectif à 0,6 % de l'espace brut pour les mots de passe de structure humaine typique — soit une réduction de 99,4 %.2. Contexte historique et académique
2.1 Origines
L'application des chaînes de Markov au cracking de mots de passe est antérieure aux publications académiques formelles. Les praticiens de la sécurité offensive utilisaient des modèles similaires dès les années 2000, mais la formalisation rigoureuse date principalement des années 2010.
Chronologie des jalons : AnnéeÉvénement ------------------ 2005Nakashima & Oyama : première application formelle de modèles n-grammes aux mots de passe 2009Weir et al. (IEEE S&P) : PCFG — concurrent direct, positionne les probabilités structurelles 2012Ma et al. (USENIX Security) : étude comparative des modèles probabilistes sur 70M mots de passe 2013Durmuth : premières analyses OMEN sur plusieurs corpus 2015Dürmuth, Angelstorf, Horsch, Nürnberger, Rüegge : OMEN (ESORICS 2015) — référence académique majeure 2016Wheeler (zxcvbn) confirme l'efficacité des n-grammes dans l'estimation d'entropie réelle 2018OMEN+ : version améliorée avec smoothing et interpolation 2019–2022Travaux hybrides Markov + réseaux neuronaux (PassGAN, FuzzyPSM)2.2 Corpus de référence
L'entraînement des modèles Markov repose sur des bases de données de mots de passe issus de fuites de données connues :
- RockYou (2009) : 14,3 millions de mots de passe en clair — corpus de référence universel
Ces corpus révèlent la distribution statistique réelle des mots de passe humains, qui diffère radicalement d'une distribution uniforme.
3. Fondements mathématiques : les chaînes de Markov
3.1 Définition formelle
Une chaîne de Markov d'ordre k sur un alphabet Σ modélise la probabilité de chaque caractère en fonction des k caractères précédents :
P(cₙ | c₁c₂...cₙ₋₁) = P(cₙ | cₙ₋ₖ...cₙ₋₁)
Pour les mots de passe, Σ comprend généralement les 95 caractères ASCII imprimables (26 minuscules + 26 majuscules + 10 chiffres + 33 symboles).
Ordre 1 (bigramme) :P("password") = P("p") × P("a"|"p") × P("s"|"a") × P("s"|"s") × ...
Ordre 5 (optimal selon Dürmuth 2015) :
P("password") = P("p") × P("a"|"p") × P("s"|"pa") × P("s"|"pas")
× P("w"|"pass") × P("o"|"passw") × P("r"|"passwo")
× P("d"|"passwor")
L'ordre 5 capture des contextes comme « après "passw", la suite la plus probable est "o" » — information inaccessible à un modèle d'ordre 1.
3.2 La matrice de transition
Pour un ordre 1 sur 95 caractères, la matrice de transition est de taille 95 × 95 = 9 025 entrées. Pour l'ordre 5, elle passe à 95⁵ × 95 = ~7,7 × 10¹⁰ entrées théoriques — mais la majorité des n-grammes d'ordre 5 n'apparaissent jamais dans les données réelles. Les implémentations utilisent des structures de données creuses (tries, hash maps) pour ne stocker que les n-grammes observés.
3.3 Probabilité logarithmique et tri
Pour éviter les sous-débordements flottants sur des mots de passe de 8+ caractères (probabilités de l'ordre de 10⁻²⁰), les outils travaillent en log-probabilités :
log P("password") = log P("p") + log P("a"|"p") + log P("s"|"a") + ...
Cette valeur constitue le score Markov du candidat. Les candidats sont générés par ordre décroissant de score, c'est-à-dire du plus probable au moins probable.
3.4 Pourquoi l'ordre 5 ?
Les recherches empiriques (Dürmuth 2015, confirmées par Ma et al. 2012) montrent que :
4. Architecture d'un cracktool Markov
4.1 Composants principaux
┌─────────────────────────────────────────────────────────────┐
│ OUTIL DE CRACKING MARKOV │
├─────────────────┬───────────────────┬───────────────────────┤
│ Phase │ Composant │ Rôle │
├─────────────────┼───────────────────┼───────────────────────┤
│ Entraînement │ Corpus Parser │ Lit les mots de passe │
│ │ N-gram Counter │ Compte les transitions│
│ │ Probability Table │ Normalise en probas │
│ │ Model Serializer │ Sauvegarde le modèle │
├─────────────────┼───────────────────┼───────────────────────┤
│ Génération │ Candidate Gen │ Énumère par score │
│ │ Length Controller │ Filtre par longueur │
│ │ Threshold Filter │ Coupe les improbables │
├─────────────────┼───────────────────┼───────────────────────┤
│ Attaque │ Hash Engine │ Compare aux cibles │
│ │ GPU Interface │ Hashcat backend │
└─────────────────┴───────────────────┴───────────────────────┘
4.2 Intégration avec Hashcat
L'implémentation la plus répandue en pratique est via le mode stdin de Hashcat (-a 0 avec un générateur externe) ou via des modules Python comme statsgen (du toolkit PACK) :
# Exemple d'attaque Markov pratique
python statsgen.py rockyou.txt --output markovmodel.stats
python maskgen.py markovmodel.stats | hashcat -a 0 -m 1000 targethashes.txt
Des outils dédiés comme OMEN (Open Markov Estimator of Next passwords) génèrent directement des listes de candidats triés.
5. Phase 1 — Entraînement sur corpus de mots de passe réels
5.1 Extraction des n-grammes
Pour chaque mot de passe du corpus, on extrait tous les n-grammes (avec un marqueur de début ^ et de fin $) :
Exemple avec "hello" (ordre 2) :
^h, he, el, ll, lo, o$
Exemple avec "P@ss1!" (ordre 2) :
^P, P@, @s, ss, s1, 1!, !$
5.2 Comptage et normalisation
Pour chaque contexte (n-1 caractères précédents), on compte les occurrences de chaque caractère suivant, puis on normalise :
Contexte "pa" → {s: 847, r: 12, t: 8, l: 3, ...}
→ P(s|pa) = 847/870 = 0.973
→ P(r|pa) = 12/870 = 0.014
Ces distributions révèlent les habitudes linguistiques humaines : après "pa", les gens écrivent massivement "s" (password, pass, pablo...).
5.3 Smoothing (lissage)
Le problème des n-grammes non observés : si "xq" n'apparaît jamais dans le corpus, P(c|xq) = 0 pour tout c — ce qui bloque la génération. Les techniques de lissage les plus utilisées :
Le lissage permet aussi au modèle de générer des candidats hors du corpus d'entraînement — crucial pour couvrir des mots de passe légèrement inédits.
5.4 Ce que le modèle apprend
Après entraînement sur RockYou, un modèle Markov d'ordre 5 internalise des patterns comme :
6. Phase 2 — Génération ordonnée de candidats
6.1 Le problème de l'énumération par score
Générer les candidats par ordre décroissant de probabilité Markov est un problème non trivial. On ne peut pas simplement calculer les probabilités de tous les candidats possibles (94⁸ ≈ 6 × 10¹⁵ pour 8 chars) puis les trier.
La solution : recherche heuristique avec priority queue (file de priorité). L'algorithme s'apparente à Dijkstra :
^a, ^p, ^1...)Cette approche garantit un tri approximativement décroissant sans mémoriser l'intégralité de l'espace.
6.2 Seuil de coupure (threshold)
Pour éviter de générer des milliards de candidats improbables, on définit un score minimal en dessous duquel un candidat partiel est éliminé (élagage). Concrètement :
Si log P(candidatpartiel) < THRESHOLD → abandon de cette branche
Le threshold est un paramètre critique : trop haut → on rate des mots de passe à la limite ; trop bas → on génère trop de candidats et on ralentit l'attaque.
6.3 Gestion des longueurs
Les modèles Markov sont entraînés et opèrent généralement par longueur fixée. Une attaque typique :
La distribution des longueurs dans RockYou : 8 chars = 24 %, 7 chars = 21 %, 9 chars = 12 %, 6 chars = 10 %...
7. Réduction de l'espace de recherche : la clé de l'efficacité
7.1 Quantification empirique (Dürmuth 2015)
Pour un mot de passe de 8 caractères avec l'alphabet complet (94 chars) :
MéthodeEspace de rechercheFacteur de réduction --------------------------------------------------- Brute force94⁸ ≈ 6 × 10¹⁵1× (référence) Markov ordre 1~3 × 10¹⁵~2× Markov ordre 3~6 × 10¹³~100× Markov ordre 5~3,6 × 10¹⁰~166 000× Markov ordre 5 (humain typique)~4 × 10⁷~150 millions×La différence entre "espace réduit" et "espace humain typique" s'explique par le fait que les mots de passe humains réels se concentrent dans les top-k% les plus probables selon le modèle.
7.2 Pourquoi les humains sont prévisibles
Les facteurs de prévisibilité exploités par Markov :
Contraintes linguistiques : les mots de passe dérivent de mots existants. "letmein", "sunshine", "iloveyou" suivent des règles phonotactiques de l'anglais — les transitions de lettres sont hautement probables. Contraintes cognitives : les humains mémorisent mal les séquences vraiment aléatoires. Un mot de passe aléatoire comme "xqzfw9@" est rarement choisi spontanément. Patterns culturels : années (1990-2024), prénoms communs, équipes sportives, personnages de films... Ces patterns créent des clusters de haute densité dans l'espace des mots de passe. Substituations prévisibles : a→@, e→3, i→1, o→0, s→5 sont des mutations si communes qu'elles font partie du modèle. Après "p", "a" et "@" ont des probabilités similaires. Position des chiffres et symboles : les chiffres en fin de mot de passe (passwd123) sont 10× plus fréquents que les chiffres en début. Les symboles en suffixe (passwd!) sont 5× plus fréquents qu'en position centrale.7.3 Le cas des patterns clavier
Les séquences clavier (qwerty, asdf, zxcv, 1234, azerty...) sont particulièrement vulnérables. Pour ces patterns :
Dans Time2Crack (version actuelle), cette distinction n'est plus un palier fixe. Le modèle Markov v2 intègre kbPat comme signal dans un estimateur de rang (markovExpectedGuesses) puis interpole continûment entre régime "human-like" et "random-like".
8. Variantes et implémentations notables
8.1 OMEN (Open Markov Estimator of Next passwords)
Développé par : Dürmuth, Angelstorf, Horsch, Nürnberger, Rüegge (ESORICS 2015) Disponibilité : Open source (GitHub) Innovation principale : ordonnancement optimisé par score de niveau (enumeration par paliers de probabilité)OMEN utilise une discrétisation des probabilités en niveaux entiers pour accélérer la génération :
Cette approche résout élégamment le problème de l'énumération ordonnée sans priority queue coûteuse.
8.2 OMEN+
Extension de OMEN avec :
Performance rapportée : +15 à +20 % de mots de passe crackés vs OMEN original à budget égal.
8.3 Statsgen / PACK (Password Analysis and Cracking Kit)
Développé par : Peter Kacherginsky (iphelix) Approche : plus légère que OMEN, génère des masks et des stats compatibles Hashcat Utilisation typique : analyse d'un ensemble de mots de passe crackés pour adapter les futurs attaques8.4 JohnTheRipper — mode Markov
JohnTheRipper intègre un mode Markov natif (développé par Samuele Giovanni Tonon) :
john --markov --min-length=6 --max-length=8 hashes.txt
Paramètre --markov-threshold (0-400) : contrôle le seuil de coupure. 150 = paramètre standard recommandé.
Le mode Markov de JtR utilise des statistiques précalculées stockées dans des fichiers .mkv (markov stats files) générés par calcstat.
8.5 Modèles Markov hybrides
Markov + règles : générer des candidats Markov, puis appliquer des règles de transformation Hashcat Markov + dictionnaire : utiliser les mots de passe Markov comme base pour des attaques hybrides Markov + PCFG : combiner l'ordre probabiliste Markov avec la contrainte structurelle PCFGCes hybridations sont utilisées dans des configurations de cracking professionnelles pour maximiser la couverture à budget CPU/GPU fixé.
8.6 Modèles de langage modernes (LLM/LSTM) — successeurs de Markov
Les réseaux LSTM et Transformer peuvent être vus comme des généralisations des chaînes de Markov :
PassGAN (2017), FLA (2019), PassBERT (2022) surpassent les modèles Markov classiques de 20-30 % en taux de crack sur des corpus modernes.
9. Comportement face à différents types de mots de passe
9.1 Mots de passe issus de mots naturels
Exemples : sunshine, letmein, dragon, iloveyou Vulnérabilité : extrême Mécanisme : le modèle assigne de très hautes probabilités aux séquences de l'anglais courant. Ces mots apparaissent dans le top 0,001 % des candidats générés. Temps : millisecondes sur MD5/SHA-19.2 Mots avec substituations leetspeak
Exemples : p@ssw0rd, L3tm3In, $unsh1ne Vulnérabilité : élevée Mécanisme : le modèle a appris que "@" suit souvent "p" (car "p@ss..." est très fréquent dans le corpus), que "0" suit souvent "w" (w0rd...), etc. Les substituations les plus communes sont intégrées dans les probabilités de transition. Temps : secondes à minutes9.3 Mots avec suffixe numérique
Exemples : password123, sunshine2024, dragon1! Vulnérabilité : élevée Mécanisme : les suffixes numériques sont si fréquents que le modèle a une forte probabilité pour les transitions lettre→chiffre en fin de séquence. "123", "1", "2024", "12" sont les suffixes les plus probables. Temps : secondes à quelques minutes9.4 Prénoms et noms propres
Exemples : Thomas92, AnneM@rie, NICOLAS Vulnérabilité : modérée à élevée Mécanisme : les prénoms courants (en anglais) sont bien représentés dans les corpus de référence. Les prénoms moins courants dans les corpus anglophones (prénoms français, polonais...) bénéficient moins du modèle. Temps : minutes à heures selon la popularité du prénom9.5 Mots de passe de structure aléatoire apparente mais mnémotechnique
Exemples : Tr0ub4dor&3 (de l'article XKCD), Il0v3myC@t! Vulnérabilité : modérée Mécanisme : ces mots de passe ont une structure humaine (mot de base + substituions + suffixe), mais la base et les transformations spécifiques ne sont pas dans le top-k des candidats Markov. Le modèle finira par les atteindre, mais ils tombent dans les 10-30 % de l'espace. Temps : heures à jours selon longueur et algorithme de hachage9.6 Patterns clavier
Exemples : qwerty, 1234567, azerty, qweasdzxc Vulnérabilité : extrême (pire encore que les mots naturels) Mécanisme : les transitions clavier sont tellement représentées dans les corpus que le modèle les classe parmi les premiers milliers de candidats — parfois les premiers dizaines. Temps : microsecondes à millisecondes9.7 Mots de passe véritablement aléatoires
Exemples : xQz7@mK9, 4#pL$2nR, kRf9!Ws3 Vulnérabilité : faible à nulle Mécanisme : les transitions de caractères dans ces mots de passe ont de très faibles probabilités dans un modèle entraîné sur des mots de passe humains. Ils se retrouvent dans les derniers pourcentages de l'espace généré. Comportement : l'attaque Markov ne présente aucun avantage sur la force brute. Le réel "coût" de sécurité est l'entropie brute. Temps : comparable ou supérieur à la force brute9.8 Passphrases
Exemples : horse-battery-staple-correct, monchienestlouisXIV Vulnérabilité : variable Mécanisme complexe :10. Intégration dans Time2Crack : modélisation et paramètres
10.1 Logique générale de calcul (v2)
Time2Crack modélise désormais Markov en rang attendu (rank-based) plutôt qu'avec des facteurs fixes de réduction.
Pipeline de calcul :
L/D/S,kbPat, seq, dt, rep, hybridVuln),charset et longueur,budgetTime(rangestime, vitessehachage).10.2 Tokenisation Unicode et profil calibré par langue
Le modèle Markov v2 utilise des classes Unicode (\p{L}, \p{N}, sinon symbole) et un profil calibré par langue (chargé depuis data/markov-calibration.json, avec fallback interne).
Le profil contient :
skeletonRanks (L8D2, L8D2S1, ...),shapeRanks (LD, LDS, ...),tokenRanks par classe/longueur,shapeMultipliers),signalMultipliers).10.3 Interpolation continue (fin des seuils abrupts)
L'ancien modèle utilisait des paliers (0.003 / 0.006 / 0.25 / 0.9). Le modèle v2 remplace cette logique par une interpolation continue entre :
humanRank (zone structurelle probable),randomRank (zone proche du brut, bornée).Le poids "random" est une fonction continue de la longueur, du charset et de la force des signaux humains, ce qui évite les discontinuités artificielles.
10.4 Score de confiance et d'applicabilité
Le modèle de scoring de Time2Crack (fonction annotateScenarioApplicability()) attribue à Markov :
case "markov":
return context.looksHuman ? 0.76 : 0.34;
looksHuman = true → score 0.76 : l'attaque Markov est très applicable, le modèle va exploiter les régularités humaineslooksHuman = false → score 0.34 : applicable mais sans avantage majeur sur brute forcecase "markov":
return Number(!!context.looksHuman) + Number(!!context.kbPat)
+ Number(!!context.seq) + Number(!!context.rep);
Chaque signal de "caractère humain" du mot de passe incrémente le score d'évidence de Markov.
10.5 Ajustement HF
Avec Markov v2, les signaux structurels sont déjà intégrés dans le rang estimé. L'ajustement HF est donc neutre pour Markov afin d'éviter le double comptage.
10.6 Priorité dans le tiebreak
Quand plusieurs attaques donnent des temps similaires (< 1ms de différence), Time2Crack choisit la plus pertinente selon une priorité sémantique :
const tieBreakPriority = {
// ...
markov: 8, // Statistical n-gram — broad coverage
// ...
};
Markov est une attaque complément utile qui exploite les régularités statistiques. Elle prime sur la force brute pour les mots de passe avec structure humaine, mais cède le pas aux attaques dictionnaire et hybride qui sont plus directes.
10.7 Cas ultra-weak
Pour les mots de passe ultra-faibles (détectés par isWeakPassword()), Markov utilise un temps basé sur un rang minimal (weakGuessTime) plutôt qu'une constante fixe :
if (weak) {
rows.push({ ..., sec: weakGuessTime(a.rate), note: t("nWeakPassword"), cat: "markov" });
}
Raisonnement : un mot de passe ultra-faible (password, 123456, qwerty...) est dans le top-100 absolu de l'espace Markov — il sera testé en premier, la précision du calcul est sans intérêt.
11. Comparaison avec les autres attaques probabilistes
11.1 Markov vs PCFG
DimensionMarkovPCFG ------------------------- Unité d'analyseTransitions de caractères individuelsStructures de segments (L/D/S) Information capturéeRégularités locales (n-gram)Régularités globales (grammaire) Force surMots naturels, patterns continusMots + chiffres, structures composites LimiteNe capte pas les structures globalesNe capte pas les transitions locales ComplémentaritéIdéal pour mots pursIdéal pour Password123 Exemple optimal"sunshine""Sunshine#93" Ordre dans Time2CrackMarkov = 8, PCFG = 6PCFG plus précis si structure détectée11.2 Markov vs Attaque par règles (Rule-based)
DimensionMarkovRule-based ------------------------------- ApprocheGénération ab initio probabilisteTransformation d'un dictionnaire existant CouvertureTous les mots de passe probablesMutations des mots du dictionnaire Force surMots rares ou légèrement hors dictionnaireTransformations classiques de mots connus LimiteMoins efficace que dict+rules pour les mutations courantesDépend entièrement de la qualité du dictionnaire11.3 Markov vs Réseaux neuronaux (PassGAN, LSTM)
DimensionMarkov (ordre 5)Réseau neuronal --------------------------------------------- ComplexitéO(k ×Σ) par prédictionO(n² × d) (Transformer) Données requises1-10M exemples suffisent10M-1B pour de bons résultats InterprétabilitéTotale (tables de probabilités)Boîte noire GénéralisationLimitée au contexte local kPotentiellement globale Taux de crackRéférence+20-30% sur mots de passe modernes Vitesse de générationTrès rapidePlus lent11.4 Positionnement global
Dans un workflow de cracking professionnel, l'ordre typique est :
Markov est souvent la ligne de fond avant brute force : il couvre efficacement les mots de passe humains qui ont échappé aux attaques plus ciblées.
12. Limites de l'attaque Markov
12.1 Dépendance au corpus d'entraînement
Le modèle est aussi bon que son corpus. Un corpus dominé par les mots de passe anglais (RockYou, LinkedIn) capture mal les régularités :
12.2 Indépendance inter-positions à grande distance
Un modèle Markov d'ordre 5 ne voit pas au-delà de 5 caractères. Pour un mot de passe de 12 caractères, il ne peut pas corréler le 12ème caractère avec le 1er. Une passphrase comme "stargate2004!" a une structure globale ("mot + année + !") que Markov perçoit localement mais pas globalement — PCFG est meilleur ici.
12.3 Insensibilité aux structures compositionnelles
"HorseStapleBattery" (majuscule initiale + 3 mots concaténés) est difficile pour Markov car les transitions inter-mots (e→S, e→B) sont inattendues. L'attaque combinator ou PCFG est mieux adaptée.
12.4 Inefficacité sur mots de passe aléatoires
Un mot de passe généré par /dev/urandom avec 12+ caractères alphanumériques n'a aucune structure exploitable par Markov. Le temps d'attaque Markov converge vers la force brute.
12.5 Sensibilité aux mises à jour de politique de mots de passe
Si une organisation a imposé des règles strictes (longueur ≥ 16, obligatoirement 1 majuscule + 1 chiffre + 1 symbole), les mots de passe résultants peuvent avoir une distribution différente des corpus d'entraînement — réduisant l'efficacité du modèle.
13. Défenses efficaces
13.1 Ce qui neutralise complètement Markov
Générateurs de mots de passe aléatoires : tout gestionnaire de mots de passe (Bitwarden, 1Password, KeePass) avec un générateur cryptographiquement sûr produit des séquences sans structure exploitable par Markov. Un mot de passe de 16 caractères aléatoires est hors de portée pratique quelle que soit l'attaque. Longueur suffisante avec aléatoire : même avec un charset réduit (a-z uniquement), 16 caractères aléatoires représentent 26^16 ≈ 4 × 10²² combinaisons — Markov ne réduit pas significativement un espace déjà aléatoire.13.2 Ce qui diminue fortement l'efficacité de Markov
Passphrases longues de mots rares : 4+ mots peu fréquents séparés sont hors du top des candidats Markov, surtout si les mots viennent de langues différentes ou de vocabulaires spécialisés. Éviter les substituions leetspeak communes : les substituions a→@, e→3, etc. sont intégrées dans le modèle. En revanche, des transformations non standard (a→∂, e→ε) ne le sont pas. Éviter les patterns clavier et les mots naturels : la vulnérabilité maximale de Markov.13.3 Ce qui ne défend pas contre Markov
Complexity requirements (majuscule + chiffre + symbole) : si ces éléments sont ajoutés à un mot naturel (P@ssw0rd!), le modèle capture ces patterns. La complexité imposée crée de la fausse sécurité perçue. Substitutions leetspeak basiques : entièrement capturées par le modèle (transitions "@"→"s", "3"→"y"...). Suffixes/préfixes numériques : les patterns "mot + 123" ou "mot + 2024" sont parmi les premiers testés.13.4 Recommandation finale
La défense la plus efficace contre Markov (et toute attaque probabiliste) est d'éliminer toute structure humaine prévisible, ce qui revient à déléguer la création de mots de passe à un générateur aléatoire sécurisé.
14. Références bibliographiques
Académiques (peer-reviewed)
Dürmuth, M., Angelstorf, F., Horsch, J., Nürnberger, S., & Rüegge, A. (2015). OMEN: Faster Password Guessing Using an Ordered Markov Enumerator. Engineering Secure Software and Systems (ESSoS 2015), LNCS 8978, pp. 119–132. → Référence principale pour la calibration probabiliste Markov utilisée dans Time2Crack (RockYou 14M, ordre 5) Ma, J., Yang, W., Luo, M., & Li, N. (2014). A Study of Probabilistic Password Models. IEEE Symposium on Security and Privacy (S&P 2014). → Comparaison empirique Markov, PCFG, n-grammes sur 70M mots de passe Weir, M., Aggarwal, S., de Medeiros, B., & Glodek, B. (2009). Password Cracking Using Probabilistic Context-Free Grammars. IEEE Symposium on Security and Privacy (S&P 2009). → Travail fondateur sur les méthodes probabilistes structurelles (concurrent de Markov) Wheeler, D. L. (2016). zxcvbn: Low-Budget Password Strength Estimation. 25th USENIX Security Symposium. → Confirme l'efficacité des n-grammes pour l'estimation réaliste de force des mots de passe Pasquini, D., Cianfriglia, M., Ateniese, G., & Bernaschi, M. (2021). Reducing Bias in Modeling Real-World Password Strength via Deep Learning and Dynamic Dictionaries. 30th USENIX Security Symposium. → Comparaison quantitative Markov vs deep learning sur corpus modernes Hitaj, B., Gasti, P., Ateniese, G., & Perez-Cruz, F. (2019). PassGAN: A Deep Learning Approach for Password Guessing. ACNS 2019. → Successeur neural de Markov, point de comparaison pour Time2CrackdescNeural
Implémentations open source
OMEN : https://github.com/RUB-SysSec/OMEN JohnTheRipper (mode Markov) : https://www.openwall.com/john/doc/MARKOV.shtml PACK (statsgen/maskgen) : https://github.com/iphelix/pack Hashcat : https://hashcat.net/hashcat/ (backend GPU pour tous les outils cités)Sources de corpus
RockYou (2009) : 14,3M mots de passe issus de la faille du réseau social RockYou Have I Been Pwned : https://haveibeenpwned.com — ~14 milliards de credentials agrégés (Troy Hunt) SecLists : https://github.com/danielmiessler/SecLists — dictionnaires et wordlists de référenceSources web citées dans l'application Time2Crack
Springer (chapitre Markov/probabilistic cracking). https://link.springer.com/chapter/10.1007/978-3-319-24174-67 → Source liée dansdescMarkov (app.js) pour la réduction effective de l'espace de recherche par priorisation statistique.
Document généré pour le projet Time2Crack — dernière mise à jour : 2026-04-01 Basé sur l'implémentation dans app.js (Markov v2 rank-based) et les publications académiques citées