Folyamcifra (adatfolyam-kódolás): definíció, működés és biztonság

Folyamcifra: működés, előnyök és kockázatok — részletes útmutató az adatfolyam-kódolásról, biztonsági tanácsokkal és helyes alkalmazási gyakorlatokkal.

Szerző: Leandro Alegsa

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.

A kulcsfolyam-generátor működése az A5/1-ben, amely egy LFSR-alapú áramfolyam-kódoló, amelyet mobiltelefonos beszélgetések titkosítására használnak.Zoom
A kulcsfolyam-generátor működése az A5/1-ben, amely egy LFSR-alapú áramfolyam-kódoló, amelyet mobiltelefonos beszélgetések titkosítására használnak.

A folyamkódolás típusai

A kulcsfolyamat egymást követő elemeit egy belső állapot alapján generálja a kulcsfolyam. Ez az állapot kétféleképpen frissül:

  1. Ha az állapot a tisztaszöveges vagy a rejtjelezett üzenettől függetlenül változik, akkor a rejtjelezőt szinkron áramlatos rejtjelezőnek minősítik.
  2. Ha az állapotot a rejtjelezett szöveg számjegyeinek korábbi változásai alapján frissítik, akkor a rejtjelezőt önszinkronizáló folyamkriptornak minősítik.

Szinkron áramfolyam-kódolás

A szinkron áramlatos rejtjelezésben a tisztaszöveges és a rejtjelezett üzenettől függetlenül pszeudo-véletlen számjegyek áramát generálják, majd kombinálják a tisztaszöveggel (titkosításhoz) vagy a rejtjelezett szöveggel (visszafejtéshez). A legelterjedtebb formában bináris számjegyeket (biteket) használnak, és a kulcsfolyamot az egyszerű szöveggel kombinálják a kizárólagos vagy művelet (XOR) segítségével. Ezt nevezzük bináris additív folyamkódolásnak.

A szinkron áramfolyam-alapú titkosításban a küldőnek és a fogadónak szinkronban kell lennie ahhoz, hogy a visszafejtés sikeres legyen. Ha az átvitel során számjegyeket adnak hozzá vagy vesznek el az üzenetből, a szinkronizáció elveszik. A szinkronizálás helyreállítása érdekében szisztematikusan próbálkozhatunk különböző eltolásokkal a helyes dekódolás eléréséhez. Egy másik megközelítés az, hogy a rejtjelezett szöveget a kimenet rendszeres pontjain jelölőkkel jelöljük.

Ha azonban egy számjegy az átvitel során sérül, nem pedig hozzáadódik vagy elveszik, akkor a hiba csak egyetlen számjegyet érint a nyílt szövegben, és a hiba nem terjed át az üzenet más részeire. Ez a tulajdonság akkor hasznos, ha az átviteli hibaarány magas; ugyanakkor kevésbé valószínűvé teszi, hogy a hiba további mechanizmusok nélkül észlelhető lenne. Ráadásul e tulajdonsága miatt a szinkron áramfolyam-kriptek nagyon érzékenyek az aktívtámadásokra - ha egy támadó képes megváltoztatni egy számjegyet a rejtjelezett szövegben, akkor képes lehet kiszámítható változásokat végrehajtani a megfelelő nyílt szövegbeli bitben is; például egy bit megfordítása a rejtjelezett szövegben ugyanannak a bitnek a megfordítását (Toggled) okozza a nyílt szövegben.

Önszinkronizáló adatfolyam-kódok

Az önszinkronizáló adatfolyam-kódolás egy másik technika, amely az előző N rejtjelezett szöveg számjegyeinek egy részét használja fel a kulcsfolyam kiszámításához. Az ilyen sémákat aszinkron áramvonalas kódolóként vagy rejtjelező szöveges automatikus kulcsként (CTAK) is ismerik. Az önszinkronizálás ötletét 1946-ban szabadalmaztatták, és előnye, hogy a vevő automatikusan szinkronizálódik a kulcsfolyam-generátorral, miután N rejtjelezett szöveges számjegyet kapott, így könnyebben helyreállítható, ha az üzenetfolyamban számjegyek kiesnek vagy hozzáadódnak. Az egy számjegyű hibák hatása korlátozott, csak N tisztaszöveges számjegyig hatnak. Az önszinkronizáló folyamkódok ellen valamivel nehezebb aktív támadásokat végrehajtani, mint a szinkronizált társaik ellen.

Az önszinkronizáló adatfolyam-alapú kódolásra példa a blokkos kódolású kódolás visszafejtési módban (CFB).

Lineáris visszacsatolású eltolásregiszter-alapú áramfolyam-kódolás

A bináris adatfolyam-kódok gyakran lineáris visszacsatolású shift regiszterek (LFSR) segítségével készülnek, mivel könnyen megvalósíthatók hardveresen, és matematikailag gyorsan elemezhetőek. Azonban az LFSR-ek használata önmagában nem elegendő a jó biztonság eléréséhez. Az LFSR-ek biztonságának növelésére különböző sémákat terveztek.

Nem lineáris kombináló függvények

Mivel az LFSR-ek eredendően lineárisak, a linearitás megszüntetésének egyik technikája az, hogy a párhuzamos LFSR-ek egy csoportjának kimeneteit egy nemlineáris Boole-függvénybe tápláljuk, hogy egy kombinációs generátort alkossunk. Az ilyen kombinációs függvény különböző tulajdonságai fontosak az eredményül kapott rendszer biztonságának biztosításához, például a korrelációs támadások elkerülése érdekében.

Óravezérelt generátorok

Az LFSR-eket általában rendszeresen lépcsőzik. A nemlinearitás bevezetésének egyik technikája az, hogy az LFSR-t szabálytalanul, egy második LFSR kimenete által vezérelve ütemezik. Ilyen generátorok például a stop-and-go generátor, a váltakozó lépésgenerátor és a zsugorodó generátor.

A stop-and-go generátor (Beth és Piper, 1984) két LFSR-ből áll. Az egyik LFSR akkor van órajelezve, ha a második kimenete "1", ellenkező esetben megismétli az előző kimenetét. Ezt a kimenetet ezután (egyes változatokban) egy harmadik LFSR kimenetével kombinálják, amelyet szabályos ütemben ütemeznek.

A zsugorodó generátor más technikát használ. Két LFSR-t használunk, mindkettőt a következő módon szabályos ütemezéssel:

  1. Ha az első LFSR kimenete "1", akkor a második LFSR kimenete lesz a generátor kimenete.
  2. Ha az első LFSR kimenete "0", a második kimenete elvetésre kerül, és a generátor nem ad ki bitet.

Ez a technika a második generátor időzítési támadásaitól szenved, mivel a kimenet sebessége a második generátor állapotától függő módon változtatható. Ez javítható a kimenet pufferelésével.

Szűrő generátor

Egy másik megközelítés az LFSR biztonságának javítására az, hogy egyetlen LFSR teljes állapotát átadjuk egy nemlineáris szűrőfüggvénynek.

Egyéb minták

A lineáris meghajtóeszköz helyett használhatunk nemlineáris frissítő függvényt is. Klimov és Shamir például háromszögfüggvényeket (T-funkciókat) javasolt egyetlen ciklussal n bites szavakon.

Biztonság

A biztonság érdekében a kulcsfolyam periódusának (a kimeneti számjegyek száma, mielőtt a folyam megismétlődik) elég nagynak kell lennie. Ha a sorozat ismétlődik, akkor az egymást átfedő rejtjelszövegek "mélységben" egymáshoz igazíthatók, és léteznek olyan technikák, amelyek lehetővé teszik az egyszerű szöveg kivonását az ilyen módszerekkel előállított rejtjelszövegekből.

Használat

Az adatfolyam-kódolást gyakran használják olyan alkalmazásokban, ahol a nyílt szöveg ismeretlen hosszúságú mennyiségben érkezik, mint például a biztonságos vezeték nélküli kapcsolatokban. Ha ilyen típusú alkalmazásokban blokkos titkosítót használnának, a tervezőnek választania kellene az átviteli hatékonyság vagy a megvalósítás bonyolultsága között, mivel a blokkos titkosítók nem tudnak közvetlenül a blokkméretüknél rövidebb blokkokon dolgozni. Ha például egy 128 bites blokkos rejtjelező különálló 32 bites nyílt szövegtömböket kap, akkor az átvitt adatok háromnegyedét kell kitölteni. A blokkos titkosítókat a kitöltés elkerülése érdekében rejtjelező szöveglopási vagy maradék blokkmegszüntetési módban kell használni, míg a stream-ciperek kiküszöbölik ezt a problémát azzal, hogy a legkisebb átvitt egységen (általában bájton) dolgoznak.

A katonai kriptográfiában a folyamkódolás másik előnye, hogy a rejtjelfolyamot egy szigorú biztonsági intézkedéseknek alávetett titkosító eszközzel lehet létrehozni, majd más eszközökhöz, például egy rádiókészülékhez táplálni, amelyek a funkciójuk részeként elvégzik az xor műveletet. A másik eszköz kevésbé biztonságos környezetben való használatra is tervezhető.

Az RC4 a szoftverekben legszélesebb körben használt adatfolyam-kódolás; a többi a következő: Az A5/1, A5/2, Chameleon, FISH, Helix, ISAAC, MUGI, Panama, Phelix, Pike, SEAL, SOBER, SOBER-128 és WAKE.

Az RC4 az egyik legszélesebb körben használt folyamkódolás.Zoom
Az RC4 az egyik legszélesebb körben használt folyamkódolás.

Az adatfolyam-kódok összehasonlítása

StreamCipher

CreationDate

Sebesség
(ciklusok/bájt)

(bitek)

Támadás

Hatékony
Kulcshossz

Inicializálási vektor

InternalState

A legismertebb

ComputationalComplexity

A5/1

1989

Hang (Wphone)

54

114

64

Aktív KPA VAGY
KPA idő-memória kompromisszum

~2 másodperc OR239.91

A5/2

1989

Hang (Wphone)

54

114

64?

Aktív

4,6 milliszekundum

HAL

1993

Elég gyors (Wsoft)

Hatalmas

Ismert-plaintext támadás

211

Gabona

2004 előtt

Gyors

80

64

160

Kulcs-leválasztás

243

HC-256

2004 előtt

4 (WP4)

256

256

65536

ISAAC

1996

2.375 (W64-bit)
-4.6875
(W32-bit)

8-8288 rendszerint
40-256

N/A

8288

(2006) Első körös gyenge-belső-állami-leválás

4.67×101240 (2001)

MUGI

1998-2002

128

128

1216

N/A (2002)

~282

PANAMA

1998

2

256

128?

1216?

Hash Collisions (2001)

282

Phelix

2004 előtt

legfeljebb 8 (Wx86)

256 + egy 128 bites nonce

128?

Differenciál (2006)

237

Pike

1994

0,9 x FISH (Wsoft)

Hatalmas

N/A (2004)

N/A (2004)

Py

2004 előtt

2.6

8-2048?
általában 40-256?

64

8320

Kriptanalitikai elmélet (2006)

275

Nyúl

2003-február

3,7(WP3)-9,7(WARM7)

128

64

512

N/A (2006)

N/A (2006)

RC4

1987

Lenyűgöző

8-2048általában
40-256

8

2064

Shamir kezdeti bájtos kulcsleválasztás VAGY KPA

213 OR 233

Salsa20

2004 előtt

4,24 (WG4) -11
,84
(WP4)

128 + 64 bites nonce

512

512 + 384 (kulcs+IV+index)

Differenciál (2005)

N/A (2005)

Scream

2002

4 - 5 (Wsoft)

128 + egy 128 bites nonce

32?

64 bites kerekítő funkció

SEAL

1997

Nagyon gyors (W32-bit)

32?

SNOW

2003 előtt

Nagyon jó (W32-bit)

128 VAGY 256

32

SOBER-128

2003

akár 128

Üzenet Forge

2−6

SOSEMANUK

2004 előtt

Nagyon jó (W32-bit)

128

128

Trivium

2004 előtt

4 (Wx86) - 8 (WLG)

80

80

288

Brute force támadás (2006)

2135

Turing

2000-2003

5.5 (Wx86)

160

VEST

2005

42 (WASIC) -64 (WFPGA)

Változó Általában
80-256

Változó Általában
80-256

256 - 800

N/A (2006)

N/A (2006)

WAKE

1993

Gyors

8192

CPA & CCA

Sebezhető

StreamCipher

CreationDate

Sebesség
(ciklusok/bájt)

(bitek)

Támadás

Hatékony
Kulcshossz

Inicializálási vektor

InternalState

A legismertebb

ComputationalComplexity

Kapcsolódó oldalak

  • eSTREAM

Kérdések és válaszok

K: Mi az a stream cipher?


V: A stream cipher egy olyan szimmetrikus kulcsú rejtjelező, ahol a nyílt szöveg bitjeit egy pszeudorandom rejtjelező bitfolyam (keystream) kombinálja egy exkluzív-vagy (xor) művelet segítségével.

K: Miben különbözik a blokkos rejtjelezőktől?


V: Az adatfolyam-kódolók jellemzően nagyobb sebességgel hajtódnak végre, mint a blokk-kódolók, és alacsonyabb hardverigényük van. A blokkos kódolók nagy, rögzített hosszúságú blokkokon működnek, míg a folyamkódolók a 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.

K: Milyen típusú kulcsokat használ?


V: Az adatfolyam-kódolók sokkal kisebb és kényelmesebb kriptográfiai kulcsokat használnak, például 128 bites kulcsokat.

K: Hogyan generálja a kulcsfolyamot?


V: A kulcsfolyam a használt kriptográfiai kulcs alapján generálódik, hasonlóan az egyszeri pad titkosítási algoritmushoz. Mivel azonban a kulcsfolyam pszeudorandom és nem valóban véletlenszerű, az egyszeri padhoz kapcsolódó biztonság nem alkalmazható.

K: Miért nem szabad kétszer ugyanazt a kezdőállapotot használni?


V: Ugyanazon kezdőállapot kétszeri használata komoly biztonsági problémákhoz vezethet, mivel megkönnyíti a támadók számára az adatok visszafejtését anélkül, hogy ismernék a kriptográfiai kulcsot vagy hozzáférnének ahhoz.

K: Van-e valamilyen kockázata a folyamkódok használatának?


V: Igen, ha helytelenül vagy a megfelelő óvintézkedések megtétele nélkül használják, akkor kockázatot jelent a folyamkódolók használata, mivel nem megfelelő kezelés esetén teljesen bizonytalanok lehetnek.


Keres
AlegsaOnline.com - 2020 / 2025 - License CC3