bcrypt / PBKDF2 / Argon2
generalDéfinition
bcrypt, PBKDF2 et Argon2 sont des fonctions de dérivation de clé (KDF — Key Derivation Functions) spécialisées pour le hachage sécurisé des mots de passe. Contrairement aux fonctions de hachage cryptographiques génériques (SHA-256, SHA-3) qui sont conçues pour être rapides, ces fonctions sont intentionnellement lentes et coûteuses en ressources pour rendre les attaques par force brute et dictionnaire économiquement prohibitives. bcrypt est l'algorithme de hachage de mots de passe le plus historiquement déployé. Conçu par Niels Provos et David Mazières en 1999, il intègre nativement un salt aléatoire de 128 bits (évitant les rainbow tables) et un facteur de coût configurable (work factor, de 4 à 31) qui contrôle le nombre d'itérations. La limite principale de bcrypt est qu'il est limité à des mots de passe de 72 octets (les octets suivants sont ignorés) et qu'il est fortement mémorisé en RAM, mais sa résistance aux GPUs est limitée comparé aux options plus récentes. PBKDF2 (Password-Based Key Derivation Function 2, RFC 8018) est le standard NIST recommandé pour les applications gouvernementales. Il applique un HMAC (généralement HMAC-SHA256 ou HMAC-SHA512) de façon itérative avec un salt. Le nombre d'itérations est configurable — OWASP recommande 600 000 itérations avec HMAC-SHA256 (2023). PBKDF2 est approuvé FIPS 140-3, ce qui le rend incontournable dans les environnements gouvernementaux américains. Sa faiblesse : il est facilement parallélisable sur GPU, permettant des attaques massives. Argon2 est le gagnant du Password Hashing Competition de 2015, conçu pour résister aux attaques par GPU et ASIC grâce à une utilisation intensive de la mémoire. Il existe en trois variantes : Argon2d (résistant aux attaques GPU, pour les applications non interactives), Argon2i (résistant aux attaques par canal auxiliaire, pour les applications interactives avec entrée utilisateur), et Argon2id (hybride recommandé pour la plupart des usages). Argon2id est la recommandation actuelle d'OWASP pour le hachage des mots de passe dans les nouvelles applications. Les paramètres de tuning (facteur de coût pour bcrypt, itérations pour PBKDF2, mémoire/parallélisme/itérations pour Argon2) doivent être calibrés pour que le hachage prenne environ 300ms à 1s sur le serveur de production — suffisamment lent pour les attaquants, suffisamment rapide pour les utilisateurs légitimes.
Argon2id — recommandation OWASP et paramètres
OWASP recommande Argon2id avec les paramètres minimaux suivants (2023) : m=19456 (19 MiB de mémoire), t=2 (2 itérations), p=1 (1 thread de parallélisme). Si l'utilisation mémoire est contrainte : m=12288, t=3, p=1. Si plus de puissance de calcul est disponible : m=65536, t=1, p=4. La résistance d'Argon2 aux GPUs vient de son utilisation de la mémoire : chaque thread d'attaque requiert m mégaoctets de RAM, rendant les attaques parallèles sur GPU (qui disposent de milliers de cœurs mais peu de mémoire par cœur) beaucoup plus difficiles que pour PBKDF2 (qui ne demande que quelques kilo-octets par thread). Les implémentations de référence existent pour Python (argon2-cffi), PHP (password_hash avec PASSWORD_ARGON2ID), Go (golang.org/x/crypto/argon2), et Java (de-mkammerer/argon2-jvm).
Migration du stockage des mots de passe
Migrer d'un stockage de mots de passe non sécurisé (MD5 ou SHA sans salt — un scan Have I Been Pwned révèle souvent des milliers d'hashes compromis dans les anciennes applications) vers Argon2id nécessite une approche progressive. Méthode 1 — Double hachage : recalculer Argon2id(hash_md5_existant) pour tous les hashes stockés — rapide mais ne valide pas que les mots de passe réels correspondent (les hash MD5 compromis permettent de contourner). Méthode 2 — Migration à la connexion : garder les vieux hashes, recalculer Argon2id quand l'utilisateur se connecte avec succès, stocker le nouveau hash et marquer comme migré — progressive mais laisse les vieux hashes en place jusqu'à la connexion. Méthode recommandée pour les applications actives.
Vérification des hash compromis — Have I Been Pwned
Have I Been Pwned (HIBP) de Troy Hunt permet de vérifier si un hash de mot de passe (ou plutôt le préfixe de son SHA-1) figure dans les bases de données de mots de passe compromis. L'API Pwned Passwords utilise le modèle k-anonymité : le client envoie les 5 premiers caractères du SHA-1 du mot de passe, le serveur retourne tous les hashes commençant par ce préfixe, et le client compare localement — le mot de passe complet n'est jamais transmis. Intégrer cette vérification lors de la création de compte et du changement de mot de passe est une bonne pratique recommandée par NIST SP 800-63B : les mots de passe déjà compromis dans des fuites connues doivent être rejetés même s'ils répondent aux critères de complexité.
Articles liés
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés.
Un projet cybersécurité ?
Expert dispo · Réponse 24h