PcPedia >> non subire l informatica!

  • Increase font size
  • Default font size
  • Decrease font size
  • default color
  • black color
Home Guide Hacking [2] L'algoritmo RC4 nel dettaglio

[2] L'algoritmo RC4 nel dettaglio

E-mail Stampa PDF

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:


rc4

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

perpackedkey


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


rc4passo0


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


rc4passo1


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


rc4passo2


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


rc4passo3


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


rc4passo4


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


rc4passo5


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

j25712

Ecco quindi il vettore creato dalla prima parte del KSA con i candidati allo SWAP evidenziati in rosso:

PRGApasso0


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

PRGApasso1

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

PRGApasso2

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

PRGApasso3

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)

K[0]

K[1]

K[2]

K[3]

23

42

232

11


Sostenete il rinnovamento del sito dando un'occhiata ai link pubblicitari che vi interessano.
Commenti
Nuovo Cerca
+/-
Commenta
Nome:
Email:
 
Website:
Titolo:
UBBCode:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:D:angry::angry-red::evil::idea::love::x:no-comments::ooo::pirate::?::(
:sleep::););)):0
 
Please input the anti-spam code that you can read in the image.
bravo |2010-02-07 22:38:52
veramente eccellente ;)
clap-clap |2009-10-20 18:02:29
clap-clap, niente da dire! aundo finisci l'articolo sul KoreK?

!joomlacomment 4.0 Copyright (C) 2009 Compojoom.com . All rights reserved."


 

Login