Pendant longtemps, on nous a dit que la complexité prévalait sur tout. En effet ajouter des caractères spéciaux voire exotiques sur un mot de passe était censé nous assurer que ceux-ci deviendraient plus complexe à casser.
Les PSSI ont alors massivement été amendées à travers le monde et rapidement on a pu lire un peu partout “un mot de passe doit comporter 8 caractères dont une majuscule, une minuscule, un caractère spécial et un chiffre”.
Cette directive notamment poussée par le NIST a finalement été considérée comme contre-productive par celui-même qui en était à l’origine. En effet cette manière de concevoir un mot de passe a entrainé un effet non prévu initialement : la création de patterns facilement identifiables.
En effet, les utilisateurs ont très rapidement adopté les raccourcis suivant :
Vous l’aurez compris, très rapidement la majorité des mots de passe ressemblaient à Abcdef!1 où Abcdef sont des lettres arbitraires souvent remplacées par autre chose. Mais il était souvent compliqué de trouver un mot de 6 lettres qui soit simple à retenir pour une personne lambda. Ce fût alors l’apparition des post-it sous les claviers ou sur les écrans, avec le mot de passe bien en évidence.
Pire encore, la période fatidique du changement de mot de passe imposée par l’entreprise finissait par arriver. Comment faire pour retenir un nouveau mot de passe quand on avait déjà mis 2 mois à retenir l’ancien sans post-it ? Vous l’avez deviné, on remplaçait le 1 par un 2 et ainsi de suite jusqu’à arriver à 0, et la boucle serait alors bouclée.
A présent parlons de possibilités mathématiques pour identifier le bon mot de passe sans le connaitre. Si nous partons du principe que le pattern ébauché ci-dessus est vrai nous avons :
Combien de mots de passe différents devrions-nous essayer pour trouver le bon ? Prenez le temps de la réflexion, posez l’opération mathématique puis revenez ici.
Il y a exactement dans notre cas : 26 * 26^5 * 10 * 10 possibilités, soit 26^6 * 10^2. De manière plus visuelle, il y a 30 891 577 600 combinaisons à tester. Oui nous avons bien quasiment 31 milliards de possibilités. C’est conséquent vous en conviendrez…
Néanmoins en fonction des capacités de calcul dont dispose l’attaquant et surtout de la méthode d’attaque (en ligne ou hors ligne), celui-ci peut aujourd’hui très facilement grimper de manière conséquente. Ainsi une Geforce RTX 3080 utilisée via Hashcat pour casser hors ligne des hashes NTLM peut tester environ 101 GH/s (soit 101 * 10^9 hashes par seconde, soit 101 000 000 000, 101 milliards)*. Il faudrait donc moins d’une seconde à l’attaquant pour trouver le bon mot de passe qui suivrait ce pattern. Ajoutez à cela l’éventuelle utilisation d’un dictionnaire des mots de passe les plus courants et vous obtenez une temps de découverte imbattable.
La solution pour rendre le mot de passe plus robuste et mettre l’attaquant en difficulté est sans conteste l’augmentation de la longueur de celui-ci, sans nécessairement forcer une quelconque complexité. Prenons un exemple simple : si je passe sur un mot de passe de 12 caractères au lieu de 8, sans qu’on m’impose de complexité et que je fais le choix discutable de n’utiliser que des minuscules.
Pouvez-vous deviner le nombre de combinaisons à essayer pour être certain de trouver le bon mot de passe ?
Il y a alors 26^12 combinaisons, soit 95 428 956 661 682 176, 95 billiards de possibilités. C’est environ 3 millions de fois plus que précédemment. L’auriez-vous imaginé ?
Reprenons notre calcul de puissance de cassage de mot de passe. Toujours dans les mêmes conditions l’attaquant mettra environ 945 000 secondes à tester toutes les combinaisons. C’est à dire environ 10 jours, mais je vous laisse vérifier le calcul par vous même.
Alors bien entendu, en fonction de la détermination de l’attaquant et du temps dont il dispose, 10 jours c’est peu. Et si je montais mon mot de passe à 18 caractères ? Combien de combinaisons y aurait-il ? En gardant strictement l’utilisation de minuscules de A à Z, nous aurions 26 ** 18 possibilités, soit 29 quadrillion (10^21). Et combien de temps pour casser le mot de passe dans ces conditions ? 3 milliards de jours. 3 milliards.
Cela semble intéressant non ?
Si en complément vous complexifiez le travail de l’attaquant en utilisant des mots simples à retenir mais sans rapport avec vous, et qu’entre chaque mot vous ajoutez un chiffre par exemple, la complexité va encore grandir de manière exponentielle surtout si la longueur de votre mot de passe finit par être de 20 caractères au lieu de 18.
Comment retenir ce nouveau mot de passe ? Utilisez un gestionnaire de mot de passe, et vous pouvez éventuellement adopter la méthode proposée dans cette bulle XKCD :
Bien entendu les valeurs proposées en termes de possibilités testées par seconde sont très inférieures à nos statistiques, car cette bulle est très vieille, mais vous avez l’idée.
Je vois déjà les plus taquins d’entre vous préparer les questions suivantes :
Alors, oui, en cas de fuite de mot de passe vous ne pourrez rien faire. Sauf si votre compte en question est protégé par MFA et que vous utilisez bien un mot de passe unique pour chaque compte.
Si vous utilisez un gestionnaire de mot de passe, bien entendu votre mot de passe maitre devra être très robuste, et je vous encourage à nouveau à utiliser le MFA pour cet outil.
Dans une précédente expérience professionnelle, un junior de mon équipe a “égaré” le mot de passe pour déchiffrer la partition LUKS au démarrage d’une machine d’une grande importance pour la société, qui fort heureusement n’était qu’en phase d’intégration et pas encore en production : celui du gestionnaire de mots de passe du centre de services, enfin le nouvel outil qui devrait le supplanter.
Fier de lui, il est arrivé avec une “idée de génie” : “je sais que le mot de passe faisait 16 caractères, qu’il ne contient que des minuscules, majuscules et une combinaison de caractères spéciaux choisis dans cette plage” (il y avait 10 caractères spéciaux possibles, mais nous ne savions pas combien de majuscules, combien de minuscles, ni combien de caractères spéciaux).
Je lui ai alors demandé de calculer le nombre de combinaisons possibles pour ce mot de passe, et de vérifier les capacités de cassage de ce type de hash sur nos machines actuelles mais aussi sur des machines équipées des cartes graphiques les plus puissantes du moment. Après “quelques” minutes, le résultat était sans appel, nous serions tous bel et bien mort et enterrés avant que cela arrive car il fallait plusieurs milliards d’années. Si vous voulez faire le calcul par vous-même, reprenez notre source de bench Hashcat sur github, je vous fais cadeau du type de hash à chercher : 14600. Capacité de cassage d’une RTX 3080 pour ce type de hashes : un peu plus de 22 000 par seconde.
Source :
Pendant longtemps, on nous a dit que la complexité prévalait sur tout. En effet ajouter des caractères spéciaux voire exotiques sur un mot de passe était censé nous assurer que ceux-ci deviendraient plus complexe à casser.
Les PSSI ont alors massivement été amendées à travers le monde et rapidement on a pu lire un peu partout “un mot de passe doit comporter 8 caractères dont une majuscule, une minuscule, un caractère spécial et un chiffre”.
Cette directive notamment poussée par le NIST a finalement été considérée comme contre-productive par celui-même qui en était à l’origine. En effet cette manière de concevoir un mot de passe a entrainé un effet non prévu initialement : la création de patterns facilement identifiables.
En effet, les utilisateurs ont très rapidement adopté les raccourcis suivant :
Vous l’aurez compris, très rapidement la majorité des mots de passe ressemblaient à Abcdef!1 où Abcdef sont des lettres arbitraires souvent remplacées par autre chose. Mais il était souvent compliqué de trouver un mot de 6 lettres qui soit simple à retenir pour une personne lambda. Ce fût alors l’apparition des post-it sous les claviers ou sur les écrans, avec le mot de passe bien en évidence.
Pire encore, la période fatidique du changement de mot de passe imposée par l’entreprise finissait par arriver. Comment faire pour retenir un nouveau mot de passe quand on avait déjà mis 2 mois à retenir l’ancien sans post-it ? Vous l’avez deviné, on remplaçait le 1 par un 2 et ainsi de suite jusqu’à arriver à 0, et la boucle serait alors bouclée.
A présent parlons de possibilités mathématiques pour identifier le bon mot de passe sans le connaitre. Si nous partons du principe que le pattern ébauché ci-dessus est vrai nous avons :
Combien de mots de passe différents devrions-nous essayer pour trouver le bon ? Prenez le temps de la réflexion, posez l’opération mathématique puis revenez ici.
Il y a exactement dans notre cas : 26 * 26^5 * 10 * 10 possibilités, soit 26^6 * 10^2. De manière plus visuelle, il y a 30 891 577 600 combinaisons à tester. Oui nous avons bien quasiment 31 milliards de possibilités. C’est conséquent vous en conviendrez…
Néanmoins en fonction des capacités de calcul dont dispose l’attaquant et surtout de la méthode d’attaque (en ligne ou hors ligne), celui-ci peut aujourd’hui très facilement grimper de manière conséquente. Ainsi une Geforce RTX 3080 utilisée via Hashcat pour casser hors ligne des hashes NTLM peut tester environ 101 GH/s (soit 101 * 10^9 hashes par seconde, soit 101 000 000 000, 101 milliards)*. Il faudrait donc moins d’une seconde à l’attaquant pour trouver le bon mot de passe qui suivrait ce pattern. Ajoutez à cela l’éventuelle utilisation d’un dictionnaire des mots de passe les plus courants et vous obtenez une temps de découverte imbattable.
La solution pour rendre le mot de passe plus robuste et mettre l’attaquant en difficulté est sans conteste l’augmentation de la longueur de celui-ci, sans nécessairement forcer une quelconque complexité. Prenons un exemple simple : si je passe sur un mot de passe de 12 caractères au lieu de 8, sans qu’on m’impose de complexité et que je fais le choix discutable de n’utiliser que des minuscules.
Pouvez-vous deviner le nombre de combinaisons à essayer pour être certain de trouver le bon mot de passe ?
Il y a alors 26^12 combinaisons, soit 95 428 956 661 682 176, 95 billiards de possibilités. C’est environ 3 millions de fois plus que précédemment. L’auriez-vous imaginé ?
Reprenons notre calcul de puissance de cassage de mot de passe. Toujours dans les mêmes conditions l’attaquant mettra environ 945 000 secondes à tester toutes les combinaisons. C’est à dire environ 10 jours, mais je vous laisse vérifier le calcul par vous même.
Alors bien entendu, en fonction de la détermination de l’attaquant et du temps dont il dispose, 10 jours c’est peu. Et si je montais mon mot de passe à 18 caractères ? Combien de combinaisons y aurait-il ? En gardant strictement l’utilisation de minuscules de A à Z, nous aurions 26 ** 18 possibilités, soit 29 quadrillion (10^21). Et combien de temps pour casser le mot de passe dans ces conditions ? 3 milliards de jours. 3 milliards.
Cela semble intéressant non ?
Si en complément vous complexifiez le travail de l’attaquant en utilisant des mots simples à retenir mais sans rapport avec vous, et qu’entre chaque mot vous ajoutez un chiffre par exemple, la complexité va encore grandir de manière exponentielle surtout si la longueur de votre mot de passe finit par être de 20 caractères au lieu de 18.
Comment retenir ce nouveau mot de passe ? Utilisez un gestionnaire de mot de passe, et vous pouvez éventuellement adopter la méthode proposée dans cette bulle XKCD :
Bien entendu les valeurs proposées en termes de possibilités testées par seconde sont très inférieures à nos statistiques, car cette bulle est très vieille, mais vous avez l’idée.
Je vois déjà les plus taquins d’entre vous préparer les questions suivantes :
Alors, oui, en cas de fuite de mot de passe vous ne pourrez rien faire. Sauf si votre compte en question est protégé par MFA et que vous utilisez bien un mot de passe unique pour chaque compte.
Si vous utilisez un gestionnaire de mot de passe, bien entendu votre mot de passe maitre devra être très robuste, et je vous encourage à nouveau à utiliser le MFA pour cet outil.
Dans une précédente expérience professionnelle, un junior de mon équipe a “égaré” le mot de passe pour déchiffrer la partition LUKS au démarrage d’une machine d’une grande importance pour la société, qui fort heureusement n’était qu’en phase d’intégration et pas encore en production : celui du gestionnaire de mots de passe du centre de services, enfin le nouvel outil qui devrait le supplanter.
Fier de lui, il est arrivé avec une “idée de génie” : “je sais que le mot de passe faisait 16 caractères, qu’il ne contient que des minuscules, majuscules et une combinaison de caractères spéciaux choisis dans cette plage” (il y avait 10 caractères spéciaux possibles, mais nous ne savions pas combien de majuscules, combien de minuscles, ni combien de caractères spéciaux).
Je lui ai alors demandé de calculer le nombre de combinaisons possibles pour ce mot de passe, et de vérifier les capacités de cassage de ce type de hash sur nos machines actuelles mais aussi sur des machines équipées des cartes graphiques les plus puissantes du moment. Après “quelques” minutes, le résultat était sans appel, nous serions tous bel et bien mort et enterrés avant que cela arrive car il fallait plusieurs milliards d’années. Si vous voulez faire le calcul par vous-même, reprenez notre source de bench Hashcat sur github, je vous fais cadeau du type de hash à chercher : 14600. Capacité de cassage d’une RTX 3080 pour ce type de hashes : un peu plus de 22 000 par seconde.
Source :