Adatfolyam-Kódolás
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.
Az adatfolyam-kódolás a szimmetrikus titkosításnak a blokk-kódolástól eltérő megközelítését képviseli. A blokkos kódolók nagy, rögzített hosszúságú blokkokkal dolgoznak. Az adatfolyam-kódolók általában nagyobb sebességgel működnek, mint a blokk-kódolók, és alacsonyabb hardverigényük van. A folyamkódolók azonban súlyos biztonsági problémákra lehetnek hajlamosak, ha helytelenül használják őket; például ugyanazt a kezdőállapotot soha nem szabad kétszer használni.
A stream cipher sokkal kisebb és kényelmesebb kriptográfiai kulcsot használ, például 128 bites kulcsot. E kulcs alapján egy pszeudorandom kulcsfolyamot generál, amelyet a plaintext számjegyeivel kombinálhatunk a one-time pad titkosítási algoritmushoz hasonlóan. Mivel azonban a kulcsfolyam pszeudorandom, és nem valóban véletlenszerű, az egyszeri padhoz kapcsolódó biztonság nem alkalmazható, és könnyen előfordulhat, hogy a folyamchiffrözés teljesen bizonytalan.
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:
- 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.
- 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:
- Ha az első LFSR kimenete "1", akkor a második LFSR kimenete lesz a generátor kimenete.
- 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.
Az adatfolyam-kódok összehasonlítása
StreamCipher | CreationDate | Sebesség | (bitek) | Támadás | |||
Hatékony | Inicializálási vektor | InternalState | A legismertebb | ComputationalComplexity | |||
A5/1 | 1989 | Hang (Wphone) | 54 | 114 | 64 | Aktív KPA VAGY | ~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) | 8-8288 rendszerint | 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? | 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) |
1987 | Lenyűgöző | 8-2048általában | 8 | 2064 | Shamir kezdeti bájtos kulcsleválasztás VAGY KPA | 213 OR 233 | |
Salsa20 | 2004 előtt | 4,24 (WG4) -11 | 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 | Változó Általában | 256 - 800 | N/A (2006) | N/A (2006) |
WAKE | 1993 | Gyors | 8192 | CPA & CCA | Sebezhető | ||
StreamCipher | CreationDate | Sebesség | (bitek) | Támadás | |||
Hatékony | 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.