:: RC4 ::
Torna alla pagina di Crittografia
Che cos'è
RC4 è un algoritmo di cifratura a flusso, e non a blocchi.
Cifrario a flusso
Un cifrario a blocchi esamina un blocco alla volta, lo crittografa, e produce l'output per quel blocco.
Un cifrario a flussi, invece, è adatto ad operare su un flusso di dati, come potrebbe essere quello delle trasmissioni digitali.
L'idea è quella di produrre un keystream, ovvero un flusso di chiavi, che si può immaginare come parallelo al flusso di dati. Ogni byte del flusso di dati viene XORato con il byte corrispondente del keystream.
Il keystream viene generato dal cifrario, tramite un algoritmo. Trattandosi di una sequenza di numeri, deve avere alcune caratteristiche:
- deve assomigliare ad una sequenza casuale
- deve avee un periodo molto lungo
Questo vuol dire che, se un attaccante sta leggendo l'i-esimo byte del keystream, non deve avere nessuna informazione sul byte successivo.
Inoltre, si parla di periodo perché il keystream è pur sempre generato da un algoritmo, e prima o poi la sequenza di numeri riparte da capo. Il periodo è appunto quanti numeri vengono prodotti prima di ripartire da capo.
Il fatto che il keystream venga XORato con il datastream permette una rapida trasmissione dei dati: infatti, lo XOR è un'operazione che viene eseguita molto rapidamente.
Infine, occorre che sia il trasmittente che il ricevente producano lo stesso flusso di chiavi, ovvero che il generatore di keystream sia inizializzato con la stessa password, e che sia sincronizzato: deve partire allo stesso tempo, altrimenti i valori non coincidono. Quindi, il destinatario riceve il flusso, lo XORa con la keystream che ha generato lui, e ritorna al byte originale.
Ciò è reso possibile dalle proprietà dello XOR:
a XOR a XOR b = b
Gli addendi uguali si elidono.
In questo caso, ho
trasmesso = byte XOR key
byte = trasmesso XOR key = byte XOR key XOR key = byte XOR key XOR key
I due XOR key si elidono.
Caratteristiche
RC4 usa una chiave lunga da 1 a 256 bytes.
Utilizza un vettore S di stato, con dimensione 256, contenente una permutazione degli interi da 0 a 255.
La keystream è generata da S, e dopo ogni passo il vettore S viene modificato.
Il periodo di RC4 è > 10100.
Torna alla pagina di Crittografia