390 likes | 885 Views
Klassikaline krüptograafia. Ahto Buldas. Krüptosüsteem. P - lõplik avatekstide hulk C - lõplik krüptogrammide hulk K - lõplik võtmeruum(võimalike võtmete hulk) Iga K K korral on olemas efektiivselt arvutatavad funktsioonid E K : P C ja D K : C P ,
E N D
Klassikaline krüptograafia Ahto Buldas
Krüptosüsteem • P - lõplik avatekstide hulk • C - lõplik krüptogrammide hulk • K - lõplik võtmeruum(võimalike võtmete hulk) • Iga KK korral on olemas efektiivselt arvutatavad funktsioonid EK:PC ja DK:CP, mis iga xP korral rahuldavad samasust: DK(EK(x)) = x.
Krüpteeritud andmeedastus Carol (ründaja) x y y x Alice E D Bob K K Turvaline kanal Võtmeallikas Ründajal ei tohi olla võimalik krüptogrammi y põhjal tuletada avateksti x või võtit K.
Pikkade sõnumite edastus: • Avatekst X = x1x2…xn • Iga i=1…n korral arvuta yi = EK(xi) • Krüptogramm Y = y1y2…yn
Krüpteerimisfunktsiooni omadusi • Krüpteerimisfunktsioon EK peab olema iga K väärtuse korral injektiivne, st seosest y = EK(x) = EK(x’) järeldub x = x’. • Vastasel korral ei teaks Bob, millise sõnumi (kas x või x’) krüptogramm y on. • Kui P=C, siis krüpteerimisfunktsioon EK on hulga P permutatsioon.
Nihutusšiffer(I) • Tähestiku tsükliline nihe mingi kindla väärtuse võrra. • Näiteks Caresari šifris kolme võrra: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z D E F G H I J K L M N O P Q R S T U V W X Y Z A B C • NB! Enne erinevat tüüpi šifrite käsitlemist tutvume modulaararitmeetikaga.
Kongruentsus mooduli m järgi • Definitsioon. Täisarve a ja b nimetatakse kongruentseteks mooduli (posit. täisarvu) m järgi ja kirjutatakse ab (mod m), kui täisarv ba jagub jäägita arvuga m (tähistakse m|ba). • Igale täisarvule a vastab parajasti üks arv a’ hulgast Zm ={x Z | 0x<m}, nii et aa’ (mod m). Seda arvu tähistatakse a’ = a mod m.
Arvuvald Zm • Hulgas Zm saab defineerida liitmise ja korrutamise operatsioonid järgmiselt: ab = (a + b) mod m, ab = (ab) mod m. • Näiteks arvuvallas Z3: 2 2 = 2 2 = 1, 1 2 = 0, ja arvuvallas Z5: 2 3 = 0, 3 3 = 1 = 3 2 ja 3 4 = 2.
Tavatehete omaduste ülekantavus arvuvalda Zm • Kõigi täisarvude a ja b korral kehtivad seosed: (a mod m) mod m = (a mod m), (a mod m) (b mod m) = (a + b) mod m, (a mod m) (b mod m) = (ab) mod m. • Sellest järeldub operatsioonidel ja on samasugused omadused kui tavalisel liitmisel ja korrutamisel, mistõttu neid võib tähistada tavaliste tehtemärkidega: +
Arvuvalla Zm “tavalised” omadused: • Kommutatiivsus: a + b = b + a, ab = ba • Assotsiatiivsus: (a+b)+c=a+(b+c), (ab)c=a(bc) • Nullelement: a + 0 = 0 + a = a, a 0 = 0 a = 0 • Ühikelement: a 1 = 1 a = a • Distributiivsus: (a+b)c=ac+bc,
Arvuvalla Zm “erilised”omadused: • Elemendi a vastandelement (-a) on ma, sest a + (ma) = m 0 (mod m). • Nullitegurid: kahe mittenullise elemendi korrutis võib tulla null. Näiteks hulgas Z6 on 2 3 = 0.
Nihutusšiffer(II) • P = C = K = Z26 EK(x) = (x + K) mod 26 DK(y) = (yK) mod 26 = (y + (26 K)) mod 26 • Kui K=3, siis saame Caesari šifri. • Teksti krüpteerimiseks asendatakse tähed arvudega 0 … 25: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Krüpteerimisnäide • Olgu meil sõnum: “Kohtume kell kaks” • Kodeerime sõnumi: K O H T U M E K E L L K A K S 10 14 7 19 20 12 4 10 4 11 11 10 0 10 18 • Kasutame võtit K=7: 17 21 14 0 1 19 11 17 11 18 18 17 7 17 25 R V O A B T L R L S S R H R Z
Dekrüpteerimisnäide • Krüpteerimiseks leiame K pöördväärtuse 26 K = 26 7 = 19 ja kasutame sama võtet: • Krüptogrammi RVOABTLRLSSRHRZ iga tähe y koodi teisendame eeskirjaga x = (y + (26 K)) mod 26 = (y + 19) mod 26. • Näiteks esimene täht R(17) teisendub täheks (17+19) mod 26 = 36 mod 26 = 10, st K.
Nihutusšifri murdmine • Oletame, et edastati strateegilise tähtsusega krüptogramm: Y= NDVVLGRQNDUYDVHG. • Proovime järjest läbi kõik võtmed alates võtmest K=1 ja üritame dekrüpteerida, kuni saame loomuliku keele teksti: K=1 (-K=25): MCUUKFQPMCTXCUGF K=2 (-K=24): LBTTJEPOLBSWBTFE K=3 (-K=23): KASSIDONKARVASED Seega: K=3 ja X= KASSID ON KARVASED
Märkused ja järeldus • Nihutusšifrit on kerge murda, sest õige võtme leidmiseks on vaja keskmiselt läbi proovida 26/2=13 võtmekandidaati. • Arvuti murrab nihutusšifri mõne hetkega, kui tal on kasutada vastava loomuliku keele sõnastik.
Afiinne šiffer • P=C=Z26 • Iga võti K on paar (a,b), kus a,bZ26 • Krüpteerimine: E(x) = ax + b mod 26 • Küsimus: Kas iga võtme korral on funktsioon E injektiivne? • Vastus on eitav: kui a=13 ja b=0, siis x1=0 ja x2=2 annavad sama krüptogrammi 0, sest E(2) = 2 13 mod 26 = 0 = 0 13 mod 26 = E(0)
Afiinse šifri pööratavus • Võrrand ax + b y (mod 26) on samaväärne võrrandiga axy b (mod 26). • Nihketeisendus on injektiivne. Seega on meie küsimus samaväärne küsimusega, millal on elemendil a arvuvallas Z26 olemas pöördelement a-1, nii et a-1(a x) = x, iga xZ26 korral, st a-1a = 1.
Vastuse annab arvuteooria • Definitsioon. Positiivsete täisarvude x ja y suurimaks ühisteguriks süt(x,y) nimetatakse suurimat arvu, millega mõlemad arvud x ja y jaguvad jäägita, st süt(x,y) = max{ d: d|x ja d|y }. Teoreem. Element aZm on pööratav parajasti siis, kui süt(a,m) = 1.
Tõestus: • Kui süt(a,m) = 1 ja ax1ax2(mod m), siis ax1ax2 = a(x1x2) jagub arvuga m. Seega m=m1m2, kus m1|a ja m2|(x1x2). Arv m1 on järelikult arvude m ja a ühine tegur, mistõttu m1süt(a,m) = 1. Seega m1=1 ja järelikult x1x2 0 (mod m) ja x1 x2(mod m). • Kui z=süt(a,m) > 1, siis a=a1z ja m=zm1. Võtame x1=m1 ja x2=0. Saame ax1 = am1 = (a1z)m1 = a1(zm1) = a1m 0 (mod m) ax2 = a 0 0 (mod m), mis tähendabki, et a ei ole pööratav.
Kui palju on pööratavaid elemente? • Tähistame hulga Zm pööratavate elementide arvu (m) – nn. Euleri funktsioon. • Algarv: positiivne ühest suurem täisarv, mis jagub vaid 1 ja iseendaga: 2, 3, 5, 7, 11, 13, ... • Aritmeetika põhiteoreem: iga posit. täisarv m on ühesel viisil esitatav algarvude astmete korrutisena: m = p1e1 … pses. • Näiteks 60 = 22 31 51, 56 = 23 71 ja 26 = 21 131
Euleri teoreem • Teoreem (Euler). Kui m = p1e1 … pses, siis (m) = (p1e1 p1e11)... (pses pses1). Näiteks (26) = (21) (13 1) = 12 ja (60) = (42) (3 1) (5 1) = 16. Järeldus. Afiinse šifri erinevate võimalike võtmete arv on 26(26) = 2612 = 312.
Üldine afiinne šiffer • P=C=Zm • K = {(a,b): a,bZm ja süt(a,m)=1} • Ea,b(x) = ax + b mod m • Da,b(y) = a-1(yb) mod m Küsimus: Kuidas leida pöördelementi a-1?
Eukleidese algoritm • Põhineb seostel: Kui a=b, siis süt(a,b)=a Kui a>b, siis süt(a,b)= süt(ab,b) Kui a<b, siis süt(a,b)= süt(a,ba) • Esitab suurima ühisteguri lineaarkombinatsioonina süt(a,b) = a + b, kus ja on (mitte tingimata positiivsed) täisarvud.
Näide a=26 ja b=7 süt(26,7) = süt(a,b) = süt(a-b,b) = süt(19,7) = süt(a-2b,b) = süt(12,7) = süt(a-3b,b) = süt(5,7) = süt(a-3b,b-(a-3b)) = süt(a-3b, -a+4b) = süt(5,2) = süt((a-3b)-(-a+4b),-a+4b)= süt(2a-7b, -a+4b)= süt(3,2) = süt((2a-7b)-(-a+4b),-a+4b)= süt(3a-11b, -a+4b)= süt(1,2) = süt(3a-11b,(-a+4b)-(3a-11b))= süt(3a-11b,-4a+15b)= süt(1,1) = 1 = -4a + 15b
Pöördväärtuse leidmise idee • Teoreem. Kui a + m = 1, siis = a-1 arvuvallas Zm. Tõestus. a mod m = (1 m) mod m = 1. Järeldus. Võrdusest 1 = -4 26 + 15 7 järeldub, et 7-1 = 15 arvuvallas Z26.
Vigenere šiffer • P=C=K=(Z26)m • Kui K=(k1,…,km), siis • EK(x1,…,xm) = (x1+ k1,…, xm+ km) • DK(y1,…,ym) = (y1k1,…, ymkm)
Arvutusnäide Näide. Olgu K=KALAD ja Y= VIGENEREONMURTAV KALADKALADKALADK siis saame FIREQORPOQWUCTDF • Vigenere šifris on erinevate võtmete arv 26m, mis piisavalt suure m korral välistab võtmete läbiproovimise. Kui m=5, siis |K|107 , mis välistab käsitsi proovimise, kuid mitte arvuti abiga teostatud proovimise!
Hilli šiffer (1929) • P=C=(Z26)m • Idee: Krüptogrammi Y iga tähe kood on lineaarkombinatsioon võtmetähtedest ja teistest tähtedest m-elemendilises plokis. • X=(x1…xm), Y=(y1…ym) ja K- mm maatriks Y=XK • NB! Vignere šifri m-tähelises plokis ei mõjuta teised tähed ega võtmeelemendid ühegi tähe koodi.
Hilli- ja Vigenere šifrite võrdlus • Vigenere šifri (vasakul) iga väljund yi sõltub ainult vastavast sisendist xi. • Hilli šifri (paremal) iga väljund yi sõltub kõikidest sisenditest x1,…, xm. x1 x2 … xm x1 x2 … xm E k1 k2 … km E E E - lineaarteisendus K y1 y2 … ym y1 y2 … ym
Hilli šiffer: näide • Olgu m=2, X=(x1,x2), Y=(y1,y2) ja K-maatriks: K = Siis kehtivad lineaarvõrrandid: y1 = 11x1 + 3x2 y2 = 8x1 + 7x2 11 83 7
Hilli šifri pööratavus • Tuleb leida maatriksi K pöördmaatriks K-1. Kui y=xK , siis yK-1 = (xK)K-1 = x(KK-1 ) = xI = x. • Võti K peab olema pööratav maatriks. Pööratavaid maatrikseid on suurusjärgus 26m(m-1). Ka suhteliselt väikeste m-de korral on võtmete läbiproovimine suhteliselt raske isegi arvutiga.
Permutatsioonšiffer • Hilli šifri erijuht. • P=C=(Z26)m • K - hulga {1…m} permutatsioonide hulk Sm. • E(x1,…,xm) = (x(1),…,x(m)) = (y1,..., ym) • D(y1,…,ym) = (x1,…,xm) • Saab esitada lineaarteisendusena, kui permutatsioon esitada permutatsiooni-maatriksina K: (x1,…,xm) K = (x(1),…,x(m))
Näide: permutatsioon ja pöördpermutatsioon 1 2 3 4 5 6 6 2 5 1 4 3 • Permutatsioon = • Vastav pöördpermutatsioon -1 = • Ja vastav permutatsioonimaatriks: 1 2 3 4 5 6 4 2 6 5 3 1 0 0 0 1 0 00 1 0 0 0 00 0 0 0 0 10 0 0 0 1 00 0 1 0 0 01 0 0 0 0 0
Näide: permutatsioonšifri kasutamine: 1 2 3 4 5 6 6 2 5 1 4 3 • Olgu = ja sõnum JAHPII LUPART OLIRON GIJUHT IAIJPH TURLAP NLOORI TIHGUJ • Erinevaid permutatsioone on |Sm|=m!, mis kasvab küllalt kiiresti. • Permutatsioonšiffer on ka käsitsi kasutatav.
Jadašifrid • Genereeritakse võtmejada z0, z1, … • Teisendadatske sisendjada X: x0, x1, … Y= y0y1 … = Ez0(x0) Ez1(x1) … • Võtmejada saamise eeskiri: zi = fi(K, x0, x1,…, xi-1) Jadašifrit nimetatakse sünkroonseks, kui võtmejada element ei sõltu sisenditest (avatekstist).
Vigenere šiffer kui jadašiffer • Vigenere šiffer on sünkroonne jadašiffer, kui defineerida zi = fi(k0,…,km-1) = ki mod m, ja yi = xi + zi mod 26. • Jadašifreid kirjeldatakse enamasti kaheelemendilise tähestiku Z2={0,1} baasil. See võimaldab nende efektiivset aparatuurset realiseerimist.
Lineaarsed nihkeregistrid • Jadašifrid, kus kasutatakse lineaarset seoseid: zi = ki, kui i=0…m-1 ja zi+m = c0zi + c1zi+1+…+cm-1zi+m-1 mod 2. ci+m-1 c0 c1 zi zi+m-1 zi+m zi+1 ...
Lineaarne nihkeregister: näide • zi+4 = zi + zi+1 mod 2, st c0=c1=1 ja c2=c3=0. • Võti (0,0,0,0) annab nullise väljundjada ja ei ole loomulikult krüpteerimiseks sobilik. • Võti K=(k0,k1,k2,k3)=(1,0,0,0) annab väljundjada: 1 0 0 0 1 0 0 1 1 0 1 0 1 1 1 … zi zi+1 zi+2 zi+3 zi+4