MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY! " #$ % F & GH D E ')(+*,.-0/132?@ACB 46587:9<;>= Autentizace dat DIPLOMOVÁ PRÁCE Bc. David Cimbůrek Brno, 2005
Prohlášení Prohlašuji, že tato diplomová práce práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj. Vedoucí práce: doc. RNDr. Václav Matyáš ml., M.Sc., Ph.D. ii
Poděkování Děkuji vedoucímu mé práce doc. RNDr. Václavu Matyášovi ml., M.Sc., Ph.D. za cenné rady, připomínky a všechen čas, který mi věnoval. Dále bych chtěl poděkovat Mgr. Jiřímu Denemarkovi za jeho rady během mé práce na systému Netrw. Poděkování patří i Petru Kovářovi za pomoc při testování přenosové rychlosti systému Netrw. iii
Shrnutí V dnešní době stále progresivněji se rozvíjející digitální komunikace se stává čím dál více aktuální otázka bezpečnosti této komunikace. Někdy je potřeba obsah přenášených zpráv šifrovat, aby si jejich obsah mohli přečíst pouze povolaní lidé. Mnohdy však postačuje, když u získané zprávy máme jistotu, že ji skutečně zaslal ten, o kom si myslíme, že ji zaslal, a že zpráva nebyla během přenosu změněna. Touto problematikou se zabývá autentizace dat a autentizaci dat je věnována tato práce. Důležité pro autentizaci dat jsou hashovací funkce, které dokáží udělat z jakkoliv dlouhých dat jakýsi jejich otisk vždy stejné délky, který původní data pokud možno co nejvěrněji reprezentuje. Tyto funkce je možné použít pro autentizaci dat například ve spojení s tajným heslem, nebo v mechanismech digitálních podpisů. Digitální podpisy hrají v digitálním světě podobnou roli, jako ručně psané podpisy ve světě papírové komunikace. Algoritmy digitálních podpisů jsou založeny převážně na objevech kryptografie. Systém Netrw slouží k rychlému přenosu dat přes Internet. V rámci této práce do něj byl doplněn jednoduchý, avšak účinný a bezpečný systém autentizace uživatelů a přenášených dat, který by měl ještě rozšířit jeho použitelnost. iv
Klíčová slova autentizace dat, autentizace uživatelů, digitální podpisy, hashovací funkce, Netrw v
Sem bude v papírové podobě diplomové práce vložena kopie oficiálního zadání. vi
Obsah Úvod..................................... 4 1 Hashovací funkce............................ 6 1.1 Základní vlastnosti hashovacích funkcí............ 10 1.2 Neklíčované hashovací funkce................. 12 1.2.1 Hashovací funkce založené na blokových šifrách... 13 1.2.2 Speciální hashovací funkce............... 14 1.2.3 Hashovací funkce založené na modulární aritmetice. 15 1.2.4 Kontrolní součty..................... 15 1.3 Klíčované hashovací funkce autentizační kódy....... 16 1.3.1 Autentizační kódy založené na blokových šifrách.. 16 1.3.2 Vytváření autentizačních kódů z hashovacích funkcí 17 1.3.3 MAA a MD5-MAC algoritmy.............. 17 1.4 Útoky na hashovací funkce................... 17 2 Digitální podpisy............................ 19 2.1 RSA................................. 22 2.2 ElGamal.............................. 25 2.3 DSA................................. 26 2.4 Feige-Fiat-Shamir......................... 27 3 Netrw.................................. 28 3.1 Autentizace komunikujících stran................ 30 3.1.1 Autentizace jedné strany................. 31 3.1.2 Autentizace obou stran................. 32 3.2 Autentizace dat po dokončení jejich přenosu......... 32 3.2.1 Jednostranná autentizace dat.............. 32 3.2.2 Oboustranná autentizace dat.............. 32 3.3 Pomocné soubory......................... 33 3.3.1 Soubor rand....................... 33 3.3.2 Soubor prev....................... 33 3.3.3 Soubor keys....................... 34 3.4 Použité nástroje.......................... 35 3.4.1 Ověření bezpečnosti funkce mhash keygen ext(). 36 3.5 Parametry Netrw......................... 37 1
OBSAH 3.6 Implementace........................... 40 3.7 Příklady použití Netrw..................... 42 3.7.1 Přenos dat bez autentizace............... 42 3.7.2 Přenos dat za použití autentizace............ 43 3.8 Testy rychlosti........................... 44 3.8.1 Intel Celeron 900MHz.................. 45 3.8.2 AMD Duron 600MHz.................. 45 3.8.3 2 Pentium III 1 GHz.................. 45 3.8.4 Intel Celeron 900MHz, AMD Duron 600MHz..... 46 3.8.5 Shrnutí testů........................ 46 4 Závěr................................... 47 A Hashovací funkce............................ 53 A.1 Hashovací funkce Matyas-Meyer-Oseas............ 53 A.2 Hashovací funkce MD5...................... 54 A.3 Hashovací funkce SHA-1..................... 56 A.4 Algoritmus CBC-MAC...................... 58 A.5 Algoritmus MAA......................... 59 A.6 Yuvalův narozeninový útok................... 60 B Netrw komunikační protokol................... 61 B.1 Používané zprávy......................... 61 B.2 Komunikace............................ 63 C Testy rychlosti přenosu dat...................... 67 C.1 Intel Celeron 900 MHz...................... 68 C.2 AMD Duron 600 MHz...................... 70 C.3 2 Pentium III 1 GHz....................... 72 C.4 Intel Celeron 900 MHz, AMD Duron 600 MHz........ 74 2
Seznam obrázků 1.1 Použití CRC............................. 7 1.2 Použití hashování za pomoci autentizovaného kanálu.... 8 1.3 Použití hashování ve spolupráci s šifrováním dat....... 8 1.4 Použití autentizačních kódů.................... 9 1.5 Hashovací funkce Matyas-Meyer-Oseas............. 13 1.6 Autentizační kód CBC-MAC................... 16 2.1 Obecné schéma digitálního podpisu............... 20 2.2 Schéma digitálního podpisu využívajícího hashování..... 21 2.3 Rozšířený Eukleidův algoritmus................. 22 2.4 Algoritmus RSA.......................... 23 2.5 Algoritmus ElGamal........................ 26 2.6 Feige-Fiat-Shamir.......................... 27 3.1 Komunikační protokol Netrw verze 1.2 (příklad)....... 40 3.2 Autentizační protokol autentizace uživatelů (příklad).... 41 3
Úvod Lidé mezi sebou odjakživa potřebovali komunikovat. Pokud se od sebe nacházeli ve větší vzdálenosti, zasílali si zprávy. Dříve se tak dělo pomocí poslů a kurýrů, kteří předávali informace od odesílatele k příjemci. U takto doručovaných zpráv se ovšem mohlo stát (a také stávalo), že byl během jejich přepravy pozměněn jejich obsah nebo bylo dokonce doručeno úplně jiné sdělení, než bylo odesláno. Takovéto modifikace často působily aktérům komunikace značné škody, a proto byly postupně vyvinuty různé způsoby, jak těmto změnám zabránit nebo je alespoň odhalit. Zprávy a dopisy se začaly opatřovat podpisy odesílatelů, voskovými pečetěmi a podobnými mechanismy. Ty měly zajistit, aby odeslaná zpráva nemohla být nahrazena zprávou podvodnou, případně aby ke zprávě nemohl být dopsán další text (podpis či pečet byly pořízeny přímo pod poslední řádek textu). Tento způsob využití samozřejmě předpokládal, že napsat správný podpis nebo obtisknout do vosku pravou pečet může pouze původní odesílatel. S nástupem výpočetní techniky a digitální komunikace se ovšem stávající situace dramaticky změnila. Stále více a více komunikace probíhá elektronickou formou a od starých metod zasílání zpráv se postupně upouští. Mnoho lidí vyřizuje svou osobní nebo obchodní korespondenci pomocí e-mailu. Obchody se mnohdy domlouvají a provádějí pomocí Internetu, elektronickou formou se realizuje i množství velkých finančních operací a bankovních převodů, mnoho bank dnes poskytuje svým klientům internetové bankovnictví. Podvržená zpráva tedy může napáchat velmi rozsáhlé škody. Proto je i v digitální komunikaci nutné zajistit integritu vyměňovaných zpráv a jistotu o identitě autorů těchto zpráv. U digitální komunikace jsou ale dříve uplatňované techniky ověřování integrity zprávy a identity jejího autora nepoužitelné. Každý bit je stejný jako kterýkoliv jiný a nelze tedy použít analogii ručně psaného podpisu. Naštěstí přichází na pomoc jiné techniky a metody. Byly vyvinuty postupy, souhrnně označované jako digitální podpisy, které v digitálním světě plní podobnou (i když ne úplně stejnou) funkci jako klasické ručně psané podpisy. Algoritmy digitálních podpisů jsou převážně založeny na poměrně nových objevech v kryptografii. Důležitou roli v autentizaci dat hrají i tzv. hashovací 4
ÚVOD funkce, které dokáží z jakkoliv dlouhé zprávy vytvořit řetězec pevně dané (většinou malé) délky, se kterým se dá dále operovat (např. právě v mechanismech digitálního podpisu). Základní metody, nejpoužívanější algoritmy a příklady použití těchto postupů jsou popsány v dalším textu této práce. Součástí práce je systém Netrw-2.0 určený pro rychlý a jednoduchý přenos dat přes Internet. Tento systém implementuje některé algoritmy a postupy autentizace popsané v teoretické části. Umožňuje provádět autentizaci zasílaných dat i autentizaci uživatelů účastnících se přenosu. Snaží se tak při zachování vysoké přenosové rychlosti zvýšit bezpečnost výměny dat přes počítačové sítě. Rozvržení kapitol První kapitola práce se věnuje hashovacím funkcím, principům jejich práce a několika nejpoužívanějším algoritmům. Druhá kapitola se zaměřuje na digitální podpisy, způsoby jejich použití a obsahuje popis nejpoužívanějších schémat digitálních podpisů. Třetí kapitola je věnována systému Netrw, popisu implementace autentizace uživatelů a dat a testům rychlosti přenosu dat. 5
Kapitola 1 Hashovací funkce Kryptografické hashovací funkce (dále jen hashovací funkce, pokud nebude explicitně uvedeno jinak) hrají v autentizaci dat a potažmo v celé kryptografii velmi důležitou a nezastupitelnou roli. Vytvářejí ze vstupních dat libovolné délky jakési jejich otisky pevné délky (řádově stovky bitů) nazývané hash (hash-code, hash-result, hash-value, digest, fingerprint), které původní data (pokud možno jednoznačně) reprezentují. Toto se dá využít v mnoha aplikacích. V oblasti kryptografických hashovacích funkcí došlo v poslední době k závažným událostem. V září 2004 byly publikovány útoky, pomocí kterých byly prolomeny hashovací funkce MD5, RIPEMD-128, HAVAL-128 a SHA-0 a byly nalezeny nové obecnější techniky hledání slabin iterativních hashovacích funkcí, což jsou prakticky všechny dnes používané důležité hashovací funkce. Hashovací funkce SHA-0 není příliš rozšířena, byla již dříve nahrazena dokonalejší modifikací nazývanou SHA-1. Rovněž funkce RIPEMD-128 a HAVAL-128 se příliš nepoužívají. Ovšem hashovací funkce MD5, přestože se již delší dobu doporučuje ji nepoužívat, je stále obsažena v mnoha současných systémech. Podrobnější informace o těchto hashovacích funkcích jsou v kapitole 1.2.2. Hashovací funkce jsou velice užitečné ve dvou oblastech: při autentizaci původu dat a při kontrole integrity dat. Co tyto dva pojmy přesně znamenají? Mějme situaci, kdy subjekt B obdrží nějaká data. O těchto datech tvrdí subjekt A, že je jejich odesílatelem. A právě pomocí mechanismů autentizace původu dat je možné s jistotou určit, zda je A skutečným odesílatelem těchto dat. Pomocí kontroly integrity dat je zase možné s jistotou určit, zda nebyla data od doby vytvoření, během přenosu od odesílatele k příjemci, až po převzetí příjemcem nějakým způsobem neautorizovaně změněna. Je třeba si uvědomit, že tyto dvě vlastnosti jsou spolu nerozlučně spjaty. Data, která byla cestou od odesílatele k příjemci změněna, mají nového autora. A pokud není možné autora určit, nemůžeme se bavit o otázce 6
1. HASHOVACÍ FUNKCE změny dat během přenosu. Existuje několik způsobů, jak použít hashovací funkce k autentizaci původu a ke kontrole integrity dat. Hashování může být použito pro jednoduchou nezaručenou kontrolu integrity dat díky mechanismu kontrolních součtů (checksums), například pomocí CRC (Cyclic Redundancy Check). Tento postup ovšem odhalí pouze neúmyslné chyby vzniklé při přenosu dat. Pro zjištění, zda data nebyla nějakým způsobem modifikována či přímo zaslána nějakým útočníkem, se musí používat sofistikovanější metody, protože CRC může k libovolným datům vytvořit kdokoliv, tedy i případný útočník. Hashovací funkce, které počítají CRC, nejsou kryptografické (viz požadované vlastnosti kryptografických hashovacích funkcí popsané v kapitole 1.1). Data Odesílatel CRC Neautentizovaný kanál Pøíjemce Data CRC CRC? Obrázek 1.1: Použití CRC. Způsoby, jak využít hashovací funkce k skutečně zaručené kontrole integrity dat, jsou následující. První z nich je využití jiného zabezpečeného komunikačního kanálu. Data se zašlou normálně standardním nezabezpečeným způsobem. Avšak hash těchto dat se zašle příjemci nějakým zabezpečeným způsobem tak, aby ji případný útočník nemohl pozměnit či zaměnit za nějakou jinou hash. Příjemce si poté spočítá z obdržených dat svou hash a porovná ji s hashí, kterou obdržel od odesílatele. Pokud se tyto hashe shodují, má jistotu, že data nebyla cestou nijak změněna. Hashovací funkce je možné použít pro kontrolu integrity dat ve spojení s nějakým šifrovacím mechanismem používajícím symetrickou nebo asymetrickou metodu šifrování. Pokud je potřeba zajistit integritu dat, ale není nutné obsah dat utajovat, je jejich šifrování zbytečné. Zabírá zbytečně mnoho času a zvláště u asymetrické kryptografie je zdržení u většího množství dat reálně neúnosné. Ze zasílaných dat se tedy udělá hash stejně jako 7
1. HASHOVACÍ FUNKCE Odesílatel Data Neautentizovaný kanál Pøíjemce Data Hash Autentizovaný kanál Hash? Hash Obrázek 1.2: Použití hashování za pomoci autentizovaného kanálu. v předchozím případě, ale takto získaná hash se zašifruje a zašle se společně se zprávou nezabezpečeným způsobem. Příjemce zprávy si obdrženou hash rozšifruje a z obdržených dat si spočítá svou vlastní hash. Pokud jsou tyto dvě hashe identické, znamená to, že data mají integritu neporušenou. Neklíčované hashovací funkce (tj. funkce, které pro výrobu hashe nepoužívají žádný tajný klíč) jsou v anglické terminologii často označovány zkratkou MDC (Modification Detection Code). Data Odesílatel Zašifrovaná hash Neautentizovaný kanál Pøíjemce Data Zašifrovaná hash Hash Šifrovací algoritmus Hash? Hash Dešifrovací algoritmus Obrázek 1.3: Použití hashování ve spolupráci s šifrováním dat. Dalším způsobem využití hashovacích funkcí jsou tzv. autentizační kódy (Message Authentication Codes, odtud často používané zkratky MAC, plurál MACs, též digitální pečetě, digital seals). Autentizační kódy dovolují zajistit autentizaci dat pomocí symetrických technik. Používají hashovací funkce, které mají dva různé vstupy: hashovaná data a tajný klíč. Tyto funkce pak produkují hash, která má tu vlastnost, že za neznalosti klíče je výpočetně 8
1. HASHOVACÍ FUNKCE velmi obtížné požadovanou hash vyprodukovat. Data Odesílatel MAC Neautentizovaný kanál Pøíjemce Data MAC Tajný klíè k MAC Tajný klíè k? Obrázek 1.4: Použití autentizačních kódů. Odesílatel tedy spočítá za pomoci tajného klíče MAC zasílaných dat, data i MAC odešle příjemci, který si z obdržených dat spočítá pomocí svého tajného klíče (identického s klíčem druhé strany) svůj MAC a tyto dva autentizační kódy porovná. Pokud jsou stejné, data nebyla cestou pozměněna či nahrazena jinými. Hashovací funkce jsou též velmi často využívány v mechanismech digitálního podpisu (podrobně viz kapitola 2). Poznámka. Český překlad anglického slova hash zatím není ujednocený. Běžně se používají výrazy haš, heš, či nepřekládané hash. Já se v celé diplomové práci budu držet termínu hash, i díky vyjádření Jazykové poradny Ústavu pro jazyk český AV ČR [1]: Přejímání cizích slov je v terminologické oblasti velice časté. Právě zde je výhodná mezinárodní srozumitelnost a často i větší schopnost vytvářet odvozeniny (přídavná jména, slovesa). Přestože je pro češtinu charakteristická tendence začleňovat přejímaná slova co nejúplněji do domácího jazykového systému, a to jak po stránce hláskové, tak morfologické, není možné mechanicky nahrazovat jednotlivé cizí termíny českými ekvivalenty, pokud není zaručena návaznost v rámci celého pojmenovávacího systému dané oblasti. Míra tohoto začlenění je pochopitelně u různých slov různá, nemůžeme postupovat mechanicky, protože každé slovo reaguje na počešt ování různě. Proces zapojování do české slovní zásoby je pozvolný a postupný, některá slova si stále zachovávají původní pravopis. Doporučujeme zatím užívat anglickou podobu hash, proti počeštění mluví i ne zcela jednotná výslovnost (heš haš, něco mezi a-e ). 9
1. HASHOVACÍ FUNKCE 1.1 Základní vlastnosti hashovacích funkcí V další části diplomové práce jsem mnoho informací (definice, kódy algoritmů) čerpal z [2]. Jak vlastně hashovací funkce vypadají? Základní neformální definice říká následující: Definice 1.1 Hashovací funkce. Hashovací funkce je funkce h, která má následující dvě vlastnosti: komprese zobrazuje vstupní data x libovolné (konečné) bitové délky na data h(x) pevně dané bitové délky; snadnost výpočtu pro danou hashovací funkci h a libovolná vstupní data x musí být výpočetně snadné spočítat hash h(x). Příklad 1.2. Funkce, která počítá modulo 256 (tedy funkce, která vezme vstupní data, sečte všechny bajty těchto dat a jako výstup produkuje zbytek po dělení tohoto součtu číslem 256) je hashovací funkce ve smyslu definice 1.1. Další důležité vlastnosti hashovacích funkcí jsou následující: Definice 1.3 Jednosměrnost. Hashovací funkce h je jednosměrná (one-way, preimage resistant), pokud pro každou zadanou hodnotu hashe y je výpočetně obtížné nalézt nějakou vstupní hodnotu x tak, aby platilo h(x) = y. Příklad 1.4. Funkce f, která sčítá hodnoty znaků (podle tabulky ASCII) ze zadaného řetězce modulo 256, není jednosměrná, protože pro dané číslo v intervalu [0, 255] lze snadno nalézt data, jejichž modulo 256 má tuto hodnotu. Příklad je zadáno číslo 195. Vezme se libovolný řetězec, například ahoj. Hodnota f( ahoj ) je (97+104+111+106) mod 256 = 418 mod 256, což je 162. Vezme se tedy znak s ASCII hodnotou 195 162 = 33, což je znak!. Máme tedy nalezen řetězec ahoj!, pro který platí: f( ahoj! ) = 195. Funkce f tedy není jednosměrná. Naopak například hashovací funkce SHA-1 (viz příloha A.3) jednosměrná je. Definice 1.5. Slabá bezkoliznost. Hashovací funkce h má vlastnost slabé bezkoliznosti (weak collision resistance, 2nd-preimage resistance), pokud je výpočetně obtížné nalézt k určené pevně dané vstupní hodnotě x jinou vstupní hodnotu x, x x takovou, že h(x) = h(x ). 10
1. HASHOVACÍ FUNKCE Slabá jednosměrná hashovací funkce. Slabá jednosměrná hashovací funkce (weak one-way hash function, one-way hash function) je hashovací funkce ve smyslu definice 1.1, která je navíc jednosměrná a má vlastnost slabé bezkoliznosti. Definice 1.6. Silná bezkoliznost. Hashovací funkce h má vlastnost silné bezkoliznosti (collision resistance, strong collision resistance), pokud je výpočetně obtížné nalézt dvě různé libovolné vstupní hodnoty x a x, pro které platí h(x) = h(x ). Silná jednosměrná hashovací funkce. Silná jednosměrná hashovací funkce (strong one-way hash function, collision resistant hash function) je hashovací funkce ve smyslu definice 1.1, která má navíc vlastnosti slabé i silné bezkoliznosti. Proč jsou tyto vlastnosti důležité? Například v mnoha systémech jsou hesla uložena v hashované podobě. Uživatel při přihlašování zadá své heslo, z něj se spočítá jeho hash, která se poté porovná s hashí uloženou v systému. Pokud jsou tyto hashe totožné, přihlášení proběhlo úspěšně. Pokud by měl potenciální útočník přístup k hashím v systému a použitá hashovací funkce by nebyla jednosměrná, mohl by lehce nalézt nějaké jiné heslo, které by mělo stejnou hash jako heslo původní. Mohl by tak neoprávněně proniknout do systému. U algoritmů digitálního podpisu (viz kapitola 2) se velmi často nepodepisují celá data x, ale pouze jejich hash h(x). Použitá hashovací funkce musí mít vlastnost slabé bezkoliznosti. Proč? Pokud odesílatel podepíše hash, která byla získána hashovací funkcí nemající vlastnost slabé bezkoliznosti, mohl by případný útočník nalézt nějaká jiná data x x, pro která by platilo h(x ) = h(x). O těchto nových datech by mohl útočník tvrdit, že je odesílatel podepsal a neexistovala by možnost, jak toto tvrzení vyvrátit. Pokud by mohl útočník určit, jaká data bude odesílatel podepisovat, je nutné, aby použitá hashovací funkce měla vlastnost silné bezkoliznosti. Tak se opět zamezí útočníkovi (nebo nepoctivému odesílateli) v prohlášení, že odesílatel podepsal jiná data, než skutečně podepsal. Definice 1.7 Autentizační kódy. Autentizační kódy (MACs) tvoří skupinu funkcí h k, kde k je tajný klíč, s následujícími vlastnostmi: Snadnost výpočtu Pro daný autentizační kód h k, daný tajný klíč k a libovolná vstupní data x musí být výpočetně snadné spočítat hodnotu autentizačního kódu h k (x). Komprese h k zobrazuje vstupní data x libovolné (konečné) bitové délky na data h k (x) pevně dané bitové délky. 11
1. HASHOVACÍ FUNKCE Odolnost při dané výpočetní síle (computational resistance) Pro každé pevně zvolené k musí platit: Pokud je dáno libovolné množství dvojic dat a jejich autentizačních kódů (x i, h k (x i )), je výpočetně obtížné bez znalosti k nalézt nějakou dvojici (x, h k (x)), x x i. (Nemusí platit podmínka h k (x) h k (x i ).) Výrazy výpočetně snadné a výpočetně obtížné zde nejsou formálně definovány. V praxi to ale znamená, že pokud je získání hodnoty funkce výpočetně snadné, má výpočet maximálně polynomiální časovou a prostorovou složitost, tj. doba výpočtu (resp. množství paměti potřebné během výpočtu) je vzhledem k délce vstupních dat shora omezena nějakou polynomiální funkcí (například n 6 nebo n 2 + n, kde n je délka vstupních dat). Doba výpočtu výpočetně snadných funkcí se za obvyklých okolností (a na běžném hardwarovém vybavení) pohybuje v řádu maximálně vteřin či minut, zatímco pro výpočetně obtížné problémy se tato doba počítá od roků až po miliardy let. Záleží ale samozřejmě na každé konkrétní funkci a na výpočetní síle, kterou máme k dispozici. Většinou se u výpočetně obtížných problémů jedná o hledání výsledku hrubou silou procházením všech možných řešení. 1.2 Neklíčované hashovací funkce Drtivá většina hashovacích funkcí pracuje iterativním způsobem. To znamená, že nezahashuje všechna vstupní data x najednou, ale rozdělí je na bloky x 1,..., x n. Poté se jednotlivé bloky zpracovávají hashovacím algoritmem, a to tím způsobem, že h(x i ) vždy závisí jak na příslušném bloku dat, tak i na hashi předchozího bloku. Platí tedy vztah h(x i ) = f(x i, h(x i 1 )). Výsledná hash je rovna h(x n ). Takto je zaručeno, že hash je závislá na všech částech dat. Jistou nepříjemností ovšem je, že všechny vstupní bloky x i musí mít pevnou stejnou délku. Vstupní data jsou ale velikosti libovolné. Tím dochází ke stavu, kdy je poslední blok ve většině případů kratší. Takovéto krátké bloky se proto zarovnávají na správnou délku. Této metodě doplňování posledního bloku se říká padding. Bity do bloku by se měly doplňovat tak, aby ze dvou různých vstupních bitových řetězů nemohly vzniknout po doplnění řetězy totožné. Padding by měl obsahovat i údaj udávající bitovou délku původních dat. 12
1.2.1 Hashovací funkce založené na blokových šifrách 1. HASHOVACÍ FUNKCE Hlavní důvod používání a vyvíjení hashovacích funkcí založených na blokových šifrách je jednoduchý. Využívá se zde totiž funkce, která je již v systému obsažena (at již softwarově či hardwarově) a nemusí se tudíž vyvíjet znovu. Proč nemohou být jako hashovací funkce použity přímo tyto blokové šifry? Odpověd je nasnadě samotné blokové šifry nemají potřebné vlastnosti, například nejsou jednosměrné. Proto se musí upravit tak, aby výsledná hashovací funkce požadované vlastnosti měla. Hashovací funkce vytvořené z nbitových blokových šifer (tedy z šifer produkujících nbitový výstup) lze rozdělit na dvě skupiny: funkce vytvářející hash délky n (single-length) a funkce, které produkují hash délky 2n (double-length). Proč se funkce s délkou hashe 2n zavádějí? V praxi existuje velké množství blokových šifer s délkou bloku 64 bitů. A hashe této délky vytvořené použitím takovéto blokové šifry nemají vlastnost silné bezkoliznosti. Proto se z těchto blokových šifer vytváří hashovací funkce produkující hash dvojnásobné délky, které již vlastnost silné bezkoliznosti mají. Z předcházejícího vyplývá, že hashovací funkce produkující hash délky stejné jako je délka použité blokové šifry se konstruují tak, aby měly vlastnosti slabých jednosměrných funkcí. A hashovací funkce, které vytvářejí hash dvojnásobné délky než použitá bloková šifra, jsou navrhovány tak, aby měly vlastnosti silných jednosměrných hashovacích funkcí. IV g x 1 E H 1 g x 2 E... H t-1 g x t E H 1 H 2 H t Obrázek 1.5: Hashovací funkce Matyas-Meyer-Oseas. Mezi slabé jednosměrné hashovací funkce založené na blokových šifrách patří například algoritmy Matyas-Meyer-Oseas (viz obrázek 1.5 a detailní popis v příloze A.1), Davies-Meyer [3] nebo Miyaguchi-Preneel [4]. Typická délka hashe při použití těchto funkcí je 64 bitů. Jako příklad silných jednosměrných hashovacích funkcí používajících blokové šifry je možné uvést algoritmy MDC-2 a MDC-4 [5], které využívají 13
1. HASHOVACÍ FUNKCE symetrickou blokovou šifru DES [6]. Obě generují hash délky 128 bitů. 1.2.2 Speciální hashovací funkce Pod názvem speciální hashovací funkce (customized hash functions) se skrývají funkce, které byly od prvopočátku navrhovány jako hashovací a nepoužívají žádné jiné externí komponenty (jako například blokové šifry). Prvním zástupcem z této skupiny je algoritmus MD4 [7] (Message Digest). Z dat libovolné délky vytváří 128bitovou hash. Funkce byla navrhována tak, aby měla vlastnosti silné jednosměrné hashovací funkce. Její rozlomení tedy mělo být možné pouze za použití hrubé síly. Nalezení dvou vstupů, které mají stejnou hash, mělo zabrat průměrně 2 64 operací a nalezení nějakých vstupních dat odpovídajících předem zadané hashi mělo trvat průměrně 2 128 operací. Pro tuto hashovací funkci ovšem byly nalezeny kolize, které snižují čas potřebný pro útok hrubou silou na pouhých 2 20 operací. Proto je doporučováno hashovací funkci MD4 nadále nepoužívat. Po tomto zjištění byla vytvořena hashovací funkce MD5 [8] (viz detailní popis v příloze A.2), která je založena na MD4, ale odstraňuje problémy s kolizemi, které má funkce MD4. MD5 je opět 128bitová. Obsahuje 4 16- krokové cykly (na rozdíl od 3 cyklů u MD4) a další změny oproti MD4, které měly zaručovat bezkoliznost. Na podzim roku 2004 byla však hashovací funkce MD5 prolomena [9] (byly nalezeny kolize) a neměla by již tedy být jako kryptografická hashovací funkce používána. MD5 dosáhla velikého rozšíření a přestože již bylo několik let doporučováno ji nepoužívat (mimo jiné proto, že byly nalezeny kolize pro kompresní funkci, kterou MD5 používá), je dnes součástí mnoha systémů a její nahrazení nějakým bezpečným algoritmem bude stát v mnoha případech nemalé úsilí a náklady. Spolu s MD5 byly prolomeny ještě další hashovací funkce: RIPEMD-128, HAVAL-128 a SHA-0. Tyto funkce ale nejsou naštěstí příliš rozšířeny. Obecně by se mělo upouštět od používání 128bitových hashovacích funkcí, protože při dnešní výpočetní síle přestávají poskytovat záruku bezpečnosti. Používat by se měly alespoň 160bitové hashovací funkce. Mezi 160bitové hashovací funkce patří SHA-1 [10] (the Secure Hash Algorithm). Tento algoritmus je nástupcem algoritmu SHA-0. V současné době je považován za bezpečný. Rozšíření oproti SHA-0 jej dělá bezpečným i proti nejnovějším útokům. Dnes patří mezi nejpoužívanější hashovací funkce. Je využíván například v algoritmu digitálního podpisu DSS [11] (Digital Signature Standard, viz kapitola 2.3). 14
1. HASHOVACÍ FUNKCE Další 160bitovou hashovací funkcí založenou na MD4 je RIPEMD-160 [12]. V současné době se považuje za stejně silnou jako SHA-1. Existují i vícebitové varianty hashovací funkce SHA-1. Jsou to funkce SHA256, SHA384 a SHA512 [13], jejichž hashe mají, jak je již z jejich názvů patrné, délku postupně 256, 384 a 512 bitů. Tyto funkce byly vytvořeny kvůli potřebám, které vznikly při vyvíjení nové symetrické šifry AES [14]. Souhrnně jsou označovány jako hashovací funkce třídy SHA-2. 1.2.3 Hashovací funkce založené na modulární aritmetice Hlavní výhodou funkcí založených na modulární aritmetice je, podobně jako u hashovacích funkcí vytvořených z blokových šifer, využití v systému již existujících částí pracujících s modulární aritmetikou, například funkcí pro práci s digitálními podpisy. Nepříjemnou vlastností těchto hashovacích funkcí ovšem je, že ve srovnání se speciálními hashovacími funkcemi jsou pomalejší. Mezi hashovací funkce pracující na principu modulární aritmetiky patří například MASH-1 nebo MASH-2 [15]. 1.2.4 Kontrolní součty Kontrolní součty (checksums), jak již bylo řečeno dříve, patří mezi nekryptografické mechanismy a používají se pro jednoduchou kontrolu integrity dat během přenosu, nebo pro různé samoopravné kódy (error-correcting codes), kdy jsou některé chyby nejen rozpoznány, ale i opraveny. Nejčastěji používanými kontrolními součty je skupina funkcí CRC [16] (Cyclic Redundancy Code, nebo Cyclic Redundancy Check). Vytvářejí z dat libovolné délky hashe o pevné délce k (většinou 16 nebo 32 bitů). CRC je založeno na vhodně zvoleném (k 1)bitovém vektoru, jehož jednotlivé bity jsou chápány jako koeficienty polynomu stupně k. Například pro funkci CRC-16 je často používán polynom g(x) = 1 + x 2 + x 15 + x 16. Na vstupní data délky t je obdobně nahlíženo jako na polynom d(x) stupně t 1. Výsledná 16bitová hash je zbytek po dělení polynomu x 16 d(x) polynomem g(x). CRC funkce jsou často implementovány pomocí hashovacích funkcí, mohou však používat i jiné mechanismy. Tento způsob kontroly integrity dat nemůže, jak již bylo řečeno dříve, odhalit úmyslné změny v přenášených datech. Nedokáže také odhalit všechny náhodné chyby, které vznikly během přenosu (i když naprostou většinu ano). 15
1.3 Klíčované hashovací funkce autentizační kódy 1. HASHOVACÍ FUNKCE Klíčované hashovací funkce se vytvářejí podobnými způsoby jako neklíčované. Pouze s tím rozdílem, že součástí vstupu je tajný klíč k, bez jehož znalosti musí být výpočetně velmi obtížné příslušný MAC vytvořit. 1.3.1 Autentizační kódy založené na blokových šifrách Autentizační kódy vytvořené pomocí blokových šifer se svou konstrukcí velmi podobají hashovacím funkcím pracujícím na tomto principu. Jako základ algoritmu je použita nějaká bloková symetrická šifra. Vstupní data jsou rozdělena na jednotlivé bloky a tyto bloky spolu s tajným klíčem (případně ještě nějakým způsobem upravené) jsou zpracovány blokovou šifrou. x 2 x 3 x t 0 k x 1 H 1 E k E k H 2 E H 3... k H t-1 E H 1 H 2 H 3 H t Zvýšení bezpeènosti k k' H E E -1 Obrázek 1.6: Autentizační kód CBC-MAC. Nejčastěji používanou klíčovanou hashovací funkcí založenou na blokové šifře je algoritmus CBC-MAC [17] (Cipher-Block-Chaining MAC), viz schéma na obrázku 1.6 a příloha A.4). Jako blokovou šifru používá nejčastěji DES, kde je délka jednotlivých bloků 64 bitů a klíč má délku 56 bitů. Pro zvýšení bezpečnosti tohoto algoritmu se často používá druhý klíč k, který snižuje možnost odhalení hodnoty k a zabraňuje útokům vybraným textem. 16
1.3.2 Vytváření autentizačních kódů z hashovacích funkcí 1. HASHOVACÍ FUNKCE Hashovacích funkcí existuje poměrně velké množství. Tudíž se při vytváření autentizačních kódů nabízí myšlenka je nějakým způsobem využít tak, aby se daly použít jako autentizační kódy. Takovýchto metod je několik, většinou se nějak připojí tajný klíč k ke zpracovávaným datům. Možné je tedy zařadit k jako prefix dat, výsledný MAC má tedy hodnotu h k (x) = h(k x) (kde je operace zřetězení), nebo jako postfix: h k (x) = h(x k). Používané jsou i další, sofistikovanější metody, například Hash-based MAC [18] (HMAC): HMAC(x) = h(k p 1 h(k p 2 x)), kde p 1 a p 2 jsou řetězce, které doplňují k tak, aby jeho délka byla celočíselným násobkem délky bloku. 1.3.3 MAA a MD5-MAC algoritmy Tyto algoritmy byly navrženy úplně od začátku jako autentizační kódy, nejsou v nich tedy použity žádné jiné mechanismy, jako například blokové šifry nebo hashovací funkce. Algoritmus MAA [19] (Message Authenticator Algorithm) používá 64bitový tajný klíč a vytváří MAC o délce 32 bitů. Hlavní smyčka algoritmu je tvořena dvěma paralelními, na sobě nezávislými výpočty. Běh tohoto algoritmu je zhruba dvakrát pomalejší v porovnání s hashovací funkcí MD4. MAA je detailně popsán v příloze A.5. Algoritmus MD5-MAC [20] je odvozen od hashovací funkce MD5. Tajný klíč k se zde ovšem nepřidává pouze jako součást vstupních dat (jako u autentizačních kódů založených na blokových šifrách), ale je, po určitých úpravách, použit odlišným způsobem dále v těle algoritmu. Rychlost algoritmu MD5-MAC je zhruba srovnatelná s rychlostí hashovací funkce MD5. 1.4 Útoky na hashovací funkce Co je cílem útoků na hashovací funkce? Útočníci se vždy snaží využít slabin jednotlivých funkcí a dosáhnout toho, čeho by teoreticky neměli být schopni. U slabých jednosměrných hashovacích funkcí je snahou útočníka k zadané hashi y nalézt nějaká data x taková, aby platilo h(x) = y, nebo k zadané dvojici (x, h(x)) nalézt data x, x x, pro která platí h(x ) = h(x). Ideální síla slabých jednosměrných hashovacích funkcí by měla být 2 n, tedy k jejich prolomení by ideálně mělo být zapotřebí průměrně 2 n operací, kde n je bitová délka výsledné hashe. Tato délka by v současnosti měla být při 17
1. HASHOVACÍ FUNKCE praktickém použití alespoň 80 bitů. Při útoku na silnou jednosměrnou hashovací funkci je nutné nalézt různá vstupní data x a x taková, že platí h(x) = h(x ). Ideální síla této funkce je 2 n/2. Délka hashe silných jednosměrných funkcí by měla být při dnešní výpočetní síle počítačů alespoň 160 bitů. Velké množství útoků proti hashovacím funkcím je postaveno na takzvaném narozeninovém paradoxu (birthday paradox). Ten lze ilustrovat následovně. Pokud je v jedné místnosti 23 náhodně vybraných lidí, pak pravděpodobnost, že dva z nich budou mít narozeniny v ten samý den v roce, je překvapivě vysoká více než 50 %. S přibývajícím počtem lidí tato pravděpodobnost rychle roste, takže pro 30 lidí je to již více než 70 %. Této vlastnosti se dá využít při hledání kolizí hashovacích funkcí. Mezi nejznámější narozeninové útoky patří Yuvalův narozeninový útok (Yuval s birthday attack) popsaný v příloze A.6. Je aplikovatelný na všechny neklíčované hashovací funkce. Útok je úspěšný po průměrně 2 n/2 operacích. Jeho nevýhodou ovšem je, že ke svému chodu potřebuje velké množství paměti. Velikost potřebné paměti je možné zmenšit tím, že vytváření modifikací x 1 a x 2 z x 1 a x 2 je deterministické a není tedy potřeba pozměněná data ukládat. Další útoky využívají konkrétní vlastnosti jednotlivých hashovacích funkcí. Zaměřují se na jejich iterativní podstatu, zkoumají kompresní funkci (například používanou symetrickou šifru), řetězcové proměnné a snaží se nalézt slabiny v jejich aplikaci. U autentizačních kódů se útočník snaží bez znalosti klíče k spočítat nějakou novou dvojici (x, h k (x)) za znalosti libovolného množství dvojic (x i, h k (x i )), x i x. U správně navrženého MACu by měla být pravděpodobnost nalezení takovéto dvojice rovna maximu z hodnot 2 t a 2 n, kde t je délka tajného klíče a n délka autentizačního kódu. K odhalení klíče by mělo být třeba průměrně 2 t operací. Pro praktickou bezpečnost by měla být v dnešní době délka autentizačního kódu alespoň 64 bitů při délce klíče 64 80 bitů. 18
Kapitola 2 Digitální podpisy Klasický ručně psaný podpis má široké uplatnění a používá se v mnoha oblastech. Od klasického podpisu očekáváme několik zásadních vlastností. Je to především nepadělatelnost, tedy nikdo by neměl být schopen podepsat se podpisem někoho jiného. Z podpisu by mělo být jednoznačně určitelné (resp. ověřitelné), kdo jej pořídil. Podpis musí být neoddělitelně spjatý s podepisovaným dokumentem, aby ho případný útočník nemohl použít pro podpis nějakého jiného dokumentu. Další důležitou vlastností je nepopiratelnost původu když někdo nějaký dokument podepíše, nemůže později tento podpis popřít. Technologie digitálních podpisů slouží ke stejným účelům, jako podpisy klasické, používají se ovšem v digitálním světě. Mějme dva subjekty A a B (v literatuře jsou často označovány jako Alice a Bob), které si chtějí vyměňovat zprávy podepsané pomocí technik digitálního podpisu. Jaké vlastnosti musí digitální podpis mít? Obecná definice digitálního podpisu je následující: Definice 2.1 Digitální podpis. Digitální podpis je datový řetězec, který spojuje zprávu (v digitální podobě) s odesílatelem této zprávy. V praxi se jedná o nějaká data, která jsou nerozlučně spojena s podepisovanou zprávou (či obecně s jakýmikoliv daty) a která poskytují autentizaci o daném dokumentu je možné s jistotou říci, kdo jej podepsal; integritu jistotu, že zpráva nebyla během přenosu neoprávněně pozměněna; nepopiratelnost původu pokud někdo podepíše nějakou zprávu, nemůže později tvrdit, že ji nepodepsal pomocí mechanismu veřejných klíčů. Jak výše zmíněný mechanismus veřejných klíčů vypadá? Každá osoba, která chce podepisovat zprávy, musí mít dva tzv. klíče soukromý (private 19
2. DIGITÁLNÍ PODPISY key) a veřejný (public key). Jejich délka je typicky několik set bitů. Soukromý klíč se používá při pořizování digitálního podpisu. Musí platit, že bez znalosti soukromého klíče je (prakticky) nemožné digitální podpis vytvořit. Každý tedy musí zajistit důvěrnost svého soukromého klíče, protože při jeho znalosti by mohl správný digitální podpis vytvořit kdokoliv. U veřejného klíče je situace opačná. Hodnotu veřejného klíče příslušné osoby musí znát každý, kdo chce ověřit platnost digitálního podpisu tohoto člověka. Data Odesílatel (Alice) Alicin soukromý klíè Pøíjemce (Bob) Alicin veøejný klíè Certifikát Alicina veøejného klíèe Algoritmus digitálního podpisu Podepsaná data Algoritmus ovìøení digitálního podpisu Obrázek 2.1: Obecné schéma digitálního podpisu. Při komunikaci Alice s Bobem se může stát, že nějaký útočník podstrčí Bobovi svůj veřejný klíč, ale prohlásí ho za Alicin. Poté může Bobovi zasílat zprávy podepsané svým soukromým klíčem. Bob si bude myslet, že zprávy jsou od Alice a že jejich digitální podpis je v pořádku. Proto je nutné zajistit nějakým způsobem integritu veřejného klíče. K tomu se používá certifikát veřejného klíče. Certifikát veřejného klíče je údaj, který spojuje veřejný klíč s určitou osobou (nebo spíše s nějakým identifikátorem, který danou osobu jednoznačně určuje). Certifikát veřejného klíče bývá většinou digitálně podepsán certifikační autoritou, což je nějaká instituce, které všechny zúčastněné strany důvěřují. Tento podpis zaručuje pravost certifikátu, a tedy i veřejného klíče s tímto certifikátem spojeným. Tímto způsobem se problém integrity veřejných klíčů všech účastníků komunikace redukuje na problém zajištění integrity veřejného klíče certifikační autority. Tu je již třeba zajistit jiným způsobem, například osobním odběrem veřejného klíče v pobočce certifikační autority. Naprostá většina používaných algoritmů digitálního podpisu je založena na asymetrické kryptografii. Ta je ovšem časově velmi náročná. Při podepisování zpráv, které mají větší délku, by digitální podepisování znamenalo neúměrné zdržení. Proto se v praxi nepodepisuje celá zpráva, ale 20
2. DIGITÁLNÍ PODPISY pouze její hash. Ta musí být vytvořena pomocí silné jednosměrné hashovací funkce, jak je popsáno v kapitole 1.1. Data Odesílatel (Alice) Alicin soukromý klíè Pøíjemce (Bob) Alicin veøejný klíè Certifikát Alicina veøejného klíèe Hash Data Data Hash? Hash Algoritmus digitálního podpisu Podepsaná hash Algoritmus ovìøení digitálního podpisu Obrázek 2.2: Schéma digitálního podpisu využívajícího hashování. Pokud chce tedy Alice zaslat Bobovi digitálně podepsanou zprávu za pomoci hashování, probíhá celý proces následovně. Alice vytvoří ze zasílané zprávy hash, tu digitálně podepíše a zprávu i podepsanou hash zašle Bobovi. Ten si pomocí Alicina veřejného klíče (opatřeného certifikátem) zkontroluje, že hash skutečně podepsala Alice. Poté si z obdržené zprávy spočítá hash a zkontroluje, zda je shodná s hashí, která byla opatřena digitálním podpisem. Pokud ano, má jistotu, že zprávu odeslala skutečně Alice a že byla řádně podepsána. V praxi přichází s používáním soukromých a veřejných klíčů spousta problémů, které je potřeba nějakým způsobem řešit. Může se stát, že přes veškerá opatření získá útočník hodnotu např. Alicina soukromého klíče. V takovém případě je nutné zajistit, aby certifikační autorita přestala poskytovat certifikát k veřejnému klíči, který přísluší k tomuto Alicinu odcizenému soukromému klíči. Problém spočívá v tom, jak zajistit, aby se všichni účastníci komunikace dozvěděli o zrušení certifikátu včas a útočník nestačil napáchat nějaké škody. Zároveň je potřeba, aby si Alice vytvořila nový pár svých klíčů a veřejný opět nechala opatřit certifikátem. Podobný problém nastává, pokud zaměstnanec opouští své místo v ně- 21
2. DIGITÁLNÍ PODPISY Vstup: Dvě celá nezáporná čísla a a b, a b. Výstup: Číslo d = nsd (a, b) a celá čísla x, y, pro která platí: ax + by = d. 1. Pokud b = 0, pak nastav hodnoty výsledných proměnných na d = a, x = 1, y = 0 a skonči. 2. Nastav pomocné proměnné: x 2 = 1, x 1 = 0, y 2 = 0, y 1 = 1. 3. Dokud platí b > 0, dělej následující: q = a, r = a qb, x = x2 qx1, y = y2 qy1. b a = b, b = r, x 2 = x 1, x 1 = x, y 2 = y 1, y 1 = y. 4. Nastav hodnoty výsledných proměnných na d = a, x = x 2, y = y 2 a skonči. Obrázek 2.3: Rozšířený Eukleidův algoritmus. jakém podniku a používal zde soukromý klíč, kterým podepisoval zprávy coby zaměstnanec podniku. Při jeho odchodu se musí zajistit, aby tento klíč nemohl nikdo nadále používat (například proto, aby zaměstnanec nemohl svůj bývalý podnik zneužitím tohoto soukromého klíče poškodit). Důležité je, že digitální podpis sám o sobě nedává žádnou informaci o tom, kdy byl pořízen. Pokud je tuto informaci potřeba k podpisu připojit, musí se použít jiných mechanismů. 2.1 RSA Kryptografický systém RSA [21] je pojmenován po pánech Rivestovi, Shamirovi a Adelmanovi, kteří jej v roce 1977 publikovali. 1 Dnes je to nejpoužívanější algoritmus v systémech pracujících s asymetrickou kryptografií, proto bude popsán podrobněji než ostatní algoritmy. Systém RSA je založen na myšlence, že přestože násobení dvou prvočísel je relativně snadné, faktorizace jejich násobku je obtížná (samozřejmě bez znalosti oněch dvou součinitelů). Pokud chce Alice Bobovi zaslat nějakou zprávu opatřenou digitálním podpisem pomocí RSA, musí mít nejdříve vygenerován svůj soukromý a veřejný klíč. To provede následovně. Nejprve zvolí dvě velká různá prvo- 1 Algoritmus, který je ekvivalentní s RSA, byl ve skutečnosti objeven již v roce 1973. Používala jej ovšem britská informační služba GCHQ (Government Communications Headquarters) a tento objev podléhal přísnému utajení. K odhalení tohoto faktu došlo až v roce 1997. 22
2. DIGITÁLNÍ PODPISY Generování klíčů 1. Vygeneruj dvě velká náhodná a od sebe různá prvočísla p a q, která mají přibližně stejnou velikost. 2. Spočítej n = pq a ϕ(n) = (p 1)(q 1). 3. Zvol libovolné celé číslo e, 1 < e < ϕ(n), pro které platí: nsd(e, ϕ(n)) = 1. 4. Použij rozšířený Eukleidův algoritmus (viz obrázek 2.3) pro nalezení jedinečného čísla d, 1 < d < ϕ(n), pro které platí ed 1 (mod ϕ(n)), tedy d e 1 (mod ϕ(n)). 5. Veřejný klíč je (e, n), soukromý klíč je (d, n). Vytvoření digitálně podepsané zprávy 1. Zpráva m musí být číslo v rozsahu [0, n). 2. Spočítej s = m d mod n. s je digitální podpis zprávy m. 1. Získej Alicin veřejný klíč (e, n). Ověření digitálního podpisu 2. Spočítej m = s e mod n. m je původní hodnota zprávy. Obrázek 2.4: Algoritmus RSA. čísla p a q. Z nich spočítá jejich součin pq = n. Dále spočítá hodnotu Eulerovy funkce pro n (viz definice 2.3), ϕ(n) = (p 1)(q 1) (podle věty 2.4). Potom zvolí libovolné celé číslo e menší než ϕ(n), které je s ϕ(n) nesoudělné. Dvojice čísel (e, n) nyní tvoří Alicin veřejný klíč. Dále musí Alice vypočítat svůj soukromý klíč d. Ten spočítá podle vztahu ed 1 (mod ϕ(n)). Platí tedy d e 1 (mod ϕ(n)). e 1 existuje, protože e bylo zvoleno s ϕ(n) nesoudělné. Hodnota d se dá spočítat například pomocí rozšířeného Eukleidova algoritmu popsaného na obrázku 2.3. Soukromý klíč Alice tvoří dvojice čísel (d, n). Pokud chce nyní Alice podepsat nějakou zprávu m, stačí když spočítá s = m d (mod n). Digitální podpis zprávy m je s. Jestliže chce Bob ověřit digitální podpis zprávy a získat její hodnotu, spočítá pomocí hodnoty Alicina veřejného klíče (e, n) (ponechme nyní stranou otázku certifikátu veřejného klíče) původní hodnotu zprávy: m = s e (mod n). Celé schéma RSA je popsáno na obrázku 2.4. Příklad 2.2. Alice volí prvočísla p = 7, q = 17 (pro praktické použití jsou 23
2. DIGITÁLNÍ PODPISY prvočísla příliš malá, jako příklad však postačují). Dále spočítá n = pq = 7 17 = 119 a ϕ(n) = ϕ(119) = 6 16 = 96. Zvolí e = 77 a spočítá d, například podle schématu na obrázku 2.3. Vyjde d = 5. Soukromý klíč Alice je tedy (5, 119), její veřejný klíč tvoří dvojice čísel (77, 119). Předpokládejme, že Alicí zasílaná zpráva má hodnotu například m = 197. Toto číslo se nevejde do požadovaného rozsahu [0, 119). Musí se tedy rozdělit, například na dva bloky s hodnotami m 1 = 19 a m 2 = 7, ze kterých si poté Bob složí původní hodnotu zprávy. Nyní Alice podepíše oba bloky: s 1 = 19 5 mod 119 = 66, s 2 = 7 5 mod 119 = 28. Alice tedy zašle Bobovi čísla 66 a 28. Bob získá Alicin veřejný klíč a na obdržená čísla aplikuje výpočet: m 1 = 66 77 mod 119 = 19 a m 2 = 28 77 mod 119 = 7. Z těchto výsledků poskládá původní zprávu m = 197. Jak vypadá matematické pozadí celého algoritmu? Při obnovování zprávy m z s se počítá její původní hodnota jako s e mod n. Protože platí s m d (mod n), dá se odvodit s e (m d ) e m de (mod n). Ze vztahu mezi veřejným a soukromým klíčem ed 1 (mod ϕ(n)) je vidět, že platí ed = 1 + k(p 1)(q 1) pro nějaké k Z {0}. Dostáváme tedy s e m 1+k(p 1)(q 1) m m k(p 1)(q 1) (mod n). Protože je p prvočíslo, platí podle malé Fermatovy věty (2.5) m (p 1) 1 (mod p). Dále je vidět, že m (p 1)(q 1)k (m (p 1) ) (q 1)k 1 (q 1)k (mod p) 1 (mod p). q je také prvočíslo, musí tedy platit analogicky m (q 1)(p 1)k 1 (mod q). Podle věty 2.6 dostáváme m (p 1)(q 1)k mod pq = 1 mod pq = 1 mod n. Pokud se nyní vrátíme k původnímu vztahu, dostaneme požadovaný výsledek: s e mod n = m m k(p 1)(q 1) mod n = m 1 mod n = m mod n = m. Zde jsou uvedeny používané definice a věty. Definice 2.3 Eulerova funkce. Necht n je přirozené číslo. Symbolem ϕ(n) označíme počet všech přirozených čísel menších než n a nesoudělných s n. Funkce ϕ se nazývá Eulerova funkce. Věta 2.4. (a) Pro libovolné prvočíslo p platí: ϕ(p) = p 1. (b) Pro libovolná nesoudělná přirozená čísla p, q platí: ϕ(p q) = ϕ(p) ϕ(q). Věta 2.5 Malá Fermatova věta. Necht p je prvočíslo a a je číslo, které je s p nesoudělné. Pak platí a p 1 1 (mod p). Věta 2.6 Čínská zbytková věta. Pokud jsou p a q dvě nesoudělná čísla a 24
2. DIGITÁLNÍ PODPISY pro čísla x a y platí x y (mod p) a x y (mod q), pak platí x y (mod pq). Bezpečnost RSA vyplývá ze skutečnosti, že aby bylo možné z veřejného klíče (e, n) získat hodnotu soukromého klíče (d, n), musel by útočník faktorizovat číslo n, aby získal hodnoty prvočísel, z nichž se n skládá a pomocí nichž je tedy možné soukromý klíč vypočítat. Dnes ovšem neexistuje pro faktorizaci velkých čísel žádný efektivní algoritmus, 2 zbývá tedy metoda hrubou silou. Délka klíče by proto dnes měla být alespoň 1024 bitů. 2.2 ElGamal Dalším používaným schématem pro digitální podpis je algoritmus ElGamal [22]. Jeho bezpečnost je založena na obtížnosti výpočtu diskrétních logaritmů, tedy obecně na obtížnosti výpočtu hodnoty čísla a ze vztahu q a y (mod p), kde hodnoty q, q a, y a p jsou známé. Celý algoritmus je podrobně popsán na obrázku 2.5. Na rozdíl od RSA není možné z digitálního podpisu obnovit původní hodnotu zprávy, ta musí být zaslána zvlášt. Příklad 2.7. Alice chce vygenerovat svůj veřejný a soukromý klíč a zasílat Bobovi digitálně podepsané zprávy pomocí schématu ElGamal. Volí tedy parametry p = 2357, q = 2, a = 1751. Dále spočítá y = 2 1751 mod 2357 = 1185. Veřejný klíč Alice je tedy (2357, 2, 1185). 3 Pro zjednodušení předpokládejme, že pro podepisovanou zprávu platí m Z p a pro hashovací funkci platí h(m) = m. Alice chce Bobovi zaslat například zprávu m = 1463. Zvolí náhodné k = 1529 a spočítá r = 2 1529 mod 2357 = 1490 a k 1 mod (p 1) = 245. Nyní již může spočítat s = 245{1463 1751 1490} mod 2356 = 1777. Digitální podpis zprávy m tvoří dvojice čísel (1490, 1777). Aby Bob digitální podpis ověřil, spočítá v 1 = 1185 1490 1490 1777 mod 2357 = 1072 a v 2 = 2 1463 mod 2357 = 1072. Protože v 1 = v 2, je digitální podpis v pořádku. 2 Ve skutečnosti takový algoritmus existuje, jmenuje se Shorův. Jeho časová složitost je polynomiální. Je ovšem navržený pro kvantové počítače. V současné době však žádný kvantový počítač schopný pracovat s velkými čísly neexistuje a pravděpodobně ještě dlouho existovat nebude. 3 Zvolené parametry jsou, stejně jako v příkladu 2.1, pro praktické použití příliš malé. V praxi se volí délka p několik set bitů. 25
2. DIGITÁLNÍ PODPISY Generování klíčů 1. Vygeneruj velké náhodné prvočíslo p a generátor q multiplikativní grupy Z p. 2. Zvol náhodné celé číslo a, 1 a p 2. 3. Spočítej y = q a mod p. 4. Veřejný klíč je trojice (p, q, y). Soukromý klíč je (p, q, a). Vytvoření digitálně podepsané zprávy 1. Zvol náhodné tajné celé číslo k, 1 k p 2, pro které platí nsd(k, p 1) = 1. 2. Spočítej r = q k mod p. 3. Spočítej k 1 mod (p 1). 4. Spočítej s = k 1 {h(m) ar} mod (p 1). h je hashovací funkce, jejíž obor hodnot musí být Z p. 5. Digitální podpis zprávy m je dvojice (r, s). 1. Získej Alicin veřejný klíč (p, q, y). Ověření digitálního podpisu 2. Zkontroluj, zda platí 1 r p 1. Pokud ne, podpis je chybný. 3. Spočítej v 1 = y r r s mod p. 4. Spočítej h(m) a v 2 = q h(m) mod p. 5. Pokud platí v 1 = v 2, je digitální podpis v pořádku. Pokud platí v 1 v 2, je podpis chybný. Obrázek 2.5: Algoritmus ElGamal. 2.3 DSA Na obtížnosti výpočtu diskrétních logaritmů je založen i další algoritmus digitálního podpisu, jmenuje se DSA [11] (Ditital Signature Algorithm) a je velmi podobný algoritmu ElGamal. Algoritmus DSA je zajímavý tím, že byl v roce 1994 vybrán americkým standardizačním úřadem NIST [23] (National Institute of Standards and Technology) pro standard digitálního podpisu DSS (Digital Signature Standard). Bylo to vůbec první schéma digitálního podpisu, které bylo uznáno za standard vládou nějaké země. 26