V kriptografiji je tokovna šifra simetrična šifra, pri kateri se biti odprtega besedila kombinirajo s psevdonaključnim tokom bitov šifre (tok ključa) z uporabo operacije izključujočega ali (xor). Pri tokovni šifri se števke navadnega besedila šifrirajo ena za drugo, transformacija zaporednih števk pa se med šifriranjem spreminja. Alternativno ime je državna šifra, saj je šifriranje vsake številke odvisno od trenutnega stanja. V praksi so števke običajno posamezni biti ali bajti.
Osnovno delovanje
Tokovne šifre ustvarijo dolgi psevdonaključni tok ključev iz krajšega tajnega ključnega materiala (npr. 128-bitni ključ) in ta tok kombinirajo z odprtim besedilom z operacijo XOR. Rezultat je šifrirano besedilo (cifrertekst). Če bi bil tok ključa resnično naključen in uporabljen samo enkrat, bi to ustrezalo enkratni podlogi z informacijsko popolno varnostjo. Ker pa je tok ključa psevdonaključen, se ta idealna varnost običajno ne doseže.
Vrste tokovnih šifer
- Sinkrone (synchronous): tok ključa se ustvarja neodvisno od besedila in se sinhronizira med pošiljateljem in prejemnikom. Napake pri prenosu se ne širijo, zahtevata pa natančno ujemanje začetnega stanja/nonce-a.
- Samosinkrono (self-synchronizing ali autokorelativna): tok ključa je funkcija predhodnih cifrnih bitov; če pride do izgube podatkov, se prejemnik po nekaj bitih samodejno ponovno sinhronizira. Primeri v praksi so nekateri načini delovanja blokovnih šifer (npr. CFB), ki se obnašajo kot samosinkrone tokovne šifre.
Komponente in začetno stanje
Poleg tajnega ključa tokovne šifre običajno uporabljajo še inicializacijski vektor (IV) ali nonce. Namen IV/nonce-a je zagotoviti, da se isti ključ ne uporablja z enakim tokom ključa večkrat. IV običajno ni skrivnosten (lahko je javno znan), mora pa biti unikaten (v mnogih shemah tudi nepriporočenih za ponovitev) za vsak ključ.
Tipični gradniki generatorja toka so npr. linearni registroi z liničnim povratnim prenosom (LFSR), nelinearne kombinacijske funkcije, kriptografski izvor naključnih števil (PRNG/PRF), ali pa predelava blokovne šifre v tokovno obliko (npr. CTR način delovanja). Moderni primeri so algoritmi, kot so Salsa20/ChaCha20 (ARX- zasnovani PRNG), ali lažji algoritmi za vgrajene naprave (npr. Grain, Trivium).
Primeri in uporabe
- Tokovne šifre so primerne za realnočasovne aplikacije, kot so tokovni prenos zvoka in videa, mobilna komunikacija in kriptografija v napravah z omejenimi viri (nizka latenca, majhna strojna zahtevnost).
- V zgodovini in praksi so znani primeri: RC4 (zdaj odsvetovan), A5/1 (uporabljen v GSM, zlomljen), Trivium, Grain, Salsa20/ChaCha20. Blokovne šifre v CTR načinu delovanja se funkcionalno obnašajo kot tokovne šifre.
Ranljivosti in napadi
Tokovne šifre imajo nekaj specifičnih varnostnih tveganj:
- Ponovna uporaba toka (keystream reuse): če se isti tok ključa uporablja za dva različna besedila (isti ključ in IV/nonse), sta oba cifrnega besedila xorana z istim tokom; njihov XOR odstrani tok in poda XOR obeh odprtih besedil, kar pogosto omogoča razkritje vsebine — to je klasika »two-time pad« napake.
- Napadi s poznanim odprtim besedilom: če napadalec pozna del odprtega besedila, lahko iz njega izpelje ustrezne dele toka in s tem napade na preostanek komunikacije ali celo izvede okrepitev stanja.
- Bit-flipping/integričnost: ker je osnovna operacija XOR, napadalec, ki spremeni bit v cifrnem besedilu, ustrezno spremeni kot bit v odprtem besedilu — zato osnovne tokovne šifre ne zagotavljajo integritete ali avtentičnosti.
- Statistične in strukturne šibkosti: nekateri algoritmi (npr. starejši RC4) kažejo pristranskosti v toku, kar omogoča razlikovalne napade in izpostavlja tajne podatke. LFSR-bazirane sheme so lahko tarča korelacijskih ali algebričnih napadov, ki obnovijo stanje.
- Premajhno stanje in cikličnost: če je notranje stanje generatorja kratko, se tok lahko ponovi ali ima kratko periodičnost, kar oslabi varnost.
- Napadi z odzivnim časom in stranskimi kanali: slabe implementacije lahko razkrijejo del stanja skozi čas izvajanja, porabo energije ali elektromagnetno sevanje.
- Napadi s predelavo ključa (related-key): nekatere konstrukcije so občutljive, če napadalec lahko izvede šifriranje z različnimi, sorodnimi ključi.
Praktični primeri napadov
- Dešifriranje A5/1 in A5/2 (GSM): uporaba naprednih kriptoanalitičnih in time–memory–tradeoff tehnik je omogočila hitro obnovo stanja oziroma ključa.
- RC4: zaradi začetnih pristranskosti toka in drugih slabosti je bil RC4 odsvetovan v protokolih, kot so TLS in WPA.
- Korelacijski in algebrični napadi na LFSR-bazirane sheme: če so relacije med notranjimi registri šibke, lahko napadalci obnovijo stanje iz opazovanih bitov toka.
Varne prakse in priporočila
- Ne ponavljajte istega para ključ+IV/nonsa. IV naj bo unikaten za vsak klic in, če to zahteva shema, tudi naključen z dovolj entropije.
- Uporabljajte sodobne in pregledane algoritme (npr. ChaCha20 skupaj s Poly1305 kot AEAD v ChaCha20-Poly1305). Salsa20 in ChaCha sta dobri izbiri za praktične tokovne aplikacije; RC4 naj se ne uporablja več.
- Ker tokovne šifre same po sebi ne zagotavljajo integritete, vedno uporabljajte avtentični način (AEAD) ali ločen MAC, da preprečite potvorbe (bit-flipping napade).
- Zagotovite dovolj velik notranji prostor stanja in dolžino ključa, da zmanjšate možnost циклiranja ali brute-force napadov.
- Implementirajte zaščite proti stranskim kanalom (constant-time operacije, omejevanje izločanja napetosti/podatkov) in pazite na pravilno upravljanje ključev (varno shranjevanje, generiranje in uničenje).
- Za aplikacije, kjer je možno, razmislite o uporabi zanesljivega blokovnega načina (npr. AES-GCM) ali preverjenih AEAD-shema za kombinacijo zaupnosti in integritete.
Zaključek
Tokovne šifre so učinkovit in pogosto zelo hiter način za zagotovitev zaupnosti v situacijah z nizko zakasnijo in omejenimi viri. Vendar zahtevajo strogo upravljanje ključev in IV/nonce-ov ter previdno izbiro algoritma in implementacije. Nepravilna uporaba (zlasti ponovna uporaba toka) ali uporaba krhkih, nepreverjenih algoritmov lahko vodi do katastrofalnih kompromisov.
Če želite praktičen namig: uporabite preverjene, sodobne protokole in kombinacije (npr. ChaCha20-Poly1305 ali AES-GCM), zagotovite unikatnost nonce-ov, in vedno vključite mehanizem za preverjanje integritete/avtentikacije.


