Ne stockez pas les mots de passe de vos utilisateurs en clair

Il est très compliqué, voire impossible, de s’assurer que son appareil informatique ne sera pas un jour piraté. Il en va de même pour les entreprises qui stockent les données. Pour s’en convaincre, il suffit de regarder l’actualité et le déluge de communiqués de « fuites » de données. Cela concerne tout le monde, les petits commes les grands.
L’éventualité que les données soient perdues devrait donc toujours être prise en compte et tout devrait être fait pour s’assurer que cela n’arrive pas, ou si cela arrive, que les conséquences soient les moins graves possibles.
Bien stocker les mots de passe de ses utilisateurs
Parmi les données sensibles, on retrouve les mots de passe des utilisateurs. Ces mots de passe sont choisis par les internautes et communiqués aux éditeurs au moment de la création d’un compte personnel sur un site Internet.
En s’inscrivant, l’internaute espère que l’entreprise à qui il confie son sésame en prenne le plus grand soin, c’est-à-dire le conserve correctement, ne le communique à personne et ne le perde pas. Sa divulgation ou sa perte peut ne pas avoir de conséquences graves si les données associées au compte n’ont que peu d’importance. Les conséquences ne se limitent cependant pas toujours au compte en question, car les internautes utilisent bien souvent le même mot de passe sur beaucoup ou l’intégralité de leurs comptes. En divulguant le mot de passe de l’utilisateur, c’est donc potentiellement l’ensemble des données de l’utilisateur qui peuvent être consultées ou supprimées.
Pour éviter que cela n’arrive et protéger les internautes, les éditeurs qui prennent la responsabilité de conserver les mots de passe des internautes doivent prendre certaines mesures. Une de ces mesures est de stocker une empreinte numérique du mot de passe et non pas le mot de passe directement, en clair.
Empreinte numérique, fonction de Hachage, kézako ?
Une empreinte numérique ou « hash » est une représentation d’un texte, qui est générée à l’aide de fonctions mathématiques savantes. Ces fonctions, appelées « fonctions de hachage », ont la caractéristique principale d’être à sens unique, c’est-à-dire qu’à partir d’un texte, on peut calculer son empreinte, mais l’inverse n’est pas mathématiquement possible[1].
L’empreinte générée dépend de la fonction de hachage utilisée. Par exemple, l’empreinte du mot « planète » en utilisant la fonction de hachage SHA-256 correspond au texte suivant :
1279912FF0F45048EE3DF2189B3F68DC7B5F53EC9880BEEB564C4C9FFC7F478F
La taille de ces empreintes est fixe et ne dépend pas de la taille du texte initial. Sa composition, elle, varie selon le contenu du texte. L’empreinte de la phrase « Le ciel est bleu » sera donc de la même taille que l’empreinte précédente, mais sera composée de caractères différents :
A02530E344E585473034399CA50FDE57E91DB953E65F35F52A54AAD4FF9BE908
La deuxième caractéristique importante est que chaque texte génère une empreinte différente, ou presque[2]. Chaque empreinte est donc théoriquement la représentation d’un seul texte.
Empreintes numériques appliquées aux mots de passe
Ces fonctions de hachage sont utiles pour éviter de conserver les mots de passe des utilisateurs en clair.
Lorsqu’un utilisateur s’inscrit et fournit un mot de passe, l’empreinte de son mot de passe peut être générée et stockée. Le mot de passe, lui, n’est pas conservé. Ensuite, lorsque l’utilisateur revient, il communique encore une fois son mot de passe pour s’authentifier. Une empreinte ce mot de passe est à nouveau générée et comparée avec celle qui a été stockée intialement. Si les deux empreintes sont identiques, le mot de passe est considéré valide et l’authentification est acceptée.
Ce mécanisme permet d’éviter de stocker les mots de passe en clair, tout en conservant la capacité de valider le mot de passe fourni par l’internaute.
D’un point de vue de la sécurité, cela change tout, car les éditeurs et leur personnel n’ont plus un accès direct aux mots de passe de leurs utilisateurs. Cela permet aussi d’éviter, dans le cas extrême où la base de données contenant les mots de passe était divulguée, qu’un éventuel attaquant retrouve facilement les mots de passe des utilisateurs.
Une pratique élémentaire de sécurité
S’il était acceptable il y a quelques années de stocker les mots de passe des internautes sans réelle sécurité, ce n’est plus le cas aujourd’hui. Toutes les organisations s’accordent sur le fait que les mots de passe ne doivent jamais être stockés en clair.
C’est le cas de l’ANSSI, l’agence française de sécurité informatique :
« Le stockage des mots de passe en clair doit être absolument proscrit »
... mais aussi par la CNIL :
« S’agissant des modalités de conservation, la commission considère que le mot de passe ne doit jamais être stocké en clair. Elle recommande que tout mot de passe […] devant être stocké sur un serveur soit préalablement transformé au moyen d’une fonction cryptographique non réversible et sûre »
L’OWASP, organisation hautement respectée pour ses travaux sur la sécurité des applications, émet également une recommandation identique :
« Dans presque toutes les circonstances, les mots de passe doivent être hashés […], car cela rend la tâche très difficile, voire impossible, pour un [attaquant] d’obtenir les mots de passe originaux à partir des empreintes. »
Stocker les mots de passe en clair peut être sanctionné
Le fait de stocker les mots de passe en clair ou sous une forme non appropriée est non seulement contraire aux recommandations de sécurité et dangereux pour les utilisateurs, mais est aussi une infraction au RGPD, le Règlement Général sur la Protection des Données, qui demande de prendre des « mesures techniques et organisationnelles appropriées afin de garantir un niveau de sécurité adapté au risque »[3].
Stocker les mots de passe en clair n’est pas une mesure appropriée, l’utilisation de fonctions de hachage peu robustes, comme MD5[4] ou SHA1[5], non plus. Des sanctions[6] allant du simple avertissement à une amende montant jusqu’à 4% du chiffre d’affaires de l’éditeur est possible pour les contrevenants. La mise de place de mesures de sécurité devrait toutefois être motivée par une volonté de protéger les internautes plutôt que par la peur d’une éventuelle amende.
La sécurité évolue, les pratiques aussi
Les pratiques de sécurité ne sont pas figées. Les recommandations d’hier ne sont probablement plus applicables aujourd’hui et ne le seront surement pas demain. Pour stocker les mots de passe de façon sécurisée, une bonne pratique est de suivre les les recommandations[7] de l’OWASP et de suivre régulièrement les annonces relatives à la sécurité des fonctions de hachage.
Notes et références
- ↑Il n’existe pas de fonction mathématique pour retrouver le texte initial à partir d’une fonction de hachage robuste. Il peut cependant être possible de le faire, par d’autres techniques, notamment en utilisation des listes pré-calculées d’empreintes appelées « Rainbow table ».
- ↑Étant donné le faible nombre de caractères d’une empreinte et l’infinité de possibilités des textes à chiffrer, il existe forcément plusieurs textes avec la même empreinte. On appelle ce phénomène des « collisions ».
- ↑Lorsque des données à caractère personnel sont traitées, le RGPD indique de prendre « mesures techniques et organisationnelles appropriées afin de garantir un niveau de sécurité adapté au risque » (source : RGPD, article 32-1).
- ↑La fonction de hachage MD5 ne devrait pas être utilisée pour stocker les mots de passe, car des vulnérabilités majeures ont été découvertes. Voir « Peut-on utiliser la fonction de hachage MD5 pour enregistrer l’empreinte des mots de passe de ses utilisateurs ? ».
- ↑La fonction de hachage SHA1 ne devrait pas être utilisée pour stocker les mots de passe, car elle est considérée obsolète. Voir « Peut-on utiliser la fonction de hachage SHA-1 pour enregistrer l’empreinte des mots de passe de ses utilisateurs ? ».
- ↑Des manquements au RGPD peuvent être sanctionnés. Voir « Que risque-t-on en cas de non-respect du RGPD ? ».
- ↑Les recommandations de l’OWASP relatives au stockage des mots de passe : Password Storage Cheat Sheet (en anglais).