Qu'est-ce que PBKDF2 ?
PBKDF2 (Password-Based Key Derivation Function 2) est un algorithme de dérivation de clé défini par le RFC 8018 qui applique de manière itérative une fonction pseudo-aléatoire — généralement HMAC-SHA-256 — à un mot de passe et à un sel pour produire une clé dérivée coûteuse à casser par force brute en termes de calcul.
Aussi connu sous le nom de : Password-Based Key Derivation Function 2, PBKDF, RFC 8018
PBKDF2 fonctionne en appliquant de manière répétée un HMAC (Hash-based Message Authentication Code) à la combinaison d’un mot de passe et d’un sel aléatoire. Le nombre d’itérations contrôle combien de fois cette opération est exécutée : plus d’itérations signifient plus de temps CPU par tentative de dérivation de clé, ce qui augmente directement le coût pour un attaquant qui cherche à deviner le mot de passe.
Le sel est une valeur aléatoire unique à chaque opération de dérivation de clé. Il empêche les attaques par recherche précalculée (tables arc-en-ciel) en garantissant que le même mot de passe produit des clés dérivées différentes avec des sels différents. Le sel n’a pas besoin d’être secret : il est généralement stocké aux côtés de la clé dérivée ou du texte chiffré.
PBKDF2 a été normalisé en l’an 2000 et reste largement pris en charge, en particulier dans les navigateurs via la Web Crypto API. Bien que des KDF plus récentes comme Argon2 offrent une meilleure résistance aux attaques par GPU et ASIC grâce à leur forte consommation mémoire, PBKDF2 demeure un choix solide pour les applications basées sur le navigateur, où la compatibilité avec la Web Crypto API est essentielle et où le nombre d’itérations peut être réglé assez haut pour offrir une sécurité adéquate.
Comment Vaulted utilise PBKDF2
Vaulted utilise PBKDF2 via la Web Crypto API lorsqu’une phrase secrète est ajoutée à un secret. L’implémentation utilise 100 000 itérations avec HMAC-SHA-256 et un sel aléatoire de 16 octets. La clé dérivée de 256 bits sert de clé d’encapsulation AES-KW pour chiffrer la clé principale AES-256-GCM. Le sel est stocké avec la clé encapsulée dans le fragment d’URL, afin que le destinataire puisse redériver la même clé d’encapsulation à partir de la phrase secrète.