Cifrario a flusso continuo
Nella crittografia, un cifrario a flusso è un cifrario a chiave simmetrica in cui i bit in chiaro sono combinati con un flusso di bit di cifrario pseudorandom (keystream) utilizzando un'operazione esclusiva o (xor). In un cifrario a flusso le cifre in chiaro sono cifrate una alla volta e la trasformazione delle cifre successive varia durante lo stato di cifratura. Un nome alternativo è un cifrario di stato, poiché la cifratura di ogni cifra dipende dallo stato corrente. In pratica, le cifre sono tipicamente singoli bit o byte.
I cifrari a flusso rappresentano un approccio diverso alla cifratura simmetrica rispetto ai cifrari a blocco. I cifrari a blocchi operano su grandi blocchi di lunghezza fissa. I cifrari a flusso di solito eseguono ad una velocità più elevata rispetto ai cifrari a blocco e hanno requisiti hardware inferiori. Tuttavia, i cifrari a flusso possono essere suscettibili di gravi problemi di sicurezza se usati in modo non corretto; per esempio, in particolare, lo stesso stato di partenza non deve mai essere usato due volte.
Un cifrario a flusso fa uso di una chiave crittografica molto più piccola e conveniente, per esempio una chiave a 128 bit. Sulla base di questa chiave, genera un flusso di chiavi pseudorandom che può essere combinato con le cifre in chiaro in modo simile all'algoritmo di cifratura a tampone una tantum. Tuttavia, poiché il flusso di chiavi è pseudorandom, e non è veramente casuale, la sicurezza associata al one-time pad non può essere applicata ed è del tutto possibile che un cifrario a flusso sia completamente insicuro.
Il funzionamento del generatore di flusso di chiavi in A5/1, un cifratore di flusso basato su LFSR utilizzato per crittografare le conversazioni dei telefoni cellulari.
Tipi di cifrari a flusso
Un cifrario a flusso genera elementi successivi del flusso di chiavi in base ad uno stato interno. Questo stato viene aggiornato in due modi:
- Se lo stato cambia indipendentemente dai messaggi di testo in chiaro o di testo cifrato, il cifrario viene classificato come cifrario a flusso sincrono.
- Se lo stato viene aggiornato in base alle precedenti modifiche delle cifre del testo cifrato, il cifrario viene classificato come cifrario a flusso autosincronizzante.
Cifre a flusso sincrono
In un cifrario a flusso sincrono viene generato un flusso di cifre pseudo-casuali indipendentemente dal testo in chiaro e dai messaggi cifrati, e poi combinato con il testo in chiaro (per criptare) o con il testo cifrato (per decriptare). Nella forma più comune, si usano cifre binarie (bit), e il flusso di chiavi viene combinato con il testo in chiaro usando l'esclusiva o l'operazione (XOR). Questo è chiamato un cifrario binario additivo flusso di cifratura.
In un cifrario a flusso sincrono, il mittente e il destinatario devono essere in sincrono perché la decodifica abbia successo. Se durante la trasmissione vengono aggiunte o rimosse cifre dal messaggio, la sincronizzazione viene persa. Per ripristinare la sincronizzazione, si possono provare sistematicamente diversi offset per ottenere la corretta decrittazione. Un altro approccio è quello di contrassegnare il testo cifrato con marcatori in punti regolari dell'uscita.
Se, tuttavia, una cifra è corrotta nella trasmissione, piuttosto che aggiunta o persa, solo una singola cifra nel testo in chiaro è interessata e l'errore non si propaga ad altre parti del messaggio. Questa proprietà è utile quando il tasso di errore di trasmissione è elevato, ma rende meno probabile che l'errore venga rilevato senza ulteriori meccanismi. Inoltre, a causa di questa proprietà, i cifrari a flusso sincrono sono molto suscettibili agli attacchiattivi - se un aggressore può cambiare una cifra nel testo cifrato, potrebbe essere in grado di apportare modifiche prevedibili al corrispondente bit del testo in chiaro; ad esempio, capovolgere un bit nel testo cifrato fa sì che lo stesso bit venga capovolto (Toggled) nel testo in chiaro.
Cifre a flusso autosincronizzate
L'autosincronizzazione dei cifrari a flusso è un'altra tecnica che utilizza parte delle precedenti N cifre di testo per calcolare il flusso di chiavi. Tali schemi sono noti anche come cifrari a flusso asincrono o cifrari a flusso automatico (CTAK). L'idea dell'autosincronizzazione è stata brevettata nel 1946 e ha il vantaggio che il ricevitore si sincronizza automaticamente con il generatore di flusso di chiavi dopo aver ricevuto N cifre di testo, rendendo più facile il recupero se le cifre vengono lasciate cadere o aggiunte al flusso di messaggi. Gli errori a una sola cifra sono limitati nel loro effetto e riguardano solo fino a N cifre di testo in chiaro. È un po' più difficile eseguire attacchi attivi sui cifrari di flusso autosincronizzati piuttosto che sulle controparti sincrone.
Un esempio di cifrario a flusso autosincronizzante è un cifrario a blocchi in modalità cifrario-feedback (CFB).
Cifre di flusso a registro a retroazione lineare a spostamento di registro
I cifrari a flusso binario sono spesso costruiti utilizzando registri di retroazione lineare (LFSR) perché possono essere facilmente implementati nell'hardware e possono essere analizzati matematicamente in modo rapido. Tuttavia, l'uso di LFSRs è insufficiente per fornire una buona sicurezza. Diversi schemi sono stati progettati per aumentare la sicurezza degli LFSR.
Funzioni combinatorie non lineari
Poiché gli LFSR sono intrinsecamente lineari, una tecnica per rimuovere la linearità è quella di alimentare le uscite di un gruppo di LFSR paralleli in una funzione booleana non lineare per formare un generatore di combinazione. Varie proprietà di tale funzione combinatoria sono importanti per garantire la sicurezza dello schema risultante, ad esempio, per evitare attacchi di correlazione.
Generatori ad orologio
Normalmente le LFSR vengono calpestate regolarmente. Una tecnica per introdurre la non linearità è quella di avere il LFSR cronometrato in modo irregolare, controllato dall'uscita di un secondo LFSR. Tali generatori includono il generatore di stop-and-go, il generatore a gradini alternati e il generatore di riduzione.
Il generatore di stop-and-go (Beth e Piper, 1984) è costituito da due LFSR. Un LFSR è cronometrato se l'uscita di un secondo è un "1", altrimenti ripete l'uscita precedente. Questa uscita è poi (in alcune versioni) combinata con l'uscita di un terzo LFSR cronometrato ad un ritmo regolare.
Il generatore di contrazione utilizza una tecnica diversa. Vengono utilizzati due LFSR, entrambi con un clock regolare nel seguente modo:
- Se l'uscita del primo LFSR è "1", l'uscita del secondo LFSR diventa l'uscita del generatore.
- Se l'uscita del primo LFSR "0", l'uscita del secondo viene scartata, e nessun bit viene emesso dal generatore.
Questa tecnica soffre di attacchi temporali sul secondo generatore, poiché la velocità dell'uscita è variabile in modo da dipendere dallo stato del secondo generatore. Questo può essere migliorato bufferizzando l'uscita.
Generatore di filtri
Un altro approccio per migliorare la sicurezza di un LFSR è quello di passare l'intero stato di un singolo LFSR in una funzione di filtraggio non lineare.
Altri design
Al posto di un dispositivo di guida lineare, si può utilizzare una funzione di aggiornamento non lineare. Per esempio, Klimov e Shamir hanno proposto funzioni triangolari (funzioni a T) con un unico ciclo su n parole bit.
Sicurezza
Per essere sicuri, il periodo del flusso di chiavi (il numero di cifre in uscita prima che il flusso si ripeta) deve essere abbastanza grande. Se la sequenza si ripete, allora i testi cifrati sovrapposti possono essere allineati l'uno contro l'altro "in profondità", e ci sono tecniche che permettono di estrarre i testi cifrati in forma di testo in chiaro generati con questi metodi.
Utilizzo
I cifrari a flusso continuo sono spesso utilizzati in applicazioni in cui il testo in chiaro è disponibile in quantità di lunghezza inconoscibile come nelle connessioni wireless sicure. Se un cifrario a blocchi dovesse essere utilizzato in questo tipo di applicazione, il progettista dovrebbe scegliere l'efficienza della trasmissione o la complessità dell'implementazione, poiché i cifrari a blocchi non possono funzionare direttamente su blocchi più corti della loro dimensione. Ad esempio, se un cifrario a blocchi a 128 bit riceveva esplosioni separate a 32 bit di testo in chiaro, i tre quarti dei dati trasmessi dovevano essere imbottiti. I cifrari a blocchi devono essere usati in modalità furto di testo cifrato o terminazione di blocco residuo per evitare il padding, mentre i cifrari a flusso eliminano questo problema operando sulla più piccola unità trasmessa (di solito byte).
Un altro vantaggio dei cifrari a flusso nella crittografia militare è che il flusso di cifratura può essere generato da un dispositivo di cifratura che è soggetto a rigorose misure di sicurezza e poi alimentato ad altri dispositivi, ad esempio un set radio, che eseguirà l'operazione xor come parte della loro funzione. L'altro dispositivo può essere progettato per essere utilizzato in ambienti meno sicuri.
RC4 è il cifrario a flusso più utilizzato nel software; altri includono: A5/1, A5/2, Chameleon, FISH, Helix, ISAAC, MUGI, Panama, Phelix, Pike, SEAL, SOBER, SOBER-128 e WAKE.
L'RC4 è uno dei progetti di cifrario a flusso più utilizzati.
Confronto tra i cifrari dei flussi
StreamCipher | CreationDate | Velocità | (bit) | Attacco | |||
Efficace | Vettore di inizializzazione | InternoStato | Meglio conosciuto | ComputationalComplexity | |||
A5/1 | 1989 | Voce (Wphone) | 54 | 114 | 64 | Attivo KPA OPPURE | ~2 secondi OR239,91 |
A5/2 | 1989 | Voce (Wphone) | 54 | 114 | 64? | Attivo | 4,6 millisecondi |
PESCE | 1993 | Abbastanza veloce (Wsoft) | Enorme | ? | ? | Attacco del noto-plaintext | 211 |
Grano | Pre-2004 | Veloce | 80 | 64 | 160 | Derivazione chiave | 243 |
HC-256 | Pre-2004 | 4 (WP4) | 256 | 256 | 65536 | ? | ? |
ISAAC | 1996 | 2,375 (W64-bit) -4 | 8-8288 di solito | N/A | 8288 | (2006) Primo roundWeak-Internal-Stato-Derivazione dello Stato | 4.67×101240 (2001) |
MUGI | 1998-2002 | ? | 128 | 128 | 1216 | N/A (2002) | ~282 |
PANAMA | 1998 | 2 | 256 | 128? | 1216? | Collisioni Hash (2001) | 282 |
Phelix | Pre-2004 | fino a 8 (Wx86) | 256 + un Nonce a 128 bit | 128? | ? | Differenziale (2006) | 237 |
Pike | 1994 | 0,9 x PESCE (Wsoft) | Enorme | ? | ? | N/A (2004) | N/A (2004) |
Py | Pre-2004 | 2.6 | 8-2048? Di | 64 | 8320 | Teoria Criptanalitica (2006) | 275 |
Coniglio | 2003-febbraio | 3,7(WP3)-9,7(CALDO7) | 128 | 64 | 512 | N/A (2006) | N/A (2006) |
1987 | Impressionante | 8-2048 di solito | 8 | 2064 | Shamir Initial-Bytes Key-Derivation O KPA | 213 O 233 | |
Salsa20 | Pre-2004 | 4,24 (WG4) -11 | 128 + un Nonce a 64 bit | 512 | 512 + 384 (chiave+IV+indice) | Differenziale (2005) | N/A (2005) |
Urla | 2002 | 4 - 5 (Wsoft) | 128 + un Nonce a 128 bit | 32? | Funzione circolare a 64 bit | ? | ? |
GUARDA | 1997 | Molto veloce (W32-bit) | ? | 32? | ? | ? | ? |
NEVE | Pre-2003 | Molto buono (W32-bit) | 128 O 256 | 32 | ? | ? | ? |
SOBER-128 | 2003 | ? | fino a 128 | ? | ? | Messaggio Forge | 2−6 |
SOSEMANUK | Pre-2004 | Molto buono (W32-bit) | 128 | 128 | ? | ? | ? |
Trivium | Pre-2004 | 4 (Wx86) - 8 (WLG) | 80 | 80 | 288 | Attacco di forza bruta (2006) | 2135 |
Turing | 2000-2003 | 5,5 (Wx86) | ? | 160 | ? | ? | ? |
VEST | 2005 | 42 (WASIC) -64 (WFPGA) | Variabile in modo variabile | Variabile in modo variabile | 256 - 800 | N/A (2006) | N/A (2006) |
WAKE | 1993 | Veloce | ? | ? | 8192 | CPA E CCA | Vulnerabile |
StreamCipher | CreationDate | Velocità | (bit) | Attacco | |||
Efficace | Vettore di inizializzazione | InternoStato | Meglio conosciuto | ComputationalComplexity |
Pagine correlate
- eSTREAM
Domande e risposte
D: Cos'è un cifrario a flusso?
R: Un cifrario a flusso è un cifrario a chiave simmetrica in cui i bit del testo in chiaro sono combinati con un flusso di bit di cifratura pseudorandom (keystream) utilizzando un'operazione di tipo exclusive-or (xor).
D: In cosa differisce dai cifrari a blocchi?
R: I cifrari a flusso vengono generalmente eseguiti a una velocità superiore rispetto ai cifrari a blocchi e hanno requisiti hardware inferiori. I cifrari a blocchi operano su grandi blocchi di lunghezza fissa, mentre i cifrari a flusso criptano le cifre una alla volta e la trasformazione delle cifre successive varia durante lo stato di crittografia.
D: Che tipo di chiavi utilizza?
R: I cifrari a flusso utilizzano chiavi crittografiche molto più piccole e convenienti, ad esempio 128 bit.
D: Come viene generato il flusso di chiavi?
R: Il flusso di chiavi viene generato in base alla chiave crittografica utilizzata, in modo simile all'algoritmo di crittografia one-time pad. Tuttavia, poiché il flusso di chiavi è pseudorandom e non realmente casuale, la sicurezza associata al one-time pad non può essere applicata.
D: Perché non deve mai utilizzare due volte lo stesso stato iniziale?
R: Utilizzare due volte lo stesso stato iniziale può causare seri problemi di sicurezza, in quanto rende più facile per gli aggressori decifrare i dati senza conoscere o avere accesso alla sua chiave crittografica.
D: Esiste un rischio associato all'utilizzo dei cifrari a flusso?
R: Sì, se utilizzato in modo scorretto o senza prendere le dovute precauzioni, esiste un rischio associato all'uso dei cifrari di flusso, in quanto possono essere completamente insicuri se non vengono gestiti correttamente.