La protection des mots de passe est essentielle pour la sécurité des données dans les applications. Les mots de passe mal gérés peuvent entraîner des violations de données graves. Dans ce cours, nous examinerons les meilleures pratiques pour stocker et gérer les mots de passe de manière sécurisée.
Un hachage est une fonction qui prend une entrée (dans ce cas, un mot de passe) et la transforme en une chaîne de caractères de longueur fixe, généralement sous forme de nombre hexadécimal. Les hachages sont unidirectionnels, ce qui signifie qu’il est difficile de retrouver le mot de passe d’origine à partir du hachage.
Exemple en Node.js :
const crypto = require('crypto');
const password = 'MotDePasseSecret';
const hash = crypto.createHash('sha256').update(password).digest('hex');
Un sel est une valeur aléatoire générée pour chaque utilisateur. Il est ajouté au mot de passe avant le hachage, ce qui rend les attaques par dictionnaire et par force brute plus difficiles.
Exemple en PHP :
$password = 'MotDePasseSecret';
$salt = bin2hex(random_bytes(16)); // Génère un sel de 16 octets $hashed_password = hash('sha256', $salt . $password);
Une KDF est une fonction spécialement conçue pour transformer un mot de passe en une clé sécurisée. Il est recommandé d’utiliser des KDF telles que PBKDF2 ou bcrypt.
Exemple en Python (avec la bibliothèque Passlib) :
from passlib.hash import pbkdf2_sha256 password = 'MotDePasseSecret'
hashed_password = pbkdf2_sha256.using(salt_size=16).hash(password)
Les hachages de mots de passe doivent être stockés de manière sécurisée. Évitez de les stocker en texte brut dans la base de données. Utilisez plutôt des bases de données sécurisées avec des contrôles d’accès appropriés.
Utilisez un grand nombre d’itérations lors de la création de hachages pour ralentir les attaques par force brute.
Exemple en C++ (avec la bibliothèque OpenSSL) :
#include <openssl/evp.h>
const char* password = "MotDePasseSecret";
constunsigned char* salt = ...; // Sel généré aléatoirement
int iterations = 10000;
unsigned char key[32];
PKCS5_PBKDF2_HMAC_SHA1(password, strlen(password), salt, strlen(salt), iterations, 32, key);
Argon2 est un algorithme de hachage de mots de passe moderne et recommandé. Vous pouvez l’implémenter en utilisant la bibliothèque « argon2-cffi » en Python.
import argon2 password = "MotDePasseSecret"
hasher = argon2.PasswordHasher()
hashed_password = hasher.hash(password) # Vérification du mot de passe try: if hasher.verify(hashed_password, "MotDePasseIncorrect"):
print("Mot de passe correct.")
else: print("Mot de passe incorrect.") except argon2.exceptions.VerifyMismatchError:
print("Mot de passe incorrect.")
PBKDF2 est un algorithme de dérivation de clé basé sur le hachage. Voici comment l’utiliser en Node.js :
const crypto = require('crypto');
const password = 'MotDePasseSecret';
const salt = crypto.randomBytes(16).toString('hex');
const iterations = 10000;
const keyLength = 64;
const digest = 'sha512';
crypto.pbkdf2(password, salt, iterations, keyLength, digest, (err, derivedKey) => { if (err) throw err;
const hashedPassword = derivedKey.toString('hex');
console.log('Mot de passe haché :', hashedPassword); });
scrypt est un autre algorithme de dérivation de clé, réputé pour sa résistance aux attaques par force brute. Voici comment l’utiliser en PHP :
$password = 'MotDePasseSecret';
$salt = random_bytes(16); // Génère un sel de 16 octets
$n = 16384; // NOMBRE DE BOUCLES
$r = 8;
$p = 1;
$keyLength = 64;
$hashedPassword = scrypt($password, $salt, $n, $r, $p, $keyLength);
echo 'Mot de passe haché : ' . bin2hex($hashedPassword);
bcrypt est un algorithme de hachage de mots de passe largement utilisé. Vous pouvez l’implémenter en C++ à l’aide de la bibliothèque « bcrypt ».
#include <iostream>
#include <bcrypt.h>
int main() {
const char* password = "MotDePasseSecret";
const char* salt = bcrypt_gensalt(12); // Génère un sel avec un coût de 12
const char* hashed_password = bcrypt(password, salt);
std::cout << "Mot de passe haché : " << hashed_password << std::endl;
return 0;
}
Ces exemples illustrent comment utiliser différents algorithmes de hachage et de dérivation de clé pour sécuriser les mots de passe dans vos applications. Assurez-vous de choisir l’algorithme le mieux adapté à vos besoins de sécurité.
La protection des mots de passe est essentielle pour la sécurité des applications. En utilisant des hachages, des sels, des KDF, un stockage sécurisé et des itérations appropriées, vous pouvez renforcer la sécurité de vos mots de passe. Il est important de suivre ces meilleures pratiques pour protéger les données sensibles de vos utilisateurs.