back to top

L’algoritmo RC4 – Guida Wi-Fi

Questo algoritmo di cifratura è uno dei più diffusi e utilizzati (oltre che nel protocollo WEP, l’algoritmo RC4 è alla base anche del protocollo SLL) ed appartiene alla famiglia degli algoritmi a cifratura di flusso a chiave simmetrica. Questo tipo di algoritmi ha la peculiarità di cifrare il messaggio bit a bit ed opera eseguendo due distinte operazioni:

  • partendo da una chiave scelta viene generato il relativo keystream;
  • successivamente si effettua lo XOR tra il keystream e il testo in chiaro.

Un algoritmo che operi con cifratura a flusso necessita, affinchè sia realmente sicuro, che il keystream venga generato in un intervallo più ampio possibile, che rispecchi il più possibile la proprietà di casualità e che la chiave scelta per generare il keystream sia abbastanza lunga. Vediamo adesso come opera l’RC4 in maniera più dettagliata.

L’RC4 lavora in maniera molto semplice e consta di due sotto-algoritmi:

  • KSA (Key Scheduling Algorithm): Come prima cosa viene inizializzato un vettore di dimensione pari a 256 con valori descrescenti che vanno dallo 0 a 255. All’algoritmo viene data in input una chiave che chiameremo PerPacked Key che viene ottenuta concatenando il vettore di inizializzazione IV con la Wep Key. Sfruttando la PerPacked Key data in input, il KSA compie semplicemente uno scambio dei valori del vettore collocati in posizione diverse. Per esempio avremo che il valore contenuto all’interno della posizione 1 verrà scambiato con quello in posizione 87, il valore in posizione 4 verrà scambiato con quello in posizione 217 e così via. Lo scambio di valori viene effettuato in funzione della PerPacked Key in input, quindi PerPacked Key diverse avranno come risultato un ordinamento diverso del vettore. Al termine del KSA si avranno 255 scambi dei valori totali.
  • PRGA (Pseudo Random Generation Algorithm): Questo algoritmo ha come finalità la creazione del keystream in relazione al vettore riordinato dall’algoritmo KSA. Ogni byte del keystream viene ottenuto seguendo la procedura descritta sotto sfruttando 2 indici ("i" e "j") per recuperare gli elementi contenuti nel vettore generato dal KSA:
    1. Viene dato all’indice j il valore pari all’indice i più il valore corrispondente posto nella posizione i-esima del vettore.
    2. Viene effettuato lo scambio dei valori in posizione i-esima con quelli in posizione j-esima.
    3. In uscita si ha un byte di keystream pari al valore indicato dalla somma del valore in posizione i-esima con il valore posto in posizione j-esima.
    Le somme che vengono eseguite sono tutte fatte in modulo 255. Per fare un rapido esempio, se dalla somma del punto 3 il valore dell’indice sarà pari a 280 avremo che, effettuando la somma in modulo 255, il valore 280 sarà uguale al valore 14. Sostanzialmente quando si eccede il numero 255 si conta in maniera progressiva partendo da zero tante volte quanto si è ecceduto il valore 255.
Pubblicitร