Lignes directrices

Stockage du mot de passe

Si votre application authentifie des utilisateurs, il y a de fortes chances qu'elle traite également des mots de passe.

La gestion des mots de passe des utilisateurs est une affaire très importante, et la gestion appropriée de ces mots de passe l'est encore plus. 

Il est difficile d'imaginer un scénario pire que l'attaque d'une application et la fuite des mots de passe des utilisateurs sur l'internet. Personnellement, nous frémissons à cette idée. Alors, comment stocker les mots de passe en toute sécurité et conformément aux meilleures pratiques ? Jetons un coup d'œil à quelques méthodes. 

Chiffrement ou hachage

À première vue, on pourrait penser que le cryptage est une solution décente pour le stockage sécurisé des mots de passe, mais s'en remettre totalement à lui pourrait être quelque peu problématique. 

Le cryptage est par nature une fonction à double sens, ce qui signifie bien entendu que tout comme un mot de passe peut être crypté, il peut également être décrypté. C'est parfaitement logique, n'est-ce pas ? Sinon, comment pourriez-vous vérifier si le mot de passe d'un utilisateur correspond à ce qui est stocké dans la base de données ? 

La possibilité de décrypter les mots de passe constitue donc également un risque important. Si quelqu'un compromet un serveur et obtient le texte chiffré d'un mot de passe, il y a de fortes chances qu'il soit également en mesure d'obtenir les clés nécessaires pour déchiffrer ces mots de passe.

Le hachage, en revanche, est bien mieux adapté aux mots de passe en raison de sa nature unidirectionnelle. Une fois que vous avez haché quelque chose, il n'y a pas de fonction permettant de retransformer directement le texte chiffré en texte clair original. Cette propriété rend les hachages particulièrement adaptés à la protection des mots de passe. 

Tous les hachages ne sont pas créés de la même manière

Une fois que vous avez opté pour le hachage des mots de passe à des fins de stockage, il ne suffit pas d'appliquer une fonction de hachage et de s'arrêter là. 

Il existe des hachages de toutes formes et de toutes tailles, dont la plupart ne sont pas exactement adaptés au stockage des mots de passe, compte tenu de tous les progrès de la technologie informatique au cours de la dernière décennie. 

Comme indiqué précédemment, les hachages ne peuvent pas être inversés car il s'agit d'une fonction à sens unique. Bien que cela soit techniquement vrai, le hachage est également déterministe, ce qui signifie qu'il est également susceptible de faire l'objet de tactiques de forçage brutal qui peuvent permettre à un attaquant d'inverser un hachage pour retrouver le texte brut d'origine s'il dispose de suffisamment de temps et de ressources.

C'est pourquoi nous divisons les fonctions de hachage en deux catégories :

  • Hachures cryptographiques
  • Hachures de mots de passe
Fonctionnalité Hachure cryptographique Hachure du mot de passe
Vitesse Très rapide Intentionnellement lent
Le facteur de travail peut être ajusté Non Oui

L'une des principales caractéristiques des hachages de mots de passe est qu'ils comportent un "facteur de travail" (soit un seul nombre entier, soit plusieurs paramètres) qui définit la quantité d'efforts nécessaires pour calculer le hachage. 

Les processeurs et les GPU étant devenus plus rapides au fil des ans, il est devenu plus facile d'effectuer des attaques massives par force brute contre les hachages sur du matériel grand public, ce qui implique qu'un hachage peut devenir de moins en moins sûr avec le temps. 

Le "facteur de travail" est utilisé pour s'assurer que les hachages sont stockés d'une manière qui suit les tendances de l'industrie. À mesure que le matériel devient plus rapide, vous augmentez le facteur de travail de l'algorithme afin de garantir que le hachage nécessite plus de temps et d'efforts pour être décrypté. Disons, à titre d'exemple, 100 ms sur du matériel contemporain. 

Cela signifie que, dans la pratique, le facteur travail peut devoir être augmenté tous les 2 ou 3 ans.

Hachure cryptographique Hachure du mot de passe
MD5 bcrypt
SHA-1 scrypt
SHA-2 PBKDF2
SHA-3 Argon2