5. Kriptografija ir kriptografijos protokolai: Viešojo rakto kriptografijaskersys/16p/riss/konsp/05...

Post on 01-Feb-2020

4 views 0 download

Transcript of 5. Kriptografija ir kriptografijos protokolai: Viešojo rakto kriptografijaskersys/16p/riss/konsp/05...

Rinktiniai informacijos saugos skyriai

5. Kriptografija ir kriptografijos protokolai:Viešojo rakto kriptografija

2

Paskaitos tikslai

Šioje temoje nagrinėjami klausimai:

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 (angl. plaintext) – pradinis pranešimas (duomenys, informacija), kurį siuntėjas nori perduoti gavėjui.

C: šifruotas tekstas (šifras, angl. ciphertext) – užšifruotas pranešimas (duomenys, informacija), t. y. toks, kurio prasmė paslėpta.

E: šifravimas (angl. encryption) – algoritmas šifruotam tekstui iš pradinio teksto gauti.

D: dešifravimas (angl. decryption) – algoritmas pradiniam tekstui iš šifruoto teksto atstatyti.

K: raktas (angl. key) – šifravimui ir dešifravimui naudojama papildoma informacija, žinoma tik siuntėjui ir gavėjui (viešojo rakto kriptosistemose siuntėjo ir gavėjo raktai skiriasi).

Kriptosistema (kriptografinė sistema, šifras, angl. cryptosystem, cipher) – šifravimo ir dešifravimo sistema, sudaryta iš aukščiau išvardintų dalių (pradinių tekstų aibės, šifruotų tekstų aibės, raktų aibės, šifravimo funkcijos ir dešifravimo funkcijos).

4

Kriptografijos uždaviniai ir priemonės (priminimas)

Slaptumas (konfidencialumas, angl. confidentiality) Šifravimas

Vientisumas (integralumas, angl. integrity) Kriptografinės maišos funkcijos Skaitmeninis parašas

Autentiškumas (tapatumo nustatymas, angl. authenticity) MAC Skaitmeninis parašas

Neišsižadėjimas (angl. nonrepudiation) Skaitmeninis parašas

5

Simetrinės kriptosistemos naudojimas (priminimas)

Pranešimų šaltinis

Šifravimas Dešifravimas Pranešimų gavėjas

Raktų šaltinis

Saugus kanalas

M MC

K

K

M - pradinis pranešimas,C - šifruotas pranešimas,K - slaptasis šifravimo ir dešifravimo raktas.

6

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.

7

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 (angl. Diffie-

Hellman key agreement protocol),

Skaitmeninis parašas (užtikrina vientisumą, autentiškumą, neišsižadėjimą).

8

Pagrindiniai viešojo 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, angl. computationally infeasible) rasti privatųjį raktą.

Viešasis raktas gali būti skelbiamas 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.

9

Viešojo rakto kriptosistemos naudojimas (1): schema

Pranešimų šaltinis

Šifravimas Dešifravimas Pranešimų gavėjas

Privatusis raktas

Viešųjų raktų saugykla

M MC

KPBKVB

M – pradinis pranešimas,C – šifruotas pranešimas,KVB – viešasis pranešimų gavėjo (naudotojo B) raktas,KPB – privatusis pranešimų gavėjo (naudotojo B) raktas.

10

Viešojo rakto kriptosistemos naudojimas (2): raktų generavimas

Tarkime, turime du naudotojus. Pažymėkime juos A (vadinkime Algiu) ir B (Birute).

Pirmiausia kiekvienas naudotojas sukuria savo raktų poras: KVA – viešasis naudotojo A raktas KPA – privatusis naudotojo A raktas KVB – viešasis naudotojo B raktas KPB – privatusis naudotojo B raktas

Viešieji raktai KVA ir KVB talpinami į viešą saugyklą.

11

Viešojo rakto kriptosistemos naudojimas (3): šifravimas

Jei Algis nori perduoti slaptą pranešimą M Birutei, jis randa jos viešąjį raktą saugykloje ir panaudoja jį pranešimui M užšifruoti. Mes galime užrašyti

C = E(M, KVB).

C – gautas užšifruotas pranešimas M. Jis siunčiamas Birutei.

12

Viešojo rakto kriptosistemos naudojimas (4): dešifravimas

Dešifravimui (pradinio pranešimo M gavimui) Birutė naudoja savo privatųjį 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 ir simetrinių kriptosistemų bendras naudojimas

Pagrindinis viešojo rakto kriptosistemų trūkumas, lyginant jas su simetrinėmis kriptosistemomis, yra žymiai mažesnis šifravimo ir dešifravimo greitis.

Todėl jos ne pakeičia simetrines kriptosistemas, o jas papildo. Viešojo rakto ir simetrinės kriptosistemos naudojamos kartu:

Viešojo rakto kriptografija naudojama ryšio užmezgimo metu bendro sesijos rakto sugeneravimui.

Sesijos raktas naudojamas kaip simetrinės kriptosistemos raktas. Visi sesijos duomenys perduodami šifruojant simetrine kriptosistema.

Tokiu principu veikia tokie protokolai, kaip SSL/TLS, SSH ir t.t.

14

Pagrindinės viešojo rakto kriptosistemos

RSA kriptosistema Populiariausias viešojo rakto algoritmas. Ron Rivest, Adi Shamir ir Leonard Adleman paskelbė 1978 metais. Remiasi sveikųjų skaičių faktorizavimo problema.

ElGamal kriptosistema Paskelbta 1984 m. Remiasi diskrečiojo logaritmo problema sveikųjų skaičių aibėje.

Elipsinių kreivių algoritmai Pasiūlyti 1985 m., pradėti plačiai naudoti 2004-2005 m. Remiasi diskrečiojo logaritmo problema elipsinės kreivės taškų

aibėje.

15

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.

16

RSA kriptosistema

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ą).

17

RSA kriptosistemos naudojimas (1): 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.

18

RSA kriptosistemos naudojimas (2): š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.

19

RSA kriptosistemos naudojimo pavyzdys (1): raktų parinkimasRealiose realizacijose naudojami labai dideli skaičiai. Pavyzdyje paprastumo dėlei naudosime mažus skaičius.

Tegul p = 3, q = 11. Dalybos moduliu operaciją žymėsime mod. 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) mod 20 = 1. Tai bus d = 7.

Taigi raktų pora: (3, 33) – viešasis raktas, (7, 33) – privatusis raktas.

20

RSA kriptosistemos naudojimo pavyzdys (2): š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 mod 33 = 5;

Taip mūsų keturioliktoji abėcėlės raidė tampa penktąja.

21

RSA kriptosistemos naudojimo pavyzdys (3): dešifravimas

• Raidei atstovaujantį skaičių 5 pakeliame laipsniu 7:

57 = 78125;• Daliname rezultatą moduliu 33:

78125 mod 33 = 14.

Taip penktoji abėcėlės raidė tampa keturioliktąja.

22

RSA kriptosistema: 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šskaidyti n 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).

23

RSA kriptosistema: 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.

24

Didelių skaičių faktorizavimo pavyzdys: RSA-768 (2009 m.)

RSA-768 = 123018668453011775513049495838496272077285356959533479219732245215172640057263657518745202199786469389956474942774063845925192557326303453731548268507917026122142913461670429214311602221240479274737794080665351419597459856902143413

RSA-768 = 33478071698956898786044169848212690817704794983713768568912431388982883793878002287614711652531743087737814467999489 × 36746043666799590428244633799627952632279158164343087642676032283815739666511279233373417143396810270092798736308917

25

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.

Nebesaugūs pasidarys ir kiti dažniausiai šiuo metu naudojami viešojo rakto kriptografijos algoritmai: 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.

26

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.

27

Diffie–Hellman protokolas: naudojimas

(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.

28

Diffie–Hellman protokolas: naudojimo 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.

29

Diffie–Hellman protokolas: pastabos

Ir Algis, ir Birutė gavo tą patį skaičių s, nes s = gab = gba mod p. Slaptai laikomos reikšmės: a, b ir s = gab = gba mod 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.

30

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.

[Ske13] G. Skersys. Diskrečioji matematika. Mokymo priemonė, Vilnius, 2013 (V dalies 5 skyrius „Kriptografija“), http://www.mif.vu.lt/~skersys/15r/dm/konsp.htm.

[Sta07] V. Stakėnas. Kodai ir šifrai. TEV, Vilnius, 2007.