Il y a longtemps, j’ai publié un article sur les risques liés à la limitation des mots de passe. Certains sites interdisent les mots de passe qu’ils jugent trop simple. Qu’est ce qui caractérise la complexité d’un mot de passe? La réponse est: l’entropie. L’entropie est une mesure de la complexité d’un mot de passe. Comment peut-on la calculer?

Définition

L’entropie d’un mot de passe peut être définie de façon très simple: c’est le nombre de symboles possibles, élevé à la puissance de la longueur du mot de passe. Par exemple, si le mot de passe ne peut être constitué que de chiffres de 0 à 9 (soit 10 symboles), l’entropie d’un mot de passe de N caractères sera 10^N (10 puissance N). Donc, un mot de passe de 4 symboles (exemple: 1234) aura une entropie de 10.000. Cela signifie que, si vous deviez deviner ce mot de passe, vous n’auriez qu’une chance sur 10.000.

L’entropie d’un mot de passe est le nombre de symboles possibles, élevé à la puissance de la longueur du mot de passe. Ces symboles regroupent les lettres, chiffres, mais aussi mots et expressions courantes. Pensez à l’entropie qu’aurait un mot de passe écrit en chinois ou en japonais (kanjis).

% de chances de deviner un mot de passe = 100 / Entropie

Entropie = (Nombre de symboles autorisés)^(nombre de symboles dans le mot de passe)

Exemples:
"abcdef": 26 symboles (alphabet minuscule), 6 caractères
    Entropie = 26^6 = 309.000.000
"5@dK": 80 symboles (alphabet, casse, chiffres et caractères spéciaux), 4 caractères
    Entropie = 80^4 = 40.960.000
La définition de l’entropie, et un exemple

L’entropie mesurée ainsi naïvement est incohérente: si vous êtes un peu futé, vous avez plus de chances de deviner le mot de passe abcdef que 5@dK.

Définition d’un “symbole”

La définition du terme “symbole” est délicate. En effet, prenez le mot de passe “1234”: il est très facile à deviner… Pourtant, son entropie est la même que “8368”, qui sera plus difficile à trouver au hasard. Alors comment modéliser cela dans le calcul de l’entropie? Très simplement: en ajustant la définition de “symbole”. Un symbole n’est pas obligatoirement un et un seul caractère: cela peut être un mot, une succession habituelle de caractères, ou tout autre groupement logique de symboles de base.

A est un symbole, de même que chaque lettre de l’alphabet, mais 1234 est aussi un et un seul symbole.

Par exemple, si on considère que les symboles sont les lettres de l’alphabet (a..z, soient 26 symboles) alors le mot de passe “chevalblanc” (10 lettres) aura une entropie de 26^10 = 141.167.095.653.376 (141.000 milliards). Vous avez donc 1 chance sur 140.000 milliards environ de deviner ce mot de passe.
Maintenant, considérons que les symboles peuvent être les mots du dictionnaires (qui contient par ailleurs chacune des lettres de l’alphabet). Un dictionnaire français compte au plus 100.000 mots. Donc, le mot de passe “chevalblanc” est en fait constitué de 2 symboles parmi les 100.000 mots du dictionnaire. L’entropie réelle de ce mot de passe est donc de 100.000^2 = 10.000.000.000 (10 milliards).
De plus, en considérant qu’un Français moyen emploie environ 5.000 mots, alors l’entropie d’un mot de passe constitué de deux mots du langage courant (5.000 symboles) tombe à 5.000^2 = 25.000.000 (25 millions), ce qui est ridiculement faible face à une attaque par force brute.

Un mauvais calcul d’entropie donnera un faux sentiment de , comme l’illustre cette page de BD de CommitStrip.

Calcul de l’entropie réelle

Vous constatez donc que l’entropie d’un mot de passe dépend énormément du registre de symboles considérées (chaque lettre ou l’ensemble de tous les mots du dictionnaire). Ainsi, l’entropie réelle de certains mots de passe est bien plus basse que certains calculs théoriques laissent penser.

Si vous implémentez un indicateur de la force d’un mot de passe (bon, déjà, sa place est dans un plugin de navigateur et non sur votre jeu web à vous), alors il vous faudra en tenir compte. Par exemple, plutôt que de seulement compter les lettres du mot de passe pour en calculer l’entropie, essayez d’en compter les mots, en acceptant pourquoi pas certaines variantes (insensibilité à la casse, remplacement d’une lettre dans le mot, etc). Vos utilisateurs auront alors une idée de la vraie solidité de leurs mots de passe. Ils découvriront par exemple que leur “chevalblanc” est moins résistant aux pirates qu’un simple code de 4 caractères aléatoires “5@dK”.

L’entropie d’un mot de passe devrait être calculée en considérant les ~80 caractères d’un clavier ainsi que les ~3000 mots de la langue courante, plus les 1000 mots de passe les plus courants, créant ainsi un dictionnaire de 4080 symboles.