5.2 User-Password
5.2. User-Password
Description (Descrizione)
Questo Attribute indica la password dell'utente da autenticare, o l'input dell'utente dopo un Access-Challenge. Viene utilizzato solo nei pacchetti Access-Request.
Durante la trasmissione, la password è nascosta. La password viene prima riempita alla fine con null fino a un multiplo di 16 ottetti. Viene calcolato un hash MD5 unidirezionale su un flusso di ottetti costituito dal segreto condiviso seguito dal Request Authenticator. Questo valore viene messo in XOR con il primo segmento di 16 ottetti della password e posizionato nei primi 16 ottetti del campo String dell'Attribute User-Password.
Se la password è più lunga di 16 caratteri, viene calcolato un secondo hash MD5 unidirezionale su un flusso di ottetti costituito dal segreto condiviso seguito dal risultato del primo xor. Tale hash viene messo in XOR con il secondo segmento di 16 ottetti della password e posizionato nei secondi 16 ottetti del campo String dell'Attribute User-Password.
Se necessario, questa operazione viene ripetuta, con ciascun risultato xor utilizzato insieme al segreto condiviso per generare l'hash successivo per xor il segmento successivo della password, fino a un massimo di 128 caratteri.
Il metodo è tratto dal libro "Network Security" di Kaufman, Perlman e Speciner [9] pagine 109-110. Segue una spiegazione più precisa del metodo:
Chiamare il segreto condiviso S e il Request Authenticator pseudo-casuale a 128 bit RA. Suddividere la password in blocchi di 16 ottetti p1, p2, ecc. con l'ultimo riempito alla fine con null fino a un limite di 16 ottetti. Chiamare i blocchi di testo cifrato c(1), c(2), ecc. Avremo bisogno di valori intermedi b1, b2, ecc.
b1 = MD5(S + RA) c(1) = p1 xor b1
b2 = MD5(S + c(1)) c(2) = p2 xor b2
. .
. .
. .
bi = MD5(S + c(i-1)) c(i) = pi xor bi
Lo String conterrà c(1)+c(2)+...+c(i) dove + denota la concatenazione.
Alla ricezione, il processo viene invertito per ottenere la password originale.
Un riepilogo del formato dell'Attribute User-Password è mostrato di seguito. I campi sono trasmessi da sinistra a destra.
0 1 2
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
| Type | Length | String ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Type
2 per User-Password.
Length
Almeno 18 e non più di 130.
String
Il campo String è lungo tra 16 e 128 ottetti, inclusi.