2.17. Generazione del materiale di chiave per le Child SA
2.17. Generazione del materiale di chiave per le Child SA
Una singola Child SA è creata dallo scambio IKE_AUTH, e ulteriori Child SA possono opzionalmente essere create negli scambi CREATE_CHILD_SA. Il materiale di chiave per esse è generato come segue:
KEYMAT = prf+(SK_d, Ni | Nr)
Dove Ni e Nr sono i nonce dello scambio IKE_SA_INIT se questa richiesta è la prima Child SA creata o i nuovi Ni e Nr dello scambio CREATE_CHILD_SA se questa è una creazione successiva.
Per gli scambi CREATE_CHILD_SA che includono uno scambio Diffie-Hellman opzionale, il materiale di chiave è definito come:
KEYMAT = prf+(SK_d, g^ir (new) | Ni | Nr )
dove g^ir (new) è il segreto condiviso dallo scambio ephemeral Diffie-Hellman di questo scambio CREATE_CHILD_SA (rappresentato come una stringa di ottetti in ordine big endian riempita con zeri nei bit più significativi se necessario per renderla della lunghezza del modulo).
Una singola negoziazione di CHILD_SA può risultare in multiple Security Associations. Le SA ESP e AH esistono in coppie (una per ciascuna direzione), quindi due SA sono create in una singola negoziazione di Child SA per esse. Inoltre, la negoziazione di Child SA può includere alcuni protocolli IPsec futuri in aggiunta a, o invece di, ESP o AH (per esempio, ROHC_INTEG come descritto in [ROHCV2]). In ogni caso, il materiale di chiave per ciascuna Child SA DEVE essere preso dal KEYMAT espanso usando le seguenti regole:
o Tutte le chiavi per le SA che trasportano dati dall'iniziatore al risponditore sono prese prima delle SA che vanno dal risponditore all'iniziatore.
o Se sono negoziati multipli protocolli IPsec, il materiale di chiave per ciascuna Child SA è preso nell'ordine in cui gli header di protocollo appariranno nel pacchetto incapsulato.
o Se un protocollo IPsec richiede multiple chiavi, l'ordine in cui sono prese dal materiale di chiave della SA deve essere descritto nella specifica del protocollo. Per ESP e AH, [IPSECARCH] definisce l'ordine, vale a dire: la chiave di cifratura (se presente) DEVE essere presa dai primi bit e la chiave di integrità (se presente) DEVE essere presa dai bit rimanenti.
Ciascun algoritmo crittografico prende un numero fisso di bit di materiale di chiave specificato come parte dell'algoritmo, o negoziato nei payload SA (vedere la sezione 2.13 per la descrizione delle lunghezze delle chiavi, e la sezione 3.3.5 per la definizione dell'attributo di trasformazione Key Length).