Pourquoi créer un gestionnaire de mots de passe en NSI ?
En spécialité NSI, tu apprends à résoudre des problèmes concrets avec du code. Créer un gestionnaire de mots de passe est un projet parfait pour cela ! Il te permet de mettre en pratique plusieurs notions clés du programme :
- La gestion de fichiers : pour stocker tes mots de passe de manière persistante (dans un fichier JSON par exemple).
- Les algorithmes de hachage et de cryptographie : pour sécuriser tes données sensibles.
- Les interfaces en ligne de commande (CLI) : pour interagir avec ton programme.
- La manipulation de structures de données complexes : comme les dictionnaires.
Au-delà de l'aspect technique, ce projet te sensibilise à un enjeu crucial du numérique : la sécurité des données personnelles. Utiliser des mots de passe uniques et forts pour chaque site est essentiel, et un gestionnaire est l'outil idéal pour cela.
Les fondations : comprendre la sécurité de base
Avant de coder, il faut comprendre les principes de sécurité que nous allons implémenter. Nous n'allons pas stocker les mots de passe en clair, ce serait très dangereux !
Le hachage du mot de passe maître
Ton programme aura besoin d'un mot de passe maître unique pour déverrouiller l'accès à la base. Nous ne stockerons jamais ce mot de passe. À la place, nous stockerons son haché (ou hash).
Le hachage est une fonction à sens unique : facile à calculer dans un sens, mais pratiquement impossible à inverser. Quand tu saisis ton mot de passe maître, le programme le hache et compare le résultat avec le hash stocké. S'ils correspondent, l'accès est accordé.
Nous utiliserons la bibliothèque hashlib de Python. Voici un exemple simple :
import hashlib
mot_de_passe = "monSuperSecret".encode('utf-8')
hash_obj = hashlib.sha256(mot_de_passe)
hash_hex = hash_obj.hexdigest()
print(hash_hex) # Affiche une chaîne de 64 caractères hexadécimauxLe chiffrement des identifiants
Les identifiants (site, login, mot de passe) seront, eux, chiffrés dans le fichier de stockage. Le chiffrement est une opération réversible (contrairement au hachage) à condition de posséder la bonne clé. Nous utiliserons une bibliothèque comme cryptography ou des algorithmes simples comme XOR avec une clé dérivée du mot de passe maître pour ce projet éducatif.
Architecture et code pas à pas
Structurons notre projet. Nous aurons besoin de plusieurs fonctions principales.
1. Initialisation et création du fichier de stockage
La première exécution du programme doit créer un fichier (par exemple vault.json) qui contiendra le hash du mot de passe maître et les données chiffrées. Nous utiliserons le format JSON pour sa simplicité avec le module json de Python.
2. Fonction d'authentification
Cette fonction demande le mot de passe maître, calcule son hash SHA-256 et le compare à celui stocké. Elle retourne True ou False. Si l'authentification réussit, elle peut aussi retourner une « clé » dérivée du mot de passe maître pour déchiffrer les données.
3. Les fonctions cœur : ajouter, récupérer, lister
- add_password(service, username, password) : Chiffre et ajoute une nouvelle entrée.
- get_password(service) : Recherche et déchiffre le mot de passe pour un service donné.
- list_services() : Affiche la liste de tous les services enregistrés (sans afficher les mots de passe).
Voici un squelette de code pour te donner une idée de la structure :
import json, hashlib, os
class PasswordManager:
def __init__(self, filename="vault.json"):
self.filename = filename
self.data = self.load_vault()
def load_vault(self):
if os.path.exists(self.filename):
with open(self.filename, 'r') as f:
return json.load(f)
else:
# Structure initiale
return {"master_hash": "", "entries": {}}
def save_vault(self):
with open(self.filename, 'w') as f:
json.dump(self.data, f, indent=4)
# À toi de compléter les méthodes authenticate, add, get !Améliorations et défis pour aller plus loin
Une fois la version basique fonctionnelle, tu peux complexifier ton projet pour monter en compétences et impressionner ton examinateur !
- Génération de mots de passe forts : Ajoute une fonction qui génère aléatoirement un mot de passe avec des lettres, chiffres et caractères spéciaux en utilisant le module
secrets(plus sûr querandom). - Interface graphique (Tkinter) : Quitte la ligne de commande et crée une fenêtre avec des champs de saisie et des boutons. C'est excellent pour pratiquer la programmation événementielle.
- Chiffrement robuste : Remplace ton algorithme de chiffrement maison par une bibliothèque sérieuse comme
cryptography.fernetqui gère les clés de manière sécurisée. - Système de « coffre-fort » par utilisateur : Permets à plusieurs personnes d'utiliser le programme sur le même ordinateur avec des fichiers de stockage différents.
Ce qu'il faut retenir pour le Grand Oral et le projet
Ce projet est un excellent candidat pour ton projet de NSI ou une illustration pour ton Grand Oral. Pour le présenter efficacement :
- Explique le problème : La difficulté de gérer des dizaines de mots de passe uniques et forts.
- Détaille ta solution algorithmique : Le double système (hachage irréversible pour l'authentification, chiffrement réversible pour les données).
- Montre des extraits de code clés : La fonction de hachage, la structure de données, une fonction d'ajout.
- Parle des limites et améliorations : Cela montre ton esprit critique. Par exemple, ton programme local est moins pratique qu'un gestionnaire cloud, mais tu évites les risques de piratage de serveur.
En réalisant ce projet, tu ne fais pas qu'apprendre à coder en Python. Tu développes une compréhension pratique de la cybersécurité, une compétence de plus en plus valorisée. Alors, à ton clavier !
