1 Šifrování Kryptografie Každý z nás si určitě umí představit situaci, dy je důležité utajit obsah posílané zprávy ta aby ho byl schopen přečíst jen ten omu je určená a nido nepovolaný nebyl schopen zjistit pravý obsah sdělení. V dnešní době se se šifrováním setáváme na aždém rou, ať již jde o šifrování e-mailů, bezpečný přístup webu, nebo vešerou banovní omuniaci a operace s platebními artami. Mohlo by se zdát, že šifrování úzce souvisí jen s moderní eletronicou omuniací, ale má hluboé historicé ořeny. V historii potřeba šifrovat vzniala převážně u vojensé nebo vládní omuniace, ze starověého Řeca je velmi známá Caesarova šifra (substituční šifra). Rozlišujeme dva záladní typy šifrování a to symetricé a asymetricé. Symetricé šifry mají hluboé historicé ořeny, patří mezi ně výše zmiňovaná Caesarova šifra. Naproti tomu nesymetricé šifrování, často nazývané šifrování s veřejným líčem je velice nové odvětví. Symetricé šifry Princip symetricých šifer je v podstatě velice jednoduchý. Obě omuniující strany si zvolí šifrovací / dešifrovací metodu a tajný líč. Pomocí líče pa jedna strana zašifruje zprávu a odešle jí straně druhé, terá jí opět pomocí líče rozšifruje. Mohli bychom to přirovnat sejfu s dobrým zámem, e terému mají líč jen omuniující strany. Princip šifrovací metody je obecně známý, jediné společné tajemství je líč. Uveďme něoli jednoduchých šifrovacích metod: 1. substituce písmen, 2. posunutí písmen, 3. afinní šifra. Substituce písmen Metoda je založená na vytvoření substituční tabuly, tedy aždému znau (písmenu, mezeře) jednoznačně přiřadíme jiný zna. Pomocí taové tabuly pa daný text zašifrujeme i rozšifrujeme. Tedy tajným líčem je celá substituční tabula. U aždé šifrovací metody si musíme položit důležitou otázu: Ja moc je odolná proti rozluštění třetí strnou? U substituce by se na první pohled mohlo zdát, že je odolná. Poud bychom náhodně zoušeli všechny možné substituce nedostaneme se výsledu za pomoci mnoha výonných počítačů ani za deset let. Všech možných substitucí je totiž fatoriál počtu znaů. Budeme-li tedy uvažovat 26 znaů abecedy máme 26! 2 88 možných substitucí. A to jsme do substituce použili jen písmenné znay bez háčů a čáre. Taovému pousu o prolomení šifry říáme úto hrubou silou. Existují i chytřejší útoy, proti terým substituce není odolná. Můžeme totiž analyzovat četnosti písmen případně bigramů nebo trigramů (dvojic, trojic písmen). Statisticé vlastnosti zašifrovaného textu jsou totiž shodné s textem původním. Tedy napřílad nejčastěji se vysytující zna v šifrovaném textu je nejčastěji se vysytujícím znaem v původním textu, terý s velou pravděpodobností bude odpovídat nejčastějšímu znau v daném jazyce. Dále nám mohou pomoci rátá slova, nebo samostatně stojící písmena. Proti taovému útou již substituční šifra odolná není. 1
Tabula 1: Četnosti písmen v česém textu psaném bez háčů a čáre s mezerami písmeno % písmeno % A 6,5 O 6,7 B 1,2 P 1,6 C 2,4 Q 0,1 D 3,1 R 5,2 E 10,7 S 5,0 F 2,3 T 8,7 G 1,3 U 2,1 H 4,3 V 0,8 I 5,6 W 1,6 J 0,1 X 0,1 K 0,3 Y 1,6 L 2,8 Z 0,1 M 2,0-18,2 N 5,8 Tabula 2: Nejčastější bigramy, trigramy a jiné usupení písmen nejčastější digramy nejčastější trigramy nejčastější slova nejčastější začáty slov nejčastější once slov st, ne, se, na, ni, po, le, o, od, ra, pr, ov, ro, je, te pro, pri, pre, ost, sta, ter, eni, ova, te, pra a, v, se, na, je, do, to, pro, ve,, ze, s, o, z, i p, s, n,o, v, z e, i, a, o, y, u Zuste rozšifrovat následující text psaný v češtině bez háčů a čáre zašifrovaný pomocí substituce. Pro usnadnění mezera v šifrovaném textu odpovídá mezeře v původním textu. Pomoci vám mohou tabuly 1 a 2. Posunutí písmen a afinní šifra Jsou založeny na podobném principu a jedná se vlastně o velmi specificé substituce. Jejich výhodou proti substituci je rozsah tajného líče. Zatímco u obecné substituce je to celá tabula u posunutí písmen je tajným líčem jediné číslo, u afinní šifry jsou to dvě čísla. Veliou nevýhodou je jejich malá odolnost proti útoům. Obě metody fungují ta, že písmena v abecedě nějaým způsobem posuneme. K tomu již potřebujeme zavést dva matematicé pojmy. Říáme že celé číslo x je ongruentní s celým číslem y modulo n (přirozené číslo) poud je rozdíl x y dělitelný číslem n. Matematicy to zapisujeme tato x y mod n. Což znamená, že čísla x a y mají stejný zbyte po dělení číslem n. Je-li číslo y {0, 1,..., n 1}, můžeme jej chápat jao zbyte čísla x po dělení číslem n. Druhým pojmem je číselný oruh 2
Číselný oruh Z m se sládá z 1. množiny Z m = {0, 1,..., m 1}, 2. dvou operací + a o terých platí, že pro všechna a, b Z m : (a) a + b c mod m, (c Z m ) (b) a b d mod m, (d Z m ) Navíc jsou obě operace omutativní (a+b = b+a, a b = b a), platí asociativní záony pro obě operace (a + (b + c) = (a + b) + c, a (b c) = (a b) c), číslo nula označíme jao neutrální prve vzhledem e sčítání, protože platí a + 0 = a a číslo 1 je neutrální prve vzhledem násobení (a 1 = a). Vzhledem e sčítání existuje inverzní prve. Což je taový prve b pro terý platí a + b 0 mod m. Je jasné, že taovouto vlastnost má prve m a. Naopa inverzní prve vzhledem násobení nemusí existovat. Nyní si můžeme na příladu anglicé abecedy předvést ja funguje posunutí písmen a afinní šifra. Písmena očíslujeme od 0, tedy A = 0, B = 1,..., Z = 25. U metody posunutí písmen zvolíme tajný líč {0,..., 25} a místo písmena s číslem n budeme do šifrovaného textu psát písmeno s číslem m a písmeno očíslované číslem m rozšifrujeme jao písmeno s číslem n tato: n m n + mod 26, m Z 26, m n m mod 26, n Z 26. U afinní šifry zvolíme jao tajný líč dvojici čísel = (a, b). a, b {0,..., 25} a číslo a volíme nesoudělné s 26, tato podmína je nutná pro existenci inverzního prvu vzhledem násobení číslu a v číselném oruhu Z 26 (označme jej a 1 ), terý budeme potřebovat pro dešifrování. Schéma je velice podobné jao u posunutí písmen, místo písmena s číslem n budeme do šifrovaného textu psát písmeno očíslované číslem m a písmeno s číslem m rozšifrujeme ja písmeno s číslem n tato: n m a n + b mod 26, m Z 26, m n a 1 (m b) mod 26, n Z 26. Samozřejmě existují daleo rafinovanější symetricé šifry napřílad AES (Advanced Encryption Standard) používané v dnešní době. U aždé symetricé šifry musíme na počátu vyřešit problém ja si předat tajný líč, aby nepadl do ruou třetí straně. Dlouho nioho ani nenapadlo, že je možné, sdělit si tajný líč veřejně. S nápadem ja to provést přišli v roce 1976 Whitfield Diffie, Martin Hellman a Ralph Merel, teří tím položili zálady asymetricého šifrování. Asymetricé šifrování Je často nazýváno šifrování s veřejným líčem, což velmi dobře vystihuje podstatu věci. Na rozdíl od symetricé šifry je známá ja šifrovací metoda, ta i veřejná část líče. Na jednoduchém schématu 1 popišme, ja taový princip může fungovat. Pojmenujme si omuniující strany Alice a Bob. Bob vybere veřejný pub a tajný pr líč. Veřejnou část líče zveřejní, taže ho znají všichni (i Alice). Alice pomocí veřejného líče zašifruje svojí zprávu 3
Obráze 1: Schéma šifrování s veřejným líčem Alice y = pub o x pub y Bob, pub x = pr pr o y a pošle jí Bobovi. Ačoliv všichni znají veřejnou část líče je Bob jediný, do je schopen zašifrovanou zprávu rozšifrovat. To je možné díy jednosměrným funcím. Jednosměrná funce Je taová funce, u teré je spočtení y = f(x) pro zadané x lehce proveditelné a zároveň zjištění x při známém y, tedy spočtení x = f 1 (y) je neproveditelné v reálném čase. Funce s taovými vlastnostmi jsou třeba fatorizace přirozeného čísla, nebo problém disrétního logaritmu. Fatorizace přirozeného čísla (tedy rozlad na součin prvočísel) je výpočetně velice náročná, třeba v případě dy zadané číslo je součinem dvou velých prvočísel. Zuste si fatorizovat číslo 12144971 a uvidíte ja moc vám to dá práce i dyž na to půjdete chytře. Tedy nebudete zoušet dělit všemi možnými čísly, ale jen prvočísly, nebo použijete Fermatovu fatorizaci. Naopa vynásobit dvě prvočísla 3571 a 3401 je velmi snadné. Tato jednosměrná funce se používá v RSA šifře. Problém disrétního logaritmu je založen na tomto. Je jednoduché spočítat y = α x mod n poud známe α, x, n N, ale zároveň je velmi těžé zjistit z tohoto vztahu x dyž známe všechno ostatní. Poud si odmyslíme mod n jde o rovnici y = α x, terou umíme řešit logaritmem. V následující demonstraci si můžete vyzoušet, že řešení tohoto problému v reálných číslech je díy monotonii exponenciely celem snadné i dyž neumíme počítat logaritmus, zatímco jeho disrétní obdoba je výpočetně velmi obtížná. U spojité varianty vezmeme nějaé x spočteme α x. Předpoládejme, že α > 1, poud je výslede menší než zadané y vezmeme x o něco větší. Je-li výslede větší než zadané y vezmeme x o něco menší. V případě 0 < α < 1 postupujeme obráceně. A tato můžeme postupovat doud se dostatečně nepřiblížíme nebo přesně netrefíme zadané y. Nic taového ovšem v disrétní formě neplatí. Výsledy operace α x mod n jsou naprosto chaoticé. Je li α x1 mod n větší než zadané y pa neplatí, že dyž zusíme x 2 < x 1 že bychom se s výsledem výpočtu α x2 mod n měli přiblížit požadovanému y. Diffie Hellmanova výměna líče Na problému disrétního logaritmu je založená výměna tajného líče podle Diffieho a Hellmana. Můžeme si jí snadno znázornit na schématu 2. Bob zvolí dostatečně velé prvočíslo p a nějaé α {2, 3,..., p 2}, (α, p) zveřejní jao veřejnou část líče. Alice si zvolí svůj tajný líč a {2, 3,..., p 2} 4
Obráze 2: Schéma Diffie Hellmanovy výměny líče vybere Alice Bob vybere prvočíslo p p,α vybere α { 2,..., p 2} a { 2,..., p 2} vybere b { 2,..., p 2} A = α a mod p A AB B B = α b mod p a b = B mod p = A mod p AB a spočte A α a mod p a pošle jej Bobovi. Bob si zvolí svůj tajný líč b {2, 3,..., p 2} a spočte B α b mod p a pošle jej Bobovi. Oba potom přijatou zprávu umocní na svůj tajný líč a tím zísají stejný tajný líč. Přesvědčme se, že opravdu oba zísají stejný líč, Alice spočte AB B a mod p (α b ) a mod p (α a ) b mod p A b mod p, což je to samé co spočítá Bob. Ačoli celou omuniaci mohla slyšet třetí strana, není schopná v rátém čase spočíst tajný líč AB, neboť by to znamenalo zjistit buď tajný líč Alice (a), nebo tajný líč Boba (b). Jenže tyhle líče se nedají odposlechnout a těžo Alice nebo Bob vyzradí svůj tajný líč, nezbývá tedy než vyřešit A α a mod p, pro neznámé a. To je ovšem problém disrétního logaritmu, což je pro dostatečně velé prvočíslo p nezvládnutelné. RSA šifra Využívá druhou výše zmiňovanou jednosměrnou funci, tedy fatorizaci čísla. Zrata RSA jsou první písmena jmen jejích objevitelů pánů Ronalda Rivesta, Adi Shamira a Leonarda Adelmana. Princip šifrování si můžeme snadno znázornit na schématu 3. Než se do toho pustíme, musíme zavést Eulerovu funci. Eulerova funce ϕ(n) : N N je definovaná na přirozených číslech tato ϕ(n) = počet přirozených čísel menších než n nesoudělných s n pro výpočet Eulerovy funce platí následující tvrzení. Pro p prvočíslo a N Pro složené číslo n = p 1 1 p2 2... p l l ϕ(p) = p 1, ϕ(p ) = (p 1)p 1. ϕ(n) = ϕ(p 2 2 ) ϕ(p2 2 )... ϕ(p l l ) Nyní již máme všechno, abychom mohli vysvětlit princip RSA šifry. Bob zvolí dvě dostatečně velá prvočísla p a q a spočte n = p q a ϕ(n), pa vybere exponent e {1,..., ϕ(n) 1} ta aby e a ϕ(n) byla nesoudělná čísla. Naonec 5
Obráze 3: Schéma RSA šifry Alice Bob vybere 2 prvočísla p, q spočte n p q spočte ( n) ( p 1)( q 1) n, e vybere e 1,..., ( n) 1, e nesoudělné s φ(n) zpráva x spočte d: d e 1mod ( n) y x e mod n y x y d mod n spočte dešifrovací exponent d ta aby platilo d e 1 mod ϕ(n). Neboli nalezne inverzní prve vzhledem násobení prvu e číselného oruhu Z ϕ(n). Podmína nesoudělnosti e a ϕ(n) je zde proto, aby d existovalo. Čísla n a e pošle Alici jao veřejnou část líče. Alice zašifruje zprávu x pomocí veřejného líče ta, že spočte y x e mod n a zašifrovanou zprávu pošle Bobovi. Ten jí dešifruje pomocí exponentu d ta, že spočte x y d mod n. Na první pohled není vůbec jasné, že Bob opravdu zísá původní zprávu x, že je tato šifra odolá vůči útou a ani ja Bob spočte dešifrovací exponent d. Nejprve se podívejme na odolnost šifry. Třetí strana zná veřejný líč n, e a zašifrovanou zprávu y, zná samozřejmě i RSA schéma a je jí jasné, že dešifrování potřebuje tajný líč d. Ten ale nelze odposlechnout a Bob ho stěží vyzradí. Nezbývá tedy, než ho spočítat. Tedy najít inverzi číslu e vzhledem násobení v číselném oruhu Z ϕ(n). Samotné hledání inverze není těžé a snadno se provede pomocí rozšířeného Eulidova algoritmu, to co je nezvládnutelné v reálném čase je spočtení ϕ(n). Z výše uvedených tvrzení pro výpočet Eulerovy funce plyne, že nutně potřebujeme znát fatorizaci čísla n. Poud Bob zvolí dostatečně velá prvočísla, dostatečně od sebe vzdálená nedoážeme fatorizovat n ani pomocí tisíců výonných počítačů za desíty let. Poud by Bob zvolil sice velá prvočísla, ale blízo sebe doážeme najít fatorizaci rychle pomocí Fermatovy fatorizační metody. Tedy RSA šifra je odolná proti útoům jen v případě, že Bob volí prvočísla p a q chytře. Zusme na jednoduchém příladu ověřit, že Bob opravdu jednoduchým mocněním dešifruje zprávu. Nechť je situace následující. Bob provede tyto roy: 1. zvolí dvě prvočísla p = 3, q = 11 2. spočte n = p q = 3 11 = 33 3. spočte ϕ(n) = ϕ(33) = ϕ(3) ϕ(11) = 2 10 = 20 4. zvolí e {1,..., 19}, ta aby e a 20 byli nesoudělné, e = 3 5. najde d ta aby platilo d 3 1 mod 20, d = 7 (7 3 = 21 1 mod 20) 6
6. pošle Alici veřejný líč 33, 3 Alice má zprávu x = 4, terou zašifruje y 4 3 mod 33, tedy y = 64 31 mod 33 Bob obdrží zprávu y = 31, terou dešifruje 31 7 4 mod 33 Na příladu jsme viděli, ja funguje šifra RSA. Zůstává samozřejmě něoli otáze. Ja se provádí Fermatova fatorizace, ja hledat inverze pomocí Eulidova algoritmu, nebo ja rychle provádět mocnění v číselných oruzích Z m. Poud vás téma zaujalo, můžete se těšit na předměty BI-BEZ Bezpečnost de se setáte s praticou stránou šifrování a předmět MI-MPI Matematia pro informatiu de porozumíte matematice terá je za jednotlivými algoritmy a schématy schovaná. Jao ochutnávu převeďme Fermatův fatorizační algoritmus. Fermatova fatorizace Je fatorizační metoda pro lichá přirozená čísla N a je založena na tvrzení, že aždé přirozené liché číslo N může být zapsáno jao rozdíl čtverců, tedy N = a 2 b 2. Tento vztah může být přepsán do tvaru N = (a + b) (a b), tedy poud najdeme čísla a a b, pa již máme fatory čísla N, poud (a + b), nebo (a b) nejsou prvočísla zopaujeme Fermatovu fatorizaci, poud jsou sudá budeme nejdříve vytýat mocniny dvojy. Tato jsem schopni rozložit číslo N na součin prvočísel. Ja ale najít čísla a a b? Budeme postupovat podle iteračního schématu: 1. a = celá část z N 2. b 2 = a 2 N (vyplývá z výše uvedeného tvrzení) 3. poud b = a 2 N není přirozené číslo zvýšíme a o jedna a poračujeme roem 2, je-li b N pa hledaná fatorizace je N = (a + b)(a b) Odtud je vidět, že poud bude N součinem dvou soro stejně velých prvočísel, najdeme fatorizaci rychle. Uažme si to na příladu. Buď N = 19 17 = 323 a postupujme podle schématu 1. a = celá část z 323, a = 18 2. b 2 = 18 2 323 = 1 3. b = 1, hledaná fatorizace je 323 = (18 + 1) (18 1) = 19 17. Odtud vidíme, že poud je N součinem dvou blízých prvočísel, doážeme najít fatorizaci rychle (třeba jen v jednom rou). Ale poud jsou prvočísla od sebe dost vzdálená je tato metoda velice pomalá, protože v aždém rou zvyšujeme a jen o jedna. 7