Comment calculer la complexité d’un mot de passe et comment choisir un mot de passe

L’imaginaire collectif nous implante l’idée qu’un mot de passe doit être long (composé de beaucoup de caractères) et complexe (composé de beaucoup de caractères différents) pour être de bonne qualité.

On va essayer de voir ce que ça représente exactement.

Quelles sont les attaques sur les mots de passe ?

Il existe différents types d’attaques cherchant à « casser » les mots de passe :

  • Attaque par force brute : on essaye toutes les possibilités. Plus le mot de passe est long et complexe, plus il sera difficile à casser (on va revenir là-dessus).
  • Attaque au dictionnaire : de longues listes de mots de passe usuels sont utilisées. Plus le mot de passe est aléatoire, moins il a de chances de se retrouver dans un dictionnaire.
  • Attaque par tables arc-en-ciel : de longues listes de mots de passe chiffrés sont utilisées. Ces attaques ne sont utilisables que si l’attaquant a accès aux mots de passe tels qu’ils sont stockés après chiffrement (traditionnellement si une base de données a été compromise). Cette attaque est inefficace si les mots de passe chiffrés sont « salés » (un aléa est ajouté).
  • Attaque par ingénierie sociale : ici l’idée est de trouver le mot de passe grâce à la connaissance accumulée sur la personne visée, ou en poussant cette personne à fournir d’elle-même son mot de passe (à travers un mail de phishing, par exemple).
  • Attaque sur les logiciels : chaque logiciel peut avoir ses propres failles, et les hackers peuvent être très imaginatifs. Par exemple, si un système est compromis, il est parfois possible de retrouver un mot de passe en scannant la zone mémoire qui a contenu ce mot de passe, et qui n’aurait pas été mise à zéro avant d’être libérée.

Donc si on se concentre sur les cas où l’attaque n’implique pas la compromission d’un système ou la faiblesse de l’élément humain, on en revient aux attaques par force brute et par dictionnaire.

Les caractéristiques d’un mot de passe

Ce qui caractérise un bon mot de passe, c’est la difficulté avec laquelle il pourra être cassé.

De là, on peut en tirer qu’un bon mot de passe doit être :

  • Long, car plus il est long, plus cela prendra du temps pour le trouver par force brute.
  • Complexe, car plus sa base (le nombre de caractères possibles) est grande, plus cela prendra du temps pour le trouver par force brute.
  • Aléatoire, pour s’assurer qu’il ne sera pas contenu dans des dictionnaires.

Il est possible de formuler la complexité générale d’un mot de passe en calculant son entropie, qui s’exprime en nombre de bits.

La formule est : E = L × log2(B)

  • E : l’entropie en bits
  • L : la longueur du mot de passe, c’est-à-dire son nombre de caractères
  • B : la base des caractères du mot de passe, c’est-à-dire le nombre de caractères différents qu’ils peuvent prendre. Par exemple, un mot de passe constitué uniquement de lettres minuscules aura une base de 26 ; avec les lettres minuscules et les chiffres, on passera à une base 36 ; les lettres minuscules et majuscules donneront une base 52, et si on y ajoute les chiffres on obtiendra une base 62. Avec des caractères spéciaux, on pourra monter jusqu’à une base 85 dans le meilleur des cas.

Ainsi, on peut calculer quelques entropies classiques :

base \ longueur8 caractères12 caractères15 caractères18 caractères
base 10 (chiffres)26 bits39 bits49 bits59 Bits
base 26
(minuscules)
37 bits56 bits70 bits84 bits
base 36 (minuscules + chiffres)41 bits62 bits77 bits93 bits
base 52
(minuscules + majuscules)
45 bits68 bits85 bits102 bits
base 62
(minuscules + majuscules + chiffres)
47 bits71 bits89 bits107 bits
base 85
(minuscules + majuscules + chiffres + caractères spéciaux)
51 bits77 bits96 bits115 bits

Quelle complexité choisir pour un mot de passe ?

La complexité d’un mot de passe est déterminante pour le calcul du temps nécessaire pour le casser.

La formule de ce calcul est : T = 2E ÷ R

  • T : le temps nécessaire pour casser le mot de passe (en secondes)
  • E : l’entropie (en bits)
  • R : le nombre d’essais par seconde

C’est plus simple avec cette image, que j’avais déjà utilisée dans un précédent article :

https://i.imgur.com/gfYw57t.png

Il faut savoir qu’en général, on prend ce temps divisé par deux, car cela correspond au temps moyen pour casser un mot de passe par force brute. Il y a très peu de chances de devoir parcourir toutes les valeurs possibles avant de trouver la bonne (en fait, autant que de chances de tomber immédiatement sur la bonne valeur).

Je pense que sur un service web moyen, un attaquant aura du mal à atteindre le million d’essais par seconde. Dans la vraie vie, on est plutôt autour des dix mille tentatives par seconde grand maximum. Mais on va être précautionneux, et on va regarder la colonne correspondant à un milliard d’essais par seconde ; juste pour dire qu’on prévoit très large.

On peut voir qu’une entropie de 66 bits entraîne un temps supérieur au millier d’années ; avec 76 bits, on atteint le million d’années, et avec 86 bits on est au milliard d’années.

Quelle longueur et quelle base utiliser ?

Il y a une image XKCD très connue sur le sujet :

https://xkcd.com/936/

Bon, je ne sais pas comment ils ont calculé leurs entropies (moi je compte 67 bits et 117 bits avec la formule fournie plus haut), mais le principe reste le même : il vaut mieux avoir un mot de passe facile à retenir, mais long.

Par contre, je ne suis pas pour l’utilisation de quatre mots communs, je pense que ça rend vulnérable à des attaques au dictionnaire. Par contre, la technique consistant à faire une longue phrase dont on reprend la première lettre de chaque mot fonctionne plutôt bien.

Imaginons la phrase « Albator 84 est mieux que Albator 78, mais moins bien que Ulysse 31« . Le mot de passe résultant serait « A84emqA78mmbqU31« . On a donc 16 caractères en base 62 (lettres minuscules, lettres majuscules et chiffres), soit une entropie de 95 bits.
À 10 millions d’essais par seconde, on en arrive à plus de 60 billions d’années (soit soixante mille milliards d’années) en moyenne pour casser le mot de passe. C’est très largement suffisant.

Comme vous le savez, utiliser le même mot de passe sur plusieurs sites est une mauvaise pratique. Même si les sites stockent une version hachée du mot de passe, s’ils n’y ajoutent pas de sel le même hachage pourrait se retrouver dans plusieurs bases de données, et pourrait être recoupé avec un mot de passe identique de quelqu’un d’autre.
Une technique simple est donc d’introduire deux ou trois caractères à l’intérieur du mot de passe, représentant le nom du site sur lequel vous vous identifiez. Cela peut être les premiers caractères du nom de domaine, ou le premier et le dernier, par exemple. Le but est de faire en sorte qu’en partant d’une base globalement identique (parce qu’on n’a pas envie de retenir autant de mots de passe qu’on a de comptes), on puisse enregistrer des mots de passe différents sur chaque site.

Est-on vulnérable face à l’informatique quantique ?

On a récemment entendu parler de tentatives qui ont été faites pour casser des clés de chiffrement asymétrique, notamment une clé RSA de 22 bits, avec des ordinateurs quantiques.

Cela fait longtemps qu’on s’attend à ce que la puissance de l’informatique quantique rende caducs les procédés actuels de sécurité. Et on le voit, on y est. Même si dans la vraie vie on utilise des clés RSA de 2048 voire 4096 bits, ce n’est qu’une question de temps avant que notre niveau de sécurité actuel soit dépassé.

Alors, est-on dans la panade ? Pas vraiment. On peut imaginer que le jour où les hackers auront facilement à leur disposition des ordinateurs quantiques, ceux-ci seront largement disponibles, et nous les utiliserons pour générer des clés de 512 mégabits, et non plus de seulement 2 ou 4 kilobits. Il va juste falloir serrer les dents pendant la période durant laquelle des groupes de hackers bénéficiant de moyens gouvernementaux auront accès à cette technologie et pas nous.

Néanmoins, pour les systèmes à base de mots de passe, le facteur limitant reste le nombre de requêtes que le système accepte. Il est assez facile de limiter le nombre d’essais provenant d’une même adresse IP, ou pour le même login, sur une période de temps donnée. Et dans ce cas, l’attaquant peut avoir l’ordinateur quantique le plus puissant de l’univers, il restera bloqué à ce que vous l’autoriserez à tester.
Il est donc très important de mettre en place ce genre de limitation.

2 commentaires pour “Comment calculer la complexité d’un mot de passe et comment choisir un mot de passe

  1. en fait je retiens surtout la fin.
    Si tu met un delay d’une seconde systématique a chaque essai, avec en plus un délai croissant après plusieurs erreurs (meme un truc simple genre 1 sec de plus à chaque erreur), tu rends caduque toutes les tentatives. Par essence du limite la puissance de tous les attaquants à 1 Hz.

    Bon ok ça ne marche pas pour le décryptage de données, mais pour les systèmes d’autorisation « d’entrée » c’est largement suffisant.
    Je ne comprend même pas pourquoi ce n’est pas plus largement appliqué plutôt que ces conneries qu’on nous force encore à faire de changer nos mots de passe tous les 3 mois (pratique qui a d’ailleurs été déconseillée par des géants de la sécurité mais qui continue d’être à la mode).

  2. C’est appliqué sans qu’on s’en aperçoive vraiment. Les méthodes cryptographiques de hachage de mots de passe sont faites pour être lentes. Lorsqu’on utilise l’algorigthme bcrypt avec la fonction password_hash() de PHP (c’est l’algorithme par défaut actuellement), on peut modifier le paramètre de « coût algorithmique », pour rendre la fonction plus ou moins lente. Avec l’évolution de la puissance des ordinateurs, on a tendance à augmenter régulièrement ce paramètre pour que le coût reste trop élevé pour qu’une attaque par force brute soit rentable.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Notifiez-moi des commentaires à venir via email. Vous pouvez aussi vous abonner sans commenter.