RC4

Da Wikipedia, l'enciclopedia libera.
RC4
RC4.png
La generazione di 1 byte dalla keystream nell'RC4
Generale
Progettisti Ron Rivest
Prima pubblicazione 1987 (mai pubblicato ufficialmente)
Derivato da RC2
Successori RC5, RC6
Dettagli
Dimensione chiave 128 bit
Struttura Keystream
Migliore crittanalisi
L'RC4 è un algoritmo che è stato violato in diversi modi e pertanto non è più ritenuto sicuro.[1]

In crittografia l'RC4 è uno tra i più famosi e diffusi algoritmi di cifratura a flusso a chiave simmetrica, utilizzato ampiamente in protocolli quali l'SSL ed il WEP.

Storia[modifica | modifica sorgente]

L'RC4 fu sviluppato da Ron Rivest della RSA Security nel 1987: come in altri suoi algoritmi (vedi RC2, RC5 ed RC6) la sigla RC sta per Rivest Cipher o, alternativamente, Ron's Code[2]. Per la sua semplicità, grazie alla quale è facilmente implementabile sia a livello software che hardware, e velocità il suo uso si diffuse speditamente e l'RC4 divenne ben presto l'algoritmo base di importanti protocolli quali il WEP ed il WPA per la cifratura delle comunicazioni nelle schede wireless, e l'SSL ed il TLS per la protezione dei dati delle connessioni internet e delle reti TCP/IP in genere.

L'algoritmo restò inizialmente segreto (security through obscurity) ma, nel settembre del 1994, comparve, in forma anonima, prima sulla mailing-list CypherPunks e poi sul newsgroup internazionale sci.crypt il codice di un algoritmo crittografico i cui risultati erano identici a quelli generati dai programmi che implementavano l'RC4 ufficiale. RSA, nonostante la repentina diffusione di quel codice, non ha mai ammesso che quell'algoritmo fosse l'RC4. Questo ha generato a livello di diritto d'autore una situazione ambigua in cui, nonostante l'algoritmo non sia più segreto, il suo nome è tuttora coperto da marchio. Per evitare quindi possibili ripercussioni legali, generalmente ci si riferisce all'algoritmo chiamandolo ARCFOUR o ARC4, abbreviativo di Alleged RC4 (alleged in italiano significa "presunto").

Descrizione[modifica | modifica sorgente]

L'RC4 genera un flusso di bit pseudo casuali (keystream): tale flusso è combinato mediante un'operazione di XOR con il testo in chiaro (plaintext) per ottenere il testo cifrato. L'operazione di decifratura avviene nella stessa maniera, passando in input il testo cifrato ed ottenendo in output il testo in chiaro (questo perché lo XOR è un'operazione simmetrica).

Per generare il keystream, l'algoritmo utilizza una S-box di 256 byte e 2 indici da 8 bit, generalmente identificati con le lettere "i" e "j". La chiave di cifratura fornita dall'utente è generalmente lunga da 40 a 256 bit (da 5 a 32 caratteri) ed è utilizzata per inizializzare l'S-box mediante la funzione KSA, sigla di Key-Scheduling Algorithm (algoritmo di gestione della chiave). Ecco la rappresentazione in pseudo-codice (key è la chiave dell'utente, keylength è la lunghezza della chiave, S è la matrice che rappresenta l'S-box):

for i = 0 to 255
  S[i] = i
next
j = 0
for i = 0 to 255
  j = (j + S[i] + key[i mod keylength]) mod 256
  swap (S[i], S[j])
next

Una volta che questo passaggio è completato, il flusso di bit generato utilizzando la funzione di generatore di numeri pseudo-casuali dell'algoritmo (PRGA, Pseudo-Random Generation Algorithm) è combinato con il testo in chiaro mediante XOR. Ecco in pseudo-codice il cuore dell'algoritmo RC4 (input contiene il testo in chiaro, output il testo cifrato):

i = 0
j = 0
for l = 0 to len(input)
    i = (i + 1) mod 256
    j = (j + S[i]) mod 256
    swap (S[i], S[j])
    output[l] = S[(S[i] + S[j]) mod 256] XOR input[l]
next

Sicurezza[modifica | modifica sorgente]

L'RC4 paga la sua semplicità in termini di sicurezza: questa è molto debole e l'algoritmo è violabile con relativa facilità e velocità tanto che il suo uso non è più consigliabile. L'RC4 mostra infatti un comportamento non da vero PRNG: l'analisi del flusso di dati casuali denota una certa periodicità nei primi 256 byte. Ecco perché molte implementazioni dell'algoritmo scartano questi byte facendo eseguire un ciclo di 256 iterazioni a vuoto prima di iniziare ad utilizzare il keystream. Un'altra debolezza è relativa alla forte correlazione che c'è fra la chiave ed il keystream tanto che nel 2005 è stato trovato un modo per violare una connessione wireless protetta con WEP in meno di un minuto[1].

Note[modifica | modifica sorgente]

  1. ^ a b (EN) Come violare una rete WEP in meno di un minuto
  2. ^ (EN) FAQ su Ron Rivest

Bibliografia[modifica | modifica sorgente]

  • William Stallings, Capitolo 6 - Approfondimenti sulla cifratura simmetrica, Paragrafo 6.3 - La cifratura a flussi e RC4 in Crittografia e sicurezza delle reti, ed. italiana a cura di Luca Salgarelli, 2ª edizione, Milano, McGraw-Hill, ottobre 2006, pp. 195-200., ISBN 88-386-6377-7.

Voci correlate[modifica | modifica sorgente]

Collegamenti esterni[modifica | modifica sorgente]