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.Zoom
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:

  1. Se lo stato cambia indipendentemente dai messaggi di testo in chiaro o di testo cifrato, il cifrario viene classificato come cifrario a flusso sincrono.
  2. 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:

  1. Se l'uscita del primo LFSR è "1", l'uscita del secondo LFSR diventa l'uscita del generatore.
  2. 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.Zoom
L'RC4 è uno dei progetti di cifrario a flusso più utilizzati.

Confronto tra i cifrari dei flussi

StreamCipher

CreationDate

Velocità
(cicli/byte)

(bit)

Attacco

Efficace
Lunghezza dei tasti

Vettore di inizializzazione

InternoStato

Meglio conosciuto

ComputationalComplexity

A5/1

1989

Voce (Wphone)

54

114

64

Attivo KPA OPPURE
KPA Time-Memory Tradeoff

~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
,6875
(W32-bit)

8-8288 di solito
40-256

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
solito 40-256?

64

8320

Teoria Criptanalitica (2006)

275

Coniglio

2003-febbraio

3,7(WP3)-9,7(CALDO7)

128

64

512

N/A (2006)

N/A (2006)

RC4

1987

Impressionante

8-2048 di solito
40-256

8

2064

Shamir Initial-Bytes Key-Derivation O KPA

213 O 233

Salsa20

Pre-2004

4,24 (WG4) -11
,84
(WP4)

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
80-256

Variabile in modo variabile
80-256

256 - 800

N/A (2006)

N/A (2006)

WAKE

1993

Veloce

?

?

8192

CPA E CCA

Vulnerabile

StreamCipher

CreationDate

Velocità
(cicli/byte)

(bit)

Attacco

Efficace
Lunghezza dei tasti

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.

AlegsaOnline.com - 2020 / 2023 - License CC3