Mots de passe et entropie
Nous avons vu dans un précédent article comment stocker côté serveur les mots de passe de vos utilisateurs de manière sécurisée.
Nous avons pu voir qu’il était nécessaire d’utiliser un algorithme de hachage relativement coûteux en temps et en mémoire, et avons évoqué des algorithmes tel que bcrypt ou PBKDF2.
Néanmoins, de tels algorithmes ne seront d’aucune utilité pour des mots de passe trop simples tels que “password”, “123456”, ou “azerty” lesquels pourront être découvert par un attaquant en quelques instants, quelque soit l’algorithme de hachage utilisé.
Comment évaluer la complexité d’un mot de passe?
Notion d’entropie
L’entropie d’un mot de passe permet de mesurer l’imprédictibilité d’un mot de passe, et donc la difficulté qu’un attaquant rencontrera à découvrir le mot de passe.
L’entropie se mesure en bits. Si un mot de passe a 40 bits d’entropie, cela signifie qu’il est aussi difficile à deviner qu’un mot de passe aléatoire composé de 40 caractères parmi {0, 1} (40 bits donc). Autrement dit, lors d’une attaque par force brute, il est nécessaire d’évaluer 2⁴⁰ possibilités pour épuiser tous les mots de passes équivalents et être sûr de découvrir le mot de passe.
Cela signifie également que lorsqu’un mot de passe gagne 1 bit d’entropie, sa complexité est multipliée par 2.
Exemples
Cas 1 : mot de passe aléatoire
Supposons que vous choisissiez un mot de passe de 8 caractères alphanumériques, avec majuscules et minuscules, généré aléatoirement. Votre mot de passe est par exemple : fM3d8DfL.
Votre “alphabet” est composé de 62 caractères (10 chiffres, 26 minuscules et 26 majuscules). Le nombre total de mots de passe possible dans cet alphabet est de 62⁸.
L’entropie de votre mot de passe est la valeur x tel que :
2^x = 62⁸ soit x = log(62⁸)/log(2) = 47.63
Votre mot de passe possède donc 47 bits d’entropie mais a un défaut majeur : il est complexe à retenir.
Cas 2 : mot de la langue française
Prenons le mot de passe “bonhomme”. Il s’agit d’un mot usuel de la langue française, et il suffit pour un attaquant de parcourir un dictionnaire des 1000 mots les plus courants en français pour découvrir le mot de passe.
L’entropie de ce mot de passe est donc de log(1000)/log(2) soit environ 10, ce qui est très faible.
Cas 3 : caractères spéciaux
Ajoutons des contraintes à notre mot de passe en imposant à l’utilisateur l’utilisation d’une majuscule et d’un chiffre.
Soumis à de telles contraintes, les utilisateurs ont tendance à placer la majuscule sur le premier caractère (ce qui ne fait pas du tout augmenter l’entropie si on sait que la majuscule est obligatoire), et à placer le chiffre en dernier.
Ainsi, le mot de passe Bonhomme8 ne possède que 13 bits d’entropie (10 bits pour Bonhomme et 3 bit pour le chiffre puisqu’il y a 10 possibilités, et 10 est compris entre 2³ et 2⁴.
Le mot de passe bo6nhoMme a une entropie un peu plus élevée. Pour calculer son entropie, nous avons besoin de connaître la longueur moyenne des mots de notre dictionnaire : considérons qu’elle vaut 8. Comme précédemment, nous avons 3 bits pour le choix du chiffre. La majuscule est choisie aléatoirement parmi les 8 caractères (2³ possibilités, donc 3 bits supplémentaires) et la position du chiffre également (encore 3 bits supplémentaires). Ce mot de passe possède donc une entropie de 19 bits.
bo6nhoMme semble être un mot de passe sécurisé, mais son entropie reste relativement faible. Pour épuiser toutes les possibilités, il suffit de 2¹⁹ essais, soit 524288.
Sécurité et entropie
Dans la RFC 4086, l’IETF évalue le risque d’attaque “en ligne”, c’est-à-dire lorsqu’un attaquant effectue un appel réseau vers le serveur pour vérifier la validité d’un mot de passe. Leur recommandation est de 29 bits d’entropie au minimum pour un mot de passe standard. Avec une telle entropie, un attaquant a une chance sur 1000 de trouver le mot de passe en un an, à raison d’un essai toutes les 6 secondes.
Pour un mot de passe nécessitant davantage de sécurité, leur recommandation est de 39 bits d’entropie (environ 1000 fois plus complexe, donc 1 chance sur 1 million au bout d’un an). A titre d’exemple, un mot de passe aléatoire de 8 caractères alphanumériques sans majuscule (comme hs6t1wda) possède 41 bits d’entropie.
Faut-il pour autant imposer à vos utilisateurs l’utilisation de mots de passe à forte entropie? C’est un sujet difficile et il y a d’autres facteurs à prendre en compte. Si vous imposez à vos utilisateurs des mots de passe trop complexes, le risque majeur devient l’utilisateur lui-même, qui par peur d’oublier le mot de passe, va noter le mot de passe au sein d’un fichier non chiffré, ou sur un post-it collé sur son écran!
Gestionnaire de mots de passe
Un gestionnaire de mot de passe permet d’utiliser facilement des mots de passe à très forte entropie et différents entre chaque site. L’utilisateur d’un gestionnaire de mot de passe n’a plus qu’un seul mot de passe à retenir, celui qui lui permet de déchiffrer les données stockées par le gestionnaire.
Xkcd
Pour finir, voici un xkcd qui traite de ce sujet (chaque petit carré représente un bit d’entropie) :
Sources
https://en.wikipedia.org/wiki/Password_strength
https://tools.ietf.org/html/rfc4086
https://xkcd.com/936/