RC4

RC4
La generazione di 1 byte dalla keystream nell'RC4
Generale
ProgettistiRon Rivest
Prima pubblicazione1987 (mai pubblicato ufficialmente)
Derivato daRC2
SuccessoriRC5, RC6
Dettagli
Dimensione chiave128 bit
StrutturaKeystream
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

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 finché, il 27 ottobre 2014, lo stesso Rivest ha pubblicato lo pseudocodice dell'originale RC4[3]. 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):

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

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].

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.[4]

Note

  1. ^ a b (EN) Cryptology ePrint Archive, Report 2007/120: Breaking 104 bit WEP in less than 60 seconds (Come violare una rete WEP a 104 bit in meno di 60 secondi), su eprint.iacr.org. URL consultato il 26-01-2016.]
  2. ^ (EN) FAQ su Ron Rivest
  3. ^ (EN) Rivest, Ronald L. and Schuldt, Jacob C. N., Spritz - a spongy RC4-like stream cipher and hash function (PDF), su people.csail.mit.edu, 27 ottobre 2014.
  4. ^ (EN) Mozilla, Firefox — Notes (44.0), su mozilla.org. URL consultato il 26-01-2016.

Bibliografia

  • 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

Collegamenti esterni