Krüptograafias on voolukrüpteerimine sümmeetrilise võtme šifreerimine, mille puhul lihtsa teksti bitid kombineeritakse pseudorandomiga (võtmevoog), kasutades eksklusiiv- või (xor) operatsiooni. Voolukrüpteerimise puhul krüpteeritakse lihtteksti numbrid ükshaaval ja järjestikuste numbrite muundumine muutub krüpteerimise ajal. Alternatiivne nimetuse vorm on olekukrüpteerimine, sest iga numbri krüpteerimine sõltub krüptosüsteemi praegusest olekust. Praktikas on need numbrid tavaliselt üksikud bitid või baidid.
Tööpõhimõte lühidalt
Voolukrüpteerija genereerib pseudojuhusliku võtmevoo, mis seejärel kombineeritakse lihtteksti bitide või baitidega XOR-operatsiooni abil. Kui võtmevoog on tõeliselt juhuslik ja kasutatud vaid üks kord, vastab see teoreetiliselt ühekordse krüpteerimisalgoritmi (one-time pad) turvalisusele; reaalses maailmas on võtmevoog aga pseudojuhuslik ja sõltub algvõtmest, mistõttu ei saa saavutada ühekordse padi absoluutset turvalisust.
Erinevus plokkšifritest
Voolukodeeringud kujutavad endast sümmeetrilise krüpteerimise lähenemisviisi, mis erineb plokk-kodeeringutest. Plokkšifrid töötlevad andmeid fikseeritud suurusega plokkidena (näiteks 128 bitti), samas kui voolukrüptid töötlevad andmeid jooksvalt, ühe bitti või baidi haaval. Voolukodeeringud on sageli kiired ja ressursisäästlikud, mistõttu sobivad nad näiteks reaalajaedastuseks või piiratud riistvaraga seadmetesse. Samas võib valesti kasutamine põhjustada tõsiseid turvariske — üheks hüpoteetiliseks näiteks on sama algusseisundi korduv kasutamine.
Voolukrüpteerimise tüübid
- Sünkroonne voolukrüpteerimine — võtmevoog sõltub ainult võtme ja (võimalikust) algseisundist; lihttekstist saadavad bitid ei muuda järgmist võtmevoogu.
- Asünkroonne (olekupõhine) voolukrüpteerimine — võtmevoog sõltub ka eelnevatest krüpteeritud bittidest või olekust; rikkeid või bitikaotust võib sel juhul olla raskem taastada.
Täiendav tehniline selgitus
Voolukrüptograafia kasutab tavaliselt suhteliselt väikest ja mugavat krüptograafilist võtit (näiteks 128-bitist võtit). Selle võtme põhjal genereeritakse pseudojuhuslik võtmevoog, mida kombineeritakse lihtteksti bittidega. Kuna nimetatud võtmevoog on pseudorandom — mitte tõeliselt juhuslik — ei saa rakendada ühekordse padiga seotud ideaalset turvalisust ja vale kasutus võib muuta voolukrüpteeringu ebaturvaliseks.
Turvariskid ja levinud nõrkused
- Võtmevoo korduvkasutus — kui sama võtmevoogu kasutatakse kahe erineva sõnumi krüpteerimiseks, saab XOR-ide abil lihttekstid üksteisest tuletada (keystream reuse attack).
- Algseisundi (IV/nonce) korduvkasutus — paljud voolukrüptid nõuavad unikaalset initsialiseerimisevektorit (IV/nonce); sama IV kasutamine sama võtmega kompromiteerib turvalisuse.
- Puuduv andmete terviklikkuse kontroll — voolukipherid tavaliselt ei paku autentimist; see tähendab, et ründaja saab sõnumeid ümber kirjutada (bit-flipping) ilma avastamiseta, kui ei kasutata eraldi MACi või AEAD-skeemi.
- Seisundi kompromiss — kui ründaja saab teada vooluşifri sisemise oleku või võtme, võib ta dekrüpteerida kõiki edaspidiseid sõnumeid.
- Halvad juhuslikkuseallikad — nõrk või pistevateguridest lähtuv PRNG võib anda prognoositava võtmevoo.
- Vana või haavatav algoritm — tuntud näide on RC4, millel on praktilisi nõrkusi; seetõttu ei tohiks kasutada aegunud või teadaolevalt nõrku voolualgoritme.
Praktilised soovitused ja leevendusmeetmed
- Kasutage igal sõnumil unikaalset IV/nonce'i ja ärge kunagi kordistage sama võtme–IV paari.
- Rakendage andmete autentimiseks alati MAC või eelistatult AEAD (Authenticated Encryption with Associated Data) skeem — näiteks ChaCha20-Poly1305 või AES-GCM, mis kombineerivad voolukrüptimise ja autentimise.
- Valige hästi hinnatud kaasaegsed algoritmid (ChaCha20, Salsa20, kaasaegsed AES-režiimid) ja vältige teadaolevalt nõrku samme (nt RC4).
- Tagage tugev ja krüptograafiliselt turvaline juhuslikkuseallikas võtmete ja nonce'ide genereerimiseks ning võtmete turvaline haldus.
- Planeerige võtmete rotatsioon ja võimalusel mõõdukas või sagedane uuendamine, et piirata kompromiteerimise mõju.
- Testige ja auditeerige implementatsioone — õige rakendus on sama tähtis kui algoritmi valik.
Kasutusvaldkonnad
Voolukrüpteerimine sobib hästi reaalaja voogedastusse, krüpteeritud sidekanalitesse (näiteks varasemad mobiilside algoritmid), otse voogude krüpteerimiseks piiratud riistvaral ning olukordadesse, kus on vaja madalat latentsust ja väikest mäluvajadust. Tänapäeval kasutatakse tihti pigem hibridseid lahendusi, mis ühendavad voolualgoritme autentimismehhanismiga (AEAD).
Kokkuvõte
Voolukrüpteerimine on võimas ja efektiivne lahendus andmete krüpteerimiseks bititasandil, kuid selle turvalisus sõltub rangelt õigete praksisete järgimisest: unikaalsest IV/nonce'ist, tugevast võtmehaldusest, kaasaegsest algoritmi valikust ja andmete autentimisest. Kui neid tingimusi ei järgita, võib voolukrüpteering olla haavatav ja andmed lekkida või võimaldada ründaja poolset manipulatsiooni.


