320 likes | 651 Views
Rinktiniai informacijos saugos skyriai. 7. Kriptografija ir kriptografijos protokolai: Viešojo rakto kriptografija. Paskaitos tikslai. Šioje temoje nagrinėjami klausimai: Viešojo rakto kriptografijos pagrindinės sąvokos. Viešojo rakto kriptosistemų veikimo principai.
E N D
Rinktiniai informacijos saugos skyriai 7. Kriptografija ir kriptografijos protokolai: Viešojo rakto kriptografija
Paskaitos tikslai Šioje temoje nagrinėjami klausimai: Viešojo rakto kriptografijos pagrindinės sąvokos. Viešojo rakto kriptosistemų veikimo principai. Viešojo rakto kriptosistemos pavyzdys: RSA. Diffie–Hellman bendro rakto sudarymo protokolas.
Terminai (priminimas) • M: pradinis (atviras, nešifruotas) tekstas (plaintext) – pradinis pranešimas (duomenys, informacija). • C: šifruotas tekstas (šifras, ciphertext) – užšifruotas pranešimas (duomenys, informacija). • E: šifravimas (cipher) – algoritmas šifruotam tekstui iš pradinio teksto gauti. • D: dešifravimas – algoritmas pradiniam tekstui iš šifruoto teksto atstatyti. • K: raktas (key) – šifravimui (atitinkamai dešifravimui) naudojama papildoma informacija, žinoma tik siuntėjui (atitinkamai gavėjui). • Kriptosistema (kriptografinė sistema, šifras, cryptosystem) – šifravimo ir dešifravimo sistema.
Kriptografijos uždaviniai ir priemonės (priminimas) • Slaptumas (konfidencialumas, confidentiality) • Šifravimas • Vientisumas (integralumas, integrity) • Kriptografinės maišos funkcijos • Skaitmeninis parašas • Autentiškumas (tapatumo nustatymas, authenticity) • MAC • Skaitmeninis parašas • Neišsižadėjimas (nonrepudiation) • Skaitmeninis parašas
Simetrinės kriptografijos trūkumai • Simetrinė kriptografija užtikrina: • Slaptumą (šifravimas), • Vientisumą, autentiškumą (kriptografinės maišos funkcijos). • Trūkumas: • Kad ji tai užtikrintų, siuntėjas ir gavėjas turi turėti tą patį raktą: • Reikia saugaus kanalo raktui perduoti. • Be to, simetrinė kriptografija neužtikrina: • Neišsižadėjimo.
Viešojo rakto kriptografija • 1976 m. Diffie ir Hellman straipsnyje “Naujos kryptys kriptografijoje” (“New Directions in Cryptography”) pasiūlė viešojo rakto kriptografiją: • Viešojo rakto kriptografinės sistemos (užtikrina slaptumą), • Raktų platinimo schemos (užtikrina raktų perdavimą naudojimui simetrinėse kriptosistemose): • Diffie-Hellman susitarimo dėl raktų protokolas (Diffie-Hellman key agreement protocol), • Skaitmeninis parašas (užtikrina vientisumą, autentiškumą, neišsižadėjimą).
Pagrindiniai viešo rakto kriptosistemų principai • Kiekvienas naudotojas turi raktų porą (KV, KP): • KV yra viešasis raktas, skirtas šifravimui, • KP yra privatusis raktas, skirtas dešifravimui, • KV≠ KP, • Juos sieja lygybė: D(E(M,KV),KP)=M kiekvienam pranešimui M. • Žinant viešąjį raktą ir kriptosistemą, praktiškai neįmanoma (skaičiavimų prasme, computationally infeasible) rasti privatųjį raktą. • Viešasis raktas gali būti skalbiamas viešai. • Bet kas gali užšifruoti (pasinaudodamas viešai skelbiamu viešuoju raktu), tik vienas gali dešifruoti (tas, kas žino privatųjį raktą). • Dar vadinama asimetrine kriptografija (asimetrinės kriptosistemos), nes tas, kas gali užšifruoti, negali dešifruoti.
M M C Dešifratorius Pranešimų šaltinis Šifratorius Pranešimų gavėjas KPB KVB Viešųjų raktų saugykla Privatus raktas M- pranešimo atviras tekstas, C- šifruotas pranešimas, KVB – viešas naudotojo B raktas, KPB – privatus naudotojo B raktas. Viešojo rakto kriptosistemos schema
Viešojo rakto kriptosistemos naudojimas: raktų generavimas • Pirmiausia kiekvienas naudotojas sukuria savo raktų poras: • KVA – viešas naudotojo A raktas • KPA – privatus naudotojo A raktas • KVB – viešas naudotojo B raktas • KPB – privatus naudotojo B raktas • Viešieji raktai KVA ir KVB talpinami į viešą saugyklą.
Viešojo rakto kriptosistemos naudojimas: šifravimas • Jei Algis (A) nori perduoti slaptą pranešimą M Birutei (B), jis randa jos viešąjį raktą saugykloje ir pritaiko jį šifruoti pranešimui M. Mes galim užrašyti • C = E(M, KVB). • C – gautas užšifruotas pranešimas M. Jis siunčiamas Birutei.
Viešojo rakto kriptosistemos naudojimas: dešifravimas • Dešifravimui (pradinio pranešimo M gavimui) Birutė naudoja savo privatų raktą KPB: • M = D(C, KPB). • Birutė, norėdama perduoti slaptą pranešimą M Algiui, daro analogiškai, tik šifravimui naudoja Algio viešąjį raktą - KVA.
Viešojo rakto kriptosistemos: pastabos • Viešojo rakto kriptografiniai algoritmai taip pat gali būti naudojami ir pranešimų autentiškumo užtikrinimui. • Šiuo atveju perduodamas pranešimas užšifruojamas siuntėjo privačiuoju raktu (pasirašymas), o dešifruojamas siuntėjo viešuoju raktu (parašo patikrinimas). • Bendraujant dažniausiai reikia ir slaptumo, ir autentiškumo užtikrinimo. • Todėl kiekvienas komunikacijų dalyvis naudoja dvi raktų poras: vieną - šifravimui, o kitą - pasirašymui. Pranešimas pradžioje yra pasirašomas, o po to - užšifruojamas. Tokiu būdu bendrauti gali tik šiuos raktus turintys asmenys. • Pagrindinis viešojo rakto kriptosistemų trūkumas, lyginant jas su slaptojo rakto sistemomis, yra žymiai mažesnis šifravimo ir dešifravimo greitis. • Todėl jos ne pakeičia simetrines kriptosistemas, o jas papildo.
Asimetrinio šifravimo algoritmai • Diffie-Hellman, • Griežtai šnekant, tai nėra šifravimo algoritmas. Tai bendro rakto sudarymo protokolas. • Priskiriamas viešojo rakto kriptografiniams algoritmams. • RSA, • ElGamal, • Elipsinės kreivės, • ...
Vienakryptės funkcijos su landomis • Viešojo rakto kriptosistemos sudaromos, naudojant vienakryptes funkcijas (one-way functions) su landomis (trapdoor): • Vienakryptės funkcijos f reikšmę C=f(M) apskaičiuoti nesunku (tai šifravimas). • Atvirkštinės funkcijos f -1 reikšmę M=f -1(C) apskaičiuoti yra praktiškai neįmanoma (skaičiavimų prasme) (tai dešifravimas). • Nebent žinoma kažkokia papildoma informacija (landa) apie tą atvirkštinę funkciją. • Ta papildoma informacija ir yra privatusis raktas.
RSA sistema • RSA – populiariausias viešojo rakto algoritmas. • Ron Rivest, Adi Shamir ir Leonard Adleman paskelbė 1978 metais. • Naudojama vienakryptė funkcija – kėlimas laipsniu didelio skaičiaus moduliu: f(x) = xe mod n, kur e ir n yra sveikieji skaičiai. • Naudojami dideli skaičiai: • Šiuo metu rekomenduojama naudoti 2048 bitų (617 dešimtainių skaitmenų) ilgio n. • Šio metodo patikimumas pagrįstas didelių skaičių faktorizacijos sudėtingumu (žr. toliau apie saugumą).
RSA sistema • RSA šifravimo raktai veikia abejomis kryptimis. • Galima užšifruoti žinutę viešuoju gavėjo raktu, o dešifruoti gavėjo privačiuoju raktu. Tai naudojama šifravimui. • Galima užšifruoti žinutę privačiuoju siuntėjo raktu, o dešifruoti viešuoju siuntėjo raktu. Tai naudojama skaitmeniniam parašui, kadangi parašo autorius yra vienintelis asmeninio rakto savininkas. Tai garantuoja dokumento autoriaus ar siuntėjo autorystę ir duomenų vientisumą (detaliau žr. temą apie skaitmeninį parašą).
RSA algoritmas: raktų parinkimas • Parenkami du pirminiai skaičiai p ir q. • Apskaičiuojamos sandaugos: • n = p * q, • t = (p - 1) * (q - 1). • Parenkamas skaičius e, 1<e<t, neturintis bendro daliklio su t. Pora (e, n) yra viešasis raktas. • Randamas skaičius d, 1<d<t, toks, kad d * e ≡ 1 mod t. Pora (d, n) yra privatusis raktas.
RSA algoritmas: šifravimas ir dešifravimas • Išeities tekstas suskaidomas blokais M taip, kad 0 < M < n. Tai galima padaryti grupuojant tekstą blokais po k bitų, kur k — didžiausias sveikas skaičius, kuriam 2k<n. • Šifravimas. Apskaičiuoti C = Me mod n. • Dešifravimas. Apskaičiuoti M = Cd mod n.
RSA pavyzdys: raktų parinkimas Realiose realizacijose naudojami labai dideli skaičiai. Pavyzdyje paprastumo dėlei paimsime mažus skaičius. • Tegul p = 3, q = 11. Dalybos moduliu operaciją žymėsime % ženklu. Raktų porą gaunama taip. Apskaičiuojame: • n = 3 *11 = 33; • t = (3 – 1) * (11 – 1) = 20. • Parenkame skaičių e, neturintį bendro daliklio su 20. Tegu tai būna e = 3. • Apskaičiuojame skaičių d tokį, kad (d * 3) % 20 = 1. Tai bus d = 7. • Taigi raktų pora: (3, 33) – viešasis raktas, (7, 33) – privatusis raktas.
RSA pavyzdys: šifravimas Tarkime, mums reikia užšifruoti keturioliktą abėcėlės raidę, kurios kodas 14. • Pakeliame laipsniu 3 skaičių 14: 143 = 2744; • Daliname rezultatą moduliu 33: 2744 % 33 = 5; Taip mūsų keturioliktoji abėcėlės raidė tampa penktąja.
RSA pavyzdys: dešifravimas • Raidei atstovaujantį skaičių 5 pakeliame laipsniu 7: 57 = 78125; • Daliname rezultatą moduliu 33: 78125 % 33 = 14; • Taip penktoji abėcėlės raidė tampa keturioliktąja.
RSA algoritmas: saugumas • Kriptoanalitikas (Zigmas) žino: • Kokia kriptosistema naudojama, • Viešąjį raktą (e,n), • Šifruotą pranešimą C. • Jis nori rasti: • Pranešimą M. • Jis turi išspręsti lygtįC = Me mod n. • Tai praktiškai neįmanoma (skaičiavimų prasme). • Manoma, kad lengviau yra rasti privatųjį raktą (d,n) ir juo naudojantis dešifruoti. • Privatųjį raktą rasti galima tokiu būdu: išskaidytin pirminiais dauginamaisiais p ir q, apskaičiuoti t = (p - 1) * (q - 1), tada nesunkiai rasti d iš lygybės d * e ≡ 1 mod t, ir M = Cd mod n. • Bet išskaidyti n irgi praktiškai neįmanoma (skaičiavimų prasme).
RSA algoritmas: raktų ilgis • Taigi, RSA saugumas remiasi tuo, kad didelių skaičių faktorizavimas (skaidymas dauginamaisiais) yra sunkus uždavinys. • Kuo didesnis skaičius n, tuo saugesnė sistema. • Skaičiaus n dydis dažnai išreiškiamas jį sudarančių bitų skaičiumi (t.y. jo dvejetainio pavidalo ilgiu) arba dešimtainių skaitmenų skaičiumi. • Dabartinis didelių skaičių faktorizavimo rekordas: 2009-12-12 išskaidytas skaičius n, kurio ilgis – 768 bitai (232 dešimtainiai skaitmenys). • Dabar RSA raktuose dažniausiai naudojami 1024 – 2048 bitų (309 – 617 dešimtainių skaitmenų) ilgio n. • Šiuo metu rekomenduojama naudoti 2048 bitų (617 dešimtainių skaitmenų) ilgio n.
Didelių skaičių faktorizavimo pavyzdys: RSA-768 • RSA-768 = 12301866845301177551304949583849627207728535695953347921973224521517264005726365751874520219978646938995647494277406384592519255732630345373154826850791702612214291346167042921431160222124047927473779408066535141959745985 6902143413 • RSA-768 = 33478071698956898786044169848212690817704794983713768568912431388982883793878002287614711652531743087737814467999489 × 36746043666799590428244633799627952632279158164343087642676032283815739666511279233373417143396810270092798736308917
Kvantiniai kompiuteriai ir RSA • Kvantiniame kompiuteryje faktorizavimas nėra sunkus uždavinys. • 1994 m. P. Shor pasiūlė labai greitą faktorizavimo algoritmą kvantiniams kompiuteriams. • Išskaidyti n į p ir q (t. y. įveikti RSA kriptosistemą) kvantiniu kompiuteriu užtruks panašiai tiek laiko, kiek trunka viena RSA šifravimo operacija paprastu kompiuteriu. • Atsiradus kvantiniams kompiuteriams, RSA pasidarys nebesaugus, kad ir koks būtų n ilgis. • Nebesaugios pasidarys ir kitos dažniausiai šiuo metu naudojamos viešojo rakto kriptosistemos: Diffie-Hellman, ElGamal, elipsinių kreivių... • 2009 m. jau buvo pademonstruotas kvantinis kompiuteris, sugebantis vykdyti Shor algoritmą: jis išskaidė 15 į 3 ir 5. • Kas toliau? • Poreikis kurti viešojo rakto kriptosistemas, kurios remtųsi uždaviniais, kurie būtų sunkūs ir kvantiniuose kompiuteriuose.
Diffie–Hellman bendro rakto sudarymo protokolas • Diffie–Hellman bendro rakto sudarymo protokolas (Diffie–Hellman key exchange) yra kriptografinis protokolas, leidžiantis dviem šalims, kurios iki tol nebendravo, sudaryti bendrą slaptąjį raktą, naudojantis nesaugiu ryšio kanalu. • Gautas bendras slaptasis raktas gali būti naudojamas simetrinėje kriptosistemoje tolimesniam ryšiui šifruoti. • Naudojamas TLS, SSH ir kt. protokoluose. • Sukūrė Whitfield Diffie ir Martin Hellman 1976 m.
Diffie–Hellman protokolas: veikimas (iš http://en.wikipedia.org/wiki/Diffie-Hellman) Čia p yra pirminis skaičius, o g yra skaičių moduliu p multiplikatyviosios grupės generatorius.
Diffie–Hellman protokolas: veikimo pavyzdys • Algis ir Birutė susitaria naudoti pirminį skaičių p=23 ir generatorių g=5. • Algis pasirenka slaptą sveikąjį skaičių a=6, tada apskaičiuoja ir nusiunčia Birutei A = ga mod p: • A = 56 mod 23 = 8. • Birutė pasirenka slaptą sveikąjį skaičių b=15, tada apskaičiuoja ir nusiunčia Algiui B = gb mod p: • B = 515 mod 23 = 19. • Algis apskaičiuoja s = Ba mod p: • s = 196 mod 23 = 2. • Birutė apskaičiuoja s = Ab mod p: • s = 815 mod 23 = 2.
Diffie–Hellman protokolas: pastabos • Ir Algis, ir Birutė gavo tą patį skaičių s, nes s = gab = gbamod p. • Slaptai laikomos reikšmės: a, b ir s =gab = gbamod p. • Visos kitos reikšmės – p, g, ga mod p, ir gb mod p – siunčiamos viešai. • Gautas bendras slaptasis raktas s gali būti naudojamas simetrinėje kriptosistemoje tolimesniam ryšiui šifruoti. • Kad ryšys būtų saugus, p turėtų būti sudarytas iš ne mažiau kaip 300 dešimtainių skaitmenų, o a ir b turėtų kiekvienas būti bent 100 dešimtainių skaitmenų ilgio. • Zigmas gali perimti viešai siunčiamus p, g, ga mod p, ir gb mod p, bet jei p, a ir b bus pakankamai dideli, jis negalės rasti a, b ir s. • g gali būti ir nedidelis, praktikoje jis paprastai lygus 2 ar 5.
Diffie–Hellman protokolo naudojimas SSH protokole • SSH protokole naudojamas Diffie–Hellman bendro rakto sudarymo protokolas su šiomis reikšmėmis: • p yra 1024 bitų pirminis skaičius, kurio šešioliktainė išraiška yra tokia: • FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245 E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE65381 FFFFFFFF FFFFFFFF, • g = 2.
Literatūra • [Gol05] D. Gollmann, Computer Security, 2nd edition, John Wiley & Sons, 2005. • [PP07] Charles Pfleeger, Shari Lawrence Pfleeger. Security in Computing, Fourth Edition. Prentice Hall, 2007. • [Ske07] G. Skersys. Diskrečioji matematika. Mokymo priemonė, Vilnius, 2007, http://www.mif.vu.lt/~skersys/09r/dm/konsp.htm (V dalies 5 skyrius „Kriptografija“). • [Sta07] V. Stakėnas. Kodai ir šifrai. TEV, Vilnius, 2007.