Hachage sécurisé
SHA-256, bcrypt
Notions théoriques
1. Introduction au hachage
Le hachage est un procédé qui transforme une donnée en une empreinte unique et de longueur fixe.
Contrairement au chiffrement, le hachage est une opération irréversible, ce qui signifie qu’il est impossible de retrouver les données d’origine à partir de leur empreinte.
Les algorithmes de hachage sont utilisés pour :
- Stocker les mots de passe de manière sécurisée.
- Vérifier l’intégrité des fichiers et des messages.
- Générer des signatures numériques.
Un bon algorithme de hachage doit être :
- Déterministe : La même entrée produit toujours la même sortie.
- Rapide : L’empreinte est générée en un temps court.
- Résistant aux collisions : Deux entrées différentes ne doivent pas produire la même empreinte.
- Résistant à l’inversion : Impossible de retrouver l’entrée d’origine à partir de l’empreinte.
2. SHA-256 : Un algorithme de hachage sécurisé
SHA-256 (Secure Hash Algorithm 256 bits) est un algorithme de hachage de la famille SHA-2.
Il produit une empreinte de 256 bits (64 caractères hexadécimaux).
Avantages :
- Sécurisé et largement utilisé (TLS, Bitcoin, signatures numériques).
- Résistant aux attaques classiques (préimage, collision).
Inconvénients :
- Trop rapide pour stocker des mots de passe : vulnérable aux attaques par force brute.
Exemple d’empreinte SHA-256 :
SHA-256("motdepasse123") →
ef92b778bafe771e89245b89ecbcf1be1a9b3b4a5a2c6b5f6f3b2b1e1c0d8e3f
3. bcrypt : Un hachage sécurisé pour les mots de passe
bcrypt est un algorithme de hachage conçu pour protéger les mots de passe.
Il introduit un sel (salt) et un facteur de coût pour ralentir les attaques.
Fonctionnement :
- Un sel (chaîne aléatoire) est ajouté au mot de passe avant le hachage.
- Un facteur de coût détermine le nombre d’itérations, rendant le calcul plus long.
- L’empreinte obtenue est stockée avec le sel.
Avantages :
- Protège contre les attaques par force brute et les attaques par dictionnaire.
- Rend les attaques plus coûteuses grâce au facteur de coût.
Exemple d’empreinte bcrypt :
bcrypt("motdepasse123") →
$2b$12$9b8e7f5c8a6d4e3f1b0c9a1b2d3e4f5g6h7i8j9k0l1m2n3o4p5q6r
Exemple pratique
Il est possible de générer des empreintes SHA-256 et bcrypt en Python
avec les bibliothèques hashlib
et bcrypt
.
1. Générer un hachage SHA-256
import hashlib
mot_de_passe = "motdepasse123"
empreinte_sha256 = hashlib.sha256(mot_de_passe.encode()).hexdigest()
print("SHA-256 :", empreinte_sha256)
2. Générer un hachage bcrypt
import bcrypt
mot_de_passe = b"motdepasse123"
sel = bcrypt.gensalt()
empreinte_bcrypt = bcrypt.hashpw(mot_de_passe, sel)
print("bcrypt :", empreinte_bcrypt.decode())
3. Vérifier un mot de passe avec bcrypt
mot_de_passe_test = b"motdepasse123"
if bcrypt.checkpw(mot_de_passe_test, empreinte_bcrypt):
print("Mot de passe correct")
else:
print("Mot de passe incorrect")
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
L’objectif de ce TP est de manipuler les algorithmes de hachage SHA-256 et bcrypt afin de comprendre leur fonctionnement et leur utilisation pour sécuriser les mots de passe.
Il s'agit de créer un programme interactif permettant de :
- Hacher un mot de passe avec SHA-256.
- Hacher un mot de passe avec bcrypt.
- Vérifier si un mot de passe correspond à une empreinte bcrypt stockée.
Étape 1 : Préparer l’environnement de travail
Avant de commencer, il est important de s’assurer que les bibliothèques nécessaires sont installées.
Instructions :
- Ouvrir un terminal et vérifier que Python est installé :
python --version
- Installer la bibliothèque
bcrypt
si elle n’est pas déjà installée :
pip install bcrypt
- Créer un dossier de travail pour organiser les fichiers :
mkdir hachage
cd hachage
- Créer trois fichiers Python pour séparer les différentes parties du TP :
touch hachage_sha256.py hachage_bcrypt.py verification_bcrypt.py
Une solution
Vous devez être connecté pour voir le contenu.
Étape 2 : Implémenter le hachage SHA-256
L’algorithme SHA-256 est utilisé pour générer une empreinte unique et irréversible d’un mot de passe.
L’objectif est de créer un programme qui demande un mot de passe à l’utilisateur, le hache avec SHA-256 et affiche l’empreinte.
Instructions :
- Ouvrir le fichier
hachage_sha256.py
dans un éditeur de texte. - Importer la bibliothèque
hashlib
pour utiliser SHA-256 :
import hashlib
- Demander un mot de passe à l’utilisateur :
mot_de_passe = input("Entrez un mot de passe : ")
- Convertir le mot de passe en empreinte SHA-256 :
empreinte_sha256 = hashlib.sha256(mot_de_passe.encode()).hexdigest()
- Afficher l’empreinte SHA-256 :
print("Empreinte SHA-256 :", empreinte_sha256)
- Exécuter le script et tester avec différents mots de passe :
python hachage_sha256.py
Une solution
Vous devez être connecté pour voir le contenu.
Étape 3 : Implémenter le hachage bcrypt
L’algorithme bcrypt est conçu pour sécuriser les mots de passe en ajoutant un sel unique et en rendant le hachage plus lent pour contrer les attaques par force brute.
Instructions :
- Ouvrir le fichier
hachage_bcrypt.py
dans un éditeur de texte. - Importer la bibliothèque
bcrypt
:
import bcrypt
- Demander un mot de passe à l’utilisateur :
mot_de_passe = input("Entrez un mot de passe : ").encode()
- Générer un sel aléatoire :
sel = bcrypt.gensalt()
- Hacher le mot de passe avec bcrypt :
empreinte_bcrypt = bcrypt.hashpw(mot_de_passe, sel)
- Afficher l’empreinte bcrypt :
print("Empreinte bcrypt :", empreinte_bcrypt.decode())
- Exécuter le script et observer les résultats :
python hachage_bcrypt.py
Une solution
Vous devez être connecté pour voir le contenu.
Étape 4 : Vérifier un mot de passe avec bcrypt
L’objectif est maintenant de comparer un mot de passe saisi par un utilisateur avec une empreinte bcrypt préalablement générée.
Instructions :
- Ouvrir le fichier
verification_bcrypt.py
dans un éditeur de texte. - Importer la bibliothèque
bcrypt
:
import bcrypt
- Demander un mot de passe à l’utilisateur :
mot_de_passe = input("Entrez un mot de passe : ").encode()
- Demander une empreinte bcrypt stockée (simulée ici par une saisie utilisateur) :
empreinte_stockee = input("Entrez l’empreinte bcrypt : ").encode()
- Vérifier si le mot de passe correspond à l’empreinte :
if bcrypt.checkpw(mot_de_passe, empreinte_stockee):
print("Mot de passe correct")
else:
print("Mot de passe incorrect")
- Tester le programme en utilisant une empreinte générée précédemment.
python verification_bcrypt.py
Une solution
Vous devez être connecté pour voir le contenu.
Étape 5 : Automatiser la gestion des mots de passe
L’objectif est de créer un programme interactif permettant :
- D’enregistrer un mot de passe haché avec bcrypt.
- De vérifier un mot de passe à partir d’une empreinte stockée.
Instructions :
- Créer un fichier
gestion_mdp.py
. - Ajouter un menu interactif permettant de choisir entre :
- Hacher un mot de passe.
- Vérifier un mot de passe.
- Utiliser
bcrypt
pour stocker et comparer les mots de passe.
Une solution
Vous devez être connecté pour voir le contenu.