Mots de Passe : Comment les Stocker pour une Sécurité Maximale?

Comment les services en ligne devraient conserver les mots de passe des utilisateurs et que faire pour minimiser les dommages si les données sont divulguées ou piratées.

Alors que la fin du premier quart du 21º siècle approche, tout le monde sait sûrement que les mots de passe des utilisateurs sont une mine d’or numérique et que leur protection est essentielle pour garantir la sécurité et la confidentialité des données. Pourtant, certaines entreprises ne conservent pas correctement les mots de passe.

Cet article explique comment les mots de passe des utilisateurs NE DOIVENT PAS être stockés et quelles méthodes les services qui prennent la sécurité au sérieux adoptent.

Une mauvaise façon de procéder : les mots de passe en texte brut

La méthode la plus simple consiste à stocker les mots de passe dans une base de données qui n’est pas chiffrée. Lorsque l’utilisateur essaie de se connecter, l’authentification ne fait que vérifier que les informations saisies correspondent à celles de la base de données.

Il y a tout de même un risque : les cybercriminels pourraient voler cette base de données d’une façon ou d’une autre. Ils pourraient, par exemple, exploiter les vulnérabilités du programme de la base de données. Un employé mal intentionné ayant des privilèges d’accès élevé pourrait aussi voler le tableur qui contient les mots de passe. D’autre part, si les identifiants d’un employé sont divulgués ou interceptés, ils pourraient être utilisés pour voler les mots de passe. En d’autres termes, les choses peuvent se compliquer dans diverses situations. N’oubliez pas que les données que vous conservez dans un format ouvert sont exactement ce que l’on comprend : tout le monde y a accès.

Une façon de procéder légèrement meilleure : les mots de passe chiffrés

Et si les mots de passe sont chiffrés ? À première vue, cette idée n’est pas si mauvaise, mais elle n’est pas si efficace en pratique. Après tout, si les mots de passe de la base de données sont chiffrés, ils doivent tout le temps être déchiffrés pour les comparer avec ce que l’utilisateur saisit.

Cela signifie que la clé de chiffrement doit se trouver à proximité. Si c’est le cas, les cybercriminels peuvent facilement trouver la clé et la base de données des mots de passe. Cette situation réduit à néant tout le travail effectué : les cybercriminels peuvent alors rapidement déchiffrer la base de données et obtenir les mots de passe en texte clair. Nous revenons au point de départ.

Comme les cryptographes le rappellent souvent, le chiffrement ne résout pas le problème de la confidentialité des données ; il le transforme seulement en un problème relatif au stockage sécurisé des clés. Vous pouvez imaginer divers plans astucieux pour réduire les risques mais, en général, il est impossible de garantir la sécurité des mots de passe de cette façon.

Une bonne façon de procéder : les mots de passe hachés

L’idéal est de ne pas conserver les mots de passe. Après tout, il est impossible de voler quelque chose qui n’existe pas, n’est-ce pas ?

Mais alors, comment vérifier que l’utilisateur qui essaie de se connecter a saisi le bon mot de passe ? C’est à ce moment-là que les fonctions de hachage entrent en jeu : des algorithmes de cryptographie spéciaux qui brouillent les données et les transforment de façon prévisible mais irréversible en une chaîne de bits d’une longueur définie.

Prévisible signifie qu’à chaque fois que les mêmes données sont converties, le hash obtenu est le même. Et irréversible signifie qu’il est parfaitement impossible de récupérer les données hachées à partir du hash. C’est ce que n’importe quel service en ligne fait s’il s’inquiète ne serait-ce qu’un peu des données des utilisateurs et de sa réputation.

Lorsqu’un utilisateur crée un mot de passe lors de l’enregistrement, le mot de passe n’est pas stocké ; la base de données ne conserve que le nom d’utilisateur et le hash associé. Ensuite, lors du processus de connexion, cet hash est comparé avec le hash du mot de passe saisi par l’utilisateur. Les mots de passe sont les mêmes si les hashs sont identiques.

Si une base de données est divulguée, les cybercriminels ne pourront pas obtenir les mots de passe ; ils n’auront que les hashs, et il est impossible de récupérer les données originales à partir de cet élément (irréversible, vous vous en souvenez ?). Il est évident qu’il s’agit d’une grande avancée en termes de sécurité, mais ne vous réjouissez pas trop vite : si les cybercriminels obtiennent les hashs, ils peuvent essayer de lancer une attaque par force brute.

Une meilleure façon de procéder : les hashs salés

Après avoir obtenu vos données, les cybercriminels peuvent essayer d’extraire les mots de passe par force brute. Cela signifie qu’ils prennent une combinaison de caractères, qu’ils calculent son hash et qu’ils vérifient s’il correspond à un des hashs qui se trouvent dans la base de données. S’il n’y a aucune correspondance, ils essaient une autre combinaison, et ainsi de suite. S’il y a une correspondance, ils connaissent désormais le mot de passe utilisé pour calculer le hash de la base de données.

Pire encore, les rainbow tables permettent d’accélérer considérablement le processus suivi pour déchiffrer les mots de passe hachés. Les rainbow tables sont d’immenses tableaux de données de fonctions de hachage calculées à l’avance pour les mots de passe les plus courants. Ainsi, elles simplifient la recherche de correspondances dans la base de données volée. Évidemment, tout se fait automatiquement, et le processus de déchiffrement des mots de passe devient trop rapide pour être acceptable.

Nous avons tout de même une bonne nouvelle : il est impossible de calculer à l’avance les hashs de toutes les combinaisons de caractères possibles. Une rainbow table complète pour tous les algorithmes de hachage occuperait plus d’espace disque qu’il n’y en a sur la planète. Même pour l’algorithme peu fiable MD5, ce document contiendrait hypothétiquement (inspirez profondément) 340 282 366 920 938 463 463 374 607 431 768 211 456 entrées. C’est pourquoi les rainbow tables n’incluent que les combinaisons les plus courantes.

Pour lutter contre l’utilisation des rainbow tables, les cryptographes ont trouvé une solution qui utilise une autre propriété importante des fonctions de hachage : la moindre modification du texte source altère le hachage et le rend méconnaissable.

Avant que le hash du mot de passe ne soit calculé et écrit dans la base de données, un ensemble aléatoire de caractères (sel, salt en anglais) est ajouté. Ainsi, les hashs de la base de données sont modifiés de façon que même les mots de passe les plus simples, les plus évidents et les plus souvent utilisés comme « 12345678 » et « mot de passe » ne peuvent pas être obtenus lors d’une attaque par force brute avec des rainbow tables.

La variante la plus simple utilise le même sel pour tous les mots de passe. En revanche, la technique la plus résistante au piratage crée un sel différent pour chaque entrée individuelle. La beauté de cette approche est que les sels peuvent être stockés dans la même base de données sans aucun risque supplémentaire. Connaître le sel ne simplifie pas le travail des cybercriminels. Pour pirater les hashs, ils doivent tout de même avoir recours à de la force brute et essayer toutes les combinaisons possibles.

Plus il y a de services en ligne qui adoptent cette méthode de non-stockage des mots de passe, moins il est probable qu’il y ait un vol massif des identifiants des utilisateurs et moins il y a de risques de souffrir des problèmes liés au piratage de comptes.

Conseils