Aller au contenu
← Retour aux projets
Command-line analysis: effective entropy and breach check
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

  1. 1
    Analyse locale
    La longueur et les familles de caractères donnent l'entropie théorique (L × log2 N).
  2. 2
    Détection des motifs
    Mots courants, suites de touches, suites logiques et répétitions sont repérés — par type et position uniquement, jamais par leur texte.
  3. 3
    Entropie effective
    Les parties prévisibles sont réévaluées (environ 12,9 bits par mot courant) et le score suit les seuils de la CNIL.
  4. 4
    Vérification des fuites
    L'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

Web interface — light theme (French)
Password Checker — robustesse et fuites — Aïcha Imène DAHOUMANE