Cifrario a scorrimento
Da Wikipedia, l'enciclopedia libera.
In crittografia un cifrario a scorrimento (anche "cifrario a caratteri") è un cifrario simmetrico nel quale i simboli (i bits) che codificano il testo in chiaro sono cifrati indipendentemente l'uno dall'altro e nel quale la trasformazione dei simboli successivi varia con il procedere della cifratura. Un altro termine usato per tale cifrario è cifrario a stati, termine che ricorda che la cifratura di ogni simbolo dipende da uno stato corrente. Tipicamente nella pratica, i simboli sono singoli bits o bytes.
I cifrari a scorrimento costituiscono un approccio alla cifratura simmetrica differente da quello dei cifrari a blocchi. Questi prevedono che si effettui su successivi estesi blocchi di simboli una determinata trasformazione che non cambia da blocco a blocco. Questa distinzione in realtà non è sempre netta: alcune modalità operative dei cifrari a blocchi effettuano una cifratura a blocchi primitiva in un modo tale che il suo effetto corrisponde a quello di un cifrario a scorrimento. Tipicamente i cifrari a scorrimento sono eseguiti a velocità superiori a quelle dei cifrari a blocchi e si servono di hardware meno complesso. Per contro i cifrari a scorrimento possono essere suscettibili a seri problemi di sicurezza, se non sono utilizzati correttamente: ad esempio si veda l'articolo Attacchi ai cifrari a scorrimento; in particolare non deve mai essere usato due volte lo stesso stato di partenza.
I documenti della National Security Agency talora usano il termine combiner-type algorithms (algoritmi di tipo combinatore) per denotare algoritmi che si servono di qualche opportuna funzione per combinare un flusso di testo in chiaro con un generatore di numeri pseudo-casuali (pseudorandom number generator o PRNG).
Indice |
[modifica] Vaga ispirazione dal one-time pad
I cifrari a scorrimento possono essere visti come approssimazioni di un cifrario teoricamente non compromissibile, il one-time pad (OTP), noto anche come cifrario di Vernam. L'OTP usa una sequenza chiave di simboli completamente casuali. La sequenza chiave è combinata con il testo in chiaro un simbolo alla volta per formare il testo cifrato. Claude E. Shannon ha dimostrato nel 1949 che questo sistema è teoricamente sicuro. Comunque, la sequenza chiave deve avere (almeno) la stessa lunghezza del testo in chiaro, e deve essere generata in maniera casuale. Questo rende il sistema molto oneroso da implementare in pratica, e di conseguenza l'OTP non è largamente usato, tranne per applicazioni di importanza critica.
Un cifrario a scorrimento usa una chiave molto più piccola e molto più comoda — 128 bits, ad esempio. Sulla base di questa chiave, genera una sequenza chiave pseudocasuale che può essere combinata con i simboli del testo in chiaro allo stesso modo dell'OTP. Però, questo ha un costo: poiché la sequenza chiave è solo pseudocasuale, e non veramente casuale, la prova di sicurezza associata all'OTP non ha più valore: è anzi possibile che un cifrario a scorrimento sia completamente insicuro.
[modifica] Tipologie di cifrario a scorrimento
Un cifrario a scorrimento genera elementi successivi della sequenza chiave in base allo stato interno. Questo stato è aggiornato essenzialmente in due modi: se lo stato cambia indipendentemente dal messaggio in chiaro o cifrato, il cifrario è classificato come sincrono. In contrasto, un cifrario a scorrimento auto-sincronizzante aggiorna lo stato in base ai precedenti simboli di testo cifrato.
[modifica] Cifrari a scorrimento sincroni
In un cifrario a scorrimento sincrono una sequenza di simboli pseudocasuale viene generata indipendentemente dai messaggi in chiaro e cifrato, e poi combinata con il testo in chiaro (per cifrare) o quello cifrato (per decifrare). Nella forma più comune, si usano simboli binari (bits), e la sequenza chiave è combinata con il testo in chiaro usando l'operazione or esclusivo (XOR). Questo è definito cifrario a scorrimento sincrono additivo.
In un cifrario a scorrimento sincrono, il mittente e il ricevitore devono stare perfettamente al passo perché la decifratura sia corretta. Se i simboli sono aggiunti o rimossi dal messaggio durante la trasmissione, si perde la sincronizzazione. Per recuperare la sincronizzazione, si può tentare varie posizioni nel testo fino ad ottenere la decifratura corretta. Un'altro approccio è di marchiare il testo cifrato con dei marcatori in posizioni prefissate nel testo.
Se, infine, un simbolo è corrotto durante la trasmissione, invece che aggiunto o perduto, un solo simbolo nel testo in chiaro ne è affetto e l'errore non si propaga ad altre parti del messaggio. Questa proprietà è utile quando la frequenza di errori nella comunicazione è alta; però, ciò rende più difficile rilevare l'errore senza ulteriori meccanismi. Inoltre, a causa di questa proprietà i cifrari a scorrimento sincroni sono particolarmente sensibili agli attacchi attivi — se un attaccante può riuscire a cambiare un simbolo nel testo cifrato, potrebbe essere in grado di indurre cambiamenti prevedibili al corrispondente simbolo di testo in chiaro; ad esempio, l'inversione di un bit nel testo cifrato provoca l'inversione dello stesso bit nel testo in chiaro.
[modifica] Cifrari a scorrimento auto-sincronizzanti
Un altro approccio usa alcuni dei precedenti N simboli di testo cifrato per calcolare la sequenza chiave. Tali schemi sono noti come cifrari a scorrimento auto-sincronizzanti, cifrari a scorrimento asincroni o ciphertext autokey (CTAK). L'idea dell'auto-sincronizzazione fu brevettata nel 1946 (U.S. Patent 2,405,400), ed ha il vantaggio che il ricevitore si sincronizzerà automaticamente con il generatore della sequenza chiave dopo aver ricevuto N simboli di testo cifrato, rendendo più semplice il recupero in caso di simboli persi o aggiunti al messaggio. Errori su un solo simbolo hanno un effetto limitato, poiché riguardano al più N simboli di testo in chiaro. È anche più difficile lanciare attacchi attivi sui cifrari a scorrimento auto-sincronizzanti che sulle loro controparti sincrone.
Un esempio di cifrario a scorrimento auto-sincronizzante è il cifrario a blocchi in modalità cipher-feedback (CFB).
[modifica] Implementazioni
Per approfondire, vedi la voce LFSR. |
L'approccio più seguito è usare come generatore di numeri pseudo-casuali un LFSR, opportunamente modificato in modo da ridurre il più possibile le sue intrinseche linearità: il grosso vantaggio di questa implementazione è la sua notevole economicità.
Invece di un dispositivo a guida lineare, un altro modo è usare una funzione di aggiornamento non-lineare. Ad esempio, Klimov e Shamir hanno proposto una funzione triangolare (Funzioni-T) con un singolo ciclo su blocchi di n bits.
[modifica] Sicurezza
- Vedi: Attacchi ai cifrari a scorrimento
Per essere sicuro, il periodo della sequenza chiave, cioè il numero di simboli in uscita prima che la sequenza si ripeta, deve essere sufficientemente grande. Se la sequenza si ripete, allora i testi cifrati che si sovrappongono possono essere allineati uno contro l'altro "in profondità", e ci sono tecniche con cui in queste condizioni si può estrarre il testo in chiaro. Questo è un pericolo reale: ad esempio, il cifrario a blocchi Data Encryption Standard (DES) poteva inizialmente operare in una modalità (OFB) con parametri variabili. Però, per molte scelte di tali parametri, la sequenza risultante aveva un periodo di solo 232 — per molte applicazioni, questo periodo è troppo piccolo. Ad esempio, se la cifratura è eseguita alla frequenza di 1 megabyte al secondo, una sequenza di periodo 232 si ripeterà dopo circa 8.5 minuti
[modifica] Adozione
I cifrari a scorrimento sono spesso utilizzati in applicazioni in cui il testo in chiaro ha una lunghezza sconosciuta a priori - ad esempio, in una rete wireless. Se un cifrario a blocchi venisse usato in questo tipo di applicazioni, il progettista dovrebbe scegliere tra l'efficienza della trasmissione e la complessità dell'implementazione, poiché i cifrari a blocchi non possono lavorare naturalmente su blocchi più piccoli della dimensione prefissata di un blocco. Per esempio, se un cifrario a blocchi a 128-bits ricevesse delle raffiche separate di testo in chiaro a 32-bit, tre quarti dei dati trasmessi sarebbe aggiunta per espandere il testo alla lunghezza necessaria (padding). I cifrari a blocchi devono essere utilizzati nelle modalità ciphertext stealing o residual block termination per evitare il padding, mentre i cifrari a scorrimento eliminano il problema operando naturalmente sull'unità più piccola trasmissibile (generalmente bytes).
Un altro vantaggio dei cifrari a scorrimento nella crittografia militare sta nel fatto che il flusso delle cifre può essere generato in una unità fisica separata che può essere sottoposta a misure di sicurezza stringenti e essere fornito ad altri dispositivi, ad es. ad un apparecchio radio, che, tra le sue altre funzioni, si fa carico dell'esecuzione della operazione xor. Un tale dispositivo a valle può essere progettato e tenuto in esercizio secondo modalità di sicurezza meno stringenti.
Tra i cifrari a scorrimento implementati in software RC4 è il più estesamente usato; alcuni altri sono: A5/1, A5/2, Chameleon, FISH, Helix, ISAAC, MUGI, Panama, Phelix, Pike, SEAL, SOBER, SOBER-128 e WAKE.
[modifica] Riferimenti
- Matt J. B. Robshaw (1995): Stream Ciphers Technical Report TR-701, version 2.0, RSA Laboratories, in PDF
- Thomas Beth, Fred Piper: The Stop-and-Go Generator in EUROCRYPT 1984 pp. 88-92
[modifica] Voci correlate
- ECRYPT Stream Cipher project