D’abord la conclusion : une liste locale de mots de passe faibles ne soutient qu’une affirmation étroite — « cette chaîne ressemble-t-elle à un mot déjà largement abusé ». Une absence de correspondance ne prouve pas qu’elle n’a jamais figuré dans un dump. Une correspondance dit seulement qu’elle est trop courante et qu’il faut la changer maintenant. La requête de plage Pwned Passwords de Have I Been Pwned est un autre protocole : elle n’envoie que les cinq premiers caractères d’un hash SHA-1. Avant de coller du clair dans n’importe quel « testeur en ligne », confirmez laquelle des trois vous allez lancer.
Répondre à l’intention de recherche en une phrase
Une liste locale de mots de passe faibles ne peut prouver que ceci : la chaîne saisie peut, ou non, être appariée à la liste publique à haute fréquence déjà téléchargée dans cet onglet. Elle ne peut pas prouver « jamais vu sur le web », et elle ne répond pas à « mon e-mail a-t-il figuré dans une fuite ». Les requêtes de plage Pwned Passwords de Have I Been Pwned (HIBP) sont un autre chemin : cet appareil calcule le SHA-1 et n’envoie que les cinq premiers caractères hexadécimaux à https://api.pwnedpasswords.com/range/{prefix} ; le suffixe restant est comparé sur le client.
Cet article s’adresse aux développeurs et à l’exploitation qui veulent « juste tester » un ancien mot de passe, et au support à qui on envoie un lien vers un « testeur de mot de passe en ligne ». Il ne remplace pas le mode d’emploi du testeur de mot de passe, et ne répète pas le contrôle Network de « le chiffrement local a-t-il envoyé le clair ». Ce qu’il faut emporter : ce que chaque méthode fait quitter cet appareil, jusqu’où vont les variantes d’une liste locale, et quelle phrase un ticket peut réellement porter.
Trois « recherches de fuite » ne sont pas le même métier
Cherchez « vérifier si mon mot de passe a fuité » : les résultats mélangent des protocoles qui n’ont rien en commun. Certains sites POSTENT ce que vous venez de taper. D’autres appellent l’API de plage k-anonymat de HIBP. D’autres encore téléchargent une courte liste de mots et la cherchent dans le navigateur. Les trois peuvent afficher « introuvable » ou « compromis » sur le même type de badge. La ligne de requête n’est pas la même, et l’affirmation que vous pouvez défendre non plus.
La OWASP Authentication Cheat Sheet demande aux flux d’inscription et de changement de mot de passe de bloquer les mots courants et compromis, et elle nomme à la fois Pwned Passwords et des listes publiques du type SecLists. Elle ne traite pas une liste locale de 800 lignes et un corpus d’un milliard de hash comme la même preuve. Si un ticket se contente d’écrire « vérifié, pas fuité », le lecteur suivant ne peut pas dire quel filet vous avez utilisé.
| Méthode | Ce qui quitte cet appareil | Ce qu’une absence de correspondance peut soutenir |
|---|---|---|
| Envoyer le clair ou un hash entier | Le mot de passe lui-même, ou un condensé suffisant pour le comparer ou le retrouver | Seulement que ce site ne l’a pas signalé cette fois — pas qu’il est sûr |
| Requête de plage HIBP | Les 5 premiers caractères hexadécimaux d’un hash SHA-1 ou NTLM | Ce hash n’est pas dans l’index actuel de HIBP |
| Liste publique locale à haute fréquence | Le fichier de liste lui-même ; le mot de passe testé reste dans l’onglet | Cette courte liste et ses règles de variantes n’ont pas correspondu |
La troisième méthode utilise encore le réseau : le navigateur fait un GET du fichier de liste. Ce fichier est une liste de mots publique, pas votre mot de passe. Traiter chaque requête comme « ça est allé en ligne, donc le mot de passe a été envoyé » lit mal la frontière. Traiter le mot « local » sur la page comme une preuve manque le premier type de site.
Ne testez pas avec un mot de passe de production, un jeton d’API non renouvelé ou un code de banque en ligne. Inventez un canari qui n’existe que pour ce contrôle — par exemple CanaryPwd-20260902-xK9. Vous vérifiez si cette requête a emporté cette chaîne, pas si vous exposez un vrai secret une seconde fois.
Ce que la liste locale compare réellement
Sur la page testeur de mot de passe FastPwd, la liste est récupérée depuis le chemin same-origin data/leaked-top10k.txt, puis transformée dans cet onglet en une table clé minuscule → rang. Le nom de fichier dit top10k parce que c’est ainsi que les listes publiques à haute fréquence sont souvent nommées. Ouvrez la réponse : vous pouvez compter un peu plus de 800 lignes non vides ; elles commencent par 123456, password, qwerty — des chaînes qui reviennent dump après dump. Le texte produit n’appelle jamais ce fichier « 10 000 entrées » ni « toutes les fuites du web ».
La recherche n’est pas un seul test d’égalité. L’implémentation enchaîne quatre étapes. Une correspondance à n’importe laquelle marque le mot de passe en rouge et force le niveau à Faible.
- Correspondance exacte : la saisie égale une entrée de la liste.
- Repli de casse : passage en minuscules d’abord, donc
Passwordetpasswordsont la même entrée. - Retrait d’un 0–999 final :
qwerty123est réduit àqwerty, puis cherché. - Leet courant :
@/4→a,3→e,1/!→i,0→o,5/$→s,7→t. La même étape peut tourner après le retrait des chiffres finaux.
Si la saisie dépasse 128 caractères, les deux dernières étapes ne tournent pas — seulement l’exacte et le repli de casse. Si le fichier de liste échoue à se charger, la page bascule sur un jeu minimum intégré : password, 123456, 12345678, qwerty, admin123, et la ligne d’état indique encore que le contrôle s’est terminé sur cet appareil. Le rang ne sert qu’à l’indication : Top 100, Top 500, Top 1,000, ou le repli « Liste publique de fuites ». Ce n’est pas le compteur HIBP « vu N fois ».
Le NIST SP 800-63B-4 demande aux vérificateurs, à la création de compte et au changement de mot de passe, de comparer le candidat comme chaîne entière à une liste de mots courants, attendus ou compromis — pas comme sous-chaîne — et de ne pas empiler par-dessus un jeu séparé de règles de composition. Une liste locale à haute fréquence couvre la couche « bloquer ceux que les attaquants devinent en premier ». Le fichier est bien plus petit que les dictionnaires que les attaquants aspergent, et bien plus petit que les hash de fuites que HIBP continue d’intégrer. En juin 2026, le seul ingest June 2026 Stealer Logs de HIBP a ajouté environ 124 millions de mots de passe uniques. Un peu plus de 800 mots publics à haute fréquence attraperont 123456. Ils n’attraperont pas une longue phrase qui n’est apparue que dans un dump interne.
Ce qu’une requête de plage HIBP envoie — et ce qu’elle n’envoie pas
La page mots de passe de HIBP elle-même écrit qu’une absence de résultat « ne signifie pas forcément que c’est un bon mot de passe, seulement qu’il n’a pas été trouvé dans les données que ce site détient ». Le protocole est documenté dans API v3 · Pwned Passwords. Le client hache le mot de passe en SHA-1 (ou NTLM si mode=ntlm), prend les cinq premiers caractères hexadécimaux, et demande GET https://api.pwnedpasswords.com/range/{prefix}. Le serveur renvoie tous les suffixes sous ce préfixe, plus un compteur de vues. Les 35 caractères restants du hash de 40 restent sur cet appareil pour la comparaison.
L’échelle publiée se vérifie sur place : une requête de plage renvoie en général environ 800 suffixes ; l’espace des préfixes vaut 165 = 1 048 576 valeurs, de 00000 à FFFFF, et chaque préfixe doit renvoyer HTTP 200 — pas 404. Un en-tête optionnel Add-Padding: true remplit la réponse jusqu’à 800–1 000 lignes, pour qu’un observateur ne puisse pas déduire le préfixe de la longueur. L’article Cloudflare Validating Leaked Passwords with k-Anonymity appelle cela une requête de plage en k-anonymat : le serveur ne reçoit jamais le hash complet d’un mot de passe qui n’est pas déjà dans le corpus, et ne peut donc pas « démasquer » cette requête à lui seul plus tard.
Une recherche par e-mail est un autre chemin. La documentation est explicite : placer une adresse dans le chemin remet cette adresse à HIBP. La recherche d’e-mail en k-anonymat envoie les six premiers caractères du SHA-1 de l’adresse — pas les cinq premiers d’un hash de mot de passe. Si un ticket écrit « j’ai vérifié sur HIBP », notez si vous avez interrogé un préfixe de hash de mot de passe ou un e-mail. La frontière de confidentialité n’est pas la même, et la conclusion non plus.
FastPwd n’appelle aucune de ces deux API HIBP. Le testeur de mot de passe peut faire une estimation d’entropie locale plus cette liste publique à haute fréquence. Si vous avez besoin d’un corpus d’un milliard de hash, utilisez la page officielle HIBP ou une copie hors ligne que vous hébergez, et ouvrez Network vous-même pour confirmer que la ligne de requête ne contient que cinq caractères hexadécimaux. Ne supposez pas qu’« un outil de sécurité interrogera HIBP pour vous ».
Utiliser Network pour confirmer que le mot de passe n’est pas sorti
« Non envoyé » sur la page n’est pas une preuve. Une chaîne canari, si. Les étapes appartiennent à la même famille que « le chiffrement local a-t-il emporté du clair », mais ce que vous observez, c’est le champ mot de passe et le fichier de liste.
- Ouvrez DevTools Network et cochez Preserve log. Laissez le filtre vide au début, pour ne pas cacher les rapports analytics.
- Sur la page testeur de mot de passe, saisissez un canari tel que
CanaryPwd-20260902-xK9et attendez la fin du calcul local — environ 280 millisecondes après la dernière frappe. - Cherchez ce canari dans la liste des requêtes. Il ne doit figurer ni sur une ligne de requête, ni dans une query, ni dans un corps, ni dans un champ de formulaire.
- Vous devriez voir un GET same-origin vers
data/leaked-top10k.txt. Ouvrez la réponse : un mot de passe public par ligne, et votre canari ne doit pas en faire partie. - Si un site affirme parler à HIBP, cherchez
api.pwnedpasswords.com/range/: le chemin ne doit contenir que cinq caractères hexadécimaux, pas du clair.
Des statistiques de visite peuvent exister. Les événements d’audit FastPwd n’envoient que des noms — par exemple « audit started », « result weak » ou « hit on leaked list » — et ne transmettent pas le contenu de la zone de saisie comme paramètre. Ouvrez un rapport vers /tj/matomo.php et cherchez le canari ; il ne doit pas correspondre. Fermer l’onglet ne laisse pas cette saisie sur un serveur FastPwd — si elle n’est jamais arrivée comme donnée métier. Cette phrase doit reposer sur la recherche que vous venez de faire, pas sur « j’ai fermé la page ».
Si le canari apparaît dans n’importe quelle requête, la conclusion s’inverse. Quoi que dise le bouton — « local », « privé », « dans le navigateur » — ce contrôle a déjà fait sortir le mot de passe de l’onglet. Changez d’outil, ou passez à une liste hors ligne, et recommencez les mêmes étapes.
Ce qu’une correspondance peut soutenir, et ce qu’une absence ne peut pas
En cas de correspondance, la phrase qui appartient à un ticket est : « Cette chaîne a correspondu à la liste publique à haute fréquence téléchargée avec la page (exacte / casse / chiffres finaux / Leet). Sur cet appareil, elle est traitée comme un mot de passe faible extrêmement courant. Changez-la, et ne la réutilisez pas sur d’autres sites. » La phrase qui n’y appartient pas : « Le serveur de l’autre partie a confirmé qu’il s’agit du clair de la fuite X de l’année Y. » La liste locale n’a ni nom d’incident ni compteur de vues — seulement une indication de rang.
En cas d’absence de correspondance, la phrase défendable est plus courte : « Aucune correspondance avec la liste publique à haute fréquence actuelle et ses quatre étapes de variantes. » Vous ne pouvez pas écrire « jamais fuité », « sans danger à conserver » ou « plus propre que HIBP ». Une liste d’un peu plus de 800 mots à haute fréquence n’a jamais été conçue pour prouver la sûreté. Les dictionnaires d’aspersion des attaquants, les mots de passe historiques d’une entreprise, et une longue phrase apparue dans un dump privé n’y figureront pas.
L’entropie est un troisième signal, parallèle. La page estime des bits d’après la longueur et les classes de caractères : ≥ 80 est Très fort, ≥ 60 est Fort, ≥ 40 est Moyen, le reste est Faible. La force brute hors ligne est indiquée à environ 10 milliards d’essais par seconde ; une tentative en ligne limitée en débit, à environ 1 000 par seconde. Ces chiffres comparent un coût relatif. Ce n’est pas un compte à rebours. Moins de 8 caractères, ou une correspondance dans le jeu Top intégré de mots faibles courants, force Faible. Une correspondance dans la liste publique réécrit le niveau en Faible même si l’entropie est élevée — parce qu’une attaque par dictionnaire ne suit pas le chemin de la « force brute moyenne ».
Questions fréquentes
Si un mot de passe n’apparaît pas dans la liste locale de mots faibles, cela prouve-t-il qu’il n’a jamais fuité ?
Non. Une absence de correspondance signifie seulement que, dans la liste publique à haute fréquence de cet onglet, la correspondance exacte, le repli de casse, le retrait d’un 0–999 final et le Leet courant n’ont pas aligné. Cela ne prouve ni que la chaîne n’a jamais figuré dans un dump, ni qu’elle est absente de Have I Been Pwned, ni qu’on peut continuer à la réutiliser.
Une recherche de mot de passe Have I Been Pwned envoie-t-elle le mot de passe en clair ?
Pas si le client suit l’API officielle. Une requête de plage Pwned Passwords n’accepte que les cinq premiers caractères d’un hash SHA-1 ou NTLM et renvoie environ 800 suffixes ; la comparaison complète reste sur le client. Le clair et le hash entier ne doivent pas figurer dans la requête. Vérifier un e-mail est une autre API : soumettre l’adresse dans le chemin la remet au service. Fiez-vous à la ligne de requête ouverte dans Network, pas au libellé du bouton.
Le testeur de mot de passe FastPwd interroge-t-il Have I Been Pwned ?
Non. Il compare la liste publique à haute fréquence téléchargée avec la page. Le mot de passe testé n’est pas envoyé comme donnée HTTP métier et n’est pas écrit dans analytics. Les statistiques de visite n’enregistrent que des noms d’événements du type « audit started » ou « result weak / medium / strong ». Prêt à l’emploi, aucun compte, et le site n’a pas de coffre qui pourrait stocker un enregistrement d’audit.
Si l’entropie est élevée mais que la liste correspond, le mot de passe reste-t-il fort ?
Sur cet appareil, une correspondance dans la liste publique de mots faibles force le niveau à Faible. L’entropie estime le coût d’une force brute sur un espace de caractères. La liste répond à la question : cette chaîne figure-t-elle déjà dans un dictionnaire d’attaquant. Les deux questions ne s’annulent pas. NIST SP 800-63B-4 demande aux vérificateurs de comparer une liste de mots courants ou compromis, en entier — pas des règles de composition ni un rappel calendaire de rotation.
Parcourir les étapes avec un faux mot de passe
Si vous voulez une page dont la frontière de calcul est écrite, ouvrez le testeur de mot de passe FastPwd. Prêt à l’emploi — aucune inscription. Saisissez d’abord password ou qwerty123 : vous devriez voir une correspondance dans la liste publique forcée en Faible. Puis saisissez le canari ci-dessus : il ne devrait pas correspondre à la liste, et une recherche Network ne devrait pas trouver cette chaîne. Vous pouvez ouvrir le GET de la liste et compter les lignes ; elles doivent s’aligner sur « un peu plus de 800 mots à haute fréquence » dans cet article.
Après un niveau Faible, ouvrez le générateur de mot de passe et tirez une nouvelle chaîne sur cet appareil : le mode aléatoire va de 6 à 128 caractères, 16 par défaut ; en dessous de 8, un avertissement indique une sécurité plus faible. S’il faut remettre le nouveau mot de passe à un collègue, passez par Burn-Link : cet appareil chiffre avec AES-256-GCM, le serveur ne stocke que le texte chiffré, et la clé se place après le dièse du lien. Ne collez pas un Burn-Link complet dans n’importe quel champ « testeur en ligne ».
Le but de l’exercice n’est pas de prouver qu’un site est « absolument sûr ». C’est de vous donner une comparaison à montrer à un collègue avant que quiconque appuie sur Tester : cette exécution a envoyé du clair, un préfixe de hash, ou une courte liste locale ; changer en cas de correspondance ; en cas d’absence, ne pas écrire « jamais fuité ». Les mêmes étapes s’appliquent à n’importe quelle extension « score de sécurité » ou « recherche de fuite ».
La prochaine fois que quelqu’un colle un mot de passe dans un testeur, posez trois questions. Première : la requête a-t-elle emporté du clair ou un hash entier ? Deuxième : a-t-elle comparé environ 800 mots à haute fréquence, ou a-t-elle lancé une requête de plage à la HIBP ? Troisième : quelle phrase le ticket utilisera-t-il s’il n’y a pas de correspondance ? Seul un contrôle que vous pouvez répéter mérite d’entrer dans votre propre norme de mots de passe.
Pour aller plus loin
Pour confirmer si la page de test elle-même a envoyé la chaîne d’origine, faites un passage Network plus complet avec le même canari : Vérifier que le chiffrement local n’envoie pas le texte en clair. Quand vous devez remettre un secret entier à une autre personne — pas à un champ de test — voyez pourquoi la clé peut se placer après le dièse, et quand cette couche lâche : Pourquoi un fragment d’URL peut porter une clé, et quand cette protection lâche. Avant qu’un ticket ou un journal parte dans une IA, comparez les champs à la source : Avant de coller un ticket ou un journal dans une IA, vérifier quels champs quittent cet appareil.