# RC4

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

## Storia

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. 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 finché, il 27 ottobre 2014, lo stesso Rivest ha pubblicato lo pseudocodice dell'originale RC4. Questo ha generato a livello di diritto d'autore una situazione ambigua in cui, nonostante l'algoritmo non fosse più segreto, il suo nome rimanesse coperto da copyright. Per evitare quindi possibili ripercussioni legali generalmente ci si riferisce all'algoritmo chiamandolo ARCFOUR o ARC4, abbreviativo di Alleged RC4 (alleged, che in italiano significa "presunto").

## Descrizione

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):
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):

## Sicurezza

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.
Per via di queste sue debolezze, Mozilla ha rimosso il supporto per la cifratura RC4 da Firefox a partire dalla versione 44, pubblicata il 26 gennaio 2016.