Un stream cipher este un tip de algoritm utilizat în criptarea datelor în care sursa care trebuie criptată este procesată în raport cu o secvență de chei care pare aleatorie. Acest tip de cifru este oarecum flexibil, în sensul că poate varia criptarea pe măsură ce textul este procesat. De asemenea, uneori sunt denumite cifruri de stare, deoarece criptarea depinde și de starea curentă a operațiunii. Spre deosebire de cifrurile bloc, care funcționează pe bucăți de date pe 64 de biți la un moment dat, un cifru de flux poate funcționa pe un singur bit. Din acest motiv, un flux poate fi procesat la viteze mari cu o putere de procesare foarte mică.
Primul cifr de flux a fost conceput de Gilbert Vernam în 1917. Vernam mai târziu a ajutat, de asemenea, la crearea unui cifr cunoscut sub numele de bloc unic, care este o formă de cifru de flux care utilizează o cheie unică pentru a cripta datele. Într-un pad unic, cheia generată are aceeași lungime cu datele care trebuie criptate, este complet aleatorie și nu mai este folosită niciodată în altă parte, de unde și numele.
Când este procesat pe baza datelor de criptat, denumite de obicei text simplu, textul cifrat rezultat este imposibil de decriptat fără cheie. Pad-ul unic este dificil de gestionat în majoritatea scenariilor și, prin urmare, este folosit doar pentru situații foarte exclusive. Totuși, un cifru de flux este de obicei considerat util, așa că cheile au fost scurtate și făcute pseudoaleatoare, ceea ce înseamnă că sunt aleatorii statistic, dar în realitate nu sunt.
Cifrarea fluxului are capacitatea de a cripta din mers. În acest fel, este chiar ușor ca cifrurile simple în flux să fie efectuate de oameni pe pix și hârtie, în timp ce un cifru bloc necesită de obicei utilizarea unui computer pentru a procesa. Textul simplu trece prin procesul de criptare împreună cu fluxul de chei, secvența pseudoaleatoare care alcătuiește cheia, unde este convertit și iese la celălalt capăt ca text cifrat.
De obicei, această criptare are loc printr-o operație exclusivă sau (XOR) asupra biților individuali pe măsură ce trec prin cifr. Un cifr XOR simplu folosește ca bază un tip de disjuncție logică, care spune în esență că rezultatul poate fi adevărat dacă oricare operand este adevărat, dar nu ambele. De exemplu, dacă un bit care se deplasează prin procesul de criptare este zero sau unu și bitul fluxului de chei asociat nu se potrivește, rezultatul rezultat este unul. Dacă bitul și bitul fluxului de chei împerecheat se potrivesc, unde ambele sunt unu sau ambele sunt zero, rezultatul este zero. Fluxul criptat de uni și zerouri este apoi decriptat la celălalt capăt al transmisiei folosind același flux de chei pentru a converti biții înapoi în textul lor simplu original.
Există două tipuri de coduri de flux. Folosind o metodă sincronă, fluxul de chei este creat separat de textul simplu sau de text cifrat și apoi fuzionat pentru a furniza criptarea sau decriptarea. Cu această metodă, atât capetele de expediere, cât și cele de recepție ale transmisiei trebuie să rămână sincronizate acolo unde operează pe aceeași cheie și aceeași poziție în cheie. În cazul în care apare o problemă, decriptarea fie trebuie să înceapă de la capăt, fie pot exista steaguri plasate intermitent în textul cifrat care indică noi puncte de pornire. Un cifr cu auto-sincronizare, pe de altă parte, va actualiza fluxul de chei pe baza unui număr de cifre anterioare din textul cifrat.
Unul dintre cele mai utilizate coduri de flux, numit RC4, a fost creat de RSA Data Security®. Este licențiat și utilizat pentru o serie de produse software, precum și protocolul SSL (secure socket layer) utilizat în comunicațiile securizate prin Internet și criptarea echivalentă a confidențialității prin cablu (WEP) utilizată cu dispozitivele fără fir. Un alt cifr folosit des este cunoscut sub numele de ORYX, care și-a găsit utilizare în transmisiile de date prin telefonul celular care trebuie criptate. IBM® a dezvoltat, de asemenea, o metodă de criptare în flux cunoscută sub numele de SEAL, care și-a găsit utilizare în criptarea hard diskului.