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 )