Accueil › Apprendre l’informatique › Leçon 13 sur 14

Intermédiaire · 11 min de lecture · gratuit, sans compte

Hachage et mots de passe : comment les sites protègent ton compte

Pourquoi un site sérieux ne stocke jamais ton mot de passe, ce qu’est un hash, et comment fabriquer un mot de passe solide. Avec une démonstration SHA-256.

Objectifs de cette leçon
  • Expliquer ce qu’est une fonction de hachage
  • Comprendre pourquoi on ajoute du sel
  • Évaluer la solidité d’un mot de passe

Un site sérieux ne connaît pas ton mot de passe

Si une base de données est volée (cela arrive régulièrement), les mots de passe en clair seraient immédiatement exploitables. Les sites sérieux stockent donc seulement une empreinte (hash) du mot de passe, produite par une fonction de hachage.

Une bonne fonction de hachage a trois propriétés :

  • Déterministe : la même entrée donne toujours la même empreinte.
  • À sens unique : impossible de retrouver l’entrée à partir de l’empreinte (autrement qu’en essayant).
  • Effet avalanche : changer un seul caractère change complètement l’empreinte.

Tape un texte puis modifie une seule lettre : l’empreinte SHA-256 change du tout au tout.

Comment la connexion fonctionne

  1. À l’inscription, le serveur calcule hash(mot de passe) et ne garde que l’empreinte.
  2. À la connexion, il hache ce que tu tapes et compare les deux empreintes.
  3. Si elles sont égales, c’est le bon mot de passe — sans que le serveur l’ait jamais stocké.

Le sel et les fonctions lentes

Deux utilisateurs avec le même mot de passe auraient la même empreinte, et des « tables arc-en-ciel » pré-calculées permettraient de retrouver les mots de passe courants. On ajoute donc un sel : une valeur aléatoire unique par utilisateur, mélangée au mot de passe avant le hachage.

De plus, SHA-256 est trop rapide pour les mots de passe : un attaquant peut en tester des milliards par seconde. On utilise des fonctions volontairement lentes : bcrypt, scrypt, Argon2.

import hashlib, os

mot_de_passe = "chat123"
sel = os.urandom(16)      # valeur aléatoire propre à chaque utilisateur

# PBKDF2 : fonction lente, avec 200 000 itérations
empreinte = hashlib.pbkdf2_hmac("sha256", mot_de_passe.encode(), sel, 200_000)
print("sel       :", sel.hex())
print("empreinte :", empreinte.hex())

# Vérification à la connexion
essai = hashlib.pbkdf2_hmac("sha256", b"chat123", sel, 200_000)
print("Connexion acceptée :", essai == empreinte)

Un bon mot de passe

  • La longueur compte plus que la complexité : une phrase de 4 mots aléatoires est plus solide, et plus facile à retenir, que P@ssw0rd!.
  • Un mot de passe unique par site : si un site est piraté, les autres comptes restent protégés.
  • Un gestionnaire de mots de passe pour tout retenir.
  • L’authentification à deux facteurs (2FA) : même avec ton mot de passe, l’attaquant est bloqué.

Erreurs courantes

  • Confondre chiffrement et hachage : on peut déchiffrer avec la clé, jamais « dé-hacher ».
  • Réutiliser le même mot de passe partout.
  • Utiliser MD5 ou SHA-256 seuls pour stocker des mots de passe : trop rapides, utilise bcrypt, scrypt ou Argon2.
  • Croire qu’un mot de passe avec un chiffre à la fin est fort : les attaquants testent ces variantes en premier.

Vérifie ce que tu as compris