PBKDF2
Le PBKDF2 (abréviation de Password-Based Key Derivation Function 2) est une fonction de dérivation de clé, appartenant à la famille des normes Public Key Cryptographic Standards, plus précisément PKCS #5 v2.0. Cette norme a également été publiée dans la RFC 2898. Elle succède au PBKDF1, qui pouvait produire des clés n'allant que jusqu'à 160 bits.
Concepteur(s) | Laboratoires RSA |
---|---|
Première publication | 2000 |
Dérivé de | PBKDF1 |
Chiffrement(s) basé(s) sur cet algorithme | aucun |
Taille(s) du bloc | Dépend de la fonction cryptographique associée |
---|---|
Longueur(s) de la clé | Au choix de l'utilisateur |
Structure | inconnue |
Nombre de tours | Au choix de l'utilisateur |
Meilleure cryptanalyse
aucune cryptanalyse connue
Cette norme est aujourd'hui utilisée pour le hachage de mot de passe (associé à des fonctions comme SHA-256) ou la génération de clé de chiffrement de données.
Concept
Le PBKDF2 applique une fonction choisie par l'utilisateur (fonction de hachage, de chiffrement ou un HMAC) à un mot de passe ou une phrase secrète avec un sel et répète cette opération plusieurs fois afin de générer une clé, qui peut être ensuite utilisée pour chiffrer un quelconque contenu.
Cette génération rajoute du temps de calcul qui complique le cassage du mot de passe, notamment par force brute. À la publication de la norme, en 2000, le nombre d'itérations recommandées était de 1 000. Ce paramètre est prévu pour être augmenté au fur et à mesure que les processeurs s'améliorent et deviennent plus performants. Le sel ajouté permet d'éviter l'utilisation de rainbow tables et donc limite les attaques sur plusieurs mots de passe en simultané[1].
Fonction de dérivation
La fonction a cinq paramètres en entrée :
DK = PBKDF2(PRF, Password, Salt, c, dkLen)
- PRF est la fonction pseudo-aléatoire à utiliser à chaque itération
- Password est la chaîne à partir de laquelle il faut dériver la clé
- Salt est le sel pour la fonction cryptographique
- c est le nombre d'itérations à effectuer
- dkLen est la taille de clé désirée
Le résultat DK est notre clé dérivée.
On prend tout d'abord la taille hLen
, qui correspond à la taille, en bits, de sortie de la fonction PRF
. Puis chaque bloc Ti
de hLen
bits de la clé DK
est calculé :
DK = T1 || T2 || ... || Tdklen/hlen Ti = F(Password, Salt, c, i)
La fonction F
est la combinaison de c
itérations de la fonction PRF
avec des XOR. La première itération utilise le mot de passe et le sel Salt
concaténé avec le nombre d'itérations i
. Ensuite, la fonction PRF
prend le mot de passe original comme clé et le résultat de l'itération précédente en sel. On obtient le schéma suivant :
F(Password, Salt, c, i) = U1 ^ U2 ^ ... ^ Uc U1 = PRF(Password, Salt || INT_32_BE(i)) U2 = PRF(Password, U1) ... Uc = PRF(Password, Uc-1)
Par exemple, le WPA2 utilise :
DK = PBKDF2(HMAC−SHA1, passphrase, ssid, 4096, 256)
Utilisations
Plusieurs applications utilisent cette fonction pour dériver leur clé de chiffrement de bout-en-bout tout en garantissant à l'utilisateur une synchronisation des données entre appareils, tel que Bitwarden[2] ou encore Standard Notes[3].
Notes et références
- « PBKDF2 et génération des clés de chiffrement de disque » (consulté le )
- « What encryption is being used? | Bitwarden Help & Support », sur help.bitwarden.com (consulté le )
- « How does Standard Notes secure my notes? », sur standardnotes.org (consulté le )