Il y a quelques années, les mots de passe aléatoires de huit caractères composés de lettres majuscules et minuscules, de symboles et de chiffres étaient très difficiles à déchiffrer. Dans certains cas, il fallait des années pour craquer un tel mot de passe.
Grâce à l’évolution de la technologie et à la location de machines, ce temps a été réduit à quelques heures. Mais comment ces mots de passe sont-ils stockés ?
Comment les mots de passe sont-ils stockés en ligne ?
Les systèmes ne stockent pas les mots de passe des utilisateurs directement dans des fichiers ou des bases de données, car les pirates peuvent s’emparer de la base de données dans laquelle les systèmes conservent les mots de passe. Au lieu de cela, les systèmes cryptent les mots de passe des utilisateurs, et les attaquants rencontrent une version cryptée de chaque mot de passe.
Les systèmes utilisent certains algorithmes pour crypter les mots de passe. L’un de ces algorithmes est l’algorithme symétrique. L’algorithme symétrique est un type de cryptage qui permet d’utiliser la même clé pour le cryptage et le décryptage. La clé utilisée pour crypter les données est la même pour le cryptage et le décryptage. La sécurité des algorithmes symétriques comporte certains risques car il n’y a qu’une seule clé pour le décryptage. C’est pourquoi les systèmes n’utilisent généralement pas d’algorithmes symétriques pour le cryptage des mots de passe.
En général, la méthode utilisée par les systèmes pour le cryptage est celle des algorithmes de hachage. Les algorithmes de hachage servent à vérifier et à représenter l’intégrité des données, et non à les crypter. Les algorithmes de hachage convertissent les données en un hachage de taille fixe. Ces hachages représentent généralement un hachage unique des données.
Grâce à l’algorithme de hachage, si un attaquant a pris le contrôle de la base de données des mots de passe, il ne peut pas accéder au mot de passe à l’envers à partir d’ici. Il y a une nuance très importante à laquelle vous devez prêter attention. En théorie, un pirate qui compromet un système utilisant le même algorithme de hachage pour toutes les combinaisons de mots de passe peut comparer les résultats obtenus. Si l’attaquant obtient la même valeur à l’issue de ces comparaisons, il a découvert la version ouverte du mot de passe. Cette méthode est basée sur l’essai et l’erreur, et cette forme d’attaque est généralement appelée attaque par force brute.
Au début des années 2000, il fallait des centaines d’années pour essayer toutes les combinaisons de mots de passe de 8 caractères cryptés à l’aide des algorithmes de hachage les plus courants. Bien entendu, les combinaisons très simples telles que « 123456 » ou « mypassword » ne sont pas incluses dans cet ensemble. Avec le développement des technologies logicielles et matérielles d’aujourd’hui, la méthode de craquage des mots de passe a également beaucoup évolué.
L’impact des nouveaux GPU
Les capacités de traitement parallèle des données des processeurs graphiques (GPU) se sont améliorées au fil du temps. Les GPU ne sont pas capables d’effectuer des opérations polyvalentes comme les CPU à usage général. Ainsi, même s’il y a beaucoup de cœurs et de puissance de traitement parallèle, il n’est pas logique de les utiliser pour presque tous les problèmes, comme le font les CPU.
Pourtant, il est possible d’exécuter certains algorithmes de hachage utilisés pour les mots de passe de manière assez efficace sur le GPU. Le nombre de hachages calculables par seconde que l’on peut obtenir avec les CPU traditionnels a considérablement augmenté avec les nouvelles plates-formes GPU.
Pour vous faire une idée, examinez les nombres de hachages par seconde d’algorithmes de hachage tels que NTLM, MD5 et SHA1 dans le tableau ci-dessous. Pour l’instant, il suffit de savoir que ces algorithmes ne sont que des algorithmes de hachage. Pour créer ce tableau, j’ai utilisé un système en grappe composé de 25 GPU AMD Radeon.
|
Algorithme |
Hachures par seconde |
|
NTLM |
350.000.000.000 |
|
MD5 |
180.000.000.000 |
|
SHA1 |
63.000.000.000 |
|
SHA512Crypt |
364.000 |
|
Bcrypt |
71.000 |
|
Scrypt |
33.000 |
Comme vous pouvez le constater, avec un tel système, vous pouvez générer des hachages NTLM 350 milliards de fois par seconde. Cela signifie que vous pouvez essayer toutes les combinaisons d’un mot de passe de 8 caractères en moins de 6 heures. De plus, le matériel utilisé dans cet exemple date de plusieurs années. Imaginez la puissance de décryptage de mots de passe d’aujourd’hui.
Que doivent faire les développeurs de logiciels ?
La voie à suivre par les programmeurs est très simple : ils devraient préférer les algorithmes qui prennent plus de temps pour calculer les valeurs de hachage lors du cryptage des mots de passe. Les développeurs doivent se renseigner non seulement sur les performances de l’algorithme qu’ils utilisent sur le processeur, mais aussi sur sa résistance au monde du GPU.
Si les développeurs travaillent avec un cadre logiciel qui traite également des processus de cryptage des mots de passe, comme Django, Ruby on Rails et Spring Security, ils doivent vérifier si les bonnes décisions ont été prises au sein du cadre en termes de sécurité.
Par exemple, Devise, l’une des bibliothèques les plus utilisées pour les opérations utilisateur dans Ruby on Rails, utilise Bcrypt comme algorithme de hachage par défaut. Elle permet également d’utiliser une autre méthode comme algorithme de hachage. L’algorithme Bcrypt est fiable car il faut toujours beaucoup de temps pour que le GPU se casse.
En résumé, plus le calcul de la valeur de hachage est long, plus vous êtes en sécurité.
Combien de caractères doit contenir votre mot de passe ?
Chaque caractère supplémentaire que vous utilisez augmentera géométriquement le nombre d’essais et d’erreurs nécessaires pour déchiffrer votre mot de passe et le rendre plus sûr.
Examinons cette situation à travers deux scénarios différents. Considérez les valeurs du tableau ci-dessus pour l’algorithme de hachage NTLM et imaginez que vous essayez de déchiffrer le mot de passe. Imaginez que vous visiez des mots de passe de huit caractères ou plus.
|
Nombre de caractères |
Lettres majuscules/minuscules et chiffres |
Lettres majuscules/minuscules, chiffres et symboles spéciaux |
|
8 |
moins de 1 minute |
2 minutes |
|
9 |
2 minutes |
2 heures |
|
10 |
2 heures |
1 semaine |
|
11 |
6 jours |
2 ans |
|
12 |
1 an |
200 ans |
|
13 |
plus de 100 ans |
plus de 1000 ans |
L’examen du tableau montre que l’utilisation d’un mot de passe de 12 caractères minimum est sûre si vous utilisez toutes les combinaisons de lettres majuscules et minuscules, de chiffres et de symboles spéciaux. Si vous n’utilisez pas de symboles spéciaux, il s’avère que vous devez utiliser 13 caractères comme longueur de mot de passe sûre. Si vous utilisiez la méthode de hachage Bcrypt au lieu de la méthode NTLM dans ce système, 8 caractères suffiraient. Cependant, vous n’avez pas la possibilité de savoir avec quelle méthode de hachage un système auquel vous accédez via le web conserve votre mot de passe. C’est pourquoi vous devez envisager toutes les possibilités.
Le principal problème pour les développeurs de logiciels est qu’il est pratiquement impossible de convaincre les utilisateurs d’utiliser un mot de passe d’au moins 12 caractères. Aujourd’hui, on peut dire que le taux d’utilisation de mots de passe de cette longueur est faible. Par conséquent, en fonction du scénario d’utilisation du système développé, il sera nécessaire de trouver un juste milieu qui sera accepté par les utilisateurs pour améliorer la sécurité de leur mot de passe.
Une dernière suggestion pour les développeurs est de vérifier non seulement la longueur minimale mais aussi la longueur maximale des entrées provenant des formulaires que vous avez présentés à l’utilisateur. En particulier lorsque vous activez l’utilisation d’un algorithme de hachage lent à calculer tel que Bcrypt à des fins de sécurité, vous pouvez rencontrer certains risques si vous ne contrôlez pas la longueur maximale du mot de passe saisi par l’utilisateur. Par exemple, les attaquants peuvent effectuer des attaques en essayant des dizaines de mots de passe de 100 000 caractères en même temps avec des requêtes spécialement préparées. Dans un tel cas, il est très probable que votre système ne réponde plus aux autres utilisateurs.
Conseils aux utilisateurs finaux
Veillez à ce que votre mot de passe comporte au moins 12 caractères et à ce qu’il inclue des combinaisons de lettres majuscules et minuscules, des chiffres et des symboles. N’oubliez jamais que les systèmes qui stockent votre mot de passe peuvent être piratés et que vos informations peuvent être utilisées à mauvais escient. Vous ne pouvez pas savoir quels algorithmes un système utilise pour crypter votre mot de passe, c’est donc à vous de prendre des précautions et de créer des mots de passe forts.
