Aller au contenu principal

4.3.1. Key Derivation Algorithm (Algorithme de dérivation de clé)

4.3.1. Key Derivation Algorithm (Algorithme de dérivation de clé)

Indépendamment de 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é SRTP pour générer des clés de session. Une fois que le taux de dérivation de clé 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é 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é SRTP.

Au moins une dérivation de clé initiale DOIT être effectuée par SRTP, c'est-à-dire que la première dérivation de clé est REQUISE. D'autres applications de la dérivation de clé PEUVENT être effectuées, selon la valeur key_derivation_rate dans le contexte cryptographique. La fonction de dérivation de clé DOIT être invoquée initialement avant le premier paquet puis, lorsque r est supérieur à zéro, une dérivation de clé 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 toute 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, indiscernable computationnellement de chaînes de n bits aléatoires, voir [HAC]. Pour les besoins de la dérivation de clé dans SRTP, un PRF sécurisé avec m = 128 (ou plus) DOIT être utilisé, 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é 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 = &lt;label&gt; || 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).

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

Les clés et sel de session 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.

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é DOIT avoir lieu exactement une fois.

La définition de DIV ci-dessus est purement pour des raisons de commodité de notation. Pour un t non nul parmi l'ensemble des taux de dérivation de clé autorisés, "a DIV t" peut être implémenté comme un décalage à droite du 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 qui peuvent ê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é.