← Retour aux projets

Projet personnel
Password Checker — robustesse et fuites
CLI Python sans dépendance et application web bilingue : entropie effective, détection des motifs faibles et vérification des fuites par k-anonymité, où seuls 5 caractères d'empreinte quittent l'appareil
Contexte
J'ai reconstruit ce projet de zéro pour montrer une approche défensive et respectueuse de la vie privée d'un problème classique : quelle est la robustesse réelle d'un mot de passe, et a-t-il déjà fuité ? Les formules fondées sur le nombre de caractères surestiment les mots de passe humains, et la plupart des vérificateurs en ligne demandent qu'on leur confie le mot de passe lui-même. Password Checker estime ce qu'un attaquant essaierait en premier, et interroge Have I Been Pwned sans jamais envoyer le mot de passe.
Ce que j'ai construit
- Une CLI Python (bibliothèque standard uniquement) : saisie masquée, rapport lisible ou JSON, codes de sortie exploitables dans un script ou une CI
- L'entropie effective : mots courants (y compris en leet speak, comme P@ssw0rd), suites de touches AZERTY/QWERTY, suites logiques et répétitions sont évalués comme un attaquant les devinerait
- Des seuils sourcés : CNIL (2022) et NIST SP 800-63B-4
- La vérification des fuites via l'API Pwned Passwords (k-anonymité) : SHA-1 calculé localement, seul le préfixe de 5 caractères est envoyé, padding activé
- Une interface web bilingue (FR/EN) sur GitHub Pages : portage TypeScript du moteur, carte des motifs qui ne révèle aucun caractère, empreinte SHA-1 dessinée en 5 cases envoyées et 35 cases gardées
Choix de sécurité
- Le mot de passe n'est jamais affiché, journalisé ni stocké ; des tests vérifient qu'il n'apparaît dans aucune sortie
- Aucune option --password : elle ferait fuiter le mot de passe dans l'historique du terminal et les arguments du processus
- Web : politique de sécurité du contenu stricte n'autorisant qu'une destination (api.pwnedpasswords.com), aucune mesure d'audience, aucun script ni police tiers, aucun cookie envoyé
- Vérification des fuites uniquement sur clic : vérifier à chaque frappe enverrait le préfixe de chaque début de mot de passe
- Durcissement du dépôt : branche main protégée (PR et CI verte obligatoires), analyse des secrets avec blocage des push, Dependabot, signalement privé des vulnérabilités, analyse Gitleaks de tout l'historique
Qualité logicielle
77
Tests Python
48
Tests TypeScript
22
Cas de test partagés
les deux moteurs doivent donner des résultats identiques
5 tâches
Matrice CI
Windows + Linux, Python 3.11/3.14, Node 24
0
Dépendances d'exécution
Fonctionnement
- 1Analyse localeLa longueur et les familles de caractères donnent l'entropie théorique (L × log2 N).
- 2Détection des motifsMots courants, suites de touches, suites logiques et répétitions sont repérés — par type et position uniquement, jamais par leur texte.
- 3Entropie effectiveLes parties prévisibles sont réévaluées (environ 12,9 bits par mot courant) et le score suit les seuils de la CNIL.
- 4Vérification des fuitesL'empreinte SHA-1 est calculée localement ; seuls ses 5 premiers caractères sont envoyés, et le suffixe est recherché localement.
Captures d'écran
