Français

Outils de développement · Calculateur de hachage SHA

Pourquoi vous ne devez pas stocker les mots de passe sous forme de hachages SHA-256 simples

· Pourquoi c'est important

mots de passe sécurité cryptographie

Un chronomètre montrant une supposition instantanée par rapport à une fonction de hachage de mot de passe ajoutant des retards intentionnels
Illustration vectorielle originale de ToolAcre

SHA-256 est conçu pour être rapide, ce qui est exactement ce que vous ne voulez pas pour les mots de passe. Cet article explique pourquoi la vitesse est le problème et quelles fonctions de hachage de mot de passe font différemment.

SHA-256 n'est pas un stockage de mot de passe ; c'est un hachage rapide. Le simple SHA-256 donne aux attaquants la même vitesse pour deviner, ce qui le rend inapproprié bien qu'il s'agisse d'un algorithme cryptographiquement fort.

Un développeur implémente un système de connexion et stocke les mots de passe sous forme de hachages SHA-256. L'algorithme est cryptographiquement fort et l'application n'applique aucun sel, gardant le code simple. Lorsqu'un utilisateur se connecte, l'application hache la soumission et la compare à la valeur stockée. Cette conception est élégante dans sa simplicité et est totalement inadaptée au stockage de mots de passe. Il ne s’agit pas là d’une préoccupation théorique ; il s’agit de l’erreur grave la plus courante dans les systèmes d’authentification. La conception semble défendable jusqu’à ce que l’on considère ce qu’un attaquant peut faire avec des données volées.

Le défaut n'est pas que SHA-256 soit faible. SHA-256 est un algorithme cryptographique robuste, approuvé par la communauté de la sécurité et utilisé dans toute l'industrie pour les contrôles d'intégrité et l'adressage de contenu. Le défaut est que SHA-256 est rapide, et la rapidité est précisément le contraire de ce dont les mots de passe ont besoin. Un hachage de mot de passe n’est pas n’importe quelle primitive cryptographique ; il s'agit d'un type spécifique d'outil conçu pour un problème spécifique : la défense contre les devinettes. La vitesse est une fonctionnalité des sommes de contrôle ; dans les mots de passe, c'est une catastrophe.

La rapidité est l'objectif de SHA-256 : les contrôles d'intégrité nécessitent de la rapidité, et un attaquant obtient la même vitesse pour deviner

Lorsqu'une base de données de hachages de mots de passe SHA-256 est compromise, un attaquant n'a pas besoin d'inverser les hachages. L'attaquant crée un dictionnaire : des mots de passe courants tels que « mot de passe », « 123456 », « bonjour » et des millions d'autres. Chaque candidat est haché avec SHA-256 (une opération informatiquement triviale) et comparé à la base de données volée. Un attaquant peut calculer les valeurs candidates SHA-256 avec la même primitive rapide utilisée par le service de connexion, puis comparer chaque résultat hors ligne sans limite de débit. Le taux exact dépend du matériel et de la mise en œuvre, c'est pourquoi cet article ne fait délibérément aucune supposition par seconde ou sur le temps de violation.

La vitesse est tout le problème. SHA-256 est censé être rapide. C'est son intention de conception. Il vous permet de vérifier les sommes de contrôle de téléchargement, de calculer les adresses de contenu et de créer des arborescences Merkle sans attendre. Dans ces applications, la vitesse est une fonctionnalité. Pour les mots de passe, la vitesse est une catastrophe. Lorsqu'une base de données de mots de passe est volée et hachée avec SHA-256, l'attaquant a la même vitesse pour deviner que le serveur légitime pour la vérification. Cette symétrie est ce qui brise la sécurité des mots de passe. Le serveur légitime et l’attaquant bénéficient tous deux d’un résumé rapide à usage général ; seul l’attaquant peut le répéter hors ligne sans les contrôles de connexion de l’application.

Dictionnaires et tables arc-en-ciel – précalcul par rapport aux hachages non salés et ce qu'un sel change

C'est là qu'un dictionnaire précalculé devient pratique. Un attaquant peut passer une journée à calculer les hachages SHA-256 pour les mille mots de passe les plus courants, pour des modèles courants comme Name1990 ou pour des dictionnaires entiers dans plusieurs langues. La table résultante est appelée table arc-en-ciel. La recherche d'un hachage SHA-256 volé sur une table précalculée est instantanée. Même sans table précalculée, calculer un milliard de suppositions est trivial avec le hachage accéléré par GPU. Le coût de calcul pour l'attaquant est si faible que même les mots de passe les plus faibles tombent en quelques minutes.

Le calculateur de hachage ToolAcre SHA démontre directement cette vitesse. Collez un court texte, cliquez sur le bouton SHA-256 et le résultat est instantané. Ce résultat instantané – la propriété que vous admirez dans un calculateur de hachage – est la propriété exacte qui rend SHA-256 indéfendable pour les mots de passe. Un attaquant obtient le même résultat instantané pour chaque supposition. Pour les sommes de contrôle et les contrôles d’intégrité, cette vitesse est parfaite. Pour les mots de passe, c’est fatal à la sécurité.

Ce que les fonctions de hachage de mot de passe ajoutent : facteurs de travail, dureté de la mémoire et sels par utilisateur dans bcrypt, scrypt, Argon2 et PBKDF2

Un sel est une valeur aléatoire ajoutée au mot de passe avant le hachage, donc le sel de chaque utilisateur est différent. Même si deux utilisateurs ont le même mot de passe, ils hachent des valeurs différentes. Cela casse les tables arc-en-ciel précalculées ; un attaquant doit calculer la table indépendamment pour chaque sel. Avec les sels générés indépendamment par utilisateur, une table précalculée ne s'applique plus inchangée à chaque compte. Cependant, un sel ne fait que pousser l'attaquant à calculer la table pendant l'attaque plutôt qu'avant. Si le hachage est toujours rapide, l'attaquant calcule simplement plusieurs tables en parallèle et continue de deviner chaque compte avec une primitive rapide. Le sel est nécessaire mais pas suffisant. Cela empêche la réutilisation du dictionnaire entre les victimes, mais cela ne ralentit pas l'opération principale de l'attaquant : deviner. La vitesse de hachage est toujours la vitesse de deviner.

Exemple concret : la rapidité avec laquelle le SHA-256 d'un mot de passe commun est reconnu par rapport à un hachage de mot de passe optimisé, décrit qualitativement

Une fonction de hachage de mot de passe adopte une approche différente. Bcrypt, scrypt, Argon2id et PBKDF2 sont spécialement conçus pour la vérification des mots de passe. Ils incluent tous un facteur de travail : un paramètre qui rend le hachage volontairement coûteux. Argon2 est le plus moderne ; il ajuste à la fois le temps CPU et la consommation de mémoire. Bcrypt utilise un facteur de coût réglable qui double le travail à chaque incrément. Tous incluent une génération de sel intégrée. Ces outils sont conçus en gardant à l’esprit le modèle de l’attaquant. Le facteur travail est crucial.

Une fonction de hachage de mot de passe intègre le coût configuré à chaque vérification. Un attaquant qui souhaite tester des candidats doit également payer ce coût pour chaque supposition. Les timings concrets ne peuvent pas être copiés en toute sécurité entre les déploiements, c'est pourquoi la section sur les paramètres nécessite une analyse comparative sur la classe de production réelle du matériel. Cette asymétrie est ce qui fait que le hachage de mot de passe fonctionne. Le facteur travail passe de « l’avantage de l’attaquant » à « l’avantage du défenseur ».

Migration d'une ancienne table SHA-256 — encapsulation des hachages existants et rehachage lors de la prochaine connexion

La comparaison travaillée reste qualitative car ce référentiel ne contient aucun benchmark pour une fonction de mot de passe ou un attaquant particulier. Un mot de passe commun produit le même SHA-256 immédiatement à chaque fois, de sorte qu'une entrée de dictionnaire existante peut l'identifier par égalité. Un enregistrement de mot de passe optimisé comprend ses propres paramètres de sel et de coût et nécessite un travail configuré pour chaque candidat.

Ce contraste établit l'erreur de conception sans promettre de suppositions par seconde. Le matériel, la mise en œuvre et les paramètres sélectionnés déterminent le timing. La conclusion défendable est invariable : un résumé à usage général n'a pas de facteur de travail ni de coût de mémoire réglable, tandis qu'une fonction de hachage de mot de passe est choisie spécifiquement pour imposer ces coûts.

Ce que cela ne couvre pas : choisir les paramètres d'un hachage de mot de passe spécifique, qui dépend de votre matériel et de votre modèle de menace.

La sélection des paramètres est délibérément en dehors de cette calculatrice et de cet article. Les paramètres corrects dépendent des budgets de latence du serveur, de la mémoire disponible, de la concurrence et du modèle de menace actuel. Par conséquent, copier une valeur fixe à partir d'un déploiement sans rapport transformerait un contrôle de sécurité en folklore. Comparez la fonction de mot de passe sélectionnée sur du matériel de classe production et revisitez-la à mesure que la capacité change.

ToolAcre ne peut pas effectuer cet exercice : son panneau accepte le texte et un identifiant SHA, puis renvoie un simple résumé. Il n'expose aucun champ de sel, paramètre de mémoire, contrôle d'itération ou format d'enregistrement de mot de passe. Cette absence est un signal de limite utile, et non une fonctionnalité manquante à contourner en hachant à plusieurs reprises un mot de passe dans la zone de texte.

À retenir : le résultat instantané est l'avertissement : le calculateur de hachage ToolAcre SHA indique à quelle vitesse SHA-256 est, c'est pourquoi il ne doit pas conserver les mots de passe de vos utilisateurs.

Un système existant qui stockait les mots de passe sous la forme simple SHA-256 peut être migré sans que tous les utilisateurs ne soient réinitialisés immédiatement. La technique consiste à "envelopper" l'ancien hachage : prenez la valeur SHA-256 et hachez-la à nouveau avec Argon2. Lors de la prochaine connexion de l'utilisateur, le système vérifie si l'ancien SHA-256 correspond ; si tel est le cas, il calcule Argon2 sur ce résultat et stocke la version encapsulée. La prochaine fois que l'utilisateur se connectera, le système vérifiera directement avec Argon2. La migration s'effectue de manière transparente pendant le flux de connexion normal.

Cette approche globale garantit que les anciens mots de passe qui ont été compromis sont désormais protégés par le facteur de travail. Un attaquant disposant de l'ancienne base de données de hachages SHA-256 ne peut plus simplement les pirater ; ils doivent attaquer la version enveloppée, qui inclut le coût d'Argon2. La migration s'effectue de manière transparente pour les utilisateurs lors de leur flux de connexion normal. Chaque connexion crée une opportunité de renforcer le hachage sans perturber l'expérience utilisateur. Le choix du bon facteur de travail dépend de votre matériel et de votre modèle de menace. Les valeurs par défaut d'Argon2 sont raisonnables : 19 itérations, 512 MB mémoire et 1 parallélisme pour les services Web.