Kriptográfia és Információbiztonság 3. előadás Sapientia Egyetem, Matematika-Informatika Tanszék Marosvásárhely, Románia mgyongyi@ms.sapientia.ro 2019
Miről volt szó az elmúlt előadáson? Klasszikus kriptográfiai rendszerek Helyettesítéses rejtjelezés: affin-titkosító Mátrixos rejtjelezés: Hill módszere matematikai modell titkos-kulcsú rendszerek: matematikai modell az OTP titkosítási rendszer tökéletes biztonság biztonság-értelmezések, osztályozások az NTL könyvtárcsomag Mátrix műveletek Javában
Miről lesz szó? titkos-kulcsú rendszerek: matematikai modell, osztályozások folyam-titkosító rendszerek: OTP, RC4, linear feedback shift register, A51, Salsa20
A titkos-kulcsú rendszerek matematikai modellje megnevezések: titkos-kulcsú rendszerek, szimmetrikus rendszerek (private-key, symmetric crypto), jelölés: SKE-vel, a (K, M, C) halmaz-hármas felett értelmezzük. 3 algoritmus: Gen, a kulcs-generáló algoritmus, polinom idejű, véletlenszerű: key R Gen(1 k ), ahol key K, k Z 0 a rendszer biztonsági paramétere (legtöbb esetben a generált kulcs bit-hossza), Enc key a rejtjelező algoritmus, polinom idejű, véletlenszerű: c R Enc key (m), a Dec key a visszafejtő algoritmus, polinom idejű, determinisztikus: m Dec key (c). Helyesség: Dec key (Enc key (m)) = m, minden m M esetében. gyakorlatban a polinom futásidejű algoritmus hatékony algoritmust jelent, például elvárjuk, hogy 1 gigabájtnyi adat titkosítását 1 perc alatt végezze el a rendszer
A titkos-kulcsú rendszerek osztályozása nagy adathalmaz titkosítására alkalmasak nincs megoldva a felek közötti kulcs-csere, ezt a nyilvános kulcsú kriptográfia végzi, két nagy csoportra oszthatóak: folyam-titkosító rendszerek, blokk-titkosító rendszerek.
Folyam-titkosító rendszerek véletlenszerűen generálnak egy bitsort, a kulcsfolyamot, amelyet legtöbbször a művelettel hozzáadnak a nyílt szöveghez, a kulcsfolyamot egyetlenegyszer használják, a rendszer biztonságát a kulcsfolyamot generáló algoritmus határozza meg álvéletlen-szám generáló algoritmusok (pseudo-random number generators) nem minden ál-véletlenszám generátor alkalmas a kriptográfiában, pl: az x n = a x n 1 + b (mod p) lineáris kongruenciával értelmezett generátor sem alkalmas.
Folyam-titkosító rendszerek implementációjuk általában könnyű hardver-be építve nagyon gyorsak, ezért legtöbbször hardver szintjén implementálják őket szoftver szintjén nem mindig érik el a megfelelő gyorsaságot leginkább akkor használják, amikor nem lehet tudni, hogy milyen hosszú a nyílt szöveg, pl wireless kommunikáció katonai környezetben gyakran használják: a kulcsfolyam előálĺıtást külön eszköz végzi, ez jól védett, a XOR műveletek elvégzésére pedig más eszközt használnak, amelynek biztonsága már nem olyan fontos biztonságuk vitatott, pl. az RC4, A51 kezdetben titkosak voltak, miután publikussá váltak számos gyengeséget fedeztek fel bennük
Az RC4 1987-ben tervezte Ron Rivest, kezdetben nem volt publikus, 1994-ben ismeretlenül felkerült a Cyberpunk levelező-listájára, a HTTPS, WEP és számos más protokollban használták, ma már nem biztonságos, több sikeres támadás érte, új projekteknél nem ajánlatos használni a Internet Engineering Task Force (IETF) 2015-től tiltja a használatát Elvi működése: egy 128 bites kezdeti érték alapján, a 256 fajta bájtértéket összekeverve, előálĺıt egy 256 elemű bájt-tömböt, amely a generátor alap állapotának fog megfelelni, a kulcsfolyam egy bájtja, a 256 elemű bájttömb egy véletlenszerűen kiválasztott bájtja lesz, a kulcsfolyam bájtjait ciklikusan álĺıtja elő, amit művelettel ad hozzá a nyílt szöveghez.
Az RC4 Gyengeségek: 1 annak a valószínűsége, hogy a második bájt 0 lesz kellene legyen, de 256 2 ez nem így van, mert ez lesz; hasonló a helyzet az első 256 bájttal is 256 megoldás: a kulcs-folyam első 256 bájtját nem használjuk fel a titkosításban a 00 szekvencia gyakrabban fordul elő, mint a 01, 10, 11 szekvencia, ha két olyan kezdeti kulcsértéket használok, amelyek közel állnak egymáshoz további feltörési stratégia válik lehetségessé: related keys attack
Az RC4, inicializálási szakasz void rc4_init(unsigned char *key, unsigned int key_length) { for (i = 0; i < 256; i++) S[i] = i; } for (i = j = 0; i < 256; i++) { j = (j + key[i % key_length] + S[i]) & 255; swap(s, i, j); } i = j = 0; a key tömb a kulcs bájtjait tartalmazza az i, j értékek és az S tömb globális, kezdetben megegyezik az identitás permutációval a swap függvény felcseréli a megfelelő indexű elemeket az S tömbből A 256-al történő maradékos osztás 255-tel való & (AND) művelettel helyettesíthető
Az RC4, kulcsfolyam-generálási fázis unsigned char rc4_output() { i = (i + 1) & 255; j = (j + S[i]) & 255; swap(s, i, j); } return S[(S[i] + S[j]) & 255]; minden lépésben sor kerül a megfelelő elemek felcserélésére és kiválasztására
Visszacsatolt, léptető regiszteres titkosítás, linear feedback shift register - LFSR Számos rendszer esetében használták, használják pl.: DVD titkosítása esetén a rendszer neve CSS (content scrambling system) GSM titkosítás esetén a rendszer neve A51, A52 Blutooth titkosítás esetén a rendszer neve E0 hardvare szintjén könnyedén és hatékonyan implementálható a kulcsfolyamot egy lineáris összefüggés alapján számolják, kiindulva a key = (z m,..., z 2, z 1) értékekből: z i+m = c 0z i + c 1z i+1 +... c m 1z i+m 1 (mod 2), ahol i 1 és c 0, c 1,..., c m 1 rögzített konstansok a c 0, c 1,..., c m 1 konstansok helyes választása esetén a kulcsfolyam periódusa maximális lesz: 2 m 1.
Az LFSR támadása, feltörhetősége Példa 16 bites LFSR: z i+16 = z i + z i+2 + z i+3 + z i+5 (mod 2), Ha key = (z 16, z 15,..., z 1) = 1000 0111 0011 0101, akkor a kulcsfolyam első bitjei a pirossal kijelölt értékek lesznek: 1100 0011 1001 1010 1110 0001 1100 1101 1111 0000 1110 0110 0111 1000 0111 0011 0011 1100 0011 1001 1001 1110 0001 1100 2 16 1 lesz a generátor periódusa
Az LFSR támadása, feltörhetősége az alkalmazott műveletek lineárisak, ezért a rendszer feltörhető, ha ismerjük hogy a (x 1, x 2,..., x n) nyílt szövegnek (y 1, y 2,..., y n) a rejtjele, illetve ismerjük az m értékét akkor meghatározható az alkalmazott lineáris összefüggés meghatározzuk: (x 1, x 2,..., x n) (y 1, y 2,..., y n) (z 1, z 2,..., z n) ha n 2m, akkor a támadó megtudja határozni a (c 0, c 1,..., c m 1) értékeket a következő módon (következő oldal):
Az LFSR támadása, feltörhetősége feĺırható: (z m+1, z m+2,..., z 2m ) = (c 0, c 1,..., c m 1 ) z 1 z 2... z m z 2 z 3... z m+1... z m z m+1... z 2m 1 és meghatározható: (c 0, c 1,..., c m 1 ) = (z m+1, z m+2,..., z 2m ) z 1 z 2... z m z 2 z 3... z m+1... z m z m+1... z 2m 1 1
Az LFSR támadása, feltörhetősége Feltételezzük, hogy a támadó rendelkezik a következő titkosított bit-szekvenciával: és a bit-szekvencia titkosított értékével: 1 1 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 1 0 0 A fenti két bitsorozat xor-olásával megtudja határozni a kulcsfolyam első bitjeit: 0 0 0 1 0 1 1 0 1 0 Tudva azt is, hogy 5-bites LFSR-t alkalmaztak a titkosítás során, a következő eljárással a támadó megtudja határozni a kulcsfolyamot kigeneráló lineáris összefüggést: (0, 1, 0, 0, 0) = (c 0, c 1, c 2, c 3, c 4 ) 0 1 0 1 1 1 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 0
Az LFSR támadása, feltörhetősége Meghatározható: ahonnan: 0 1 0 1 1 1 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 0 1 (c 0, c 1, c 2, c 3, c 4 ) = (0, 1, 0, 0, 0) = 1 1 1 0 0 1 0 1 1 1 1 1 1 0 1 0 1 0 0 1 0 1 1 1 0 1 1 1 0 0 1 0 1 1 1 1 1 1 0 1 0 1 0 0 1 0 1 1 1 0 = (1, 0, 1, 1, 1) Tehát a kulcsfolyam kigenerálásához alkalmazott lineáris összefüggés a következő: z i+5 = (z i + z i+2 + z i+3 + z i+4 ) (mod 2).
Az A51 a GSM technológiában használják, hardware szinten szokták implementálni, három léptető regiszterrel dolgozik, X, Y, Z-vel amelyek összesen 64 bitet kezelnek az X 19 bites: (x 0, x 1,..., x 18), az Y 22 bites: (y 0, y 1,..., y 21), a Z 23 bites: (z 0, z 1,..., z 22), a kulcs 64 bites, amellyel feltöltik a három regisztert a következő belső majoráló/növelő függvényt számoljuk ki minden óraimpulzusban: { 0, ha a három bit között több a 0-ás m = maj(x 8, y 10, z 10) = 1, ha a három bit között több az 1-es ha x 8 = m, akkor X-et léptetjük ha y 10 = m, akkor az Y-t léptetjük ha z 10 = m, akkor az Z-t léptetjük
Az A51 A kulcsfolyam előálĺıtása a következőképpen történik: X léptetése: Y léptetése: Z léptetése: t = x 13 x 16 x 17 x 18 x i = x i 1, i = 18, 17,... 1 re x 0 = t t = y 20 y 21 y i = y i 1, i = 21, 20,..., 1 re y 0 = t t = z 7 z 20 z 21 z 22 z i = z i 1, i = 22, 21,..., 1 re z 0 = t a kulcsfolyam aktuális s bitje: s = x 18 y 21 z 22
A Salsa20 a 2008-ban lezáruló estream projekthez beküldött folyam-titkosító, tervezője D.J.Bernstein; teljesen publikus: http://cr.yp.to/djb.html, úgy hardver, mint softver implementációja ismert, feltörési módszerek: az eddigi leghatásosabb módszer az összes kulcs kipróbálásának módszere, hatékonysága: 643 Mb/sec, 6-szor gyorsabb mint az RC4.
A Salsa20 a kulcs mérete: 128 vagy 256-bit hossz, ha a kulcs mérete 128 bit, akkor a következő a specifikáció: a k kulcs mellett a bemenetnek meg kell adni egy 64 bites r nonce (number use at once) értéket, ahol a összefűzést jelent: Salsa20 : {0, 1} 128 {0, 1} 64 {0, 1} n Salsa20(k, r) = H(k r 0)) H(k r 1)..., A H függvényt a k r i bemeneten hajtjuk végre, ahol az i számláló értékét 64 biten tároljuk, A H függvény a 32 bájtból (256 bit) 64 bájtot álĺıt elő: (k r i) (t 0 k t 1 r i t 2 k t 3), melyen 10-szer alkalmaz egy invertálható h : {0, 1} 64 {0, 1} 64 függvényt. a H függvény kimenetét 4 bájtonként (mod 2 32 ) szerinti összeadást végezve adjuk hozzá a nyílt szöveghez.
Valós rendszerek biztonsági problémái Közvetett vagy közvetlen módon felmerül a kulcs többszöri felhasználása: Venona projekt: célja az orosz titkosszolgálat üzeneteinek a megfejtése volt, 1943-1980 között. Az amerikai hadsereg kb. 3000 üzenetet fejtett meg ebben a periódusban mert többször birtokába került két-két olyan titkosított érték, ahol mindkét esetben ugyanazt a kulcsot használták a titkosítás során. MS-PPTP (windows NT): szerver és kliensek közti kommunikáció esete, volt egy megosztott titkos kulcs, ahol a szerver és kliens oldalon is ugyanazzal a kulcs-folyammal végezték a titkosítást a kulcs többszöri felhasználása. Megoldás: kulcspár használata, amelyet a szerver és a kliens is ismer, egyik érték a szerver, másik érték a kliens oldali titkosításhoz.
Valós rendszerek biztonsági problémái Közvetett vagy közvetlen módon felmerül a kulcs többszöri felhasználása: 802.11b WEP, több probléma, az egyik: egy 24 bites inicializáló érték (IV) alkalmazása lehetővé tette a WEP feltörését, mert túl kicsi volt az IV bithossza: 2 24 16 millio IV érték után az IV-k ciklikusan ismétlődtek.