Back-end · 4 mondes · 12 étapes
Auth & sécurité
Mots de passe, jetons signés, failles du web et autorisation, écrits de ses mains.
Progression
0 %
0/12 étapes terminées
Fondamental · 9 min de lecture
Stocker un mot de passe
Ne jamais savoir le secret de personne
1Définition
Un mot de passe ne se stocke pas : on stocke son empreinte, calculée par une fonction volontairement lente (PBKDF2, bcrypt, Argon2) et mélangée à un sel aléatoire propre à chaque compte. À la connexion, on recalcule et on compare, en temps constant.
2Principes fondamentaux
01
Hacher n'est pas chiffrer
Un chiffrement se déchiffre avec une clé ; une empreinte ne se renverse pas. Voler la base ne livre donc pas les mots de passe.
02
Un sel par compte
Deux mots de passe identiques donnent deux empreintes différentes : les tables précalculées ne servent plus à rien.
03
La lenteur protège
Des centaines de milliers d'itérations : imperceptible pour une connexion, ruineux pour qui en teste des milliards.
04
Comparer en temps constant
Une comparaison qui s'arrête au premier écart trahit le secret par sa durée.
3Exemples pratiques
PBKDF2 avec Web Crypto
1const cle = await crypto.subtle.importKey("raw", enc.encode(motDePasse), "PBKDF2", false, ["deriveBits"]);2const bits = await crypto.subtle.deriveBits(3 { name: "PBKDF2", salt: enc.encode(sel), iterations: 600000, hash: "SHA-256" },4 cle,5 256,6);600 000 itérations est la recommandation actuelle de l'OWASP pour PBKDF2-SHA256 ; les exercices en utilisent 100 000 pour rester rapides.
Avec une bibliothèque, côté serveur
1import bcrypt from "bcrypt";2 3const empreinte = await bcrypt.hash(motDePasse, 12); // sel inclus4const ok = await bcrypt.compare(saisie, empreinte);bcrypt range le sel et le coût dans l'empreinte elle-même, et compare en temps constant : moins de code, moins d'erreurs.
4Erreurs courantes
Stocker en clair
À éviter
INSERT INTO comptes (pseudo, mot_de_passe) VALUES ('codey', 'soleil')À faire
INSERT INTO comptes (pseudo, sel, empreinte) VALUES (…)Pourquoi : La moindre fuite de la base livre tous les comptes — et, par réutilisation, souvent leurs autres comptes ailleurs.
Un hachage rapide
À éviter
sha256(motDePasse)À faire
PBKDF2, bcrypt ou Argon2Pourquoi : Une carte graphique teste des milliards de SHA-256 par seconde.
Un sel prévisible
À éviter
const sel = pseudo; // ou Math.random()À faire
crypto.getRandomValues(new Uint8Array(16))Pourquoi : Un sel devinable se précalcule ; Math.random n'est pas conçu pour la sécurité.
5Subtilités à connaître
- ◆Le sel n'est pas un secret : il est stocké à côté de l'empreinte. Son rôle est l'unicité, pas la confidentialité.
- ◆Un « poivre » (un secret global ajouté au hachage, stocké hors de la base) protège en plus contre le vol de la seule base.
- ◆La meilleure protection d'un mot de passe reste de ne pas en avoir : connexion par lien magique ou clé d'accès (passkey).
6Vérifie ta compréhension
Question 1/3
Score 0
À quoi sert le sel ?
Envie d'essayer ? Ouvre le Labo et recopie les exemples pour les modifier.