Avevamo già accennato nel tutorial pratico sul wep a questo celebre algoritmo creato nel 1987 da Ron Rivest. Esso viene utilizzato oltre che nel protocollo wep, anche nel WPA-TKIP e nelle comunicazioni SSL-TSL. E’ un algoritmo estremamente semplice da capire; nella parte formale in cui lo descriveremo sembrerà ostico da comprendere ma se seguirete con attenzione l’esempio proposto vi accorgerete che in realtà che, non solo è semplicissimo, ma può essere equiparato ad un giochino...
E’ costituito da due piccoli algoritmi: RC4-KSA e RC4-PRGA.
Si parte da un vettore S di 256 elementi i cui valori sono i numeri ordinati da 0 a 255 (ossia il primo elemento è S[0]=0,il secondo è S[1]=1, poi S[2]=2 …S[56]=56…e S[255]=255 ). Questo è lo STATO INIZIALE che indicheremo con S0.
Il KSA banalmente ad ogni passo (o step) scambia due elementi di questo vettore S e quindi “lo mescola”. La scelta degli elementi da scambiare si basa ovviamente su una chiave fornita in input (per il wep è la perpacked key..). Ogni elemento di S viene scambiato con un altro e quindi si verificano 255 SWAP (swap vuol dire scambio). Il vettore dopo il primo swap lo chiameremo S1, dopo il secondo lo chiameremo S2…quindi quello finale lo chiamiamo S255.
E qui il KSA finisce il suo lavoro: in pratica ha solo mescolato un vettore S0 in base ad una chiave fornendo il vettore S255.
Il PRGA genera il keystream a partire dal vettore S255 con alcuni semplici artifici.Tuttavia ai fini di una completa comprensione è meglio fare un esempio che continuare a spiegare a parole:
ESEMPIO RC4:
Ecco lo pseudocodice del RC4-KSA, se volete potete usarlo come guida per l’esempio:
NOTA: nel codice sopra abbiamo omesso chhe le somme vanno fatte in modulo 256 (ad esempio se il risultato è 300 in modulo 256 diventa 300-256=44). Inoltre avrete notato che la chiave viene intesa anch’essa come un vettore di numeri da 0 255).
Creiamo quindi un keystream a partire da una chiave qualsiasi. Scegliamo una chiave K a 4 byte quindi con 4 caratteri (un carattere è identificato da un numero da 0 a 255).. K= 23, 42, 232, 11.
RC4-KSA: Creazione del vettore S256
PASSO KSA-0
Il vettore S viene riempito da 0 a 255 con numeri crescenti. I candidati allo scambio sono:
i=0
j 1= j0 + S[0]+ K[0] = 0 + 0 + 23 = 23
PASSO KSA-1
S[0] e S[23] vengono scambiati. I nuovi candidati allo scambio sono:
i=1
j 2= j1 + S[1]+ K[1] = 23 + 1 + 42 = 66
PASSO KSA-2
S[1] e S[66] vengono scambiati. I nuovi candidati allo scambio sono:
i=2
j 3= j2 + S[2]+ K[2] = 66 + 2 + 232 = 300 = in modulo 256= 44
PASSO KSA-3
S[2] e S[44] vengono scambiati. I nuovi candidati allo scambio sono:
i=3
j 4= j3 + S[3]+ K[3] = 44 + 3 + 11 = 58
PASSO KSA-4
S[3] e S[58] vengono scambiati. Non ci sono più elementi nel vettore K quindi ripartiamo da K[0]. I nuovi candidati allo scambio sono:
i=4
j 5= j4 + S[4]+ K[0] = 58 + 4 + 23 = 85
PASSO KSA-5
S[4] e S[85] vengono scambiati. I nuovi candidati allo scambio sono:
i=5
j 6= j5 + S[5]+ K[1] = 85 + 5 + 42 = 132
E cosi’ via per 255 passi!
In questo modo termina l’algoritmo RC4-KSA quando scambiamo anche l’ultimo elemento ottenendo S256 …Ora con questo vettore inizia la parte dell’algoritmo relativa al RC4-PRGA.
(NOTA:anche se l’ultimo valore di i è 255 la trasformazione in S256 avviene prima che il ciclo si fermi)
RC4-PRGA: Creazione del vettore Keystream X
PASSO PRGA-0
Come si nota dallo pseudocodice riportato in precedenza i viene inizializzato ad 1 mentre j prosegue con l’ultimo valore del KSA. Quindi i candidati allo scambio nel PRGA sono:
i=1
j257 = 12
Ecco quindi il vettore creato dalla prima parte del KSA con i candidati allo SWAP evidenziati in rosso:

PASSO PRGA-1
Gli elementi del vettore sono aggiornati ed ora possiamo estrarre il primo valore X[0] del keystream:
X[0]= S[ S[1] + S[12] ] = S[260] = S[4] = 85

I nuovi candidati allo scambio sono:
i=2
j258 = j + S[2] = 12+ 28 = 40
PASSO PRGA-2
Gli elementi del vettore sono aggiornati ed ora possiamo estrarre il secondo valore X[1] del keystream:
X[1]= S[ S[2] + S[40] ] = S[88] = 161

I nuovi candidati allo scambio sono:
i=3
j259 = j + S[3] = 40+ 16 = 56
PASSO PRGA-3
X[2]= S[ S[3] + S[56] ] = S[167] = 104

I nuovi candidati allo scambio sono:
i=4
j260 = j + S[4] = 56 + 85 = 141
Come potete notare si tratta quasi di un giochino fatto di somme e scambi , basta non perdersi con gli indici dei vettori. Proporremo in seguito uno script in korn che effettuerà per noi tutti questi passaggi.A partire da una chiave di 4 elementi abbiamo quindi creato e mescolato con il KSA un vettore per poi tramite il PRGA creare i primi 3 byte del keystream X che sono appunto 185, 161 e 104. Come abbiamo spiegato nel precedente articolo questi byte andranno in XOR con il PAYLOAD ossia con i dati in chiaro.
Ora siete prontissimi e preparati ad affrontare e capire la spiegazione di alcuni attacchi al RC4 come l'FMS, il KOREK e il PWT.
[3] Spiegazione del Fake-Auth (falsificazione autenticazione e Packet injection)
Sostenete il rinnovamento del sito dando un'occhiata ai link pubblicitari che vi interessano.
| Commenti |
|













