Aller au contenu principal

5.2 PBKDF2

PBKDF2 applique une fonction pseudoaléatoire (voir l'Annexe B.1 pour un exemple) pour dériver des clés. La longueur de la clé dérivée est essentiellement illimitée. (Cependant, l'espace de recherche effectif maximal pour la clé dérivée peut être limité par la structure de la fonction pseudoaléatoire sous-jacente. Voir l'Annexe B.1 pour une discussion plus approfondie.) PBKDF2 est recommandée pour les nouvelles applications.

PBKDF2 (P, S, c, dkLen)

Options: PRF fonction pseudoaléatoire sous-jacente (hLen désigne la longueur en octets de la sortie de la fonction pseudoaléatoire)

Input: P mot de passe, une chaîne d'octets S sel, une chaîne d'octets c nombre d'itérations, un entier positif dkLen longueur prévue en octets de la clé dérivée, un entier positif, au plus (2^32 - 1) * hLen

Output: DK clé dérivée, une chaîne de dkLen octets

Étapes:

  1. Si dkLen > (2^32 - 1) * hLen, sortir "clé dérivée trop longue" et s'arrêter.

  2. Soit l le nombre de blocs de hLen octets dans la clé dérivée, arrondi vers le haut, et soit r le nombre d'octets dans le dernier bloc:

l = CEIL (dkLen / hLen)
r = dkLen - (l - 1) * hLen

Ici, CEIL (x) est la fonction "plafond", c'est-à-dire le plus petit entier supérieur ou égal à x.

  1. Pour chaque bloc de la clé dérivée, appliquer la fonction F définie ci-dessous au mot de passe P, au sel S, au nombre d'itérations c, et à l'index de bloc pour calculer le bloc:
T_1 = F (P, S, c, 1) ,
T_2 = F (P, S, c, 2) ,
...
T_l = F (P, S, c, l) ,

où la fonction F est définie comme la somme OU-exclusif des c premières itérations de la fonction pseudoaléatoire sous-jacente PRF appliquée au mot de passe P et à la concaténation du sel S et de l'index de bloc i:

F (P, S, c, i) = U_1 \xor U_2 \xor ... \xor U_c

U_1 = PRF (P, S || INT (i)) ,
U_2 = PRF (P, U_1) ,
...
U_c = PRF (P, U_{c-1}) .

Ici, INT (i) est un encodage sur quatre octets de l'entier i, octet le plus significatif en premier.

  1. Concaténer les blocs et extraire les premiers dkLen octets pour produire une clé dérivée DK:
DK = T_1 || T_2 ||  ...  || T_l<0..r-1>
  1. Sortir la clé dérivée DK.

Note: La construction de la fonction F suit une approche "ceinture et bretelles". Les itérations U_i sont calculées récursivement pour retirer un degré de parallélisme à un adversaire; elles sont combinées par OU-exclusif pour réduire les préoccupations concernant la dégénérescence de la récursion en un petit ensemble de valeurs.