Imaginez ceci : vous utilisez le même mot de passe sur plusieurs sites depuis des années. Un matin, vous recevez une alerte indiquant que vos identifiants circulent sur le dark web. Cette situation n'est pas hypothétique – elle arrive quotidiennement à des milliers d'utilisateurs. Pourtant, la plupart des développeurs ignorent comment vérifier proactivement si leurs propres mots de passe ont été compromis.
Contrairement à ce qu'on pourrait croire, vous n'avez pas besoin d'être un expert en cybersécurité pour créer des outils de protection basiques. En moins de 50 lignes de code Python, vous pouvez construire un vérificateur de fuites de mots de passe qui utilise des données réelles de violations. Cet article vous guide pas à pas dans la création d'un tel outil, en expliquant pourquoi cette approche est plus efficace que les vérifications manuelles et comment l'intégrer dans vos workflows de développement.
Pourquoi scanner des fichiers texte pour des mots de passe en clair ?
Avant même de vérifier si un mot de passe a fuité en ligne, il faut d'abord s'assurer qu'il n'est pas stocké en clair dans votre code ou vos fichiers de configuration. Comme le souligne un utilisateur de Spiceworks Community, la recherche de mots de passe codés en dur dans des fichiers texte est une préoccupation réelle pour les équipes IT. Le script Python que nous allons développer pourrait être adapté pour scanner des répertoires à la recherche de chaînes de caractères ressemblant à des mots de passe – une première ligne de défense souvent négligée.
L'approche traditionnelle consiste à chercher des motifs spécifiques, mais comme le note la discussion sur Spiceworks, cette méthode a ses limites. Un mot de passe comme "P@ssw0rd2025!" pourrait échapper à une recherche basée sur le terme "password". C'est pourquoi notre outil se concentrera d'abord sur la vérification externe via des bases de données de fuites connues.
L'API Have I Been Pwned : votre alliée contre les fuites
Le cœur de notre détecteur reposera sur l'API Have I Been Pwned (HIBP), un service maintenu par Troy Hunt qui agrège des milliards de comptes compromis. Plutôt que de transmettre le mot de passe en clair, nous utiliserons la technique du k-anonymité : seul un préfixe du hash SHA-1 du mot de passe est envoyé, préservant ainsi la confidentialité. L'API retourne ensuite la liste complète des hashs correspondant à ce préfixe, que nous comparerons localement avec le hash complet.
Cette approche, décrite dans un article de DEV Community, représente la méthode recommandée pour vérifier les fuites sans exposer le mot de passe original. Elle combine efficacité et respect de la vie privée – deux aspects cruciaux souvent en tension dans les outils de sécurité.
Le code : un script Python en trois parties
1. Installation des dépendances
Notre script nécessite uniquement la bibliothèque `requests`, que vous pouvez installer via pip :
pip install requests
2. Fonction de hachage sécurisée
import hashlib
import requests
def check_password_leak(password):
# Créer le hash SHA-1 du mot de passe
sha1_hash = hashlib.sha1(password.encode('utf-8')).hexdigest().upper()
prefix = sha1_hash[:5]
suffix = sha1_hash[5:]
# Interroger l'API HIBP
url = f"https://api.pwnedpasswords.com/range/{prefix}"
response = requests.get(url)
if response.status_code == 200:
hashes = (line.split(':') for line in response.text.splitlines())
for h, count in hashes:
if h == suffix:
return True, int(count)
return False, 0
else:
raise Exception("Échec de la requête API")
3. Interface utilisateur simple
def main():
print("=== Vérificateur de fuites de mots de passe ===")
password = input("Entrez le mot de passe à vérifier : ")
try:
leaked, count = check_password_leak(password)
if leaked:
print(f"⚠️ Ce mot de passe a été trouvé dans {count} fuites de données.")
print("Recommandation : changez-le immédiatement.")
else:
print("✅ Ce mot de passe n'a pas été trouvé dans les fuites connues.")
print("Note : cela ne garantit pas sa force ou sa sécurité.")
except Exception as e:
print(f"Erreur : {e}")
if name == "main":
main()
Au-delà de la vérification : génération et stockage sécurisés
Vérifier les fuites n'est qu'une partie de l'équation. Si votre mot de passe est compromis, il faut le remplacer – mais par quoi ? Comme le souligne Stack Overflow, sur Python 3.6+, le module `secrets` doit être utilisé pour générer des mots de passe cryptographiquement sûrs. Voici un exemple complémentaire :
import secrets
import string
def generate_secure_password(length=16):
alphabet = string.ascii_letters + string.digits + string.punctuation
return ''.join(secrets.choice(alphabet) for _ in range(length))
Une fois un nouveau mot de passe généré, se pose la question du stockage. Un autre fil Stack Overflow aborde justement ce problème : comment stocker de manière sécurisée des identifiants dans un script Python ? Les solutions vont du chiffrement local à l'utilisation de coffres-forts de mots de passe dédiés, en passant par les tokens d'accès personnels comme ceux décrits dans la documentation Microsoft pour Azure DevOps.
Applications pratiques et limitations
Ce script basique peut être étendu de plusieurs manières :
- Scanner automatiquement des fichiers de configuration à la recherche de mots de passe codés en dur (comme évoqué dans Spiceworks Community)
- Intégrer la vérification dans un pipeline CI/CD pour alerter si des identifiants sensibles sont accidentellement commités
- Créer une interface web simple pour les équipes non techniques
Cependant, il présente des limites importantes. Il ne vérifie que contre des fuites déjà documentées dans HIBP. Un mot de passe faible mais non encore fuité passerait le test. C'est pourquoi KnowledgeHut inclut des projets de test de force de mot de passe dans sa liste de projets cybersécurité – les deux approches sont complémentaires.
L'avenir : quand le deep learning rencontre la sécurité des mots de passe
Une approche fascinante émerge côté recherche : utiliser le deep learning pour identifier des mots de passe dans des fichiers ou du code. Le projet DeepPass, présenté sur SpecterOps, utilise des modèles d'apprentissage profond pour détecter des « candidats mots de passe » dans des contextes variés. Bien que plus complexe à mettre en œuvre que notre script simple, cette direction montre comment l'IA pourrait à l'avenir automatiser la détection de configurations dangereuses.
Conclusion : la sécurité comme pratique quotidienne
Construire un vérificateur de fuites de mots de passe en Python n'est pas qu'un exercice technique – c'est l'adoption d'une mentalité proactive face aux risques numériques. En comprenant comment fonctionnent ces outils, vous devenez mieux équipé pour évaluer la sécurité de vos propres pratiques et de celles de vos projets.
Le code présenté ici est un point de départ. Vous pourriez l'étendre pour gérer des listes de mots de passe, ajouter des tests de force basiques, ou l'intégrer à des audits réguliers. Dans un monde où, selon l'article de DEV Community, des milliards d'identifiants circulent sur le dark web, ces quelques lignes de Python pourraient faire la différence entre une sécurité illusoire et une protection réelle.
Commencez par tester vos propres mots de passe – les résultats pourraient vous surprendre. Ensuite, partagez cet outil avec votre équipe. La sécurité n'est pas qu'une affaire d'experts ; c'est une responsabilité collective qui commence par des outils accessibles.
Pour aller plus loin
- DEV Community - Password Leaks: What Devs. Must Know - Tutoriel sur la détection de fuites de mots de passe avec Python
- Spiceworks Community - Finding hard coded passwords in text files - Discussion sur la recherche de mots de passe en clair dans les fichiers
- SpecterOps - DeepPass — Finding Passwords With Deep Learning - Approche avancée utilisant l'apprentissage profond
- KnowledgeHut - Top Cyber Security Projects - Liste de projets pratiques en sécurité informatique
- Stack Overflow - Generate password in Python - Meilleures pratiques pour générer des mots de passe
- Stack Overflow - Securely store username and password in Python - Options de stockage sécurisé d'identifiants
- Microsoft Learn - Use Personal Access Tokens - Documentation sur les tokens d'accès personnels
