Votre mot de passe est-il dans une fuite de données ?

Une fuite de données, c’est ce qui se produit quand la base de mots de passe d’un service s’échappe au grand jour — et un corpus de fuites est la collection de mots de passe récoltés dans des centaines de ces évasions, indexée pour que chacun puisse demander si un mot de passe donné en fait partie. Si le vôtre en fait partie, les attaquants le possèdent déjà : il figure dans des dictionnaires qui sont essayés automatiquement contre chaque page de connexion qu’ils peuvent atteindre. Cet article explique comment la vérification fonctionne sans jamais révéler le mot de passe, ce qu’un nombre de “trouvé 52 millions de fois” signifie vraiment, pourquoi “introuvable” n’est pas un certificat de bonne santé, et pourquoi il ne faut jamais coller un mot de passe dans un chatbot pour demander s’il est sûr. Pour exécuter la vérification, utilisez la Vérification de fuite de mot de passe.

Ce qu’est un corpus de fuites

Chaque fuite majeure laisse le même résidu : une base de noms d’utilisateur et de mots de passe, généralement stockés sous forme de hashes, copiée hors des systèmes d’une entreprise et transmise, vendue ou publiée. Prises isolément, ces bases sont la preuve de l’échec d’une entreprise ; réunies, dédupliquées et indexées, elles deviennent autre chose — un recensement des mots de passe que les gens utilisent vraiment. Le corpus Pwned Passwords de Have I Been Pwned, celui que le vérificateur de ce site interroge, contient plus d’un milliard de mots de passe issus de centaines de fuites, et il grandit chaque fois qu’une nouvelle fuite apparaît. Ce n’est pas une liste de mots de passe faibles compilée par des théoriciens. C’est un registre des mots de passe que de vraies personnes ont choisis, tapés et perdus.

C’est pourquoi le corpus est un miroir si impitoyable. Un mot de passe que vous avez inventé en cinq secondes — un nom plus une année de naissance, une équipe de sport plus un point d’exclamation, un parcours de clavier avec un chiffre à la fin — a très probablement été inventé sous exactement la même forme par des milliers d’autres personnes, et si l’une d’elles l’a utilisé sur un service compromis, il est dans le corpus. Les attaquants ne devinent pas les mots de passe un par un comme le ferait une personne. Ils pratiquent le bourrage d’identifiants : ils prennent une liste de paires nom d’utilisateur-mot de passe divulguées, ou un dictionnaire de mots de passe divulgués, et les essaient automatiquement, des millions de tentatives par heure, contre des pages de connexion partout. Un mot de passe dans le corpus est un mot de passe qui figure déjà sur la liste.

Comment fonctionne la vérification en cinq caractères

Vérifier un mot de passe contre une base d’un milliard d’entrées semble devoir exiger d’envoyer le mot de passe à quelqu’un — et pendant des années, ce fut l’objection honnête à chaque service de vérification de fuites. La solution est une astuce appelée k-anonymat, et elle est assez simple pour être énoncée en une phrase : le service ne sait jamais quel mot de passe vous avez demandé, parce qu’il n’en voit jamais assez pour le distinguer. Votre mot de passe est haché dans le navigateur avec SHA-1, ce qui produit une empreinte de 40 caractères. Seuls les 5 premiers caractères de cette empreinte sont envoyés à Have I Been Pwned. Le service renvoie tous les suffixes d’empreinte qui partagent ces 5 caractères — généralement environ huit cents — et votre navigateur cherche son propre suffixe dans la liste, localement, sur votre appareil.

Cinq caractères est le nombre qui porte tout. Un préfixe hexadécimal de 5 caractères a environ un million de valeurs possibles, donc chaque préfixe est partagé par environ un millier de mots de passe dans un corpus d’un milliard d’entrées — assez de sosies pour que le service ne puisse pas identifier votre mot de passe, et assez peu pour que la réponse tienne dans une seule petite réponse. Rien du mot de passe lui-même ne traverse le réseau : ni le mot de passe, ni son hash complet, ni même un indice de sa longueur. Ce même choix explique pourquoi la vérification n’a besoin ni de compte, ni de clé API, ni d’une limite de débit digne d’être remarquée, et pourquoi les réponses peuvent être mises en cache pendant des semaines : la réponse pour un préfixe est la même pour tous ceux qui demandent. La Vérification de fuite de mot de passe de ce site met en œuvre exactement ce modèle, dans le navigateur, avec le hash calculé localement avant que quoi que ce soit soit envoyé.

Ce que “trouvé N fois” signifie — et que faire

Un nombre supérieur à zéro signifie que le mot de passe a été vu dans des fuites autant de fois, et le nombre est une mesure directe de la rapidité avec laquelle il sera essayé. Un nombre en millions — “password” lui-même a été vu plus de cinquante millions de fois — signifie que le mot de passe fait partie des toutes premières hypothèses de chaque exécution de bourrage d’identifiants, et qu’il doit être changé partout où il est utilisé, en commençant par les comptes qui protègent les autres : l’e-mail d’abord, puis la banque, puis les chemins de récupération de mot de passe. Un petit nombre n’est pas non plus un blanc-seing. Même une seule apparition signifie que le mot de passe figure dans le dictionnaire d’un attaquant, et c’est généralement aussi le signe qu’il suit un schéma devinable — le même schéma qui a mis des milliers de sosies dans le corpus à côté de lui.

La solution est la même quel que soit le nombre : remplacez le mot de passe par un mot de passe unique que vous n’avez jamais utilisé ailleurs, et conservez-le dans un gestionnaire de mots de passe plutôt que dans votre tête. La mémoire humaine est la raison pour laquelle existent les mots de passe réutilisés — personne ne peut se souvenir de cent chaînes aléatoires distinctes — et un gestionnaire est l’outil qui rend l’unicité abordable. Générez le remplaçant avec le Générateur de mots de passe, enregistrez-le dans le gestionnaire, puis changez le mot de passe sur chaque service où l’ancien était utilisé, en commençant par ceux qui permettraient à un attaquant de réinitialiser les autres. Si le même mot de passe protégeait plusieurs comptes, considérez-les tous comme exposés : les attaquants essaient un mot de passe divulgué contre chaque service qu’ils peuvent atteindre, pas seulement celui dont il a fuité.

Ce que “introuvable” ne signifie pas

Un nombre de zéro est une bonne nouvelle avec une limite stricte. Il signifie que le mot de passe n’a pas été vu dans les fuites que ce corpus connaît — rien de plus. Il ne signifie pas que le mot de passe est solide : un mot de passe court construit à partir d’un mot de dictionnaire et d’un chiffre peut être absent du corpus et pourtant tomber devant une attaque par devinette en quelques minutes, car deviner n’exige pas que le mot de passe ait fuité d’abord. Il ne signifie pas que le mot de passe est sûr : les fuites mettent des mois ou des années à faire surface, et un mot de passe qui se trouve dans une fuite non signalée est invisible pour tous les corpus jusqu’au jour où il ne l’est plus. Et il ne signifie pas qu’un mot de passe réutilisé est acceptable : un mot de passe utilisé sur dix sites est à une fuite de les perdre tous les dix, quoi que dise le nombre du jour.

La façon honnête de lire un zéro est comme un contrôle réussi parmi plusieurs. Le mot de passe n’est pas connu comme divulgué — cela mérite d’être su, et c’est la seule chose que la vérification peut vous dire. Savoir s’il est aussi assez long, assez aléatoire et utilisé à un seul endroit est une question distincte, et la vérification ne peut pas y répondre. La norme qu’il vaut la peine de tenir est celle des recommandations du NIST sur les secrets mémorisés, énumérées ci-dessous : privilégier la longueur plutôt que les règles de complexité, ne jamais exiger de changements périodiques pour eux-mêmes, et vérifier les nouveaux mots de passe contre les corpus de fuites au moment où ils sont choisis — ce qui est exactement la vérification que décrit cet article. Un mot de passe long, aléatoire, unique et introuvable est un bon mot de passe. Retirez l’une de ces quatre propriétés et le zéro ne signifie plus grand-chose.

Ne collez jamais un mot de passe dans un chatbot

La façon la plus dangereuse de demander “mon mot de passe est-il sûr ?” est de coller le mot de passe dans un chatbot ou un assistant IA et de le lui demander directement. Un chat conserve une transcription : votre mot de passe serait stocké sur les serveurs de quelqu’un d’autre, conservé selon sa politique de rétention, utilisé pour entraîner ou affiner des modèles, et peut-être cité tel quel — dans une réponse ultérieure, à quelqu’un d’autre entièrement. Il en va de même pour tout site web qui vous demande de taper un mot de passe dans son formulaire et promet de le juger : à moins que la page ne hache le mot de passe localement et ne vous montre le mécanisme, comme le fait le vérificateur de ce site, supposez que le mot de passe est envoyé, stocké et journalisé. Une vérification de fuite vaut la peine précisément parce qu’elle peut se faire sans remettre le secret à qui que ce soit — et au moment où vous collez le secret dans un chat pour poser la question, vous avez créé l’exposition même que la vérification existe pour détecter.

La règle se généralise. Mots de passe, clés API, jetons et clés privées sont toutes des choses qui ne doivent jamais être tapées dans un chat, un ticket, une publication de forum ou un document partagé sous forme brute — raison pour laquelle ce site dispose aussi d’un Secret Redactor pour les retirer du texte avant de le partager, et d’un article compagnon sur le masquage des secrets avant de les coller. Quand un secret doit vraiment changer de mains, envoyez-le par un gestionnaire de secrets ou un lien à usage unique qui expire, dans un canal distinct de la discussion. Et quand vous devez savoir si un mot de passe a fuité, utilisez le mécanisme construit pour la question : hachez-le localement, envoyez cinq caractères, et comparez le reste sur votre propre appareil. C’est toute la vérification, et c’est la seule forme de la question qui ne se répond pas à elle-même en créant une nouvelle fuite.

Sources et lectures complémentaires

Questions fréquentes

Est-il sûr de vérifier un mot de passe avec Have I Been Pwned ?

Oui, quand c’est fait comme le fait l’API de plages : le mot de passe est haché dans votre navigateur et seuls les 5 premiers caractères du hash sont envoyés. Have I Been Pwned ne voit jamais le mot de passe ni son hash complet, et ne peut pas savoir lequel des centaines de mots de passe partageant ce préfixe vous avez demandé. Ne collez jamais un mot de passe dans un chatbot ou un formulaire qui l’enverrait en entier pour poser la même question.

Mon mot de passe a été trouvé dans une fuite. Que changer d’abord ?

Commencez par les comptes qui protègent les autres : votre e-mail d’abord, car il peut réinitialiser presque tout le reste, puis la banque et les chemins de récupération de mot de passe, puis tout le reste qui partageait le mot de passe. Générez un remplaçant neuf et unique pour chacun avec le Générateur de mots de passe et conservez-le dans un gestionnaire de mots de passe — ne réutilisez jamais l’ancien mot de passe nulle part, et considérez chaque compte qui le partageait comme exposé.

Un mot de passe peut-il être absent du corpus et pourtant faible ?

Oui. “Introuvable” signifie seulement que le mot de passe n’a pas été vu dans des fuites connues. Un mot de passe court ou prévisible — un mot de dictionnaire plus un chiffre, un nom plus une année — peut être absent du corpus et pourtant tomber devant une devinette en quelques minutes. Ne gardez un mot de passe que s’il est long, aléatoire, unique à un site, et introuvable.