Kriptográfia és Információbiztonság 8. előadás Sapientia Egyetem, Matematika-Informatika Tanszék Marosvásárhely, Románia mgyongyi@ms.sapientia.ro 2018
Miről volt szó az elmúlt előadáson? az RSA titkosító rendszer (baby, textbook változat): specifikáció, példa RSA, biztonsági problémák az RSA-OAEP rendszer RSA a gyakorlatban valószínűségi prímtesztek az RSA gyorsítása
Miről lesz szó? RSA biztonsági problémák: az e megválasztása faktorizációhoz kapcsolódó problémák a Rabin titkosító, az SAEP rendszer a diszkrét logaritmus probléma a Diffie-Hellman kulcscsere
Az e megválasztása: kínai maradéktétel alkalmazása a titkosítás idejének csökkentése úgy oldható meg, ha kis e exponenst választok, mennyire kis e értéket választhatok: 3, 7, 65537? Az e = 3 választás esetén, ha ugyanazt a nyílt-szöveget különböző modulus értékekkel: n 1, n 2, n 3, elküldjük három különböző félnek, akkor a rendszer feltörhető. Feltételezve, hogy a nr értékét titkosítottuk és a c 1, c 2, c 3 títkosított értékeket kaptuk, akkor a kínai maradéktételt alkalmazva, a következő lineáris kongruencia rendszeren, majd az eredményből köbgyököt vonva megtudjuk határozni a nr értékét: x = nr 3 (mod n 1), azaz x = c 1 (mod n 1) x = nr 3 (mod n 2), azaz x = c 2 (mod n 2) x = nr 3 (mod n 3), azaz x = c 3 (mod n 3)
Az e megválasztása: kínai maradéktétel alkalmazása Az x értékét a következő képlet adja (kínai maradéktétel alapján): x = (M1 1 M1 c 1 + M2 1 M2 c 2 + M3 1 M3 c 3)(modM) M = n 1 n 2 n 3 M1 = M/n 1, M2 = M/n 2, M3 = M/n 3 M1 M1 1 = 1 (mod n 1) M2 M2 1 = 1 (mod n 2) M3 M3 1 = 1 (mod n 3)
A köbgyököt meghatározó közeĺıtő algoritmus Newton közeĺıtő módszerének az alkalmazása ha megakarom határozni 3 nr, értékét, akkor a következő képlet alkalmazható, amíg x n és x n+1 nem lesznek egyformák : az eredmény x n. x 0 = 1 x n+1 = (2 x n + nr/(x n x n))/3
Faktorizációhoz kapcsolódó problémák osztási próba módszere (trial division), Fermat-féle faktorizációs módszer, Pollard ρ féle faktorizációs módszer... Az osztási próba módszere: vizsgáljuk a kis prímekkel való oszthatóságot, ha két azonos nagyságrendű prímszám szorzata a vizsgált n összetett szám, akkora közeĺıtőleg n osztást kell kipróbálnunk a sikeres faktorizáláshoz, akkor használjuk, mikor egy összetett szám kis nagyságrendű prímosztóit kell megkeresni.
Fermat-féle faktorizációs módszer Ha a p és a q prímek közel vannak egymáshoz, akkor az n faktorizálása lehetséges a Fermat-féle faktorizációs módszerrel. Feltételezzük, hogy az n = a 2 b 2, ahol a, b tetszőleges egész számok. Ekkor p = a b, q = a + b. Az algoritmus a következő: fermatfaktor(n) a = ceil(sqrt(n)); b1 = a * a - n; while (negyzetsz(b1) == 0) do a = a + 1; b1 = a * a - n; return (a + sqrt(b1)); A negyzetsz függvény megvizsgálja, hogy a paraméterként kapott szám négyzetszám-e, 0-t térít vissza, ha a paramétere nem négyzetszám.
Fermat-féle faktorizáció, példa Határozzuk meg n = 6283 két prímosztóját, a Fermat-féle faktorizációs módszerrel: n a b = a 2 n négyzetszám-e? 80 80 117 nem 81 278 nem 82 441 igen 441 = 21 p = 82 21 = 61, q = 82 + 21 = 103
A Rabin titkosító rendszer 1979-ben publikálta Michael O. Rabin, azt a lehetőséget vizsgálja, amikor az RSA titkosítás során az e = 2 értéket választjuk ha e = 2, akkor nem létezik inverz, mert phi mindig páros, ezért lnko(e, phi) 1 a visszafejtést más aritmetikai műveletek határozzák meg Gen, a kulcs-generáló algoritmus: (p, q) R Gen(1 k ), ahol p q 3 (mod 4), n = p q, p k = (n), s k = (p, q), Enc (n) a rejtjelező algoritmus: c m 2 Dec (p,q) a visszafejtő algoritmus: m c 1 2 (mod n), (mod n).
A Rabin titkosító, biztonság A visszafejtés nem egyértelmű: 4 lehetséges visszafejtett szöveg közül kell kiválsztani a megfelelőt, a visszafejtés során negyzetgyököt számolunk, alkalmazzuk a kínai maradéktételt: m p = c (p+1)/4 (mod p), m q = c (q+1)/4 (mod q), meghatározzuk p 1 -t, azaz p inverzét (mod q) szerint meghatározzuk q 1 -t, azaz q inverzét (mod p) szerint m 1 = (p 1 p m q + q 1 q m p) (mod n), m 2 = (p 1 p m q q 1 q m p) (mod n) a 4 megoldás: m 1, m 2, m 3 = n m 1, m 4 = n m 2
A Rabin titkosító rendszer, példa legyen p = 11, és q = 31 n = 341, legyen m = 42, a nyílt-szöveg, titkosítás: c = 42 2 = 59 (mod 341), visszafejtés: 59 (11+1)/4 = 9 (mod 11), 59 (31+1)/4 = 20 (mod 31), meghatározzuk 31 inverzét mod 11 szerint: 31 1 = 5, azaz fennáll: 31 5 = 1 (mod 11). meghatározzuk 11 inverzét 31 szerint: 11 1 = 17, azaz fennáll 11 17 = 1 (mod 31) m 1 = (31 31 1 9 + 11 11 1 20) = 20 (mod 341), m 2 = (31 31 1 9 11 11 1 20) = 42 (mod 341), m 3 = 341 m 1 = 321, m 4 = 341 m 2 = 299,
A Rabin titkosító, biztonság A visszafejtés fenti képletét azért lehet alkalmazni, mert p q 3 (mod 4), sokkal hatékonyabb, mint az RSA, megmutatható, hogy a Rabin rendszer feltörése ugyanolyan nehézségű, mint a fakorizációs probléma, ez nem igaz a textbook RSA-ra, az RSA-nál vett feltörési stratégiák egy része itt is alkalmazható, újabb változata (2001, Boneh) ellenáll a CCA támadásnak (az egyik legerősebb támadási mód), illetve egyértelmű a visszafejtése hasonlóan az RSA-hoz kulcscsere és hitelesítési protokollokban használják.
Az SAEP rendszer a rendszer alkalmaz egy hash függvényt, legyen ez: H : {0, 1} lr {0, 1} l H, M = {0, 1} l M, C = {0, 1} l H +l r, K = {0, 1} l H +l r, l H, l r pozitív egész számok, ahol l M < l H, és k = l H + l r, tipikus értékek: k = 1024, l M = 256, l r = 640, l H = 384 A Gen(1 k ) kulcsgeneráló algoritmus, meghatároz egy (k + 2) bites N = p q számot, ahol az N legfelsőbb helyértékű két bitje 10, p, q pedig két k/2 + 1 bites prímszám, úgy hogy: p q 3 (mod 4), nyilvános kulcs: N és titkos kulcs: (p, q).
Az SAEP rendszer Az ENC N (m) titkosító algoritmus probabilisztikusan, polinomiális időben meghatározza a c rejtjelezett értékét, ahol x = m 0 l H l M, ahol összefűzést jelent, r R {0, 1} lr, y = (x H(r)) r, c = y 2 (mod n). Megjegyzés: y < 2 k < n/2, ez fontos szerepet játszik a visszafejtés során.
Az SAEP rendszer A DEC N (m) visszafejtő algoritmus, polinomiális időben meghatározza az m értéket, ahol a visszafejtés során számos plusz tesztelést is végzünk: ahogy a Rabin visszafejtésnél tettük, meghatározzuk: m p = c (p+1)/4 (mod p), m q = c (q+1)/4 (mod q), ellenőrizzük, hogy fennáll-e: mp 2 = c (mod p) és mq 2 = c (mod q); ha nem akkor visszautasítjuk a kapott c rejtjelezett értéket m 1, m 2, m 3, m 4 értékeket, ezek közül csak kettő lesz kisebb, mint n/2, jelöljük ezeket y 1, y 2-vel, a továbbiakban csak ezekkel dolgozunk
Az SAEP rendszer A DEC N (m) visszafejtő algoritmus, folyatatás: a meghatározott m 1, m 2, m 3, m 4 értékek közül csak kettő lesz kisebb, mint n/2, jelöljük ezeket y 1, y 2-vel, a továbbiakban csak ezekkel dolgozunk feĺırjuk y 1 = v 1 r 1 y 2 = v 2 r 2, ahol v 1, v 2 az y 1, illetve y 2 első l H darab bitje, r 1, r 2 pedig rendre az utolsó l r darab bit meghatározzuk: x 1 = v 1 H(r 1), x 2 = v 2 H(r 2) feĺırjuk: x 1 = m 1 t 1, x 2 = m 2 t 2, ahol m 1, m 2 az x 1 illetve x 2 első l M darab bitje ha t 1, t 2 mindegyike, vagy egyike sem áll csupa nullás bitekből, akkor visszautasítjuk a kapott c értéket az m értékét az az m i adja, ahol t i csupa nullás bitekből áll, i = 1, 2.
A diszkrét logaritmus (DL) probléma Számos kriptorendszer biztonsága alapszik a DL problémán. Az egész számok Z p multiplikatív csoportja esetében, ahol p prímszám a DL probléma a következő: az A, g-alapú diszkrét logaritmusa (mod p) szerint azt jelenti, hogy megkeressük azt az a pozitív egész számot, melyre fennáll: g a A (mod p), ahol g generátor elem (primitív gyök), és g, A Z p. A g szám generátor elem (mod p) szerint, ha g hatványai 1-től, φ(p)-ig, azaz g, g 2, g 3,..., g φ(p), különböző maradékot adnak (mod p) szerint.
Hatványok és generátor elemek Határozzuk meg x n n = 1, 2,... 10-re: (mod 11), értékeit x = 2, 3,... 10-re illetve 2 1 = 2 3 1 = 3 4 1 = 4 5 1 = 5 6 1 = 6 7 1 = 7 8 1 = 8 9 1 = 9 10 1 = 10 2 2 = 4 3 2 = 9 4 2 = 5 5 2 = 3 6 2 = 3 7 2 = 5 8 2 = 9 9 2 = 4 10 2 = 1 2 3 = 8 3 3 = 5 4 3 = 9 5 3 = 4 6 3 = 7 7 3 = 2 8 3 = 6 9 3 = 3 10 3 = 10 2 4 = 5 3 4 = 4 4 4 = 3 5 4 = 9 6 4 = 9 7 4 = 3 8 4 = 4 9 4 = 5 10 4 = 1 2 5 = 10 3 5 = 1 4 5 = 1 5 5 = 1 6 5 = 10 7 5 = 10 8 5 = 10 9 5 = 1 10 5 = 10 2 6 = 9 3 6 = 3 4 6 = 4 5 6 = 5 6 6 = 5 7 6 = 4 8 6 = 3 9 6 = 9 10 6 = 1 2 7 = 7 3 7 = 9 4 7 = 5 5 7 = 3 6 7 = 8 7 7 = 6 8 7 = 2 9 7 = 4 10 7 = 10 2 8 = 3 3 8 = 5 4 8 = 9 5 8 = 4 6 8 = 4 7 8 = 9 8 8 = 5 9 8 = 3 10 8 = 1 2 9 = 6 3 9 = 4 4 9 = 3 5 9 = 9 6 9 = 2 7 9 = 8 8 9 = 7 9 9 = 5 10 9 = 10 2 10 = 1 3 10 = 1 4 10 = 1 5 10 = 1 6 10 = 1 7 10 = 1 8 10 = 1 9 10 = 1 10 10 = 1 Megyjegyzések: a táblázat alapján kijelenthetjük, hogy lesznek olyan x számok, ahol x-nek kisebb hatványértékei is kongruensek lesznek 1-el. ha p egy prímszám, akkor mindig létezik g {1, 2,..., p 1}, amelynek hatványértékei (mod p) szerint előálĺıtják az {1, 2,..., p 1} halmaz elemeit, egy tetszőleges sorrendbe ezeket a g elemeket generátor elemeknek, vagy primitív gyököknek hívjuk
Adott generátor elem meghatározása A p > 2 prímszám és g Z p esetében g akkor és csakis akkor generátor (mod p) szerint, ha g (p 1)/q 1 (mod p), bármely q prímszám esetében, ahol q (p 1). Ha ismert a p 1 prímtényezős felbontása, akkor egyszerű meghatározni a generátor elemet nem hatékony algoritmus. Ha p = 2 q + 1, ahol p, q páratlan prímszámok, akkor g generátor elem (mod p) szerint, ahol g ±1 (mod p), akkor és csakis akkor, ha g q = p 1 (mod p) hatékony algoritmus.
Adott generátor elem meghatározása, példa Legyen p = 47 = 2 23 + 1, p 1 = 46, g = 13 generátor elem? Igen, mert 13 23 = 46 (mod 47). g = 3 generátor elem? Nem, mert 3 23 = 1 (mod 47). Megjegyzések: a p prímszámot biztonságos prímnek (safe prime) hívjuk, ha egyenlő 2 q + 1-el, ahol q is prímszám. biztonságos prímek generálása időigényes
Diffie-Hellman kulcscsere 1976-ban publikálták a szerzők, két távoli egység (számítógép, mobileszköz, stb.) kulcscsere mechanizmusára, hitelesítésére ad megoldást. Feltételezve, hogy a kommunikációban résztvevő két eszköz A és B, akkor a protokoll a következő: 1. A és B megegyeznek a p, k-bites prímszám, és a g generátor elem értékében, 2. az A eszköz a k, p, g ismeretében meghatározza az a, A értékeket, ahol: a {2,..., p 2} véletlen szám, A = g a (mod p), az a értékét titokban tartja, A-t pedig elküldi B-nek.
Diffie-Hellman kulcscsere 3. a B eszköz a k, p, g ismeretében meghatározza a b, B értékeket, ahol: b {2,..., p 2} véletlen szám, B = g b (mod p), a b értékét titokban tartja, B-t pedig elküldi A-nak. 4. az A eszköz a közös K kulcsot a kövekezőképpen határozza meg: K = B a (mod p). 5. a B eszköz a közös K kulcsot a kövekezőképpen határozza meg: Helyesség: K = A b (mod p). K = A b = B a = g ab (mod p).
Diffie-Hellman kulcscsere, példa Legyen p = 47, g = 13, az A eszköz: választja a = 12-t A = g a (mod p) = 9 (mod 47), elküldi Bobnak az A = 9 értéket. a B eszköz: választja b = 34-t B = g b (mod p) = 21 (mod 47), elküldi Alicenak a B = 21 értéket. A: K = B a (mod p) = 21 12 = 16 (mod 47), B: K = A b (mod p) = 9 34 = 16 (mod 47). a közös kulcs: K = 16.