Autentizace dat
Transkript
}w !"#$%&'()+,-./012345<yA| MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Hashovacı́ funkce . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1 Základnı́ vlastnosti hashovacı́ch funkcı́ . . . . . . . . . . . . 1.2 Neklı́čované hashovacı́ funkce . . . . . . . . . . . . . . . . . 1.2.1 Hashovacı́ funkce založené na blokových šifrách . . . 1.2.2 Speciálnı́ hashovacı́ funkce . . . . . . . . . . . . . . . 1.2.3 Hashovacı́ funkce založené na modulárnı́ aritmetice . 1.2.4 Kontrolnı́ součty . . . . . . . . . . . . . . . . . . . . . 1.3 Klı́čované hashovacı́ funkce – autentizačnı́ kódy . . . . . . . 1.3.1 Autentizačnı́ kódy založené na blokových šifrách . . 1.3.2 Vytvářenı́ autentizačnı́ch kódů z hashovacı́ch funkcı́ 1.3.3 MAA a MD5-MAC algoritmy . . . . . . . . . . . . . . 1.4 Útoky na hashovacı́ funkce . . . . . . . . . . . . . . . . . . . 2 Digitálnı́ podpisy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 RSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 ElGamal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 DSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4 Feige-Fiat-Shamir . . . . . . . . . . . . . . . . . . . . . . . . . 3 Netrw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1 Autentizace komunikujı́cı́ch stran . . . . . . . . . . . . . . . . 3.1.1 Autentizace jedné strany . . . . . . . . . . . . . . . . . 3.1.2 Autentizace obou stran . . . . . . . . . . . . . . . . . 3.2 Autentizace dat po dokončenı́ jejich přenosu . . . . . . . . . 3.2.1 Jednostranná autentizace dat . . . . . . . . . . . . . . 3.2.2 Oboustranná autentizace dat . . . . . . . . . . . . . . 3.3 Pomocné soubory . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1 Soubor rand . . . . . . . . . . . . . . . . . . . . . . . 3.3.2 Soubor prev . . . . . . . . . . . . . . . . . . . . . . . 3.3.3 Soubor keys . . . . . . . . . . . . . . . . . . . . . . . 3.4 Použité nástroje . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.1 Ověřenı́ bezpečnosti funkce mhash keygen ext() . 3.5 Parametry Netrw . . . . . . . . . . . . . . . . . . . . . . . . . 1 4 6 10 12 13 14 15 15 16 16 17 17 17 19 22 25 26 27 28 30 31 32 32 32 32 33 33 33 34 35 36 37 OBSAH 3.6 3.7 Implementace . . . . . . . . . . . . . . . . . . . . . . Přı́klady použitı́ Netrw . . . . . . . . . . . . . . . . 3.7.1 Přenos dat bez autentizace . . . . . . . . . . 3.7.2 Přenos dat za použitı́ autentizace . . . . . . . 3.8 Testy rychlosti . . . . . . . . . . . . . . . . . . . . . . 3.8.1 Intel Celeron 900MHz . . . . . . . . . . . . . 3.8.2 AMD Duron 600MHz . . . . . . . . . . . . . 3.8.3 2× Pentium III 1 GHz . . . . . . . . . . . . . 3.8.4 Intel Celeron 900MHz, AMD Duron 600MHz 3.8.5 Shrnutı́ testů . . . . . . . . . . . . . . . . . . . 4 Závěr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A Hashovacı́ funkce . . . . . . . . . . . . . . . . . . . . . . . A.1 Hashovacı́ funkce Matyas-Meyer-Oseas . . . . . . . A.2 Hashovacı́ funkce MD5 . . . . . . . . . . . . . . . . . A.3 Hashovacı́ funkce SHA-1 . . . . . . . . . . . . . . . . A.4 Algoritmus CBC-MAC . . . . . . . . . . . . . . . . . A.5 Algoritmus MAA . . . . . . . . . . . . . . . . . . . . A.6 Yuvalův narozeninový útok . . . . . . . . . . . . . . B Netrw – komunikačnı́ protokol . . . . . . . . . . . . . . B.1 Použı́vané zprávy . . . . . . . . . . . . . . . . . . . . B.2 Komunikace . . . . . . . . . . . . . . . . . . . . . . . C Testy rychlosti přenosu dat . . . . . . . . . . . . . . . . . C.1 Intel Celeron 900 MHz . . . . . . . . . . . . . . . . . C.2 AMD Duron 600 MHz . . . . . . . . . . . . . . . . . C.3 2× Pentium III 1 GHz . . . . . . . . . . . . . . . . . . C.4 Intel Celeron 900 MHz, AMD Duron 600 MHz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 42 42 43 44 45 45 45 46 46 47 53 53 54 56 58 59 60 61 61 63 67 68 70 72 74 2 Seznam obrázků 1.1 1.2 1.3 1.4 1.5 1.6 Použitı́ CRC. . . . . . . . . . . . . . . . . . . . . . . . . . Použitı́ hashovánı́ za pomoci autentizovaného kanálu. Použitı́ hashovánı́ ve spolupráci s šifrovánı́m dat. . . . Použitı́ autentizačnı́ch kódů. . . . . . . . . . . . . . . . . Hashovacı́ funkce Matyas-Meyer-Oseas. . . . . . . . . . Autentizačnı́ kód CBC-MAC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 8 8 9 13 16 2.1 2.2 2.3 2.4 2.5 2.6 Obecné schéma digitálnı́ho podpisu. . . . . . . . . . . Schéma digitálnı́ho podpisu využı́vajı́cı́ho hashovánı́. Rozšı́řený Eukleidův algoritmus. . . . . . . . . . . . . Algoritmus RSA. . . . . . . . . . . . . . . . . . . . . . Algoritmus ElGamal. . . . . . . . . . . . . . . . . . . . Feige-Fiat-Shamir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 21 22 23 26 27 3.1 3.2 Komunikačnı́ protokol Netrw verze 1.2 (přı́klad). . . . . . . Autentizačnı́ protokol – autentizace uživatelů (přı́klad). . . . 40 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). Pøíjemce Odesílatel Neautentizovaný kanál Data Data CRC 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 Pøíjemce Odesílatel Neautentizovaný kanál Data Data Autentizovaný kanál Hash 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). Pøíjemce Odesílatel Neautentizovaný kanál Data Hash Zašifrovaná hash Šifrovací algoritmus Hash ? Data Zašifrovaná 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. Pøíjemce Odesílatel Neautentizovaný kanál Data MAC Data MAC Tajný klíè k Tajný klíè k MAC ? 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 x0 , x 6= x0 takovou, že h(x) = h(x0 ). 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 x0 , pro které platı́ h(x) = h(x0 ). 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 x0 6= x, pro která by platilo h(x0 ) = 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ı́ hk , kde k je tajný klı́č, s následujı́cı́mi vlastnostmi: • Snadnost výpočtu – Pro daný autentizačnı́ kód hk , daný tajný klı́č k a libovolná vstupnı́ data x musı́ být výpočetně snadné spočı́tat hodnotu autentizačnı́ho kódu hk (x). • Komprese – hk zobrazuje vstupnı́ data x libovolné (konečné) bitové délky na data hk (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ů (xi , hk (xi )), je výpočetně obtı́žné bez znalosti k nalézt nějakou dvojici (x, hk (x)), x 6= xi . (Nemusı́ platit podmı́nka hk (x) 6= hk (xi ).) 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 n6 nebo n2 + 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 x1 , . . . , xn . Poté se jednotlivé bloky zpracovávajı́ hashovacı́m algoritmem, a to tı́m způsobem, že h(xi ) vždy závisı́ jak na přı́slušném bloku dat, tak i na hashi předchozı́ho bloku. Platı́ tedy vztah h(xi ) = f (xi , h(xi−1 )). Výsledná hash je rovna h(xn ). 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 xi 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. HASHOVACÍ FUNKCE 1.2.1 Hashovacı́ funkce založené na blokových šifrách 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ı́. x2 x1 IV g E H1 H1 g xt E ... H t-1 g H2 E Ht 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ě 264 operacı́ a nalezenı́ nějakých vstupnı́ch dat odpovı́dajı́cı́ch předem zadané hashi mělo trvat průměrně 2128 operacı́. Pro tuto hashovacı́ funkci ovšem byly nalezeny kolize, které snižujı́ čas potřebný pro útok hrubou silou na pouhých 220 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 16krokové 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 + x2 + x15 + x16 . 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 x16 · 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. HASHOVACÍ FUNKCE 1.3 Klı́čované hashovacı́ funkce – autentizačnı́ kódy 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. x1 0 k E xt x3 x2 H3 H2 H1 E k H1 k ... E k E Ht H3 H2 Ht-1 Zvýšení bezpeènosti H k k' 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 0 , který snižuje možnost odhalenı́ hodnoty k a zabraňuje útokům vybraným textem. 16 1. HASHOVACÍ FUNKCE 1.3.2 Vytvářenı́ autentizačnı́ch kódů z hashovacı́ch funkcı́ 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 hk (x) = h(k k x) (kde k je operace zřetězenı́), nebo jako postfix: hk (x) = h(x k k). Použı́vané jsou i dalšı́, sofistikovanějšı́ metody, napřı́klad Hash-based MAC [18] (HMAC): HM AC(x) = h(k k p1 k h(k k p2 k x)), kde p1 a p2 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 x0 , x0 6= x, pro která platı́ h(x0 ) = h(x). Ideálnı́ sı́la slabých jednosměrných hashovacı́ch funkcı́ by měla být 2n , tedy k jejich prolomenı́ by ideálně mělo být zapotřebı́ průměrně 2n 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 x0 taková, že platı́ h(x) = h(x0 ). Ideálnı́ sı́la této funkce je 2n/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ě 2n/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ı́ x01 a x02 z x1 a x2 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, hk (x)) za znalosti libovolného množstvı́ dvojic (xi , hk (xi )), xi 6= 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ě 2t 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. Odesílatel (Alice) Data Pøíjemce (Bob) Alicin soukromý klíè Algoritmus digitálního podpisu Alicin veøejný klíè Certifikát Alicina veøejného klíèe 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. Odesílatel (Alice) Data Pøíjemce (Bob) Alicin soukromý klíè Alicin veøejný klíè Certifikát Alicina veøejného klíèe Data Data Hash 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é: x2 = 1, x1 = 0, y2 = 0, y1 = 1. 3. Dokud platı́ b > 0, dělej následujı́cı́: • q = b ab c, r = a − qb, x = x2 − qx1 , y = y2 − qy1 . • a = b, b = r, x2 = x1 , x1 = x, y2 = y1 , y1 = y. 4. Nastav hodnoty výsledných proměnných na d = a, x = x2 , y = y2 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á prvo1 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 = md mod n. s je digitálnı́ podpis zprávy m. Ověřenı́ digitálnı́ho podpisu 1. Zı́skej Alicin veřejný klı́č (e, n). 2. Spočı́tej m = se 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 = md (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 = se (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 m1 = 19 a m2 = 7, ze kterých si poté Bob složı́ původnı́ hodnotu zprávy. Nynı́ Alice podepı́še oba bloky: s1 = 195 mod 119 = 66, s2 = 75 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: m1 = 77 66 mod 119 = 19 a m2 = 2877 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 se mod n. Protože platı́ s ≡ md (mod n), dá se odvodit se ≡ (md )e ≡ mde (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 se ≡ m1+k(p−1)(q−1) ≡ m · mk(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: se mod n = m · mk(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ı́ ap−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 = 21751 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 = 21529 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á v1 = 11851490 · 14901777 mod 2357 = 1072 a v2 = 21463 mod 2357 = 1072. Protože v1 = v2 , 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). Ověřenı́ digitálnı́ho podpisu 1. Zı́skej Alicin veřejný klı́č (p, q, y). 2. Zkontroluj, zda platı́ 1 ≤ r ≤ p − 1. Pokud ne, podpis je chybný. 3. Spočı́tej v1 = y r rs mod p. 4. Spočı́tej h(m) a v2 = q h(m) mod p. 5. Pokud platı́ v1 = v2 , je digitálnı́ podpis v pořádku. Pokud platı́ v1 6= v2 , 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 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. Spočı́tej n = pq. 2. Zvol kladné celé čı́slo k a navzájem různá celá čı́sla s1 , s2 , . . . , sk ∈ Z∗n . 3. Spočı́tej vj = s−2 mod n, 1 ≤ j ≤ k. j 4. Veřejný klı́č je k-tice (v1 , v2 , . . . , vk ) a čı́slo n. Soukromý klı́č je k-tice (s1 , s2 , . . . , sk ) a čı́slo n. Vytvořenı́ digitálně podepsané zprávy 1. Zvol náhodné celé čı́slo r, 1 ≤ r ≤ n − 1 2. Spočı́tej u = r2 mod n. 3. Spočı́tej e = (e1 , e2 , . . . , ek ) = h(m k u); pro každé ei platı́: ei ∈ {0, 1}. 4. Spočı́tej s = r · k Q e sj j mod n. j=1 5. Digitálnı́ podpis zprávy m je dvojice (e, s). Ověřenı́ digitálnı́ho podpisu 1. Zı́skej Alicin veřejný klı́č (v1 , v2 , . . . , vk ) a n. 2. Spočı́tej w = s2 · k Q e vj j mod n. j=1 3. Spočı́tej e0 = h(m k w). 4. Pokud platı́ e0 = e, je digitálnı́ podpis v pořádku. Pokud je e0 6= e, podpis odmı́tni. Obrázek 2.6: Feige-Fiat-Shamir. 2.4 Feige-Fiat-Shamir Algoritmus digitálnı́ho podpisu Feige-Fiat-Shamir [24] je založen na faktu, že zatı́mco nalezenı́ odmocniny nějakého čı́sla modulo p, kde p je prvočı́slo, je relativně snadné, problém nalezenı́ odmocniny modulo n, kde n je čı́slo složené a jeho součinitelé nejsou známi, je považován za výpočetně velmi obtı́žný. Bezpečnost algoritmu je tedy, podobně jako u RSA, založena na obtı́žnosti faktorizace velkých čı́sel. 27 Kapitola 3 Netrw Balı́k Netrw [25] sloužı́ pro jednoduchý a rychlý přenos dat přes Internet bez použitı́ dalšı́ch podpůrných nástrojů jako napřı́klad ftp. Umožňuje také spočı́tat hash zası́laných dat pomocı́ několika hashovacı́ch algoritmů (MD5, SHA-1 a RIPEMD-160). Netrw je možné provozovat na unixových operačnı́ch systémech (Linux [26], Solaris [27], IRIX [28], OpenBSD [29], . . . ) a na systémech Windows [30] (95/98/NT/2000/XP). Celý je napsaný v programovacı́m jazyce C pod licencı́ GNU GPL [31]. Balı́k se skládá ze dvou programů – klientů: netwrite sloužı́ pro zası́lánı́ dat a netread pro přijı́mánı́ těchto dat. Typické použitı́ Netrw vypadá následovně. Pro přenesenı́ napřı́klad souboru data.tar.bz2 z počı́tače host1.somewhere.net na počı́tač host2.somewhere.net stačı́ zadat přı́kazy: • Na počı́tači host2.somewhere.net: netread 50000 >data.tar.bz2 Po tomto přı́kazu bude netread čekat na portu 50000 na spojenı́ a na přı́chozı́ data, která po obdrženı́ uložı́ do souboru data.tar.bz2. • Na počı́tači host1.somewhere.net: netwrite host2.somewhere.net 50000 <data.tar.bz2 Tento přı́kaz ustanovı́ spojenı́ s počı́tačem host2.somewhere.net na portu 50000 (kde již musı́ být spuštěn netread očekávajı́cı́ spojenı́ na tomto portu) a pošle mu soubor data.tar.bz2. Po ukončenı́ přenosu si obě strany vzájemně zašlou hash přenesených dat pro kontrolu jejich integrity během přenosu. Jsou takto informovány, zda byla data doručena v pořádku a bez chyb. Data je možné přenášet protokoly TCP [32] a UDP [33] (přičemž druhý z nich sloužı́ spı́še pro testovacı́ účely). Za normálnı́ch okolnostı́ navazuje spojenı́ netwrite. Pokud je ovšem na straně klienta netread v jeho lokálnı́ sı́ti aplikován překlad adres nebo 28 3. NETRW zakázáno navazovánı́ spojenı́ zvenku lokálnı́ sı́tě, spojenı́ takto nelze ustanovit. Proto obsahuje Netrw přepı́nač -f, který zapne tzv. firewall mód. Ten způsobı́, že spojenı́ naváže netread. Přenos dat potom vypadá následovně: • Na počı́tači host1.somewhere.net se zadá přı́kaz netwrite -f 50000 <data.tar.bz2 • Na počı́tači host2.somewhere.net se zadá netread -f host1.somewhere.net 50000 >data.tar.bz2 Pokud je potřeba přenést vı́ce souborů najednou, na unixových strojı́ch se to dá provést napřı́klad pomocı́ přı́kazů netread 50000 | tar xf na straně přijı́majı́cı́ a přı́kazů tar cf - file1 file2 | \ netwrite host2.somewhere.net 50000 na straně odesı́lajı́cı́. Na systémech Windows je nutné vı́ce souborů sdružit do jednoho pomocı́ nějakého jiného nástroje (napřı́klad WinZip [34], WinRar [35]), přenést tento jeden soubor a na přijı́majı́cı́ straně z tohoto archı́vu vyextrahovat původnı́ soubory. Data se během přenosu žádným způsobem nešifrujı́. Proto je jejich přenos velmi rychlý. U velkého množstvı́ datových přenosů šifrovánı́ dat ani nenı́ třeba. A pokud je, pro šifrovaný přenos souborů existujı́ jiné nástroje (napřı́klad SCP [36]). U obdržených dat zaslaných pomocı́ Netrw však také neexistuje ani žádná záruka, že jejich odesı́latel je skutečně ten, koho přı́jemce na druhé straně spojenı́ očekává. Data mohou být podvržena nějakým útočnı́kem, a naopak, data se ke správnému přı́jemci nemusı́ vůbec dostat, protože je může přijmout útočnı́k. Úkolem této práce bylo upravit systém Netrw tak, aby si zachoval svou dosavadnı́ funkčnost, a navı́c implementoval systém autentizace dat a autentizace jednotlivých komunikujı́cı́ch stran. Před vlastnı́m přenosem obě strany zjistı́, zda komunikujı́cı́ partner je skutečně tı́m, za koho se vydává (aby se data zbytečně neposı́lala nějakému útočnı́kovi, nebo naopak od útočnı́ka nepřijı́mala). Poté se provede vlastnı́ přenos dat a pomocı́ výměny autentizačnı́ho kódu těchto dat (spočı́taného pomocı́ sdı́leného klı́če) se ověřı́ jejich autenticita. Přijetı́m autentizačnı́ho kódu si zároveň odesı́latel ověřı́, že data dorazila ke správnému přı́jemci. 29 3. NETRW 3.1 Autentizace komunikujı́cı́ch stran Proces autentizace mezi dvěmi komunikujı́cı́mi stranami zajišt’uje jedné nebo oběma stranám určitou (samozřejmě pokud možno co největšı́) dávku jistoty o skutečné identitě druhé strany. Pro autentizaci přes sı́t’je nutné použı́t nějaký autentizačnı́ protokol. Nejčastěji použı́vané autentizačnı́ protokoly jsou protokoly typu výzva-odpověd’. Na autentizačnı́ protokoly typu výzva-odpověd’ jsou kladeny tyto podmı́nky: • Odposlech zası́laných zpráv útočnı́kovi nepomůže v podvodné autentizaci. • Po odeslánı́ a přijetı́ všech zpráv má jedna nebo obě strany jistotu o identitě druhého komunikujı́cı́ho partnera. Autentizačnı́ protokoly jsou založeny na několika různých technikách. Některé protokoly použı́vajı́ symetrickou kryptografii, jiné zase asymetrickou. Existujı́ i tzv. „zero knowledge“ protokoly (protokoly s nulovým rozšı́řenı́m znalostı́), které umožňujı́ demonstrovat znalost nějakého tajemstvı́ bez odhalenı́ jakékoliv informace vedoucı́ k zı́skánı́ tohoto tajemstvı́ útočnı́kem. V systému Netrw bude použit pro autentizaci obou stran před začátkem přenosu dat autentizačnı́ protokol založený na symetrické kryptografii. Symetrická kryptografie je rychlá, nevyžaduje spoluúčast třetı́ strany a pokud se zvolı́ vhodný algoritmus, pak je i bezpečná. Co bývá obsahem zası́laných zpráv? Většinou se jedná o obdobu jedné z následujı́cı́ch variant: • Náhodná čı́sla – Pokud se autentizuje Alice Bobovi, zašle nejprve Bob Alici nějaké náhodné čı́slo r. Alice pak Bobovi zašle zpět toto náhodné čı́slo zašifrované pomocı́ sdı́leného symetrického klı́če nebo jeho autentizačnı́ kód. Bob si takto může snadno ověřit, že Alice skutečně zná sdı́lené tajemstvı́. Ve skutečnosti se většinou nepoužı́vajı́ přı́mo náhodná čı́sla (jejich generovánı́ je obtı́žné, vyžaduje speciálnı́ hardware), ale čı́sla pseudonáhodná. • Sekvence – Mı́sto náhodných čı́sel se použı́vá monotónně rostoucı́ sekvence čı́sel. Takto se zajistı́ jednoznačná identifikace zpráv. Zajišt’uje se tak i zabráněnı́ útokům přehránı́m předchozı́ komunikace. 30 3. NETRW • Časová razı́tka – Obě strany musı́ mı́t spolu synchronizované hodiny. Každá zpráva pak obsahuje své časové razı́tko. Tak je zajištěna jedinečnost zpráv a časová přesnost. Při použitı́ sekvencı́ a časových razı́tek musı́ být obě strany nějakým způsobem sesynchronizované. Tato skutečnost vyžaduje jejich dalšı́ dodatečnou komunikaci, která nemusı́ být triviálnı́. Při použitı́ těchto mechanismů by musel být návrh Netrw zbytečně složitý. Proto bude autentizace prováděna pomocı́ pseudonáhodných čı́sel. Zprávy budou navı́c obsahovat časový údaj, aby nemohly být použity pro nějakou variantu útoku přehránı́m. Časový údaj zde neplnı́ úlohu časového razı́tka (komunikujı́cı́ strany nemajı́ synchronizované hodiny). Navı́c je možné, že jedna strana (přı́padně obě) má hodiny nastavené úplně špatně. To je bohužel skutečnost, se kterou se bez sofistikované časové synchronizace nedá nic dělat. Na tyto časové údaje se tedy nedá spoléhat, plnı́ zde spı́še jakousi informativnı́ funkci (pokud se napřı́klad posunou hodiny komunikujı́cı́ho partnera o většı́ časový úsek nazpět oproti předchozı́ komunikaci, může se jednat o nějaký útok přehránı́m atp.). 3.1.1 Autentizace jedné strany Pokud se před začátkem přenosu autentizuje pouze Bob Alici, komunikace vypadá následovně: A → B : tA , rA , nameA @machineA , nameB @machineB B → A : tB , Hk (tA , tB , rA , nameB @machineB , nameA @machineA ) Použité symboly majı́ následujı́cı́ významy: tA – Časový údaj strany A. Údaj tvořı́ jedno čı́slo, které má podobu unix time.qqqqqq, kde prvnı́ část tvořı́ unixový čas (tedy počet vteřin od 1. ledna 1970) a qqqqqq udává počet mikrosekund. rA – Pseudonáhodné čı́slo strany A délky 8 bajtů (tj. čı́slo v rozmezı́ 0 až 264 − 1). nameA @machineA – Označenı́ komunikujı́cı́ strany. nameA může být napřı́klad login nebo plné jméno (ve formátu napřı́klad Jmeno Prijmeni bez mezery mezi slovy). Vzhledem k tomu, že jména budou použı́vána jak v unixových systémech tak i v systémech Windows, je lepšı́ se vyvarovat znaků z národnı́ch abeced a vystačit si se standardnı́mi ASCII znaky. machineA je jméno stroje v podobě napřı́klad host1.somewhere.net. 31 3. NETRW Hk – Autentizačnı́ kód s klı́čem k. V systému bude použit autentizačnı́ kód typu HMAC (viz kapitola 1.3.2). Klı́č je symetrický a obě strany jej sdı́lejı́. 3.1.2 Autentizace obou stran Pokud se před začátkem přenosu autentizujı́ vzájemně obě strany, jejich komunikace pak bude vypadat následovně: A → B : tA , rA , nameA @machineA , nameB @machineB B → A : tB , rB , nameB @machineB , nameA @machineA , Hk (tB , tA , rB , rA , nameB @machineB , nameA @machineA ) A → B : Hk (tA , tB , rA , rB , nameA @machineA , nameB @machineB ) 3.2 Autentizace dat po dokončenı́ jejich přenosu Vlastnı́ protokol autentizace dat po dokončenı́ jejich přenosu vypadá podobně, jako protokol zajišt’ujı́cı́ autentizaci komunikujı́cı́ch stran. Pouze jsou v autentizačnı́m kódu započı́távána i přenášená data. 3.2.1 Jednostranná autentizace dat Při prováděnı́ jednostranné autentizace dat provádı́ výpočet autentizačnı́ho kódu jenom jedna strana a po dokončenı́ výpočtu tento kód zašle straně druhé. Protože se při autentizaci dat bude jednat o stále stejné TCP spojenı́ jako při autentizaci uživatelů a hodnoty náhodných čı́sel a časových údajů použitých při autentizaci uživatelů nebyly v žádné předchozı́ komunikaci použity pro autentizaci dat, je možné je zde použı́t. Ušetřı́ se tı́m režie potřebná pro jejich zası́lánı́. B → A : tB , Hk (data, tA , tB , rA , nameB @machineB , nameA @machineA ) 3.2.2 Oboustranná autentizace dat Protokol oboustranné autentizace dat po dokončenı́ jejich přenosu je prováděn analogicky jako při jednostranné autentizaci. Autentizačnı́ kód ovšem počı́tajı́ obě strany a po přenosu dat si své kódy vyměnı́. B → A : Hk (data, tB , tA , rB , rA , nameB @machineB , nameA @machineA ) 32 3. NETRW A → B : Hk (data, tA , tB , rA , rB , nameA @machineA , nameB @machineB ) 3.3 Pomocné soubory Netrw bude ke své činnosti využı́vat některé pomocné soubory. Soubory budou uloženy v adresáři $HOME/.netrw každého uživatele. Tento adresář musı́ mı́t nastavena práva čtenı́, přı́stupu a zápisu pouze pro jejich vlastnı́ka, aby citlivý obsah souborů v něm obsažených nemohl čı́st (či dokonce modifikovat) někdo nepovolaný. Stejně tak samotné tyto soubory musı́ mı́t nastavena práva pro čtenı́ a zápis pouze pro vlastnı́ka. Musı́ být také nějakým způsobem omezena maximálnı́ velikost těchto souborů (to se netýká souboru keys). Po přesáhnutı́ této velikosti se ze souborů budou automaticky vymazávat nejstaršı́ položky. U pomocných souborů rand a prev by se mohlo stát, že v přı́padě, kdy by nějaký útočnı́k zı́skal právo zápisu do těchto souborů, mohl by je naplnit falešnými údaji nebo přı́padně ze souboru prev odstranit údaje o předchozı́ komunikaci a využı́t toho k nějaké variantě útoku přehránı́m předchozı́ komunikace (viz popis obsahu souboru prev v části 3.3.2). Proto budou tyto dva soubory obsahovat autentizačnı́ kód, který bude počı́tán z jejich obsahu. Jako klı́č bude použito globálnı́ heslo uživatele (viz kapitola 3.3.3). Při každém čtenı́ údajů z těchto souborů bude prováděna kontrola jejich integrity a při každém zápisu bude jejich autentizačnı́ kód přepočı́táván. 3.3.1 Soubor rand Tento soubor obsahuje u Alice položky ve tvaru < autentizační kód > rA1 rA2 rA3 . . . kde rAi jsou pseudonáhodná čı́sla, která uživatel během předchozı́ činnosti použı́val. Každé nově vygenerované pseudonáhodné čı́slo je porovnáváno s čı́sly v tomto souboru. Pokud již bylo toto čı́slo použito dřı́ve, vygeneruje se nové. 3.3.2 Soubor prev V tomto souboru jsou ukládány položky ve tvaru 33 3. NETRW < autentizační kód > rA1 jmenoB @strojB tB1 rA2 jmenoC @strojC tC1 rA3 jmenoB @strojB tB2 rA4 jmenoD @strojD tD1 .. . rB1 rC1 rB2 rD1 Znak značı́ mezeru. Tento soubor obsahuje historii dřı́vějšı́ komunikace (autentizace). Při komunikaci s Bobem provádı́ Alice následujı́cı́ testy: • Pokud je hodnota přijatého tB menšı́ nebo rovna hodnotě největšı́ho tBn uloženého v souboru, odmı́tni spojenı́, protože se může jednat o útok. • Pokud je hodnota přijatého rB stejná, jako hodnota některého rBi , rCi , . . . v souboru, vyžádej si nové rB . Samozřejmě se může stát, že Bob si od doby poslednı́ komunikace s Alicı́ přenastavil na svém počı́tači hodiny o nějaký čas nazpátek. Od tohoto okamžiku jej však bude při každém pokusu o spojenı́ s nı́m považovat Alice za útočnı́ka. Tomu lze zabránit bud’ smazánı́m Bobových záznamů z Alicina souboru prev nebo přepı́načem, který Netrw obsahuje a který způsobuje, že informace ze souboru prev nebudou brány v potaz. 3.3.3 Soubor keys Aby si nemusel uživatel pamatovat všechna hesla pro komunikaci se svými partnery, je vhodné uložit je do nějakého souboru. Zároveň je možné uložit do tohoto souboru „základnı́ “ port, tj. port, přes který bude probı́hat komunikace, pokud nebude explicitně zadán port jiný. Položka portu je volitelná. Tento způsob je ale velmi nebezpečný. Pokud by dokázal útočnı́k zı́skat tento soubor, zı́ská tı́m zároveň i všechna hesla v otevřené podobě. Proto musı́ být tato hesla uložena v zašifrované podobě. Velmi vhodná pro tento účel je symetrická šifra AES. Platı́ dnes prakticky za standard symetrického šifrovánı́. Je založena na algoritmu Rijndael. Ten pracuje s bloky délky 128 bitů, tj. 16 bajtů. Nabı́zı́ se tedy omezit maximálnı́ délku šifrovaného hesla na tuto hodnotu, aby stačilo pro jeho zašifrovánı́ zpracovat pouze jeden blok. AES dovoluje pro šifrovánı́ použı́vat klı́če délky 128, 192 a 256 bitů. Protože šifrovaná data budou mı́t délku 128 bitů, budou mı́t tuto délku i klı́če. 34 3. NETRW Heslo však bývá většinou kratšı́ (délka hesla se typicky pohybuje okolo 8 znaků, tedy 64 bitů). Je tedy nutné expandovat toto heslo na klı́č požadované délky. K tomu sloužı́ expanznı́ funkce. Ty „roztáhnou“ heslo tak, že jeho efektivnı́ délka se zvětšı́ na požadovaný počet bitů. Je důležité, aby expanznı́ funkce fungovala správně a neměla žádné slabiny, kterých by mohl útočnı́k využı́t při pokusu o prolomenı́ klı́če (tj. slabiny, pomocı́ kterých je možno snı́žit efektivnı́ délku takto vytvořeného klı́če). Globálnı́ heslo, pomocı́ kterého se budou šifrovat ostatnı́, sdı́lená hesla, musı́ být také nějak uloženo, aby bylo možné kontrolovat, zda uživatelem zadané heslo je správné. Z výše uvedených důvodů nemůže být heslo uloženo v souboru přı́mo. Protože samotné heslo uživatel při každé komunikaci zadává ručně, pro kontrolu jeho správnosti postačı́, když bude uložena pouze jeho hash. Pro jejı́ výpočet se bude použı́vat algoritmus SHA-1, který je v dnešnı́ době považován za bezpečný. Hash bude uložena vždy na prvnı́m řádku souboru keys (samozřejmě pouze v přı́padě, že heslo již bylo uživatelem zadáno). Dalšı́ hodnotou, kterou je potřeba uložit v nějakém souboru, je jméno, pod kterým bude klient vystupovat při komunikaci. Vytvářet kvůli němu zvláštnı́ soubor by znamenalo zbytečnou režii (otevı́ránı́ a zavı́ránı́ souboru). Proto bude hodnota jména uložena taktéž v souboru keys. Bude vždy v 1. řádku tohoto souboru. Jméno bude tvořit posloupnost znaků bez mezer, která neobsahuje znak @. Při prvnı́m spuštěnı́ programu bude do souboru uložen aktuálnı́ login uživatele a bude použı́ván jako jeho jméno do té doby, než si své jméno uživatel nastavı́ sám. Konečná podoba souboru keys tedy vypadá následovně: jmeno hash(globální heslo) jmenoB @strojB šifra(hesloAB ) port1 jmenoC @strojC šifra(hesloAC ) jmenoD @strojD šifra(hesloAD ) port2 .. . 3.4 Použité nástroje Netrw bude použı́vat následujı́cı́ externı́ knihovny a nástroje: • mhash [37] – Knihovna poskytujı́cı́ hashovacı́ funkce, autentizačnı́ kódy a funkce pro expanzi hesel na klı́če. Z této knihovny budou využity funkce implementujı́cı́ autentizačnı́ kódy založené na hashovacı́ch funkcı́ch SHA-1, SHA-256, RIPEMD-160 a TIGER-160. Dále bude 35 3. NETRW využita funkce pro expanzi hesla na klı́č. Pro běh Netrw je nutné, aby byla tato knihovna nainstalována v systému. • AES [38] – Knihovna implementujı́cı́ algoritmus symetrického šifrovánı́. Zdrojové texty této knihovny jsou vloženy do zdrojových textů Netrw, takže se tato knihovna nemusı́ instalovat do systému. 3.4.1 Ověřenı́ bezpečnosti funkce mhash keygen ext() Pro expanzi hesla na klı́č je použita funkce mhash keygen ext() z knihovny mhash. Ta umı́ vytvářet klı́če z hesel několika různými způsoby. Pro Netrw byla vybrána tzv. Simple String-to-key metoda, která je popsána např. v [39] a je použı́vána v systému OpenPGP [40]. Pro vytvářenı́ klı́čů použı́vá hashovacı́ funkci, kterou je možné si zvolit. Z hashovacı́ch funkcı́ podporovaných knihovnou mhash byla vybrána SHA-1, protože je v dnešnı́ době považována za bezpečnou a délka jı́ produkované hashe je pro klı́č postačujı́cı́. Pro jistotu byly provedeny testy, zda je implementace této expanznı́ funkce v knihovně mhash korektnı́ a zda se nepodařı́ v nı́ nalézt nějaká slabá mı́sta. Funkce by předevšı́m neměla mı́t žádné slabiny, kterých by mohl útočnı́k zneužı́t při pokusu o snı́ženı́ efektivnı́ délky klı́če. Jaké vlastnosti by tedy tato funkce měla mı́t? Při malé změně zadávaného hesla (např. 1 nebo 2 bity) by měla nastat velká změna ve vygenerovaném klı́či. Tj. pokud se napřı́klad zadajı́ dvě hesla, která se mezi sebou lišı́ pouze v 1 bitu, výsledné klı́če by se měly mezi sebou lišit průměrně o 64 bitů (při délce klı́čů 128 bitů). Pro testovánı́ byl použit program Automated Password Generator [41], který umı́ generovat náhodná hesla. Pomocı́ něj byl vygenerován 1 000 000 testovacı́ch hesel tak, aby splňovala základnı́ pravidla praktické použitelnosti: • délka hesel je v rozmezı́ 8–10 znaků; • byla použita velká a malá pı́smena, čı́slice, i nealfanumerické znaky; • byla generována pouze tzv. pronounceable hesla – hesla, která se dajı́ vyslovit jako jedno slovo (nebo několik málo slov), a tudı́ž jsou lépe zapamatovatelná. Pro ukázku několik takto vygenerovaných hesel: 36 3. NETRW RabcynRap9 Ghenshulf. myujNoc” cac{ojNi Lith?Wrod Skolnoac2 failNuev3 guockRiar> (ovjanHowz eepDef7ot K těmto heslům byly vypočı́tány jim odpovı́dajı́cı́ klı́če. Poté byla v heslech provedena náhodná změna o jeden bit. Změny, které transformovaly původnı́ znaky na znaky, které nejsou tisknutelné, byly anulovány a byly prováděny nové náhodné změny tak dlouho, dokud ordinálnı́ hodnota pozměněného znaku nebyla v požadovaném rozsahu. K takto transformovaným heslům se opět vypočı́taly přı́slušné klı́če. Tyto klı́če byly poté porovnány s klı́či přı́slušejı́cı́mi původnı́m heslům. Průměrný počet bitových změn byl 63,997605. Nejmenšı́ počet změněných bitů byl 36, nejvyššı́ počet bitových změn byl 90. Pokud se v hesle provedly dvě různé náhodné změny, přı́slušejı́cı́ klı́če se lišily průměrně o 64,002008 bitů (nejméně 37, nejvı́ce 90 bitů). Pokud se v hesle změnila celá polovina všech bitů, v rozdı́lech výsledných klı́čů se projevila změna průměrně o 63,999959 bitů (nejméně o 36, nejvı́ce o 90 bitů). Z pohledu počtu bitových změn klı́če v závislosti na bitových změnách použitého hesla se tedy expanznı́ funkce mhash keygen ext() dá považovat za bezpečnou. 3.5 Parametry Netrw netread a stejně tak i netwrite bude obsahovat všechny funkce a přepı́nače obsažené ve stávajı́cı́ verzi (1.2). Nově obsažené přepı́nače jsou následujı́cı́: netread -a name@machine [-A mode] [-i] [-m hmac] [-f] [port] netread -n name@machine [port] netread -d name@machine netread -t machine netread -s netread -o name netread -O netread -g Všechny výše vypsané přepı́nače akceptuje i netwrite. Následuje popis těchto přepı́načů: • -a name@machine – Při spojenı́ s uživatelem označeným name na počı́tači machine bude vyžadována oboustranná autentizace uživa37 3. NETRW telů před začátkem přenosu. Po přenesenı́ dat bude provedena oboustranná autentizace těchto dat. Způsob autentizace lze změnit pomocı́ následujı́cı́ho (nepovinného) přepı́nače: • -A mode – Při spojenı́ s druhou stranou bude, v závislosti na hodnotě mode, použit následujı́cı́ způsob autentizace uživatelů před začátkem přenosu dat a vlastnı́ch dat po dokončenı́ jejich přenosu: -A none – zakáže jakoukoliv autentizaci; -A allowed – nevyžaduje žádnou autentizaci, ale umožňuje provést autentizaci druhé straně, pokud o autentizaci požádá; -A you only – požaduje autentizaci druhé strany a od druhé strany vyžaduje po přenosu dat jejich autentizačnı́ kód, ale zakazuje autentizaci sama sebe a zası́lánı́ vlastnı́ho MACu; -A you – požaduje autentizaci druhé strany a autentizačnı́ kód od druhé strany a umožňuje druhé straně ověřit svou autenticitu; -A both – chová se stejně, jako by nebyl přepı́nač -A vůbec použit, tj. požaduje oboustrannou autentizaci. Nejbezpečnějšı́ je samozřejmě oboustranná autentizace uživatelů i dat. Po provedenı́ autentizace uživatelů se nepřenášejı́ zbytečně data podvržená útočnı́kem. Po výměně autentizačnı́ch kódů má přı́jemce jistotu, že data jsou autentická a odesı́latel se zase ujistı́, že data obdržel správný přı́jemce. V následujı́cı́ tabulce je uvedeno, které autentizačnı́ módy jsou vzájemně kompatibilnı́. none allowed you only you both none × × × allowed × you only × × × × you × × × both × × × × • -i – Tento přepı́nač způsobı́, že budou ignorovány záznamy v souboru prev. Tak je možné komunikovat i s partnerem, který si pozměnil čas na svém počı́tači směrem dozadu a kvůli záznamu předchozı́ komunikace je považován za útočnı́ka. Rovněž nenı́ prováděna kontrola integrity autentizačnı́ch kódů u souborů prev a rand. Této volby by mělo být použı́váno uvážlivě. 38 3. NETRW • -m hmac alg – Určuje algoritmus, který bude použit při počı́tánı́ autentizačnı́ho kódu. Vybı́rat je možno mezi následujı́cı́mi autentizačnı́mi kódy: sha1, sha256, ripemd160 a tiger160. Standardně je použit algoritmus sha1. Pokud se požadavky obou stran lišı́, je použita volba požadovaná klientem netread. • -f – Tato volba spouštı́ tzv. firewall mód, který způsobı́, že spojenı́ nenavazuje netwrite, ale netread. • port – Tato položka určuje, na jakém portu bude navázáno spojenı́. • -n name@machine – Přidá záznam o uživateli označeném name na počı́tači machine do souboru keys. Uživatel je poté interaktivně dotázán na heslo pro komunikaci s tı́mto uživatelem, které se poté zašifruje (pomocı́ hesla globálnı́ho, na které je uživatel opět dotázán). Pokud je zadán port, je čı́slo portu uloženo a bude použı́váno jako výchozı́. • -d name@machine – Odebere zadanou položku ze souboru keys. • -t machine – Odebere ze souboru prev všechny záznamy přı́slušı́cı́ počı́tači machine. Tato volba sloužı́ pro přı́pad, kdy se na tomto počı́tači změnı́ čas směrem zpět a z tohoto důvodu s nı́m klienti majı́cı́ uloženy soubory s předchozı́ komunikacı́ odmı́tajı́ ustanovit spojenı́ kvůli špatnému časovému údaji. • -s – Tato volba vypı́še všechny položky ze souboru keys spolu s přı́padným výchozı́m portem. • -o name – Nastavı́ jméno aktuálnı́ho uživatele, pod kterým bude komunikovat s ostatnı́mi stranami a uložı́ ho do souboru keys. • -O – Vypı́še nastavené jméno aktuálnı́ho uživatele uložené v souboru keys. • -g – Pomocı́ této volby se zadává hodnota globálnı́ho hesla. Pokud bylo globálnı́ heslo zadáno již dřı́ve, je uživatel nejprve dotázán na starou hodnotu. Poté zadá hodnotu nového globálnı́ho hesla (dvakrát, pro potvrzenı́). Potom je nová hodnota hesla uložena v zahashované podobě do souboru keys. Následně se provede překódovánı́ všech položek v tomto souboru pomocı́ nového hesla. Zároveň se přepočı́tajı́ i autentizačnı́ kódy v souborech rand a prev. 39 3. NETRW 3.6 Implementace Spojenı́ s druhou stranou navazuje standardně netwrite. Pouze pokud je zapnut firewall mód, navazuje spojenı́ netread. Jak ale vypadá situace dále, když je spojenı́ navázáno? 1. netread −→ netwrite : netrw control protocol netread −→ netwrite : requested params: checksum netread −→ netwrite : checksum: rmd160, md5, sha1 2. netwrite −→ netread : netrw control protocol netwrite −→ netread : checksum: sha1 .. . 3. přenos dat .. . 4. netwrite −→ netread : netrw control protocol netwrite −→ netread : checksum(sha1): c2f7ce0398c69a167b35e839ceb2084cc167eb57 5. netread −→ netwrite : netrw control protocol netread −→ netwrite : checksum(sha1): c2f7ce0398c69a167b35e839ceb2084cc167eb57 Obrázek 3.1: Komunikačnı́ protokol Netrw verze 1.2 (přı́klad). Ve stávajı́cı́ verzi Netrw zası́lá jako prvnı́ svá pomocná data vždy netread. netwrite tato data zpracuje a zašle svou odpověd’. Proto bude i protokol pro autentizaci koncipován tak, aby zachovával toto uspořádánı́. Stávajı́cı́ způsob komunikace (resp. jeden jejı́ konkrétnı́ přı́pad) je zobrazen na obrázku 3.1. Komunikace je uvozena frázı́ netrw control protocol. Poté zašle netread frázi requested params:, která uvozuje seznam parametrů, jež netread požaduje od druhé strany. Dále jsou zaslány hodnoty parametrů, které netread posı́lá druhé straně. Odpověd’ druhé strany má stejnou strukturu. Ve stávajı́cı́ podobě je do protokolu implementována pouze výměna informacı́ o tom, které hashovacı́ algoritmy má která strana k dispozici a po skončenı́ přenosu dat se provede výměna hodnot hashı́. Použitý protokol je navržen natolik obecně, že je možné jej v principu využı́t dále a pouze do něj doplnit nové vlastnosti, tj. dohodu obou stran na 40 3. NETRW použitém algoritmu pro výpočet autentizačnı́ho kódu, dohodu o způsobu autentizace uživatelů před samotným přenosem dat a výměnu autentizačnı́ch kódů po skončenı́ přenosu dat. 1. netread −→ netwrite : netrw control protocol netread −→ netwrite : auth type: you netread −→ netwrite : hmac alg: sha1 sha256 ripemd160 tiger160 netread −→ netwrite : time: 1094834140.866685 netread −→ netwrite : rand: 15464947654308140132 netread −→ netwrite : name nw: host2.somewhere.net netread −→ netwrite : name nr: host1.somewhere.net 2. netwrite −→ netread : netrw control protocol 3. Možná (několikanánobná) výměna nového náhodného čı́sla: • netwrite −→ netread : requested params: rand • netread −→ netwrite : rand: 10923986926823690823 4. netwrite −→ netread : auth type: allowed netwrite −→ netread : hmac alg: sha1 netwrite −→ netread : time: 1094834141.258439 netwrite −→ netread : hmac: ce02cceb2081673e8398edf655c569ab5fdcaf2b Obrázek 3.2: Autentizačnı́ protokol – autentizace uživatelů (přı́klad). Komunikace pomocı́ komunikačnı́ho protokolu pak bude vypadat podobně jako na obrázku 3.2. V tomto přı́padě netread požaduje autentizaci druhé strany a umožňuje druhé straně svou autentizaci. netwrite autentizaci nepožaduje, pouze poskytuje svou. Obě strany se domluvı́ na použitém algoritmu pro výpočet autentizačnı́ho kódu a vyměnı́ si potřebné informace jako aktuálnı́ čas, náhodné čı́slo atd. Po obdrženı́ nevyhovujı́cı́ho náhodného čı́sla (tj. náhodného čı́sla použitého již při některé předchozı́ autentizaci) od komunikujı́cı́ho partnera si může klient vyžádat (i několikrát po sobě) zaslánı́ nového náhodného čı́sla. Poté se provede (jednostranné nebo vzájemné) zaslánı́ spočı́taného autentizačnı́ho kódu. Pokud proběhne ověřenı́ zaslaných kódů bez chyby, je možné přikročit k vlastnı́mu datovému přenosu. Po dokončenı́ přenosu dat se provede jejich autentizace a informace o nı́ se opět přenesou pomocı́ 41 3. NETRW autentizačnı́ho protokolu. Podrobný popis komunikačnı́ho protokolu (obsahujı́cı́ popis komunikace při autentizaci uživatelů i při autentizaci dat včetně popisu všech zası́laných zpráv) je obsažen v přı́loze B. 3.7 Přı́klady použitı́ Netrw V této části práce bude uvedeno několik typických přı́kladů použitı́ Netrw s různými typy autentizace. 3.7.1 Přenos dat bez autentizace Tento přı́klad ukazuje základnı́ použitı́ Netrw: přenos souboru z jednoho počı́tače na druhý bez použitı́ autentizace uživatelů i dat. Pro přenos je použit port 50000. Tento způsob je možné použı́t jak na unixových systémech, tak i na systémech Windows: Netread: netread 50000 >data.zip Netwrite: netwrite machine2.somewhere.net 50000 <data.zip Spojenı́ standardně navazuje netwrite. Pokud je z nějakého důvodu potřeba, aby spojenı́ navázal netread, použije se parametr -f: Netread: netread -f machine1.somewhere.net 50000 >data.zip Netwrite: netwrite -f 50000 <data.zip Pokud je potřeba přenést vı́ce souborů najednou, je možné (pouze na unixových systémech) použı́t program tar: Netread: netread 50000 | tar xf Netwrite: tar cf - <soubory> | netwrite machine2.somewhere.net 50000 42 3. NETRW 3.7.2 Přenos dat za použitı́ autentizace Před prvnı́m použitı́m autentizace musı́ každý uživatel nejdřı́ve nastavit své globálnı́ heslo a přı́padně i své jméno. Poté může uložit do konfiguračnı́ho souboru údaje o svém komunikačnı́m partnerovi: jeho jméno, jméno jeho stroje a přı́padně i port, na kterém bude standardně navazováno spojenı́. Zároveň s těmito údaji se do konfiguračnı́ho souboru uložı́ i heslo pro prováděnı́ autentizace s tı́mto uživatelem. Heslo je zašifrované pomocı́ globálnı́ho hesla, takže později při prováděnı́ autentizace u kteréhokoliv uživatele stačı́ zadávat pouze jedno globálnı́ heslo. Poté se již může provést napřı́klad oboustranná autentizace uživatelů a dat: Netread (Bob): netread -g netread -o bob netread -n [email protected] 50000 netread -a [email protected] >data.zip Netwrite (Alice): netwrite -g netwrite -o alice netwrite -n [email protected] 50000 netwrite -a [email protected] <data.zip Stejně jako v přı́padě bez použitı́ autentizace je možné použı́t firewall mód: Netread (Bob): netread -a [email protected] -f >data.zip Netwrite (Alice): netwrite -a [email protected] -f <data.zip Pokud chceme použı́t pro výpočet autentizačnı́ho kódu jiný algoritmus než výchozı́ SHA-1, napřı́klad RIPEMD-160, provede se to takto (algoritmus vybı́rá uživatel na straně netread): Netread (Bob): netread -a [email protected] -m ripemd160 >data.zip Netwrite (Alice): netwrite -a [email protected] <data.zip Pokud Alice na straně odesı́latele požaduje Bobovu autentizaci a svou autentizaci si přeje zakázat, dá se to zařı́dit takto: 43 3. NETRW Netread (Bob): netread -a [email protected] -A allowed >data.zip Netwrite (Alice): netwrite -a [email protected] -A you only <data.zip I při použitı́ autentizace je samozřejmě možné přenést na unixových systémech vı́ce souborů (nebo i adresářů s jejich obsahem) za pomoci nástroje tar: Netread (Bob): netread -a [email protected] | tar xf Netwrite (Alice): tar cf - <soubory> | netwrite -a [email protected] Poznámka. Pokud při testovánı́ autentizačnı́ch vlastnostı́ Netrw použije uživatel pro spouštěnı́ netread i netwrite stejný účet na jednom počı́tači, může se stát, že se oba programy „zaseknou“. Toto chovánı́ spočı́vá ve výměně náhodných čı́sel. Jeden klient vygeneruje své náhodné čı́slo, zapı́še jej do pomocného konfiguračnı́ho souboru rand a zašle druhé straně. Druhý klient ovšem obdržené čı́slo porovnává s náhodnými čı́sly zapsanými ve svém souboru rand. Pokud je ovšem tento soubor pro oba klienty společný, přı́jemce vždy obdržené čı́slo v souboru nalezne, a tudı́ž bude stále od svého partnera vyžadovat nová a nová náhodná čı́sla. 3.8 Testy rychlosti Po doplněnı́ autentizace dat do Netrw se nabı́zı́ otázka, jakou časovou zátěž autentizace dat během přenosu představuje. Proto byla provedena série testů. Byla měřena doba přenosu datových segmentů různých velikostı́ na různých systémech. Nejprve byla testována rychlost bez použitı́ čtenı́ a zápisu na disk a bez přenosu dat sı́tı́. Takto jsou rychlostnı́ rozdı́ly vidět nejlépe, rychlost ovlivňuje pouze výpočetnı́ výkon použitého systému. Na všech testovaných systémech nebyly během testovánı́ spuštěny žádné jiné aplikace (samozřejmě kromě těch nezbytných pro běh systému). Při porovnávánı́ výsledků je nutné si uvědomit, že při spouštěnı́ netread i netwrite na jednom stroji je jeho procesor při počı́tánı́ kontrolnı́ch součtů či autentizačnı́ch kódů zatı́žen dvojnásobně oproti normálnı́m podmı́nkám, protože tyto výpočty provádı́ pro oba klienty zároveň a přenosová rychlost klesá zhruba na polovinu oproti přı́padu, kdy jsou výpočty prováděny pouze pro jednoho klienta. 44 3. NETRW 3.8.1 Intel Celeron 900MHz Přenos (zde možná lépe řečeno zpracovánı́) dat bez počı́tánı́ kontrolnı́ho součtu pomocı́ Netrw-1.2 proběhl rychlostı́ přibližně 30 MB/s u všech datových objemů. Zajı́mavé zjištěnı́ je, že u Netrw-2.0 je tato rychlost o několik megabytů většı́, přestože pro přenos dat bez počı́tánı́ kontrolnı́ho součtu a autentizačnı́ho kódu je použit prakticky totožný kód programu. Použitı́ kontrolnı́ho součtu SHA-1 v Netrw-1.2 snižuje dosaženou rychlost na zhruba 13 MB/s, což je necelá polovina rychlosti přenosu bez použitı́ kontrolnı́ho součtu. Počı́tánı́ jednostranného autentizačnı́ho kódu SHA-1 přenos zpomalilo asi o 1 MB/s, na přibližně 12 MB/s. U oboustranného SHA-1 autentizačnı́ho kódu byla průměrná rychlost přenosu dat na úrovni asi 6,5 MB/s. U jednostranného autentizačnı́ho kódu počı́taného pomocı́ algoritmu SHA-256 došlo k většı́m rozdı́lům u různých objemů dat: pro 100 MB a 200 MB byla rychlost mı́rně nad 5 MB/s, u 500 MB a 1000 MB byla rychlost přenosu takřka 7 MB/s. U oboustranného SHA-256 autentizačnı́ho kódu byla průměrná rychlost přenosu dat na úrovni necelých 4 MB/s. Kompletnı́ grafy výše shrnutých měřenı́ jsou v přı́loze C.1. 3.8.2 AMD Duron 600MHz U tohoto procesoru také nastal nepoměr mezi rychlostı́ přenosu dat bez počı́tánı́ kontrolnı́ho součtu a autentizačnı́ho kódu mezi jednotlivými verzemi programu, ovšem v odlišném poměru oproti předchozı́mu přı́padu. Netrw-1.2 přenesl data rychlostı́ zhruba 90 MB/s, Netrw-2.0 však pouze rychlostı́ necelých 80 MB/s. Při použitı́ kontrolnı́ho součtu SHA-1 klesla přenosová rychlost na přibližně 20 MB/s. U jednostranného autentizačnı́ho kódu SHA-1 přenosová rychlost klesla na 14 MB/s. Přenos za použitı́ oboustranně počı́taného autentizačnı́ho kódu proběhl očekávanou rychlostı́ cca 7,5 MB/s. Rychlostı́ 8 MB/s byla data přenesena za počı́tánı́ jednostranného autentizačnı́ho kódu SHA-256. Když byl autentizačnı́ kód SHA-256 počı́tán oboustranně, byla přenosová rychlost mı́rně nad hranicı́ 4 MB/s. Kompletnı́ grafy výše shrnutých měřenı́ jsou v přı́loze C.2. 3.8.3 2× Pentium III 1 GHz Přenos dat bez počı́tánı́ kontrolnı́ho součtu proběhl u tohoto dvouprocesorového stroje rychlostı́ přibližně 100 MB/s. Počı́tánı́ kontrolnı́ho součtu pomocı́ algoritmu SHA-1 snı́žilo rychlost přenosu na cca 35 MB/s. Netrw-2.0 bez počı́tánı́ autentizačnı́ho kódu přenesl data rychlostı́ necelých 120 MB/s. 45 3. NETRW Při použitı́ jednostranného autentizačnı́ho kódu založeného na algoritmu SHA-1 byla rychlost přenosu 30 MB/s, při použitı́ oboustranného autentizačnı́ho kódu 18 MB/s. Pokud byl použit autentizačnı́ kód SHA-256, přenos s jednostrannou autentizacı́ proběhl rychlostı́ 19 MB/s, s oboustrannou autentizacı́ rychlostı́ 10 MB/s. Kompletnı́ grafy výše shrnutých měřenı́ jsou v přı́loze C.3. 3.8.4 Intel Celeron 900MHz, AMD Duron 600MHz Typické použitı́ Netrw ovšem spočı́vá v přenosu dat z pevného disku jednoho počı́tače na pevný disk počı́tače druhého. Testy přenosu dat mezi dvěma počı́tači již tedy byly prováděny za použitı́ pevných disků. Při přenosu dat mezi dvěma linuxovými operačnı́mi systémy byla přenosová rychlost u všech datových objemů na úrovni 5 MB/s. Pokud byl přenosu účasten operačnı́ systém Windows XP (at’již na jedné, druhé, nebo obou stranách), klesla přenosová rychlost na 4 MB/s. Kompletnı́ grafy výše shrnutých měřenı́ jsou v přı́loze C.4. 3.8.5 Shrnutı́ testů Testy rychlosti ukazujı́, že i při použitı́ autentizace si systém Netrw zachoval relativně vysokou přenosovou rychlost. U kontrolnı́ho součtu a autentizačnı́ho kódu počı́taného pomocı́ algoritmu SHA-1 se sice objevily rychlostnı́ rozdı́ly v neprospěch autentizačnı́ho kódu, tyto rozdı́ly ale nejsou nijak dramatické a použitelnost programu nesnižujı́. Algoritmus autentizačnı́ho kódu využı́vajı́cı́ hashovacı́ funkci SHA-256 snižuje rychlost přenosu znatelněji. Přesto zůstává přenosová rychlost na vysoce použitelné úrovni. 46 Kapitola 4 Závěr Cı́lem práce bylo shrnout základnı́ principy a postupy při autentizaci dat a do existujı́cı́ho systému pro přenos dat implementovat mechanismus pro autentizaci uživatelů a dat. V prvnı́ch dvou kapitolách jsem popsal obecné principy autentizace dat, k čemu autentizace dat sloužı́ a jakými prostředky se autentizace dat provádı́. Rozebral jsem principy fungovánı́ hashovacı́ch funkcı́ včetně popisu nejpoužı́vanějšı́ch algoritmů. Dále jsem obecně rozebral mechanismus digitálnı́ch podpisů, které plnı́ obdobnou funkci jako ručně psané podpisy, a uvedl několik nejpoužı́vanějšı́ch schémat včetně jejich matematického pozadı́ a přı́kladů. Digitálnı́ a ručně psané podpisy se však od sebe v několika aspektech lišı́. Digitálnı́ podpis je neoddělitelně spjatý s podepisovanou zprávou a nenı́ možné jej nějakým způsobem od zprávy oddělit a použı́t jej pro podpis jiné zprávy. Podpis je ale možné ze zprávy odstranit tak, aby zpráva nebyla podpisem „ušpiněna“. Naproti tomu u ručně psaného podpisu jeho použitı́ pro jinou zprávu možné je, napřı́klad odstraněnı́m původnı́ zprávy z papı́ru a dopsánı́m zprávy nové. Pro důvěryhodné ověřenı́ správnosti digitálnı́ho podpisu je většinou zapotřebı́ účasti nějaké třetı́ strany v podobě certifikačnı́ autority. Při použitı́ klasického podpisu postačı́ podpisový vzor. Důležité je věnovat pozornost skutečnosti, že zatı́mco klasický ručnı́ podpis může pořı́dit pouze člověk, podpis digitálnı́ může vytvořit prakticky kterýkoliv počı́tač. Do balı́ku Netrw, který sloužı́ pro rychlý přenos dat přes Internet, jsem navrhl a implementoval mechanismus autentizace uživatelů a dat. Tento mechanismus jsem se snažil navrhnout tak, aby byl bezpečný, ale zároveň co nejjednoduššı́, flexibilnı́ a dal se dobře spravovat. Provedené testy ukazujı́, že při použitı́ autentizace je přenosová rychlost jen o málo nižšı́, než při prováděnı́ prostého kontrolnı́ho součtu. Vytčený cı́l zachovánı́ co nejvyššı́ přenosové rychlosti byl tedy splněn. Doufám, že balı́k Netrw obohacený o autentizaci nalezne v praxi své uplatněnı́. Oblast autentizace dat a vůbec celé kryptografie procházı́ bouřlivým vý47 4. ZÁVĚR vojem. Nedávná prolomenı́ několika široce použı́vaných a rozšı́řených hashovacı́ch funkcı́ nás nutı́ klást si otázku, zda i jiné hashovacı́ funkce nejsou v ohroženı́. Problémy, které jsou dnes pokládány za obtı́žně řešitelné, se mohou za pár let s nástupem nových generacı́ počı́tačů nebo aplikacı́ nových poznatků stát řešitelnými. V oblasti kryptografie se máme do budoucna jistě na co těšit. 48 Literatura [1] Ústav pro jazyk český Akademie věd České republiky. Jazyková poradna Ústavu pro jazyk český AV ČR. http://www.ujc.cas.cz/ oddeleni/index.php?page=poradna. [2] Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone. Handbook of Applied Cryptography. CRC Press, 1996. http://www.cacr.math. uwaterloo.ca/hac/. [3] B. Preneel, K. U. Leuven. The Davies-Meyer Hash Function. Květen 2004. http://www.win.tue.nl/˜henkvt/davies-meyerv1.pdf. [4] B. Preneel, K. U. Leuven. Hash Functions. Květen 2004. http://www. win.tue.nl/˜henkvt/hashv4.pdf. [5] B. Preneel, K. U. Leuven. MDC-2 and MDC-4. Řı́jen 2004. http: //www.win.tue.nl/˜henkvt/mdc2-4v2.pdf. [6] National Institute of Standards and Technology. Data Encryption Standard (DES). Řı́jen 1999. http://csrc.nist.gov/publications/ fips/fips46-3/fips46-3.pdf. [7] R. Rivest. The MD4 Message-Digest Algorithm. RFC 1320. Duben 1992. http://www.ietf.org/rfc/rfc1320.txt. [8] R. Rivest. The MD5 Message-Digest Algorithm. RFC 1321. Duben 1992. http://www.ietf.org/rfc/rfc1321.txt. [9] Xiaoyun Wang, Dengguo Feng, Xuejia Lai, Hongbo Yu. Collisions for Hash Functions MD4, MD5, HAVAL-128 and RIPEMD. Srpen 2004. http://eprint.iacr.org/2004/199.pdf. [10] D. Eastlake, P. Jones. US Secure Hash Algorithm 1 (SHA1). RFC 3174. Zářı́ 2001. http://www.ietf.org/rfc/rfc3174.txt. [11] National Institute of Standards and Technology. Digital Signature Standard (DSS). Květen 1994. http://www.itl.nist.gov/fipspubs/ fip186.htm. 49 LITERATURA [12] A. Bosselaers. The hash function RIPEMD-160. Srpen 2004. http: //www.esat.kuleuven.ac.be/˜bosselae/ripemd160.html. [13] National Institute of Standards and Technology. Secure Hash Standard. Srpen 2002. http://csrc.nist.gov/publications/ fips/fips180-2/fips180-2.pdf. [14] National Institute of Standards and Technology. Advanced Encryption Standard (AES). Prosinec 2001. http://csrc.nist.gov/ CryptoToolkit/aes/. [15] B. Preneel, K. U. Leuven. The MASH Hash Functions (Modular Arithmetic Secure Hash). Květen 2004. http://www.win.tue.nl/˜henkvt/ mashv1.pdf. [16] National Institute of Standards and Technology. Cyclic redundancy check. Květen 2002. http://www.nist.gov/dads/HTML/ cyclicRedundancyCheck.html. [17] National Institute of Standards and Technology. DES Modes of Operation. Prosinec 1980. http://www.itl.nist.gov/fipspubs/ fip81.htm. [18] H. Krawczyk, M. Bellare, R. Canetti. HMAC: Keyed-Hashing for Message Authentication. RFC 2104. Únor 1997. http://www.ietf.org/rfc/ rfc2104.txt. [19] B. Preneel, V. Rijmen, P. C. van Oorschot. Security Analysis of the Message Authenticator Algorithm (MAA). Duben 1997. http://www. scs.carleton.ca/˜paulv/papers/MAA-ETT.pdf. [20] B. Preneel, P. C. van Oorschot. MDx-MAC and Building Fast MACs from Hash Functions. Srpen 1995. http: //citeseer.ist.psu.edu/rd/44619770%2C159901%2C1% 2C0%2CDownload/ftp%3AqSqqSqftp.esat.kuleuven.ac. beqSqpubqSqCOSICqSqpreneelqSqmdxmac_crypto95.ps.gz. [21] B. Kaliski, J. Staddon. RSA Cryptography Specifications Version 2.0. RFC 2437. Řı́jen 1998. http://www.ietf.org/rfc/rfc2437.txt. [22] Y. Tsiounis, M. Yung. On the Security of ElGamal based Encryption. Únor 1998. http://www.ccs.neu.edu/home/yiannis/papers/ eg.ps. 50 LITERATURA [23] National Institute of Standards and Technology. http://www.nist. gov/. [24] U. Feige, A. Fiat, A. Shamir. Zero Knowledge Proofs of Indentity. 1987. http://portal.acm.org/ft_gateway.cfm?id=28419&type= pdf&coll=GUIDE&dl=GUIDE&CFID=29827796&CFTOKEN= 17015179. [25] J. Denemark. netrw/. Netrw. http://www.fi.muni.cz/˜xdenemar/ [26] The Linux Homepage at Linux Online. http://www.linux.org/. [27] Solaris Operating System. solaris/. http://wwws.sun.com/software/ [28] IRIX. http://www.sgi.com/products/software/irix/. [29] OpenBSD. http://www.openbsd.org/. [30] Microsoft Corporation. http://www.microsoft.com/. [31] The GNU Project. GNU General Public License. http://www.gnu. org/copyleft/gpl.html. [32] Information Sciences Institute, University of Southern California. Transmission Control Protocol. RFC 793. Zářı́ 1981. http://www.ietf. org/rfc/rfc793.txt. [33] J. Postel. User Datagram Protocol. RFC 768. Srpen 1980. http://www. ietf.org/rfc/rfc768.txt. [34] WinZip HomePage. http://www.winzip.com/. [35] WinRAR archiver, a powerfull tool to process RAR and ZIP files. http: //www.rarlab.com/. [36] SSH Communications Security. http://www.ssh.com/. [37] Mhash. http://mhash.sourceforge.net/. [38] Implementations of AES (Rijndael) in C/C++ and Assembler. Červen 2003. http://fp.gladman.plus.com/cryptography_ technology/rijndael/. 51 LITERATURA [39] J. Callas, L. Donnerhacke, H. Finney, R. Thayer. OpenPGP Message Format. RFC 2440. Listopad 1998. http://www.ietf.org/rfc/ rfc2440.txt. [40] The OpenPGP Alliance HomePage. http://www.openpgp.org/. [41] Automated Password Generator (APG). http://www.adel.nursat. kz/apg/. [42] Linux From Scratch. index.html. http://www.linuxfromscratch.org/ [43] Mandrakelinux. http://www.mandrakelinux.com/. [44] Source Mage GNU/Linux. http://www.sourcemage.org/. Všechny výše uvedené Internetové odkazy byly naposledy kontrolovány v prosinci 2004. 52 Přı́loha A Hashovacı́ funkce A.1 Hashovacı́ funkce Matyas-Meyer-Oseas Vstup: Data x (bráno jako posloupnost bitů). Výstup: nbitová hash dat x. 1. Vstupnı́ data rozděl na bloky délky n. Poslednı́ blok přı́padně doplň na patřičnou délku (padding). Vzniknou tak bloky x1 , x2 , . . . , xt . Naplň iniciálnı́ nbitovou hodnotu IV. 2. H0 = IV . 3. Hi = Eg(Hi −1) (xi ) ⊕ xi , 1 ≤ i ≤ t, kde zápis „Ek (x)“ značı́ symetrickou blokovou šifru použı́vajı́cı́ klı́č k, aplikovanou na parametr x, ⊕ znamená exkluzivnı́ bitový součet (XOR) a g je funkce upravujı́cı́ hash předchozı́ho bloku do podoby vhodné pro E. 4. Výsledná hash = Ht . 53 A. HASHOVACÍ FUNKCE A.2 Hashovacı́ funkce MD5 Vstup: Řetězec bitů x libovolné délky b ≥ 0. Výstup: 128bitová hash řetězce x. 1. Definice konstant. Definuj čtyři 32bitové řetězcové hodnoty: h1 = 0x67452301, h2 = 0xef cdab89, h3 = 0x98badcf e, h4 = 0x10325476. Dále definuj 32bitové sčı́tacı́ konstanty: y[j] = 0, 0 ≤ j ≤ 15; y[j] = prvnı́ch 32 bitů z binárnı́ho zápisu výrazu abs(sin(j + 1)), 0 ≤ j ≤ 63, kde j je bráno jako hodnota v radiánech a abs značı́ absolutnı́ hodnotu. Definuj pořadı́ pro přı́stup ke zdrojovým slovům: z[0..15] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], z[16..31] = [1, 6, 11, 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12], z[32..47] = [5, 8, 11, 14, 1, 4, 7, 10, 13, 0, 3, 6, 9, 12, 15, 2], z[48..63] = [0, 7, 14, 5, 12, 3, 10, 1, 8, 15, 6, 13, 4, 11, 2, 9]. Definuj počet bitových pozic pro rotace: s[0..15] = [3, 7, 11, 19, 3, 7, 11, 19, 3, 7, 11, 19, 3, 7, 11, 19], s[16..31] = [3, 5, 9, 13, 3, 5, 9, 13, 3, 5, 9, 13, 3, 5, 9, 13], s[32..47] = [3, 9, 11, 15, 3, 9, 11, 15, 3, 9, 11, 15, 3, 9, 11, 15], s[48..63] = [6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 5, 21, 6, 10, 15, 21]. 2. Předvýpočet. Doplň x tak, aby jeho délka byla násobkem 512 následovně: Na konec x přidej jeden bit s hodnotou 1. Za tento bit přidej r − 1 bitů s hodnotou 0, kde r je nejmenšı́ takové čı́slo, pro které platı́, že délka takto vzniklého řetězce je o 64 bitů menšı́ než násobek 512. Nakonec data doplň 64bitovou reprezentacı́ čı́sla b mod 264 branou jako 2 32bitová slova s méně významným slovem jako prvnı́m. Označ m jako počet 512bitových bloků upravených dat. Výsledný doplněný řetězec má tedy délku b + r + 64 = 512m = 32 · 16m. Data se pro dalšı́ průběh algoritmu rozdělı́ na 16m 32bitových slov: x0 , x1 , · · · , x16m−1 . Dále inicializuj vektor (H1 , H2 , H3 , H4 ) = (h1 , h2 , h3 , h4 ). 54 A. HASHOVACÍ FUNKCE 3. Výpočet. Pro všechna i od 0 do m − 1 zkopı́ruj i-tý blok z 16 32bitových slov do přechodného úložiště: X[j] = x16i+j , 0 ≤ j ≤ 15 a proved’ následujı́cı́ kroky: Inicializace: Inicializuj vektor pracovnı́ch proměnných: (A, B, C, D) (H1 , H2 , H3 , H4 ). = Prvnı́ cyklus: Pro j od 0 do 15 dělej: t = A + ((B ∧ C) ∨ (B ∧ D)) + X[z[j]] + y[j], (A, B, C, D) = (D, B + t ←- s[j], B, C), kde použité operátory majı́ následujı́cı́ význam: + . . . sčı́tánı́ modulo 232 , ∧ . . . bitový logický součin (AND), ∨ . . . bitový logický součet (OR), A . . . bitová inverze A, t ←- s . . . rotace t doleva o s pozicı́. Druhý cyklus: Pro j od 16 do 31 dělej: t = A + ((B ∧ C) ∨ (B ∧ D) ∨ (C ∧ D)) + X[z[j]] + y[j], (A, B, C, D) = (D, B + t ←- s[j], B, C). Třetı́ cyklus: Pro j od 32 do 47 dělej: t = A + (B ⊕ C ⊕ D) + X[z[j]] + y[j], (A, B, C, D) = (D, B + t ←- s[j], B, C), kde ⊕ značı́ exkluzivnı́ bitový součet (XOR). Čtvrtý cyklus: Pro j od 48 do 63 dělej: t = A + (C ⊕ (B ∨ D) + X[z[j]] + y[j]), (A, B, C, D) = (D, B + t ←- s[j], B, C). Upravenı́ hodnot řetězcových proměnných: (H1 , H2 , H3 , H4 ) = (H1 + A, H2 + B, H3 + C, H4 + D). 4. Výsledek. Výsledná hash vznikne zřetězenı́m H1 až H4 : H = H1 k H2 k H3 k H4 , kde Hi je zapisováno s nejméně významným bitem jako prvnı́m. 55 A. HASHOVACÍ FUNKCE A.3 Hashovacı́ funkce SHA-1 Vstup: Řetězec bitů x libovolné délky b ≥ 0. Výstup: 160bitová hash řetězce x. 1. Definice konstant. Definuj pět 32bitových řetězcových hodnot: h1 = 0x67452301, h2 = 0xef cdab89, h3 = 0x98badcf e, h4 = 0x10325476, h5 = 0xc3d2e1f 0. Dále definuj čtyři 32bitové sčı́tacı́ konstanty: y1 = 0x5a827999, y2 = 0x6ed9eba1, y3 = 0x8f lbbcdc, y4 = 0xca62c1d6. 2. Předvýpočet. Proved’ padding stejně jako u algoritmu MD5 s tı́m rozdı́lem, že poslednı́ dvě 32bitová slova udávajı́cı́ délku původnı́ch dat, jsou v opačném pořadı́. Stejně jako u MD5 data pro dalšı́ průběh algoritmu rozděl na 16m 32bitových slov: x0 , x1 , · · · , x16m−1 . Dále inicializuj vektor (H1 , H2 , H3 , H4 , H5 ) = (h1 , h2 , h3 , h4 , h5 ). 56 A. HASHOVACÍ FUNKCE 3. Výpočet. Pro všechna i od 0 do m − 1 zkopı́ruj i-tý blok z 16 32bitových slov do přechodného úložiště: X[j] = x16i+j , 0 ≤ j ≤ 15 a proved’ následujı́cı́ kroky: pro j od 16 do 79 dělej: X[j] = ((X[j − 3] ⊕ X[j − 8] ⊕ X[j − 14] ⊕ X[j − 16]) ←- 1). Inicializace: Inicializuj vektor pracovnı́ch proměnných: (A, B, C, D, E) = (H1 , H2 , H3 , H4 , H5 ). Prvnı́ cyklus: Pro j od 0 do 19 dělej: t = (A ←- 5) + ((B ∧ C) ∨ (B ∧ D)) + E + X[j] + y1 , (A, B, C, D, E) = (t, A, B ←- 30, C, D). Druhý cyklus: Pro j od 20 do 39 dělej: t = (A ←- 5) + (B ⊕ C ⊕ D) + E + X[j] + y2 , (A, B, C, D, E) = (t, A, B ←- 30, C, D). Třetı́ cyklus: Pro j od 40 do 59 dělej: t = (A ←- 5) + ((B ∧ C) ∨ (B ∧ D) ∨ (C ∧ D)) + E + X[j] + y3 , (A, B, C, D, E) = (t, A, B ←- 30, C, D). Čtvrtý cyklus: Pro j od 60 do 79 dělej: t = (A ←- 5) + (B ⊕ C ⊕ D) + E + X[j] + y4 , (A, B, C, D, E) = (t, A, B ←- 30, C, D). Upravenı́ hodnot řetězcových proměnných: (H1 , H2 , H3 , H4 , H5 ) = (H1 + A, H2 + B, H3 + C, H4 + D, H5 + E). Označenı́ operátorů je zde stejné, jako u hashovacı́ funkce MD5. 4. Výsledek. Výsledná hodnota hashe je H1 k H2 k H3 k H4 k H5 . 57 A. HASHOVACÍ FUNKCE A.4 Algoritmus CBC-MAC Vstup: Vstupnı́ data x, specifikace použité blokové šifry E, tajný klı́č k pro blokovou šifru E; v přı́padě použitı́ kroku 3: druhý tajný klı́č k0 6= k. Výstup: nbitový autentizačnı́ kód (MAC) zı́skaný z dat x, kde n je délka bloku E. 1. Doplněnı́ a rozdělenı́ do bloků. Pokud je potřeba, doplň x tak, aby jeho délka byla celočı́selným násobkem délky bloku (za data připoj jeden bit s hodnotou 1 a poté potřebný počet bitů s hodnotou 0). Rozděl takto doplněná data na bloky x1 , . . . , xt . 2. Výpočet. Necht’Ek je bloková šifra E použı́vajı́cı́ tajný klı́č k. Potom se výsledný autentizačnı́ kód Ht zı́ská následujı́cı́m iterativnı́m postupem: H1 = Ek (x1 ), Hi = Ek (Hi−1 ⊕ xi ), 2 ≤ i ≤ t. 0 3. Zvýšenı́ bezpečnosti (nepovinný krok). Ht0 = Ek−1 0 (Ht ), Ht = Ek (Ht ). 4. Výsledek. Výsledná hodnota autentizačnı́ho kódu je Ht . 58 A. HASHOVACÍ FUNKCE A.5 Algoritmus MAA Vstup: Data x délky 32j, 1 ≤ j ≤ 106 ; 64bitový klı́č Z = Z[1] . . . Z[8]. Výstup: 32bitový autentizačnı́ kód (MAC) zı́skaný z dat x a klı́če Z. 1. Úprava klı́če (nezávislá na x). Expanduj klı́č Z do šesti 32bitových částı́ X, Y (iniciálnı́ hodnoty), V , W (proměnné hlavnı́ho cyklu algoritmu) a S, T (připojı́ se později na konec x) následovně: 1.1 Nahrad’ všechny bajty 0x00 a 0xff v Z následovně: P = 0; pro i od 1 do 8 dělej: P = 2P ; pokud je Z[i] rovno 0x00 nebo 0xff, pak P = P + 1, Z[i] = Z[i] ∨ P . 1.2 Do J přiřad’ prvnı́ 4 bajty Z, do K zase poslednı́ 4 bajty Z. X = J 4 mod (232 − 1) ⊕ J 4 mod (232 − 2), Y = [K 5 mod (232 − 1) ⊕ K 5 mod (232 − 2)](1 + P )2 mod (232 − 2), V = J 6 mod (232 − 1) ⊕ J 6 mod (232 − 2), W = K 7 mod (232 − 1) ⊕ K 7 mod (232 − 2), S = J 8 mod (232 − 1) ⊕ J 8 mod (232 − 2), T = K 9 mod (232 − 1) ⊕ K 9 mod (232 − 2). 1.3 Zpracuj vzniklé dvojice (X, Y ), (V, W ), (S, T ) tak, aby neobsahovaly bajty 0x00 nebo 0xff (stejným postupem jako v bodě 1.2 pro Z). Dále definuj 4 AND-OR konstanty A = 0x02040801, B = 0x00804021, C = 0xbf ef 7f df D = 0x7df ef bf f . 2. Předvýpočet. Inicializuj rotačnı́ vektor: v = V a řetězcové proměnné H1 = X a H2 = Y . Na konec x připoj S a T . Výsledná data nynı́ tvořı́ t 32bitových bloků x1 , · · · , xt , kde poslednı́ dva bloky jsou právě S a T . 3. Zpracovánı́ bloků. Pro každý blok xi (pro i od 1 do t) dělej: v = (v ←- 1), U = (v ⊕ W ), t1 = (H1 ⊕ xi ) ×1 (((H2 ⊕ xi ) + U ) ∨ A) ∧ C), t2 = (H2 ⊕ xi ) ×2 (((H1 ⊕ xi ) + U ) ∨ B) ∧ D), H 1 = t1 , H 2 = t2 . Operátor ×i značı́ speciálnı́ násobenı́ mod (232 − i), i = 1, 2. 4. Výsledek. Výsledný autentizačnı́ kód je H = H1 ⊕ H2 . 59 A. HASHOVACÍ FUNKCE A.6 Yuvalův narozeninový útok Vstup: Původnı́ data x1 , útočnı́kova data x2 , nbitová hashovacı́ funkce h. Výstup: x01 a x02 , které vznikly drobnými úpravami x1 a x2 a pro které platı́: h(x01 ) = h(x02 ). 1. Vygeneruj t = 2n/2 různých x01 , které jsou drobnými modifikacemi x1 . 2. Každé modifikované x01 zahashuj pomocı́ h a tuto hash společně s patřičným x01 ulož v takové podobě, aby bylo možné později v těchto dvojicı́ch vyhledávat podle hodnoty hashe. 3. K x2 postupně generuj drobné modifikace x02 . Ke každému x02 spočı́tej hash h(x02 ) a zjisti, zda hash nenı́ shodná s nějakou hashı́ h(x01 ). Pokud ne, bod 3 opakuj tak dlouho, dokud na shodu nenarazı́š. Pokud ano, předej na výstup aktuálnı́ x01 a x02 . Platı́ pro ně h(x01 ) = h(x02 ). 60 Přı́loha B Netrw – komunikačnı́ protokol B.1 Použı́vané zprávy V této části přı́lohy jsou popsány všechny zprávy, které jsou použı́vány v komunikačnı́m protokolu pro autentizaci uživatelů a dat. Každá zpráva začı́ná svým jménem. Poté následuje dvojtečka a mezera. Pak již následuje obsah zprávy. Ten většinou tvořı́ jedno slovo (řetězec), přı́padně několik slov oddělených mezerami. Zprávy, které Netrw v autentizačnı́ části použı́vá, jsou uvedeny v následujı́cı́m seznamu, zároveň i se vzorovými obsahy zpráv: • auth type: both Určuje typ autentizace, kterou chce klient použı́vat. • hmac alg: sha1 sha256 ripemd160 tiger160 Určuje, které algoritmy je možné použı́t pro výpočet autentizačnı́ho kódu. Algoritmy jsou seřazené podle priority, preferované jsou ty na začátku seznamu. • time: 1094834140.866685 Aktuálnı́ čas odesı́latele zprávy. • rand: 15464947654308140132 Náhodné čı́slo odesı́latele zprávy. • name nr: host1.somewhere.net Jméno stroje, kde je spuštěn netread. • name nw: host2.somewhere.net Jméno stroje, kde je spuštěn netwrite. • hmac: 8dbf4855323191db403cf8166ba828709e636f1e Hodnota autentizačnı́ho kódu. 61 B. NETRW – KOMUNIKAČNÍ PROTOKOL • error: Buddy says: Wrong hmac obtained! User authentication failed! Pokud na jedné straně přenosu nastane nějaká fatálnı́ chyba, o které by se měl dozvědět i partner na druhé straně (napřı́klad chyba při autentizaci), zašle se tato zpráva. Klient na druhé straně spojenı́ pak tuto chybovou zprávu vypı́še na výstup a ukončı́ se. • requested params: rand Pokud jedné straně nevyhovuje obdržené náhodné čı́slo svého komunikačnı́ho partnera, může si pomocı́ této zprávy zažádat o čı́slo jiné. Tato žádost se může opakovat tak dlouho, dokud nenı́ náhodné čı́slo v pořádku. Zası́lánı́ svých zpráv ukončuje odesı́latel zaslánı́m prázdného řetězce. 62 B. NETRW – KOMUNIKAČNÍ PROTOKOL B.2 Komunikace Pokud si oba klienti přejı́ provést přenos dat bez autentizace, vypadá jejich komunikace jednoduše: 1. netread −→ netwrite : netrw control protocol netread −→ netwrite : auth type: none 2. netwrite −→ netread : netrw control protocol netwrite −→ netread : auth type: none Podobně jednoduchá je situace, kdy má jeden klient autentizaci povolenou, ale druhý ji nevyžaduje: 1. netread −→ netwrite : netrw control protocol netread −→ netwrite : auth type: none 2. netwrite −→ netread : netrw control protocol netwrite −→ netread : auth type: allowed 1. netread −→ netwrite : netrw control protocol netread −→ netwrite : auth type: allowed netread −→ netwrite : hmac alg: sha1 sha256 ripemd160 tiger160 2. netwrite −→ netread : netrw control protocol netwrite −→ netread : auth type: none 1. netread −→ netwrite : netrw control protocol netread −→ netwrite : auth type: allowed netread −→ netwrite : hmac alg: sha1 sha256 ripemd160 tiger160 2. netwrite −→ netread : netrw control protocol netwrite −→ netread : auth type: allowed 63 B. NETRW – KOMUNIKAČNÍ PROTOKOL Pokud jedna strana autentizaci vyžaduje a druhá ji povoluje, vypadá jejich komunikace takto (v závislosti na tom, zda netread autentizaci povoluje nebo naopak vyžaduje): 1. netread −→ netwrite : netrw control protocol netread −→ netwrite : auth type: allowed netread −→ netwrite : hmac alg: sha1 sha256 ripemd160 tiger160 2. netwrite −→ netread : netrw control protocol netwrite −→ netread : auth type: you only nebo you netwrite −→ netread : hmac alg: sha1 netwrite −→ netread : time: 1094834140.866685 netwrite −→ netread : rand: 15464947654308140132 netwrite −→ netread : name nw: host1.somewhere.net netwrite −→ netread : name nr: host2.somewhere.net 3. Možná (několikanásobná) výměna nového náhodného čı́sla: • netread −→ netwrite : requested params: rand • netwrite −→ netread : rand: 10923986926823690823 4. netwrite −→ netread : time: 1094834141.239482 netwrite −→ netread : hmac: 3bbc089a516cd5c9b8871a95d207bb5d6fe7d60f 1. netread −→ netwrite : netrw control protocol netread −→ netwrite : auth type: you only nebo you netread −→ netwrite : hmac alg: sha1 sha256 ripemd160 tiger160 netread −→ netwrite : time: 1094834140.866685 netread −→ netwrite : rand: 15464947654308140132 netread −→ netwrite : name nw: host2.somewhere.net netread −→ netwrite : name nr: host1.somewhere.net 2. netwrite −→ netread : netrw control protocol netwrite −→ netread : auth type: allowed 3. Možná (několikanásobná) výměna nového náhodného čı́sla: • netwrite −→ netread : requested params: rand • netread −→ netwrite : rand: 10923986926823690823 4. netwrite −→ netread : hmac alg: sha1 netwrite −→ netread : time: 1094834141.258439 netwrite −→ netread : hmac: ce02cceb2081673e8398edf655c569ab5fdcaf2b 64 B. NETRW – KOMUNIKAČNÍ PROTOKOL Následovně vypadá komunikace, pokud požadujı́ autentizaci obě strany (vzájemně kompatibilnı́ jsou pouze autentizačnı́ módy both–both a you– you; nenı́ možné použı́t na jedné straně mód you a na druhé both): 1. netread −→ netwrite : netrw control protocol netread −→ netwrite : auth type: both nebo you netread −→ netwrite : hmac alg: sha1 sha256 ripemd160 tiger160 netread −→ netwrite : time: 1094834140.866685 netread −→ netwrite : rand: 15464947654308140132 netread −→ netwrite : name nw: host2.somewhere.net netread −→ netwrite : name nr: host1.somewhere.net 2. netwrite −→ netread : netrw control protocol netwrite −→ netread : auth type: both nebo you 3. Možná (několikanásobná) výměna nového náhodného čı́sla: • netwrite −→ netread : requested params: rand • netread −→ netwrite : rand: 10923986926823690823 4. netwrite −→ netread : hmac alg: sha1 netwrite −→ netread : time: 1094834141.258439 netwrite −→ netread : rand: 13980349850394538972 netwrite −→ netread : name nr: host1.somewhere.net netwrite −→ netread : name nw: host2.somewhere.net netwrite −→ netread : hmac: ce02cceb2081673e8398edf655c569ab5fdcaf2b 5. Možná (několikanásobná) výměna nového náhodného čı́sla: • netread −→ netwrite : requested params: rand • netwrite −→ netread : rand: 9034809348509384537 6. netread −→ netwrite : hmac: ce02cceb2081673e8398edf655c569ab5fdcaf2b 65 B. NETRW – KOMUNIKAČNÍ PROTOKOL Ještě zbývá popsat podobu protokolu při autentizaci dat. Protože se jedná o stále stejné TCP spojenı́ jako při autentizaci uživatelů a hodnoty náhodných čı́sel a časových údajů použitých při autentizaci uživatelů nebyly v žádné předchozı́ komunikaci použity pro autentizaci dat, je možné je zde použı́t. Protokol pak vypadá (v závislosti na tom, zda se jedná o jednostrannou nebo oboustrannou autentizaci dat) následovně. Jednostranná autentizace dat, autentizačnı́ kód vyžaduje netwrite: 1. netread −→ netwrite : hmac: 0654043ce3e04a1bb18a7b982648afc82d35753b Jednostranná autentizace dat, autentizačnı́ kód vyžaduje netread: 1. netwrite −→ netread : hmac: 0654043ce3e04a1bb18a7b982648afc82d35753b Oboustranná autentizace dat: 1. netread −→ netwrite : hmac: 0654043ce3e04a1bb18a7b982648afc82d35753b 2. netread −→ netwrite : hmac: f128cd285824ad5e2e1a3abe0e622059b52f7c85 66 Přı́loha C Testy rychlosti přenosu dat V následujı́cı́ch podkapitolách jsou obsaženy výsledky jednotlivých sériı́ rychlostnı́ch testů. Ve všech testech bylo přenášeno několik různě velikých datových objemů: 100 MB, 200 MB, 500 MB a 1000 MB. Rychlost přenosu byla testována v následujı́cı́ch režimech a verzı́ch programu (verze 1.2 je původnı́ verze programu, verze 2.0 je nová verze obsahujı́cı́ autentizaci dat): • Netrw-1.2 bez počı́tánı́ kontrolnı́ho součtu. • Netrw-1.2 s počı́tánı́m kontrolnı́ho součtu pomocı́ algoritmu SHA-1. • Netrw-2.0 bez počı́tánı́ autentizačnı́ho kódu. • Netrw-2.0 s jednostranným počı́tánı́m autentizačnı́ho kódu pomocı́ algoritmu SHA-1. • Netrw-2.0 s oboustranným počı́tánı́m autentizačnı́ho kódu pomocı́ algoritmu SHA-1. • Netrw-2.0 s jednostranným počı́tánı́m autentizačnı́ho kódu pomocı́ algoritmu SHA-256. • Netrw-2.0 s oboustranným počı́tánı́m autentizačnı́ho kódu pomocı́ algoritmu SHA-256. Výsledky měřenı́ jsou zobrazeny v grafech. Na vodorovných osách je zobrazeno množstvı́ přenášených dat, na svislých osách je zobrazena rychlost přenosu těchto dat v MB/s. Každý test byl v zájmu co největšı́ přesnosti měřenı́ prováděn pětkrát po sobě. Výsledné hodnoty v jednotlivých sloupcı́ch grafů jsou pak aritmetickým průměrem těchto pěti měřenı́. 67 C. TESTY RYCHLOSTI PŘENOSU DAT C.1 Intel Celeron 900 MHz Procesor: Intel Celeron 800 MHz, přetaktován na 900 MHz Pamět’: 192 MB Základnı́ deska: Via Apollo Pro 133T, 100 MHz Operačnı́ Systém: Linux (LFS [42]) Způsob přenosu: Ze zařı́zenı́ /dev/zero do zařı́zenı́ /dev/null Netrw 1.2, bez počítání kontrolního součtu Netrw 1.2, kontrolní součet SHA-1 35,0 14,0 30,0 12,0 25,0 10,0 20,0 8,0 15,0 6,0 10,0 4,0 5,0 2,0 0,0 0,0 100 MB 200 MB 500 MB 1000 MB Netrw 2.0, bez počítání aut. kódu 100 MB 500 MB 1000 MB Netrw 2.0, jednostranný aut. kód SHA-1 40,0 14,0 35,0 12,0 30,0 200 MB 10,0 25,0 8,0 20,0 6,0 15,0 4,0 10,0 2,0 5,0 0,0 0,0 100 MB 200 MB 500 MB 1000 MB Netrw 2.0, oboustranný aut. kód SHA-1 100 MB 500 MB 1000 MB Netrw 2.0, jednostranný aut. kód SHA-256 7,0 7,0 6,0 6,0 5,0 5,0 4,0 4,0 3,0 3,0 2,0 2,0 1,0 1,0 0,0 200 MB 0,0 100 MB 200 MB 500 MB 1000 MB 100 MB 200 MB 500 MB 1000 MB 68 C. TESTY RYCHLOSTI PŘENOSU DAT Netrw 2.0, oboustranný aut. kód SHA-256 4,0 3,5 3,0 2,5 2,0 1,5 1,0 0,5 0,0 100 MB 200 MB 500 MB 1000 MB 69 C. TESTY RYCHLOSTI PŘENOSU DAT C.2 AMD Duron 600 MHz Procesor: AMD Duron 600 MHz Pamět’: 128 MB Základnı́ deska: VIA KT133/KM133, 100 Mhz Operačnı́ Systém: Linux (Mandrake 10.0 [43]) Způsob přenosu: Ze zařı́zenı́ /dev/zero do zařı́zenı́ /dev/null Netrw 1.2, bez počítání kontrolního součtu 100,0 Netrw 1.2, kontrolní součet SHA-1 22,5 90,0 20,0 80,0 17,5 70,0 15,0 60,0 12,5 50,0 10,0 40,0 7,5 30,0 20,0 5,0 10,0 2,5 0,0 0,0 100 MB 200 MB 500 MB 1000 MB Netrw 2.0, bez počítání aut. kódu 90,0 100 MB 200 MB 500 MB 1000 MB Netrw 2.0, jednostranný aut. kód SHA-1 14,0 80,0 12,0 70,0 10,0 60,0 50,0 8,0 40,0 6,0 30,0 4,0 20,0 2,0 10,0 0,0 0,0 100 MB 200 MB 500 MB 1000 MB Netrw 2.0, oboustranný aut. kód SHA-1 8,0 100 MB 200 MB 500 MB 1000 MB Netrw 2.0, jednostranný aut. kód SHA-256 9,0 7,0 8,0 6,0 7,0 6,0 5,0 5,0 4,0 4,0 3,0 3,0 2,0 2,0 1,0 1,0 0,0 0,0 100 MB 200 MB 500 MB 1000 MB 100 MB 200 MB 500 MB 1000 MB 70 C. TESTY RYCHLOSTI PŘENOSU DAT Netrw 2.0, oboustranný aut. kód SHA-256 4,5 4,0 3,5 3,0 2,5 2,0 1,5 1,0 0,5 0,0 100 MB 200 MB 500 MB 1000 MB 71 C. TESTY RYCHLOSTI PŘENOSU DAT C.3 2× Pentium III 1 GHz Procesor: 2× Pentium III 1 GHz Pamět’: 1 GB Základnı́ deska: VIA VT82C Apollo Operačnı́ Systém: Linux (Source Mage [44]) Způsob přenosu: Ze zařı́zenı́ /dev/zero do zařı́zenı́ /dev/null Netrw 1.2, bez počítání kontrolního součtu 110,0 Netrw 1.2, kontrolní součet SHA-1 40,0 100,0 35,0 90,0 80,0 30,0 70,0 25,0 60,0 20,0 50,0 40,0 15,0 30,0 10,0 20,0 5,0 10,0 0,0 0,0 100 MB 200 MB 500 MB 1000 MB Netrw 2.0, bez počítání aut. kódu 100 MB 500 MB 1000 MB Netrw 2.0, jednostranný aut. kód SHA-1 140,0 35,0 120,0 30,0 100,0 25,0 80,0 20,0 60,0 15,0 40,0 10,0 20,0 5,0 0,0 200 MB 0,0 100 MB 200 MB 500 MB 1000 MB Netrw 2.0, oboustranný aut. kód SHA-1 100 MB 500 MB 1000 MB Netrw 2.0, jednostranný aut. kód SHA-256 20,0 20,0 17,5 17,5 15,0 15,0 12,5 12,5 10,0 10,0 7,5 7,5 5,0 5,0 2,5 2,5 0,0 200 MB 0,0 100 MB 200 MB 500 MB 1000 MB 100 MB 200 MB 500 MB 1000 MB 72 C. TESTY RYCHLOSTI PŘENOSU DAT Netrw 2.0, oboustranný aut. kód SHA-256 11,0 10,0 9,0 8,0 7,0 6,0 5,0 4,0 3,0 2,0 1,0 0,0 100 MB 200 MB 500 MB 1000 MB 73 C. TESTY RYCHLOSTI PŘENOSU DAT C.4 Intel Celeron 900 MHz, AMD Duron 600 MHz Zdrojový systém (čtenı́ dat z disku a zası́lánı́ dat) Procesor: Intel Celeron 800 MHz, přetaktován na 900 MHz Pamět’: 192 MB Základnı́ deska: Via Apollo Pro 133T, 100 MHz Pevný disk: Seagate Baracuda 120 GB, 7200 rpm, 8 MB cache Operačnı́ Systém: Linux (LFS) a Windows XP Cı́lový systém (přı́jem dat a jejich zápis na disk) Procesor: AMD Duron 600 MHz Pamět’: 128 MB Základnı́ deska: VIA KT133/KM133, 100 Mhz Pevný disk: Seagate Baracuda 40 GB, 5400 rpm, 2 MB cache Operačnı́ Systém: Linux (Mandrake 10.0) a Windows XP Způsob přenosu: Z disku na disk Autentizačnı́ kód: SHA-256 Linux → Linux Linux → Windows 5,5 4,5 5,0 4,0 4,5 3,5 4,0 3,0 3,5 2,5 3,0 2,5 2,0 2,0 1,5 1,5 1,0 1,0 0,5 0,5 0,0 0,0 100 MB 200 MB 500 MB 1000 MB 100 MB Windows → Linux 200 MB 500 MB 1000 MB Windows → Windows 4,5 4,5 4,0 4,0 3,5 3,5 3,0 3,0 2,5 2,5 2,0 2,0 1,5 1,5 1,0 1,0 0,5 0,5 0,0 0,0 100 MB 200 MB 500 MB 1000 MB 100 MB 200 MB 500 MB 1000 MB 74
Podobné dokumenty
podrobný obsah
Zdrojový kód příkladů uvedených v knize je k dispozici na adrese http://www.apress.com v sekci Source Code
nebo na adrese http://www.zonerpress.cz v sekci Download.
Zoner Press
KATALOGOVÉ ČÍSLO: ZR...
Virtualizace a konsolidace
• Prezentace: aplikace beží na vzdáleném serveru, odkud/kam jsou mezi klienty a serverem
přenášeny pouze obrazovky, klávesové vstupy a pohyby myší
• Desktop: klientské desktopy hostované v datovém ...
Diskove´ šifrovánı
Z pohledu uživatele je celý proces transparentnı́, tj. po zadánı́ hesla a zprovozněnı́
šifrovacı́ a dešifrovacı́ vrstvy lze pracovat s daným zařı́zenı́m, jako by nebylo šifrováno.
Data se...
Uživatelská příručka Owners Manual / Пособие для пользователей
rukojeť startéru dokud nevykazuje odpor. Po té plynule, ale dostatečně rychle vytahujte rukojeť startéru
(tak aby nedošlo k nadměrnému namáhání provazu startéru a vodící kladky startéru) (4). Opaku...
www server na platformě linux debian
systémy), které je zpravidla možné nainstalovat6 . Různé distribuce bývají přizpůsobeny
různým účelům, některé se hodí na desktop, jiné na server a některé jsou vytvořeny
pro velice úzké využití (n...