A kriptográfiában az adatfolyam-kódolás olyan szimmetrikus kulcsú kódolás, amelyben a nyílt szöveg bitjeit egy pszeudorandom kódoló bitfolyam (kulcsfolyam) kombinálja egy exkluzív-vagy (xor) művelet segítségével. A folyamchiffrírban a tisztaszöveges számjegyeket egyenként titkosítják, és az egymást követő számjegyek átalakulása a titkosítási állapot során változik. Egy alternatív elnevezés az állapot titkosítás, mivel az egyes számjegyek titkosítása az aktuális állapottól függ. A gyakorlatban a számjegyek jellemzően egyetlen bit vagy bájt.

Működés

Az adatfolyam-kódolás alapötlete egyszerű: egy rövid (kriptográfiai kulcsot) és gyakran egy kezdeti értéket (IV vagy nonce) felhasználva egy pszeudorandom kulcsfolyamot állítanak elő, majd ezt bitenként vagy bájtonként kizáró-vagy (XOR) művelettel kombinálják a plaintext adatokkal. A titkosítás és a visszafejtés ugyanezen elv szerint történik, mert XOR-ral való kétszeri alkalmazás visszaadja az eredetit (C = P XOR K, P = C XOR K).

Gyakori módszerek a kulcsfolyam előállítására:

  • lineáris visszacsatolt eltolószámítók (LFSR) és nemlineáris variánsok (olyan beágyazott állapotgépek, amelyeket különböző szabályok vezérelnek),
  • blokkkódoló üzemmódok, például egy blokk-cipher használata CTR vagy OFB módban, amely blokkokat pszeudorandom folyamra alakít,
  • kriptográfiai PRNG-k vagy kifejezetten folyamchiffrírek (pl. Salsa, ChaCha, Trivium).

Típusok

Két nagy csoport különböztethető meg:

  • Szinron (synchronous) folyamkódolók: a kulcsfolyam független a titkosított szövegtől; a vevőnek ugyanazt a kulcsfolyamot kell előállítania a visszafejtéshez. Előny: egyszerű és alacsony késleltetésű. Hátrány: ha egy keystream címezhetetlenül megismétlődik, súlyos biztonsági hibák lehetnek.
  • Önszinkronizáló (self-synchronizing) folyamkódolók: a kulcsfolyam a korábbi titkosított bitektől is függ; ha néhány bit elveszik, a rendszer egy rövid idő után újraszinkronizál. Használják pl. csatornákon, ahol bitvesztés gyakori.

Előnyök és hátrányok

Előnyök:

  • Általában nagy sebesség és alacsony hardverigény, különösen beágyazott eszközökön.
  • Kis késleltetés: lehetővé teszik folyamatos adatfolyamok (pl. hang, videó) titkosítását bájtról bájra.
  • Rugalmas kulcsméretek; sok modern folyamchiffrír kis, kényelmes kulcsokat (pl. 128 bites kulcsot) használ.

Hátrányok és kockázatok:

  • Ha ugyanazt a kulcsfolyamot kétszer használják (például ugyanazzal a kulccsal és IV-vel többször), akkor az adatfolyamok XOR-olásából ugyanúgy visszanyerhetők információk — ez a "kétszeres pad" (two-time pad) támadás súlyos következményekkel jár.
  • Nem megfelelő IV/nonce-kezelés súlyos sebezhetőségeket okozhat.
  • Néhány régi algoritmus (pl. RC4) ismert gyengeségekkel rendelkezik; ezek használata kerülendő.
  • Mivel a kulcsfolyam csak pszeudorandom, nem biztosítja az egyszeri pad (one-time pad) információelméleti biztonságát.

Biztonsági problémák részletesen

Fontosabb kockázatok:

  • Keystream újrafelhasználása (nonce/csak egyszeri IV): ha két titkosított üzenet ugyanazt a kulcsfolyamot használja, C1 = P1 XOR K és C2 = P2 XOR K esetén C1 XOR C2 = P1 XOR P2, ami lehetővé teszi statisztikai és ismert-plaintext támadásokat.
  • Bit-flipping támadások: mivel a titkosítás XOR-ral történik, a támadó könnyen megváltoztathat bit(eke)t a címzetti szinten, ha nincs hitelesítés; ezért elengedhetetlen az integritás ellenőrzése (MAC vagy AEAD).
  • Oldalcsatorna és implementációs hibák: időzítés, cache és egyéb fizikai jelek kiszivárogtathatják a belső állapotot, különösen beágyazott eszközökön.
  • Gyenge véletlenszám-generátorok: ha a kulcs vagy az IV előállítása nem elég entropiában gazdag, a kulcsfolyam kiszámíthatóvá válhat.

Gyakorlati ajánlások

  • Soha ne használj ugyanazzal a kulccsal és IV-vel generált kulcsfolyamot kétszer — minden üzenethez használj egyedi nonce-ot/IV-t (és szükség esetén alkalmazz rekeyinget).
  • Használj hitelesített titkosítást (AEAD), például ChaCha20-Poly1305 vagy AES-GCM; ezek egyszerre biztosítják a titkosságot és az integritást.
  • Kerüld az elavult algoritmusokat (például RC4). Válassz jól elemzett, modern konstrukciókat (ChaCha20, Salsa20, AES-CTR + MAC, Trivium/Grain a beágyazott rendszerekben, ahol megfelelően elemzettek).
  • IV/nonce-kezelés: a nonce lehet véletlen vagy számláló alapú, de a használat során biztosítani kell az egyediséget a kulcs élettartama alatt.
  • Implementációk legyenek időállandóak, és védettek oldalcsatorna-támadások ellen, különösen hardveres környezetben.
  • Rendszeresen frissítsd és auditáld a kriptográfiai könyvtárakat és beállításokat.

Példák és alkalmazások

Ismert folyamchiffrírek és megoldások:

  • RC4 — régi, széles körben használt, de ma már kerülendő gyenge pontok miatt.
  • ChaCha20 (általában Poly1305 MAC-pal kombinálva: ChaCha20-Poly1305) — modern, gyors szoftveresen, különösen mobil és beágyazott eszközökön.
  • Salsa20 — ChaCha elődje, amely szintén jó teljesítményt és biztonságot nyújt.
  • Trivium, Grain — könnyűsúlyú folyamchiffrírek beágyazott rendszerekhez.
  • Blokk-cipher alapú üzemmódok mint CTR vagy OFB is valójában folyam-módokat hoznak létre blokk-cipherből.

Rövid példa (egyszerű szemléltetés)

Ha egy 8-bites kulcsfolyam K = 10101010 és egy 8-bites plaintext P = 11001100, akkor a titkosított C = P XOR K = 01100110. Visszafejtéshez ugyanazzal a K-val: C XOR K = P.

Összefoglalás

Az szimmetrikus adatfolyam-kódolás hatékony és gyors módszer folyamatos adatok titkosítására, kis késleltetéssel és alacsony erőforrásigénnyel. Ugyanakkor a biztonság nagymértékben függ a kulcs- és IV-kezeléstől, az alkalmazott algoritmustól és az implementáció minőségétől. A mai gyakorlatban ajánlott modern, jól tanulmányozott folyamchiffrírek és AEAD-megoldások használata, valamint a nonce/IV újrafelhasználásának szigorú elkerülése.