0Pricing
Security+ Academy · Leçon

Fonctions de dérivation de clés : PBKDF2, bcrypt et Argon2

Comparez les algorithmes de hachage des mots de passe selon leur résistance aux attaques par GPU et ASIC, et comprenez comment régler les facteurs de coût et la difficulté mémoire.

Fonctions de dérivation de clés : PBKDF2, bcrypt et Argon2 est une leçon Security+ Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Security+ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Security+ Academy comprend 4 leçons au total.

Pourquoi le hachage des mots de passe est différent

Le stockage des mots de passe nécessite une catégorie particulière de fonctions cryptographiques appelée fonction de hachage de mots de passe (PHF) ou fonction de dérivation de clés (KDF). Les fonctions de hachage cryptographiques classiques comme SHA-256 sont conçues pour être rapides : un GPU moderne peut calculer des milliards de hachages SHA-256 par seconde. Cette rapidité est catastrophique pour le stockage des mots de passe : un attaquant qui vole une base de données de hachages peut essayer des milliards de suppositions par seconde. Les KDF pour mots de passe sont volontairement lentes et réglables afin de rendre les attaques par force brute irréalisables sur le plan du calcul, tout en permettant une connexion légitime en quelques millisecondes.

Le salage : vaincre les tables arc-en-ciel

Avant l'existence des KDF dédiées aux mots de passe, les attaquants utilisaient des tables arc-en-ciel : des correspondances précalculées entre des valeurs de hachage et les mots de passe en clair. Un sel est une valeur aléatoire propre à chaque utilisateur, ajoutée au début ou à la fin du mot de passe avant le hachage, ce qui rend chaque hachage unique, même lorsque les mots de passe sont identiques. Les sels sont stockés avec le hachage dans la base de données : ils ne sont pas secrets, mais simplement aléatoires. Un sel correct doit avoir une longueur d'au moins 16 octets, être généré par un générateur de nombres aléatoires cryptographiquement sûr et être stocké pour chaque utilisateur (sans jamais être réutilisé entre plusieurs comptes).

PBKDF2 : la norme pour les mots de passe

PBKDF2 (Password-Based Key Derivation Function 2) est défini dans la RFC 8018 et approuvé par NIST. Il fonctionne en appliquant de manière répétée une fonction HMAC (généralement HMAC-SHA-256) au mot de passe et au sel, pendant un nombre configurable d'itérations. Le nombre d'itérations constitue le facteur de travail ; NIST recommande au moins 600 000 itérations de PBKDF2-HMAC-SHA256 depuis 2023. PBKDF2 est largement utilisé (Django, trousseau iOS, WPA2-PSK), mais présente une faiblesse : il peut être implémenté efficacement sur des GPU, ce qui le rend moins résistant aux GPU que d'autres solutions.

# PBKDF2 example (Python pseudocode concept)
# import hashlib
# dk = hashlib.pbkdf2_hmac(
#   'sha256',         # hash algorithm
#   b'password',      # password bytes
#   b'random_salt',   # salt bytes
#   600000            # iterations
# )

bcrypt : résistance à la mémoire et au CPU

bcrypt a été conçu par Niels Provos et David Mazieres en 1999 et reste largement utilisé. Son innovation principale est un facteur de coût (paramètre de tours), chaque incrément doublant le temps de calcul. bcrypt utilise une version modifiée du chiffrement Blowfish avec une initialisation de clé Eksblowfish qui sollicite fortement le CPU et la mémoire, ce qui rend son accélération sur des GPU nettement plus difficile que celle de PBKDF2. bcrypt limite également l'entrée du mot de passe à 72 octets (les mots de passe plus longs sont tronqués), ce qui nécessite, dans certaines implémentations, de hacher d'abord les mots de passe longs avec SHA-256.

# bcrypt cost factor
# Cost 10 = ~100ms on modern hardware
# Cost 12 = ~400ms
# Cost 14 = ~1600ms
# Each +1 doubles the work
# Recommended: cost 12-14 for web apps
# Command: htpasswd -bnBC 12 username password

Argon2 : le choix moderne

Argon2 a remporté la compétition de hachage de mots de passe en 2015 et constitue la recommandation actuelle de OWASP. Il existe en trois variantes : Argon2d (plus rapide, vulnérable aux canaux auxiliaires, idéal pour les cryptomonnaies), Argon2i (à temps constant, idéal pour le hachage des mots de passe) et Argon2id (hybride, recommandé pour la plupart des usages). Argon2id est configurable selon trois dimensions : coût temporel (itérations), coût mémoire (RAM nécessaire) et parallélisme (threads). Ses besoins élevés en mémoire rendent extrêmement difficile sa parallélisation sur des GPU et totalement irréalisable sur des ASIC.

# Argon2id recommended parameters (OWASP 2023)
# Memory: 64MB (65536 KiB)
# Iterations: 3
# Parallelism: 4 threads
# Output length: 32 bytes
# argon2 -id -t 3 -m 16 -p 4 -l 32

Résistance à la mémoire : pourquoi elle neutralise les attaques par GPU

Les GPU possèdent des milliers de cœurs, mais une mémoire limitée par cœur : ils excellent dans la parallélisation de calculs simples nécessitant peu de mémoire. Les fonctions résistantes à la mémoire comme Argon2 et scrypt nécessitent de grandes quantités de RAM pour chaque calcul de hachage. Si un attaquant veut exécuter 10 000 calculs Argon2id en parallèle, chacun nécessitant 64 Mo de mémoire, il lui faut 640 Go de RAM pour GPU, soit bien plus que ce dont dispose n'importe quel groupe de GPU. Cette propriété, appelée résistance à la mémoire, contraint les attaquants à effectuer des calculs lents et séquentiels ou à investir dans du matériel exceptionnellement coûteux, rendant les attaques non rentables.

Réglage du facteur de travail en pratique

Le facteur de travail approprié dépend de votre matériel et de la latence acceptable. L'objectif général est de 100 à 300 ms sur le matériel de production du serveur pour chaque authentification. À mesure que le matériel s'améliore, vous devez augmenter le facteur de travail. C'est pourquoi bcrypt et Argon2 stockent les paramètres avec le hachage, ce qui permet des mises à niveau transparentes : lors de la prochaine connexion, vérifiez le mot de passe, puis calculez à nouveau son hachage avec les nouveaux paramètres plus élevés. OWASP tient à jour les paramètres minimaux recommandés pour PBKDF2, bcrypt et Argon2id ; ceux-ci doivent être réexaminés chaque année.

scrypt : l'autre KDF résistante à la mémoire

scrypt, conçu par Colin Percival en 2009, a été la première KDF résistante à la mémoire largement adoptée et est utilisé par Litecoin ainsi que par de nombreux gestionnaires de mots de passe. scrypt est paramétré par N (coût en CPU et en mémoire), r (taille de bloc) et p (facteur de parallélisation). Comme Argon2, les valeurs élevées de N nécessitent de grandes quantités de RAM pour chaque calcul. scrypt est considéré comme sûr, mais Argon2id est généralement préféré pour les nouvelles applications, car il a remporté la PHC et a fait l'objet de davantage d'analyses cryptographiques. Les deux constituent des choix acceptables.

À ne pas utiliser : MD5, SHA-1 et SHA sans sel

Plusieurs approches de hachage ne doivent jamais être utilisées pour les mots de passe : MD5 (cassé, des milliards de hachages par seconde sur du matériel grand public), SHA-1 (même problème), SHA-256 sans sel (rapide, tables arc-en-ciel triviales) et le chiffrement simple (réversible ; le vol de la clé équivaut au vol de tous les mots de passe). Des fuites historiques comme celle de LinkedIn (2012) ont utilisé SHA-1 sans sel, exposant 117 millions de mots de passe qui ont été cassés en quelques jours. Adobe (2013) a chiffré les mots de passe au lieu de les hacher, révélant une incompréhension fondamentale qui a exposé 153 millions de comptes. Ces incidents figurent au programme de l'examen Security+.

Dérivation de clés pour le chiffrement

Les KDF servent également à dériver des clés de chiffrement à partir de mots de passe (au lieu de stocker des hachages de mots de passe). Lorsqu'un utilisateur définit un mot de passe principal pour un coffre chiffré, l'application utilise une KDF pour dériver la véritable clé de chiffrement AES-256 à partir de ce mot de passe. C'est pourquoi les gestionnaires de mots de passe peuvent déchiffrer votre coffre localement : ils exécutent la KDF sur votre mot de passe principal afin de reconstituer la clé de chiffrement, qui ne quitte jamais votre appareil. HKDF (HMAC-based Key Derivation Function) est la norme pour dériver plusieurs clés à partir d'un secret unique à forte entropie ; elle est utilisée dans TLS 1.3 pour dériver les clés de négociation et les clés applicatives.

Bourrage d’identifiants et protection par KDF

Les attaques par bourrage d’identifiants rejouent des couples nom d’utilisateur/mot de passe volés lors d’une fuite de données contre d’autres services. Les KDF robustes réduisent la fenêtre d’attaque pour le cassage hors ligne après une fuite — si l’attaquant doit consacrer 300 ms à chaque tentative au lieu de quelques microsecondes, casser un mot de passe aléatoire de 10 caractères devient irréalisable sur le plan computationnel. Cependant, les KDF ne protègent pas contre la réutilisation des mots de passe sur plusieurs sites : cela exige que les utilisateurs emploient des mots de passe uniques. La combinaison de mots de passe uniques + stockage avec Argon2id + MFA rend les attaques fondées sur les identifiants pratiquement inefficaces.

Vérification rapide

Vérifiez votre compréhension des concepts de CompTIA Security+ (SY0-701) abordés dans cette leçon.

Récapitulatif de la leçon

Dans cette leçon, vous avez appris que : les KDF de mots de passe sont volontairement lentes et utilisent des facteurs de travail réglables pour rendre les attaques par force brute hors ligne irréalisables sur le plan computationnel ; les fonctions exigeantes en mémoire comme Argon2id et scrypt neutralisent la parallélisation par GPU en exigeant une grande quantité de RAM pour chaque calcul ; et MD5, SHA-1 et les hachages sans sel sont totalement inadéquats pour le stockage des mots de passe, comme l’ont montré plusieurs fuites de données très médiatisées. Nous allons maintenant étudier la cryptographie post-quantique et les algorithmes sélectionnés par NIST pour remplacer RSA et ECC.

Questions Fréquemment Posées

La leçon « Fonctions de dérivation de clés : PBKDF2, bcrypt et Argon2 » est-elle gratuite ?

Oui — le texte complet de « Fonctions de dérivation de clés : PBKDF2, bcrypt et Argon2 » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Security+ Academy, passe à CoddyKit PRO. Le cours Security+ Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Fonctions de dérivation de clés : PBKDF2, bcrypt et Argon2 » ?

Comparez les algorithmes de hachage des mots de passe selon leur résistance aux attaques par GPU et ASIC, et comprenez comment régler les facteurs de coût et la difficulté mémoire. Tu pratiques Security+ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Security+ Academy ?

Aucune expérience préalable n'est requise. Security+ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Fonctions de dérivation de clés : PBKDF2, bcrypt et Argon2 » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Security+ Academy ?

Oui. Chaque leçon Security+ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Négociation TLS 1.3 et reprise 0-RTT
  2. Chiffrement authentifié : AES-GCM et ChaCha20-Poly1305
  3. Fonctions de dérivation de clés : PBKDF2, bcrypt et Argon2
  4. Cryptographie post-quantique : CRYSTALS-Kyber et Dilithium
← Retour à Security+ Academy