Flux
În criptografie, un cifru de flux este un cifru cu cheie simetrică în care biții de text în clar sunt combinați cu un flux de biți de cifru pseudo-aleator (flux de chei) folosind o operație de tip xor (exclusiv-or). Într-un cifru de flux, cifrele de plaintext sunt criptate una câte una, iar transformarea cifrelor succesive variază în timpul stării de criptare. O denumire alternativă este cifrare de stare, deoarece criptarea fiecărei cifre depinde de starea curentă. În practică, cifrele sunt, de obicei, biți sau octeți unici.
Cifrele de flux reprezintă o abordare diferită de cifrarea simetrică față de cifrele în bloc. Cifrele în bloc operează pe blocuri mari de lungime fixă. Cifrele de flux se execută, de obicei, la o viteză mai mare decât cifrele în bloc și au cerințe hardware mai mici. Cu toate acestea, cifrele de flux pot fi susceptibile la probleme grave de securitate dacă sunt utilizate în mod incorect; de exemplu, în special, aceeași stare de pornire nu trebuie să fie utilizată niciodată de două ori.
Un cifru de flux utilizează o cheie criptografică mult mai mică și mai convenabilă, de exemplu chei de 128 de biți. Pe baza acestei chei, acesta generează un flux de chei pseudorandom care poate fi combinat cu cifrele din textul în clar într-un mod similar cu algoritmul de criptare cu un singur timp. Cu toate acestea, deoarece fluxul de chei este pseudo-aleator, și nu cu adevărat aleator, nu se poate aplica securitatea asociată cu one-time pad-ul și este foarte posibil ca un cifru de flux să fie complet nesigur.


Funcționarea generatorului de fluxuri de chei în A5/1, un cifru de flux bazat pe LFSR utilizat pentru criptarea conversațiilor de telefonie mobilă.
Tipuri de coduri de flux
Un cifru de flux generează elemente succesive ale fluxului de chei pe baza unei stări interne. Această stare este actualizată în două moduri:
- În cazul în care starea se schimbă independent de mesajele de text în clar sau de text cifrat, cifrul este clasificat ca fiind un cifru de flux sincron.
- În cazul în care starea este actualizată pe baza modificărilor anterioare ale cifrelor din textul cifrat, cifrul este clasificat ca fiind un cifru de flux cu autosincronizare.
Cifre de flux sincrone
Într-un cifru de flux sincron, un flux de cifre pseudoaleatoare este generat independent de mesajele de text în clar și de text cifrat și apoi combinat cu textul în clar (pentru criptare) sau cu textul cifrat (pentru decriptare). În forma cea mai comună, se utilizează cifre(biți) binare, iar fluxul de chei este combinat cu textul în clar folosind operația exclusiv sau (XOR). Acest tip de cifrare se numește cifrare de flux aditiv binar.
Într-un cifru de flux sincron, expeditorul și receptorul trebuie să fie sincronizați pentru ca decriptarea să aibă succes. Dacă se adaugă sau se elimină cifre din mesaj în timpul transmiterii, se pierde sincronizarea. Pentru a restabili sincronizarea, se pot încerca sistematic diverse decalaje pentru a obține decriptarea corectă. O altă abordare constă în marcarea textului cifrat cu markeri în puncte regulate din text.
Cu toate acestea, dacă o cifră este coruptă în timpul transmiterii, în loc să fie adăugată sau pierdută, doar o singură cifră din textul în clar este afectată, iar eroarea nu se propagă la alte părți ale mesajului. Această proprietate este utilă atunci când rata de eroare de transmisie este ridicată; cu toate acestea, ea face mai puțin probabil ca eroarea să fie detectată fără mecanisme suplimentare. Mai mult, din cauza acestei proprietăți, cifrele de flux sincrone sunt foarte susceptibile la atacuriactive - dacă un atacator poate modifica o cifră din textul cifrat, ar putea fi capabil să facă modificări previzibile la bitul corespunzător din textul în clar; de exemplu, întoarcerea unui bit din textul cifrat face ca același bit să fie întors(Toggled) în textul în clar.
Cifre de flux cu auto-sincronizare
Cifrele de flux cu autosincronizare reprezintă o altă tehnică care utilizează o parte din cele N cifre anterioare ale textului cifrat pentru a calcula fluxul de chei. Astfel de scheme sunt cunoscute și sub denumirea de cifrare asincronă a fluxurilor sau de autoclave de cifrare a textului cifrat (CTAK). Ideea de autosincronizare a fost patentată în 1946 și are avantajul că receptorul se va sincroniza automat cu generatorul de flux de chei după ce primește N cifre de text cifrat, ceea ce facilitează recuperarea în cazul în care cifrele sunt eliminate sau adăugate la fluxul de mesaje. Erorile cu o singură cifră au un efect limitat, afectând doar până la N cifre de text în clar. Este oarecum mai dificil să se efectueze atacuri active asupra cifrului de flux autosincronizator decât asupra omologilor sincrone.
Un exemplu de cifru de flux cu autosincronizare este un cifru în bloc în modul de reacție a cifrului (CFB).
Cifre de flux bazate pe registre de deplasare cu reacție liniară
Cifrele de flux binar sunt adesea construite cu ajutorul registrelor de deplasare cu reacție liniară (LFSR), deoarece pot fi implementate cu ușurință în hardware și pot fi analizate rapid din punct de vedere matematic. Cu toate acestea, utilizarea exclusivă a LFSR-urilor este insuficientă pentru a asigura o bună securitate. Au fost concepute diverse scheme pentru a spori securitatea LFSR-urilor.
Funcții de combinare neliniară
Deoarece LFSR-urile sunt în mod inerent liniare, o tehnică de eliminare a liniarității este de a introduce ieșirile unui grup de LFSR-uri paralele într-o funcție booleană neliniară pentru a forma un generator de combinații. Diferite proprietăți ale unei astfel de funcții de combinare sunt importante pentru a asigura securitatea schemei rezultate, de exemplu, pentru a evita atacurile de corelație.
Generatoare controlate de ceas
În mod normal, LFSR-urile sunt trepte în mod regulat. O tehnică de introducere a neliniarității este de a face ca LFSR să fie sincronizat neregulat, controlat de ieșirea unui al doilea LFSR. Astfel de generatoare includ generatorul stop-and-go, generatorul de pași alternativi și generatorul de contracție.
Generatorul stop-and-go (Beth și Piper, 1984) este format din două LFSR. Un LFSR este sincronizat dacă ieșirea celui de-al doilea este un "1", în caz contrar repetă ieșirea anterioară. Această ieșire este apoi (în unele versiuni) combinată cu ieșirea unui al treilea LFSR care este sincronizat la o frecvență regulată.
Generatorul de micșorare folosește o tehnică diferită. Se utilizează două LFSR, ambele sincronizate în mod regulat în felul următor:
- Dacă ieșirea primului LFSR este "1", ieșirea celui de-al doilea LFSR devine ieșirea generatorului.
- În cazul în care ieșirea primului LFSR este "0", ieșirea celui de-al doilea este eliminată și generatorul nu emite niciun bit.
Această tehnică suferă de atacuri de sincronizare asupra celui de-al doilea generator, deoarece viteza de ieșire este variabilă într-un mod care depinde de starea celui de-al doilea generator. Acest lucru poate fi îmbunătățit prin tamponarea ieșirii.
Generator de filtre
O altă abordare pentru îmbunătățirea securității unui LFSR este de a trece întreaga stare a unui singur LFSR într-o funcție de filtrare neliniară.
Alte modele
În loc de un dispozitiv de acționare liniară, se poate utiliza o funcție de actualizare neliniară. De exemplu, Klimov și Shamir au propus funcții triunghiulare (T-Functions) cu un singur ciclu pe n cuvinte de biți.
Securitate
Pentru a fi sigură, perioada fluxului de chei (numărul de cifre emise înainte ca fluxul să se repete) trebuie să fie suficient de mare. Dacă secvența se repetă, atunci textele cifrate suprapuse pot fi aliniate unele față de altele "în profunzime" și există tehnici care permit extragerea textului în clar din textele cifrate generate prin aceste metode.
Utilizare
Cifrele de flux sunt adesea utilizate în aplicații în care textul în clar este prezentat în cantități de lungime necunoscută, cum ar fi în cazul conexiunilor wireless securizate. Dacă un cifru în bloc ar fi utilizat în acest tip de aplicație, proiectantul ar trebui să aleagă fie eficiența de transmisie, fie complexitatea implementării, deoarece cifrele în bloc nu pot funcționa direct pe blocuri mai scurte decât dimensiunea blocului lor. De exemplu, dacă un cifru în bloc de 128 de biți primește rafale separate de 32 de biți de text clar, trei sferturi din datele transmise au nevoie de umplutură. Cifrele bloc trebuie utilizate în modul de furt de text cifrat sau de terminare a blocului rezidual pentru a evita umplutura, în timp ce cifrele de flux elimină această problemă prin faptul că operează pe cea mai mică unitate transmisă (de obicei octeți).
Un alt avantaj al cifrului de flux în criptografia militară este că fluxul de cifru poate fi generat de un dispozitiv de criptare care face obiectul unor măsuri stricte de securitate, apoi poate fi transmis altor dispozitive, de exemplu un aparat de radio, care va efectua operația xor ca parte a funcției lor. Celălalt dispozitiv poate fi proiectat pentru a fi utilizat în medii mai puțin sigure.
RC4 este cel mai utilizat cifru de flux în software; altele includ: A5/1, A5/2, Chameleon, FISH, Helix, ISAAC, MUGI, Panama, Phelix, Phelix, Pike, SEAL, SOBER, SOBER-128 și WAKE.


RC4 este unul dintre cele mai utilizate modele de cifrare de flux.
Comparație de coduri de flux
StreamCipher | CreationDate | Viteză | (biți) | Atac | |||
Efectiv | Vectorul de inițializare | InternalState | Cel mai bine cunoscut | Complexitate computațională | |||
A5/1 | 1989 | Voce (Wphone) | 54 | 114 | 64 | KPA activ OR | ~2 secunde OR239.91 |
A5/2 | 1989 | Voce (Wphone) | 54 | 114 | 64? | Activ | 4,6 milisecunde |
PEȘTE | 1993 | Destul de rapid (Wsoft) | Uriaș | Atac de tip plaintext cunoscut | 211 | ||
Cereale | Înainte de 2004 | Rapid | 80 | 64 | 160 | Cheia de derivare | 243 |
HC-256 | Înainte de 2004 | 4 (WP4) | 256 | 256 | 65536 | ||
ISAAC | 1996 | 2 | 8-8288de obicei | N/A | 8288 | (2006) Prima rundă de decernare a stării interne slabe | 4.67×101240 (2001) |
MUGI | 1998-2002 | 128 | 128 | 1216 | N/A (2002) | ~282 | |
PANAMA | 1998 | 2 | 256 | 128? | 1216? | Ciocniri de hașiș (2001) | 282 |
Phelix | Înainte de 2004 | până la 8 (Wx86) | 256 + un Nonce de 128 de biți | 128? | Diferențial (2006) | 237 | |
Pike | 1994 | 0,9 x FISH (Wsoft) | Uriaș | N/A (2004) | N/A (2004) | ||
Py | Înainte de 2004 | 2.6 | 8-2048?de | 64 | 8320 | Teoria criptanalitică (2006) | 275 |
Iepurele | 2003-Feb | 3.7(WP3)-9.7(WARM7) | 128 | 64 | 512 | N/A (2006) | N/A (2006) |
1987 | Impresionant | 8-2048de obicei | 8 | 2064 | Shamir initial-Bytes Key-Derivation OR KPA | 213 OR 233 | |
Salsa20 | Înainte de 2004 | 4,24 (WG4) -11 | 128 + un Nonce pe 64 de biți | 512 | 512 + 384 (cheie+IV+index) | Diferențial (2005) | N/A (2005) |
Țipă | 2002 | 4 - 5 (Wsoft) | 128 + un Nonce pe 128 de biți | 32? | Funcția de rotunjire pe 64 de biți | ||
SEAL | 1997 | Foarte rapid (W32-bit) | 32? | ||||
ZĂPADĂ | Înainte de 2003 | Foarte bun (W32-bit) | 128 SAU 256 | 32 | |||
SOBER-128 | 2003 | până la 128 | Forja de mesaje | 2−6 | |||
SOSEMANUK | Înainte de 2004 | Foarte bun (W32-bit) | 128 | 128 | |||
Trivium | Înainte de 2004 | 4 (Wx86) - 8 (WLG) | 80 | 80 | 288 | Atac prin forță brută (2006) | 2135 |
Turing | 2000-2003 | 5.5 (Wx86) | 160 | ||||
VEST | 2005 | 42 (WASIC) -64 (WFPGA) | Variabilde obicei | Variabilde obicei | 256 - 800 | N/A (2006) | N/A (2006) |
WAKE | 1993 | Rapid | 8192 | CPA & CCA | Vulnerabil | ||
StreamCipher | CreationDate | Viteză | (biți) | Atac | |||
Efectiv | Vectorul de inițializare | InternalState | Cel mai bine cunoscut | Complexitate computațională |
Pagini conexe
- eSTREAM
Întrebări și răspunsuri
Î: Ce este un cifru de flux?
R: Un cifru de flux este un cifru cu cheie simetrică în care biții de text în clar sunt combinați cu un flux de biți de cifru pseudoaleatoriu (flux de chei) folosind o operație de tip "exclusiv sau (xor)".
Î: Prin ce se deosebește acesta de cifrarea în bloc?
R: Cifrele în flux se execută de obicei la o viteză mai mare decât cele în bloc și au cerințe hardware mai mici. Cifrele în bloc operează pe blocuri mari de lungime fixă, în timp ce cifrele în flux criptează cifrele una câte una, iar transformarea cifrelor succesive variază în timpul stării de criptare.
Î: Ce tip de chei utilizează?
R: Cifrele de flux utilizează chei criptografice mult mai mici și mai convenabile, de exemplu chei de 128 de biți.
Î: Cum generează fluxul de chei?
R: Șirul de chei este generat pe baza cheii criptografice utilizate, într-un mod similar cu algoritmul de criptare one-time pad. Cu toate acestea, deoarece fluxul de chei este pseudoaleator și nu cu adevărat aleatoriu, nu se poate aplica securitatea asociată cu one-time pad-ul.
Î: De ce nu trebuie să folosiți niciodată aceeași stare de pornire de două ori?
R: Utilizarea aceleiași stări de pornire de două ori poate duce la probleme serioase de securitate, deoarece facilitează atacatorilor decriptarea datelor fără a cunoaște sau a avea acces la cheia dumneavoastră criptografică.
Î: Există vreun risc asociat cu utilizarea cifrului de flux?
R: Da, dacă sunt utilizate incorect sau fără a lua măsurile de precauție adecvate, există un risc asociat cu utilizarea cifrelor de flux, deoarece acestea pot fi complet nesigure dacă nu sunt tratate corespunzător.