Skip to content

Attaques par masque et espace de clés : la force brute qui aboutit

Construisez des masques hashcat avec les charsets, calculez l'espace de clés, utilisez les charsets personnalisés et l'increment, et sachez quand -a 3 bat un dictionnaire.

Publié le 5 min de lecture

Un dictionnaire demande « le mot de passe est-il l'une de ces chaînes connues ? » Un masque pose une autre question : « le mot de passe a-t-il cette forme ? » Quand vous connaissez la forme mais pas la chaîne, le masque est le meilleur outil, et c'est la seule attaque qui couvrira un jour exhaustivement un espace de clés et vous dira avec certitude que le mot de passe n'y est pas.

Tout le jeu consiste à garder cet espace de clés assez petit pour aboutir.

Charsets et masques

Hashcat fournit quatre charsets intégrés, plus un fourre-tout :

?l  abcdefghijklmnopqrstuvwxyz   (26)
?u  ABCDEFGHIJKLMNOPQRSTUVWXYZ   (26)
?d  0123456789                   (10)
?s  espace et symboles           (33)
?a  ?l?u?d?s                     (95)

Un masque est une suite de ces marqueurs, un par position de caractère. Chaque position se déploie selon son charset. Donc ce masque :

?u?l?l?l?l?l?d?d

décrit un mot de passe de huit caractères qui commence par une majuscule, comporte cinq minuscules, et finit par deux chiffres. Sunday24, Monkey99, Castle10. On le lance avec le mode d'attaque 3 :

hashcat -m 0 -a 3 hashes.txt ?u?l?l?l?l?l?d?d

-a 3 est le mode force brute / masque. Les caractères littéraux sont aussi permis : Pass?d?d?d?d fixe le mot Pass et force quatre chiffres en fin.

Le calcul de l'espace de clés, et pourquoi il mord

Chaque position multiplie. Le nombre total de candidats est le produit de la taille de charset de chaque position.

Prenez le masque ci-dessus. Un ?u (26), cinq ?l (26 chacun), deux ?d (10 chacun) :

26 × 26^5 × 10^2 = 26^6 × 100 = 308 915 776 × 100 = 30 891 577 600

Environ 30,9 milliards de candidats. Sur un GPU qui fait 30 milliards de MD5 par seconde, c'est une seconde. Parfait.

Maintenant passez chaque position à ?a (95) et étirez à huit caractères :

95^8 = 6 634 204 312 890 625

6,6 billiards. À 30 milliards par seconde, environ 61 heures. Ajoutez une position ?a de plus et vous multipliez encore par 95 : 95^9 fait à peu près 240 jours. Chaque position de charset complet ajoutée multiplie le coût par 95. C'est pour ça que « il suffit de forcer » cesse d'être un plan vers neuf caractères aléatoires sur un hash rapide, et n'est plus du tout un plan sur un hash lent.

La leçon est mécanique : des charsets étroits et des masques courts sont tout l'art. Chaque ?a que vous pouvez rétrograder en ?l ou ?d réduit la passe d'un facteur énorme.

Charsets personnalisés

Quand les intégrés sont trop larges, définissez les vôtres avec -1 à -4. Disons que vous savez que les mots de passe ne contiennent que minuscules et chiffres :

hashcat -m 0 -a 3 -1 ?l?d hashes.txt ?1?1?1?1?1?1?1?1

-1 ?l?d construit un jeu personnalisé de 36 caractères, et ?1 y fait référence. Cette passe de huit positions fait 36^8 ≈ 2,8 billions, contre 95^8 ≈ 6,6 billiards pour un ?a complet. Même longueur, environ 2000 fois moins de travail, parce que vous avez utilisé ce que vous saviez.

Increment et attaques hybrides

Vous connaissez rarement la longueur exacte. --increment parcourt le masque du court au long :

hashcat -m 0 -a 3 --increment --increment-min 6 --increment-max 8 hashes.txt ?a?a?a?a?a?a?a?a

Cela essaie la longueur 6, puis 7, puis 8, du moins cher d'abord, donc vous cassez les courts avant d'engager du temps GPU sur la longue traîne.

Viennent ensuite les modes hybrides, qui greffent un masque sur un dictionnaire. C'est là que les masques gagnent leur place contre de vrais mots de passe humains, parce que les gens prennent un mot de base et accolent du bruit. Le mode d'attaque 6 est dictionnaire + masque :

hashcat -m 0 -a 6 hashes.txt rockyou.txt ?d?d?d?d

Chaque mot de rockyou se voit ajouter quatre chiffres. password2024, summer1999. Le mode d'attaque 7 est l'inverse, masque + dictionnaire, pour les motifs en préfixe :

hashcat -m 0 -a 7 hashes.txt ?d?d?d?d rockyou.txt

Les hybrides attrapent le motif mot + suffixe que les dictionnaires purs ratent et que les masques purs mettraient une éternité à atteindre. Couplez-les à un bon montage dictionnaire et règles et vous couvrez l'essentiel de la façon dont les humains déforment réellement leurs mots de passe.

Quand le masque est le bon choix, et quand il ne l'est pas

Les masques gagnent quand vous avez de la structure. Une politique de complexité connue est une structure que vous pouvez transformer en arme. Si le domaine impose « minimum 8, au moins une majuscule, au moins un chiffre », une énorme partie des utilisateurs produit exactement ?u?l?l?l?l?l?l?d : majuscule en tête, corps en minuscules, chiffre en fin. Ce seul masque couvre une fraction énorme des mots de passe conformes à la politique et finit en quelques secondes sur un hash rapide. La politique censée ajouter de la robustesse vous a tendu l'espace de clés.

Autres structures : numéros de téléphone (masques ?d de longueur fixe), mots de passe en série, codes PIN, tout ce dont le format est prévisible. Dans tous ces cas un masque serré bat un dictionnaire parce qu'il génère exactement les candidats qui peuvent exister et ne gaspille jamais un essai.

Les masques perdent quand il n'y a aucune structure à exploiter. Un mot de passe vraiment aléatoire de neuf caractères et plus sur un hash rapide est au-delà de l'horizon, et sur bcrypt ou Argon2 même un masque aléatoire de six caractères est hors de portée parce que le débit est de milliers par seconde, pas de milliards. Lancer ?a?a?a?a?a?a?a?a sur un hash bcrypt n'est pas une attaque, c'est une façon de chauffer votre GPU pour le reste de la décennie.

Donc avant de lancer, deux vérifications. Confirmez que vous êtes bien sur le bon mode hashcat, parce qu'un masque contre le mauvais mode brûle du temps pour rien. Puis faites la multiplication de tête : tailles de charsets multipliées entre elles, divisées par votre débit. Si la réponse se compte en jours, vous resserrez le masque ou vous abandonnez. Le calcul ne négocie pas.

Articles liés

Comparaison pratique de hashcat et John the Ripper — forces GPU et CPU, détection automatique, modes -m, formats jumbo, dictionnaires et règles — avec des commandes d'exemple.
Pourquoi bcrypt fait chuter le débit de cassage de milliards à quelques milliers par seconde : facteur de coût, key schedule hostile au GPU, et 72 octets.
Hashcat ne devine rien. Voici comment choisir le bon mode -m, distinguer les hash qui se ressemblent et lire les erreurs qui trahissent un mauvais choix.