Développement11 juin 2026· via DEV Community

Un vérificateur de mots de passe minuscule surpasse le lourd zxcvbn en vitesse, à précision égale

Un vérificateur de mots de passe minuscule surpasse le lourd zxcvbn en vitesse, à précision égale

Image : DEV Community

Publicité

Depuis des années, la plupart des formulaires d'inscription utilisent une bibliothèque d'évaluation de mots de passe de 389 Ko pour écarter les « motdepasse123 ». Or, ces 389 Ko de JavaScript qui atterrissent dans chaque navigateur mobile ralentissent les pages, font grimper les taux de rebond et n'améliorent guère la sécurité. Aujourd'hui, un remplaçant de 3 Ko fait le même travail, de la même manière, avec le même taux de détection, mais termine son chargement avant même que l'utilisateur n'atteigne le champ.

De 389 Ko à 3 Ko — même détection des fuites, zéro surcharge

zxcvbn domine le registre npm depuis des années, avec plus d'un million de téléchargements hebdomadaires. Pourtant, il n'a pas reçu de commit depuis 2017, et sa charge utile compressée (gzip) de 389 Ko analyse toujours un dictionnaire de 40 000 mots à chaque démarrage à froid. La nouvelle bibliothèque, passcore, ne pèse que 3 Ko compressés et atteint le même taux de détection que zxcvbn, soit 98,4 %, face aux listes de fuites en temps réel de RockYou, Adobe et Have I Been Pwned. Les tests montrent qu'elle s'initialise en ~0,2 ms — environ 500 fois plus vite — et évalue un mot de passe en environ 2 600 ns, ce qui la rend de fait invisible pour les Web Vitals.

Cinq couches, pas un dictionnaire géant

Au lieu d'embarquer chaque mot anglais possible, passcore tire son dictionnaire directement de véritables fuites. Elle exécute ensuite cinq détecteurs légers à la suite : la correspondance avec le dictionnaire, les motifs clavier (qwerty, 1234), les caractères répétés (aaa), les suites séquentielles (abcdef, 123456) et le décodage du leetspeak. L'échelle de notation reste de 0 à 4, mais le modèle ajoute un seuil de longueur aligné sur NIST SP 800-63B : 20 caractères donnent un score d'au moins 3, et 30 caractères un score de 4, quelle que soit la variété des caractères.

Les mots de passe du monde réel sont enfin gérés

Pendant le développement, des schémas simples comme « Motdepasse1! » ou « Admin123 » passaient sans cesse entre les mailles parce qu'aucun dictionnaire ne les contenait. La solution a été un détecteur de racine commune qui retire les caractères non alphanumériques en début et en fin de chaîne et vérifie le mot restant. Un autre défi a été le leetspeak avec séparateurs (=N0=Acc3ss), qu'un décodeur naïf manquerait. Découper les segments décodés sur les caractères non alphabétiques a résolu le problème. Enfin, les cinq mots racines les plus exploités (admin, test, user, login, pass) ont été ajoutés après que les données de fuites ont révélé qu'ils manquaient.

Pour les équipes lasses de sacrifier l'expérience utilisateur pour un gain de sécurité marginal, remplacer zxcvbn par passcore est un changement d'une seule ligne qui peut faire gagner des centaines de kilo-octets et de millisecondes à chaque chargement de page.


Source : DEV Community. Synthèse éditoriale assistée par IA — TechnoExpress.

Lire la source originale sur DEV Community →

← Retour à l'accueil

Publicité