Passa al contenuto principale

4.3. Key Derivation (Derivazione delle chiavi)

4.3. Key Derivation (Derivazione delle chiavi)

Indipendentemente dalla trasformazione di cifratura o autenticazione del messaggio impiegata (può essere una trasformazione predefinita SRTP o introdotta di recente secondo la Sezione 6), le implementazioni SRTP interoperabili DEVONO utilizzare la derivazione delle chiavi SRTP per generare chiavi di sessione. Una volta che la velocità di derivazione delle chiavi è correttamente segnalata all'inizio della sessione, non è necessaria alcuna comunicazione aggiuntiva tra le parti che utilizzano la derivazione delle chiavi SRTP.

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

Figura 5: Derivazione delle chiavi SRTP.

Almeno una derivazione iniziale delle chiavi DEVE essere eseguita da SRTP, cioè, la prima derivazione delle chiavi è RICHIESTA. Ulteriori applicazioni della derivazione delle chiavi POSSONO essere eseguite, secondo il valore "key_derivation_rate" nel contesto crittografico. La funzione di derivazione delle chiavi DEVE essere inizialmente invocata prima del primo pacchetto e poi, quando r > 0, una derivazione delle chiavi viene eseguita ogni volta che index mod r è uguale a zero. Questo può essere pensato come "aggiornamento" delle chiavi di sessione. Il valore di "key_derivation_rate" DEVE essere mantenuto fisso per la durata della chiave master associata.

Le implementazioni SRTP interoperabili POSSONO anche derivare chiavi di salatura di sessione per le trasformazioni di cifratura, come viene fatto in entrambe le trasformazioni predefinite.

Siano m e n interi positivi. Una famiglia di funzioni pseudo-casuali è un insieme di funzioni con chiave {PRF_n(k,x)} tale che per la chiave casuale (segreta) k, dato x di m bit, PRF_n(k,x) è una stringa di n bit, computazionalmente indistinguibile da stringhe casuali di n bit, vedere [HAC]. Per lo scopo della derivazione delle chiavi in SRTP, DEVE essere utilizzata una PRF sicura con m = 128 (o più), e una trasformazione PRF predefinita è definita nella Sezione 4.3.3.

Sia "a DIV t" la divisione intera di a per t, arrotondata per difetto, e con la convenzione che "a DIV 0 = 0" per tutti gli a. Adottiamo anche la convenzione di trattare "a DIV t" come una stringa di bit della stessa lunghezza di a, e quindi "a DIV t" avrà in generale zeri iniziali.

La derivazione delle chiavi DEVE essere definita come segue in termini di <label>, una costante di 8 bit (vedi sotto), master_salt e key_derivation_rate, come determinato nel contesto crittografico, e index, l'indice del pacchetto (cioè, il ROC || SEQ a 48 bit per SRTP):

  • Sia r = index DIV key_derivation_rate (con DIV come definito sopra).

  • Sia key_id = <label> || r.

  • Sia x = key_id XOR master_salt, dove key_id e master_salt sono allineati in modo che i loro bit meno significativi concordino (allineamento a destra).

<label> DEVE essere unico per ogni tipo di chiave da derivare. Attualmente definiamo <label> da 0x00 a 0x05 (vedi sotto), e le estensioni future POSSONO specificare nuovi valori nell'intervallo da 0x06 a 0xff per altri scopi. La chiave SRTP (o sale) a n bit per questo pacchetto DEVE quindi essere derivata dalla chiave master, k_master come segue:

PRF_n(k_master, x).

(La PRF può specificare internamente formattazione e padding aggiuntivi di x, vedere ad esempio la Sezione 4.3.3 per la PRF predefinita.)

Le chiavi di sessione e il sale DEVONO ora essere derivati usando:

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

  • k_a (autenticazione del messaggio SRTP): <label> = 0x01, n = n_a.

  • k_s (chiave di salatura SRTP): <label> = 0x02, n = n_s.

dove n_e, n_s e n_a provengono dal contesto crittografico.

La chiave master e il sale master DEVONO essere casuali, ma il sale master PUÒ essere pubblico.

Si noti che per un key_derivation_rate di 0, l'applicazione della derivazione delle chiavi DEVE avvenire esattamente una volta.

La definizione di DIV sopra è puramente per comodità notazionale. Per un t non zero tra l'insieme delle velocità di derivazione delle chiavi consentite, "a DIV t" può essere implementato come uno spostamento a destra del logaritmo in base 2 di t. L'operazione di derivazione è ulteriormente facilitata se le velocità sono scelte come potenze di 256, ma tale granularità è stata considerata troppo grossolana per essere un requisito di questa specifica.

Il limite superiore sul numero di pacchetti che possono essere protetti utilizzando la stessa chiave master (vedere Sezione 9.2) è indipendente dalla derivazione delle chiavi.