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.


