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

Exemple
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

Exemple
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 Argon2

Pourquoi : 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.