Vether
10Module · Identité

Vérifier qu'un email/mot de passe n'est pas dans HaveIBeenPwned

Avant de réutiliser un mot de passe ou un alias email, Vether interroge HIBP via k-anonymity pour vous prévenir d'une fuite.

4 min de lecture·Mise à jour 2026-05-18

HaveIBeenPwned (HIBP) maintient la base de données publique la plus complète d'emails et de mots de passe exposés dans des fuites. Vether l'interroge de manière privée via le protocole k-anonymity.

k-anonymity en pratique

  1. Vether calcule SHA-1 du mot de passe (hash).
  2. Envoie à HIBP uniquement les 5 premiers caractères du hash.
  3. HIBP renvoie ~500 hashs commençant par ces 5 chars.
  4. Vether compare localement le hash complet contre la liste. Aucun mot de passe ni hash complet ne quitte la machine.
Implémentationtypescript
import { createHash } from "node:crypto";

async function pwnedCount(password: string): Promise<number> {
  const hash = createHash("sha1")
    .update(password)
    .digest("hex")
    .toUpperCase();
  const prefix = hash.slice(0, 5);
  const suffix = hash.slice(5);
  const res = await fetch(`https://api.pwnedpasswords.com/range/${prefix}`);
  const body = await res.text();
  for (const line of body.split("\n")) {
    const [s, c] = line.split(":");
    if (s === suffix) return parseInt(c, 10);
  }
  return 0;
}

Interprétation du résultat

CountVerdict Vether
0Inconnu — sûr à utiliser
1–10Marginal — éviter pour les comptes importants
11–1000Mauvais — déjà ciblé par dictionnaire
> 1000Catastrophique — ne jamais utiliser
💡
Vether refuse de générer un mot de passe dont le pwnedCount > 0. Les mots de passe produits sont garantis absents de la base HIBP au moment de la génération.

Articles liés