Passa al contenuto principale

2.15. Authentication of the IKE SA (Autenticazione dell'IKE SA)

2.15. Authentication of the IKE SA (Autenticazione dell'IKE SA)

Senza autenticazione estensibile (sezione 2.16), i peer si autenticano firmando (o MAC con segreto condiviso imbottito come chiave) un blocco di dati. IDi' e IDr' sono l'intero payload ID senza header fisso. Per il rispondente, gli ottetti da firmare iniziano dal primo ottetto del primo SPI nell'header del secondo messaggio (risposta IKE_SA_INIT) e finiscono all'ultimo ottetto dell'ultimo payload. Si aggiungono per la firma il nonce Ni dell'iniziatore (solo il valore) e prf(SK_pr, IDr'). Ni e prf(SK_pr, IDr') non sono trasmessi. L'iniziatore firma il primo messaggio (richiesta IKE_SA_INIT) dallo stesso modo e aggiunge Nr e prf(SK_pi, IDi'). È critico che ciascun lato firmi il nonce dell'altro.

InitiatorSignedOctets = RealMessage1 | NonceRData | MACedIDForI
GenIKEHDR = [ four octets 0 if using port 4500 ] | RealIKEHDR
RealIKEHDR = SPIi | SPIr | . . . | Length
RealMessage1 = RealIKEHDR | RestOfMessage1
NonceRPayload = PayloadHeader | NonceRData
InitiatorIDPayload = PayloadHeader | RestOfInitIDPayload
RestOfInitIDPayload = IDType | RESERVED | InitIDData
MACedIDForI = prf(SK_pi, RestOfInitIDPayload)
ResponderSignedOctets = RealMessage2 | NonceIData | MACedIDForR
GenIKEHDR = [ four octets 0 if using port 4500 ] | RealIKEHDR
RealIKEHDR = SPIi | SPIr | . . . | Length
RealMessage2 = RealIKEHDR | RestOfMessage2
NonceIPayload = PayloadHeader | NonceIData
ResponderIDPayload = PayloadHeader | RestOfRespIDPayload
RestOfRespIDPayload = IDType | RESERVED | RespIDData
MACedIDForR = prf(SK_pr, RestOfRespIDPayload)

Tutti i payload sono inclusi nella firma, anche tipi non definiti in questo documento. Se il primo messaggio è inviato più volte, vale l'ultima versione.

Opzionalmente, i messaggi 3 e 4 POSSONO includere certificato o catena che fornisca evidenza che la chiave per la firma digitale appartiene al nome nel payload ID. Firma o MAC usano algoritmi dettati dal tipo di chiave del firmatario e dal campo Auth Method nel payload Authentication. Non è richiesto che iniziatore e rispondente firmino con gli stessi algoritmi crittografici. La scelta dipende dal tipo di chiave; l'iniziatore può usare un segreto condiviso e il rispondente una chiave pubblica e certificato. Con segreto condiviso è frequente (non richiesto) usare la stessa chiave in entrambe le direzioni.

Nota: è pratica comune ma tipicamente insicura avere un segreto condiviso derivato solo da password scelta dall'utente senza altra sorgente di casualità. Le password scelte raramente hanno imprevedibilità sufficiente contro attacchi a dizionario, non impediti da questo metodo. (Le applicazioni con autenticazione basata su password per bootstrap e IKE SA dovrebbero usare il metodo della sezione 2.16.) Il PSK deve contenere tanta imprevedibilità quanto la chiave più forte negoziata. Con PSK, AUTH si calcola come:

Iniziatore:

AUTH = prf( prf(Shared Secret, "Key Pad for IKEv2"),
<InitiatorSignedOctets>)

Rispondente:

AUTH = prf( prf(Shared Secret, "Key Pad for IKEv2"),
<ResponderSignedOctets>)

La stringa "Key Pad for IKEv2" ha 17 caratteri ASCII senza terminazione null. Il segreto condiviso può essere di lunghezza variabile. La stringa di pad consente, se il segreto deriva da password, di non memorizzare la password in chiaro ma prf(Shared Secret,"Key Pad for IKEv2"), non equivalente a password per protocolli diversi da IKEv2. Come già detto, derivare solo dalla password non è sicuro; questa costruzione anticipa che lo si faccia comunque. L'interfaccia di gestione DEVE accettare stringhe ASCII di almeno 64 ottetti e NON DEVE aggiungere terminatore null prima dell'uso come segreto. DEVE accettare codifica esadecimale e PUÒ accettare altre codifiche se l'algoritmo di traduzione in stringa binaria è specificato.

Esistono due tipi di autenticazione EAP (sezione 2.16), ciascuno con valori diversi nei calcoli AUTH sopra. Se il metodo EAP genera chiave, sostituire la master session key (MSK) al segreto condiviso. Per metodi non generanti chiave, sostituire rispettivamente SK_pi e SK_pr al segreto condiviso nei due calcoli AUTH.