Aller au contenu principal

4.3. Key Derivation (Dérivation de clés)

4.3. Key Derivation (Dérivation de clés)

Quelle que soit la transformation de chiffrement ou d'authentification de message employée (il peut s'agir d'une transformation prédéfinie SRTP ou nouvellement introduite selon la Section 6), les implémentations SRTP interopérables DOIVENT utiliser la dérivation de clés SRTP pour générer des clés de session. Une fois que le taux de dérivation de clés est correctement signalé au début de la session, il n'y a pas besoin de communication supplémentaire entre les parties qui utilisent la dérivation de clés SRTP.

                      packet index ---+
|
v
+-----------+ master +--------+ session encr_key
| ext | key | |---------->
| key mgmt |-------->| key | session auth_key
| (optional | | deriv |---------->
| rekey) |-------->| | session salt_key
| | master | |---------->
+-----------+ salt +--------+

Figure 5: Dérivation de clés SRTP.

Au moins une dérivation de clés initiale DOIT être effectuée par SRTP, c'est-à-dire que la première dérivation de clés est REQUISE. D'autres applications de la dérivation de clés PEUVENT être effectuées, selon la valeur "key_derivation_rate" dans le contexte cryptographique. La fonction de dérivation de clés DOIT être invoquée initialement avant le premier paquet et ensuite, lorsque r > 0, une dérivation de clés est effectuée chaque fois que index mod r est égal à zéro. Cela peut être considéré comme un "rafraîchissement" des clés de session. La valeur de "key_derivation_rate" DOIT rester fixe pendant la durée de vie de la clé maître associée.

Les implémentations SRTP interopérables PEUVENT également dériver des clés de salage de session pour les transformations de chiffrement, comme cela est fait dans les deux transformations prédéfinies.

Soient m et n des entiers positifs. Une famille de fonctions pseudo-aléatoires est un ensemble de fonctions à clé {PRF_n(k,x)} tel que pour la clé aléatoire (secrète) k, étant donné x de m bits, PRF_n(k,x) est une chaîne de n bits, computationnellement indiscernable de chaînes aléatoires de n bits, voir [HAC]. Pour les besoins de la dérivation de clés dans SRTP, une PRF sécurisée avec m = 128 (ou plus) DOIT être utilisée, et une transformation PRF par défaut est définie dans la Section 4.3.3.

Soit "a DIV t" désignant la division entière de a par t, arrondie vers le bas, et avec la convention que "a DIV 0 = 0" pour tout a. Nous adoptons également la convention de traiter "a DIV t" comme une chaîne de bits de la même longueur que a, et ainsi "a DIV t" aura en général des zéros de tête.

La dérivation de clés DOIT être définie comme suit en termes de <label>, une constante de 8 bits (voir ci-dessous), master_salt et key_derivation_rate, tels que déterminés dans le contexte cryptographique, et index, l'index de paquet (c'est-à-dire, le ROC || SEQ de 48 bits pour SRTP):

  • Soit r = index DIV key_derivation_rate (avec DIV tel que défini ci-dessus).

  • Soit key_id = <label> || r.

  • Soit x = key_id XOR master_salt, où key_id et master_salt sont alignés de sorte que leurs bits les moins significatifs concordent (alignement à droite).

<label> DOIT être unique pour chaque type de clé à dériver. Nous définissons actuellement <label> 0x00 à 0x05 (voir ci-dessous), et les extensions futures PEUVENT spécifier de nouvelles valeurs dans la plage 0x06 à 0xff pour d'autres objectifs. La clé SRTP (ou sel) de n bits pour ce paquet DOIT alors être dérivée de la clé maître, k_master comme suit:

PRF_n(k_master, x).

(La PRF peut spécifier en interne un formatage et un remplissage supplémentaires de x, voir par exemple la Section 4.3.3 pour la PRF par défaut.)

Les clés de session et le sel DOIVENT maintenant être dérivés en utilisant:

  • k_e (chiffrement SRTP): <label> = 0x00, n = n_e.

  • k_a (authentification de message SRTP): <label> = 0x01, n = n_a.

  • k_s (clé de salage SRTP): <label> = 0x02, n = n_s.

où n_e, n_s, et n_a proviennent du contexte cryptographique.

La clé maître et le sel maître DOIVENT être aléatoires, mais le sel maître PEUT être public.

Notez que pour un key_derivation_rate de 0, l'application de la dérivation de clés DOIT avoir lieu exactement une fois.

La définition de DIV ci-dessus est purement pour la commodité de notation. Pour un t non nul parmi l'ensemble des taux de dérivation de clés autorisés, "a DIV t" peut être implémenté comme un décalage vers la droite par le logarithme en base 2 de t. L'opération de dérivation est encore facilitée si les taux sont choisis comme des puissances de 256, mais cette granularité a été considérée comme trop grossière pour être une exigence de cette spécification.

La limite supérieure du nombre de paquets pouvant être sécurisés en utilisant la même clé maître (voir Section 9.2) est indépendante de la dérivation de clés.