Rok / Year: 2015
Svazek / Volume: 17
Číslo / Number: 4
Anonymizační síť Tor Tor anonymity network Karel Burda
[email protected] Fakulta elektrotechniky a komunikacních technologií VUT v Brne
Abstrakt: Anonymizační sítě slouží ke skrytí identity stanic, které navzájem komunikují prostřednictvím internetu. Uvedená problematika je v současné době velmi aktuální a široce diskutovaná. Účelem tohoto přehledového článku je na příkladu sítě Tor seznámit odbornou komunitu s problematikou anonymizačních sítí podrobněji. V článku jsou popsány základní pojmy a anonymizační techniky. Rovněž jsou v něm do hloubky vysvětleny principy i algoritmy fungování sítě Tor. Velká pozornost je věnována přenosovému protokolu Tor i použitým kryptografickým technikám. Na závěr článku jsou diskutovány otázky bezpečnosti sítě Tor.
Abstract: Anonymity networks serve to hide station’s identities, which mutually communicate via the Internet. Currently, this theme is very topical and widely discussed. The aim of this survey paper is to inform the expert community about the Tor network in detail. In the paper, basic terms and anonymity techniques are described. Principles and algorithms of the Tor network operation are deeply explained too. Great attention is dedicated to the transport protocol Tor and employed cryptography techniques. In the conclusion of this paper, security issues of the Tor network are discussed.
VOL.17, NO.4, AUGUST 2015
Anonymizační síť Tor Karel Burda Fakulta elektrotechniky a komunikačních technologií VUT v Brně Email:
[email protected]
Abstrakt - Anonymizační sítě slouží ke skrytí identity stanic, které navzájem komunikují prostřednictvím internetu. Uvedená problematika je v současné době velmi aktuální a široce diskutovaná. Účelem tohoto přehledového článku je na příkladu sítě Tor seznámit odbornou komunitu s problematikou anonymizačních sítí podrobněji. V článku jsou popsány základní pojmy a anonymizační techniky. Rovněž jsou v něm do hloubky vysvětleny principy i algoritmy fungování sítě Tor. Velká pozornost je věnována přenosovému protokolu Tor i použitým kryptografickým technikám. Na závěr článku jsou diskutovány otázky bezpečnosti sítě Tor.
1 Úvod V internetu se přenosy dat mezi stanicemi zajišťují pomocí protokolu IP („Internet Protocol“). Přenos dat se uskutečňuje prostřednictvím datových bloků, které se nazývají pakety. Každý IP paket sestává ze záhlaví, které obsahuje služební údaje a z těla paketu, které obsahuje samotná data k přenosu. V záhlaví se kromě jiného nacházejí IP adresa odesílatele a IP adresa příjemce paketu. Přenos paketů od odesílatele k příjemci zprostředkovávají tzv. tranzitní uzly, které si na základě cílové IP adresy tyto pakety štafetovým způsobem postupně předávají. IP adresy stanic jsou v internetu unikátní a umožňují jednoznačně identifikovat počítač odesílatele paketu i počítač jeho příjemce. Z centralizované evidence IP adres a s použitím dalších databází a metod je pak možné vypátrat geografické umístění počítače i identitu majitele počítače. V dalším textu budeme IP adresu stanice X vyjadřovat kurzívou, tj. X. Pokud tedy strana A s IP adresou A komunikuje se stranou B, která má přidělenu adresu B, tak si vyměňují pakety, které ve svém záhlaví obsahují zmiňované IP adresy. Pokud někdo takovýto paket na jeho cestě internetem zachytí, tak může konstatovat, že strana A komunikuje se stranou B. V životě však existují situace, kdy je vhodné svoji identitu skrývat. Takovouto situací je například oznámení o korupci, či šíření necenzurovaných informací. Jak informátor o korupci, tak i server s necenzurovanými informacemi, mají pochopitelný zájem na skrytí své identity z toho důvodu, aby nebyli vystaveni tlaku korupčníka, resp. vlády. Na druhou stranu však jiným důvodem ke skrývání identity může být i nelegální jednání (např. distribuce drog). Tato nejednoznačnost učinila z otázky skrývání identity značně kontroverzní záležitost. Základní pojmy související s anonymitou v počítačových sítích jsou stále ještě předmětem diskusí (např. [1]). V tomto článku budeme v souladu s [2] anonymitou v síti rozumět stav, kdy uživatel může využívat služby sítě bez odhalení své identity. Anonymizací potom budeme rozumět skrytí identity komunikujících stran. V internetu je obvyklý model komunikace typu klient - server. Klient je software na počítači uživatele
(někdy se jím rozumí celý počítač uživatele), který tomuto uživateli umožňuje využívat nabízené služby (např. stahování souborů). Server je software na počítači (resp. opět celý počítač) poskytovatele služby, který umožňuje služby poskytovat. V dalším textu proto budeme rozlišovat anonymizaci klienta, resp. serveru a anonymizaci stran. • Anonymizací klienta budeme v následujícím textu rozumět skrytí identity klientského počítače. V této souvislosti je však zapotřebí si uvědomit, že klient nemůže být anonymní na celé cestě paketů internetem. Klient musí být do internetu připojen přes nějaký prvek (nazveme jej připojovací uzel) a minimálně tento uzel musí IP adresu (tj. identitu) klientského počítače znát, aby mu mohl data od serveru předávat. • Anonymizací serveru budeme rozumět skrytí identity počítače, který poskytuje službu. I zde platí, že této anonymity nelze dosáhnout v úseku mezi serverem a jeho připojovacím uzlem. • Anonymizací stran budeme označovat skrytí identity jak klienta, tak i serveru. Teoreticky ji lze dosáhnout v úseku mezi jejich připojovacími uzly. Tento typ anonymizace je ideálním cílovým stavem. S pojmem anonymizace z hlediska jeho významu sousedí pojmy autentizace, šifrování a steganografie. Společným jmenovatelem dvojice pojmů anonymizace – autentizace je identita. V prvém případě ji skrýváme a ve druhém ji prokazujeme. Společným jmenovatelem trojice pojmů anonymizace – šifrování – steganografie je skrývání. V prvém případě skrýváme identitu komunikujících stran, ve druhém případě skrýváme obsah komunikace a v posledním případě skrýváme samotnou existenci komunikace.
2 Anonymizační techniky K anonymizaci stanic v internetu se využívá celá řada technik. Na základě analýzy fungování existujících anonymizačních sítí je můžeme rozdělit do dvou základních tříd: • techniky ke skrytí adres, • techniky k maskování provozu. Účelem technik z první uvedené třídy je znemožnit útočníkovi identifikovat komunikaci (tj. tok vyměňovaných paketů) pomocí adresy zdroje a cíle paketů. Účelem technik ze druhé třídy je znemožnit útočníkovi identifikovat komunikaci pomocí specifických rysů provozu (např. podle intenzity, nebo délek vyměňovaných paketů). Nejprve si podrobněji vysvětlíme techniky ke skrytí adres. V podstatě jsou tyto techniky dvě: • substituce zdrojových adres, • šifrování cílových adres.
124
VOL.17, NO.4, AUGUST 2015
V případě substituce zdrojových adres se v tranzitním uzlu X nahrazuje zdrojová adresa paketu adresou X, tj. adresou daného tranzitního uzlu. Tato substituce může být buď jednorázová, nebo průběžná. V případě jednorázové substituce se pak zdrojem paketu pro všechny následující uzly jeví tranzitní uzel X. Uzel X tak vůči zbytku sítě zastupuje skutečný zdrojový uzel a proto se také nazývá zprostředkovatel („proxy“). V případě průběžné substituce každý tranzitní uzel přepisuje zdrojovou adresu svojí adresou a tak se každému následujícímu uzlu na cestě paketu sítí jeví, že zdrojem paketu je předchozí uzel. U techniky šifrování cílových adres obsahuje tělo paketu kromě samotných dat také zásobník adres zašifrovaných zdrojovým uzlem A. Tranzitní uzel X z tohoto zásobníku dešifruje jemu příslušný kryptogram, přičemž předpokládejme, že je tam uvedena adresa Y. Touto adresou přepíše dosavadní cílovou adresu (tj. X) a paket přepošle uzlu Y. Obě uvedené techniky si podrobněji vysvětlíme na obr. 1, kde komunikuje klient A se serverem D. Předpokládejme přitom, že strana A potřebuje anonymizovat svoji komunikaci. A A A A
[A, D] [A, D] [A, B, E1(D)] [A, B, E1(C), E2(D)]
B B B B
[A, D] [B, D] [B, D] [B, C, E2(D)]
C C C C
[A, D] [B, D] [B, D] [C, D]
D D D D
Obr. 1: Anonymizace technikami skrýváním adres Nad jednotlivými spoji jsou v hranatých závorkách uvedeny adresní údaje přenášeného paketu. Těmito adresními údaji je vždy zdrojová a cílová adresa paketu a případně i zašifrované adresy, které jsou uloženy v zásobníku zašifrovaných adres. Například zápis [X, Y, Ei(Z)] vyjadřuje, že zdrojová adresa paketu je X, cílová Y a v paketu je ještě klíčem Ki zašifrována adresa Z. Schéma na obrázku zcela nahoře ilustruje situaci ve standardním internetu, kdy není zajištěna žádná anonymita. Zprostředkující stanice B a C (běžné IP směrovače) z adresních údajů [A, D] v záhlaví paketu znají IP adresu (a tedy i identitu) klienta A a stejnou informaci může samozřejmě zjistit i adresát paketu, tj. server D. Druhé schéma shora ilustruje nejjednodušší metodu anonymizaci klienta A, kterou je využití anonymizačního serveru B (tzv. „proxy“). Anonymizace spočívá v tom, že server B předává pakety od klienta A ke stanici D s tím, že IP adresa odesílatele (tj. A) je v nich nahrazena IP adresou zprostředkovatele, tj. B. Pro všechny následující směrovače v internetu (např. pro C) i pro server D je potom skutečný odesílatel paketu neznámý. Nevýhodou popsaného řešení je skutečnost, že v úseku mezi stanicemi A a B není zajištěna žádná anonymita. Například poskytovatel internetu uživatele A má v takové situaci přehled o tom, s kým daný uživatel komunikuje. Řešením uvedeného problému je anonymizace protistrany. K anonymizaci protistrany se využívají techniky šifrování cílových adres, což na našem obrázku ilustruje třetí
schéma shora. V uvedeném případě se mezi A a B sjedná tajný klíč K1 a informace o skutečném adresátu dat (tj. IP adresa D) je anonymizačnímu serveru B předána šifrovaně. Adresní údaje paketu tedy jsou [A, B, E1(D)]. Anonymizační server dešifruje kryptogram E1(D) a zjistí z něho cílového adresáta. Následně odešle paket s adresními údaji [B, D]. Poskytovatel internetu v tomto případě jen ví, že stanice A komunikuje s nějakou jinou stanicí přes anonymizační server B, avšak neví, kdo je skutečným adresátem přenášených dat. Reprezentantem popsaného řešení je např. Anonymizer [3]. Slabinou výše uvedeného řešení je skutečnost, že anonymizační server B má o komunikaci veškeré údaje, tj. ví, že stanice A komunikuje se stanicí D. Z tohoto důvodu se jednotlivé anonymizační servery nahrazují celou sítí navzájem nezávislých anonymizačních serverů. Každý z těchto serverů přitom má o dané komunikaci jen neúplnou informaci - ví pouze, kdo mu paket předal a komu dalšímu jej má předat on. Sítě anonymizačních serverů se nazývají anonymizační sítě. Segment anonymizační sítě, který sestává z anonymizačního serveru B a C, máme na obr. 1 zcela dole. Strana A má sjednán šifrovací klíč K1 se serverem B a zároveň i šifrovací klíč K2 se serverem C. Na obrázku vidíme, že stanice A vyšle paket se svojí zdrojovou IP adresou A, cílovou adresou B a dalšími zašifrovanými adresními údaji E1(C) a E2(D). Server B přepíše zdrojovou adresu na B a do cílové adresy zapíše výsledek dešifrování E1(C), tj. adresu C. Tento paket, spolu se zašifrovaným adresním údajem E2(D), je doručen do C. Server C dešifruje E2(D) a získá adresu konečného adresáta D. Následně do paketu zapíše adresní údaje [C, D] a paket odešle stanici D. Popsané uspořádání zajišťuje anonymitu serveru (tj. D) v úseku od A po C a anonymitu klienta v úseku od B až po D. V anonymizační síti (tj. mezi B a C) jsou anonymními obě strany komunikace. Tímto jsme si vysvětlili třídu technik ke skrytí adres a nyní přejdeme k popisu technik maskování provozu. Tyto techniky mají útočníkovi zabránit, aby identifikoval komunikující dvojice na základě charakteristických rysů jimi uskutečňovaného provozu. Útočník jednoduše v jednotlivých spojích sítě sleduje provoz a na základě například dat v paketu, nebo délky paketu může usuzovat, že paket Pi ze spoje (X, Y) je zároveň paketem Pk ze spoje (Y, Z). Tím určil část komunikační cesty X-Y-Z. Sledováním cesty paketu v jednotlivých spojích může útočník odhalit celou cestu od klienta až k serveru, tj. může odhalit identitu obou komunikujících stran. K maskování provozu se v praxi používají různé kombinace následujících technik: • unifikace délek transportních datových jednotek, • průběžné šifrování transportních datových jednotek, • klamný provoz, • mixování provozu. Aby útočník nemohl v síti rozlišovat transportní datové jednotky podle jejich délky (a tak sledovat jejich pohyb v síti), tak se používá technika unifikace délek transportních jednotek. Uvedená technika spočívá v tom, že data jsou v síti transportována v datových jednotkách, které mají pevně stanovenou délku. Tyto unifikované transportní jednotky nazveme fragmenty. Jednotná délka fragmentů útočníkovi znemožňuje podle délek zjišťovat, který fragment vstupující do uzlu Y odpovídá jakému vystupujícímu fragmentu.
125
VOL.17, NO.4, AUGUST 2015
Fj
Jejich komunikaci zprostředkovává anonymizační server X, který budeme nazývat mixér („mix“) [4]. Dejme tomu, že uzel A odeslal v čase ti fragment Fi pro C. Server X jej přijme a čeká, dokud neobdrží fragment Fk nějakého jiného toku – v našem případě toku B-D. Jakmile má server m fragmentů z různých toků (v našem případě m = 2), tak má tzv. dávku. kterou zpracuje tím způsobem, že dešifruje, resp. zašifruje příslušné fragmenty a zjistí, kam má tyto fragmenty předat. Dejme tomu, že v našem případě fragment Fi získá kryptografickými a adresními úpravami podobu Fj a fragment Fk po podobných úpravách nabude podobu Fl. Do spoje (X, C) tak bude v okamžiku tX předán fragment Fj a současně do spoje (X, D) bude vyslán fragment Fl. Útočník ví, že za dobu jeho sledování do mixéru X dorazil fragment Fi od A a fragment Fk od B. Útočník však nyní nemůže určit, kterému z těchto fragmentů odpovídá Fj, resp. Fl. Nemůžete tak určit, zda A komunikuje s C, či s D a totéž platí i pro uzel B. Pokud by měly být oba fragmenty odeslány do stejného spoje, tak X je vyšle v náhodném pořadí, tj. nezávisle na době jejich příchodu do X. Mixování provozu významně zvyšuje odolnost vůči útokům analýzou provozu. Jeho velkou nevýhodou je však skutečnost, že do komunikace vnáší významné zpoždění, které je dáno tím, že v každém mixéru je vždy zapotřebí nejprve shromáždit dávku m fragmentů z m různých komunikačních toků. Možným řešením tohoto problému je nasazení techniky klamných fragmentů. Mixér tak bude mít vždy k dispozici m fragmentů z navzájem nezávislých komunikačních toků. Výše jsme si vysvětlili techniky anonymizace a nyní si ještě stručně uvedeme základní reprezentanty anonymizačních řešení na internetu. V praxi se anonymizační sítě klasifikují do dvou základních tříd - na sítě s vysokou latencí a na sítě s nízkou latencí. Sítě s vysokou latencí vždy obsahují mixéry, které do komunikace vnášejí vysoká zpoždění. Takovéto sítě (např. Mixminion) [5] jsou z toho důvodu použitelné jen pro aplikace, které nevyžadují okamžitou reakci protistrany (typicky emailová pošta). Naopak sítě bez mixérů, nebo sítě obsahující mixéry, přičemž je v nich zároveň veden klamný provoz, se vyznačují nízkou latencí, tj. nízkým zpožděním paketů (řádově do stovek ms). Jsou vhodné pro interaktivní aplikace, jako je například surfování po internetu. Liší se od sebe zejména způsobem vytváření přenosových cest v síti, způsobem sjednávání šifrovacích klíčů a typem anonymizovaného provozu (např. e-mail, web apod.). K nejznámějším patří síť Tor [6], I2P („Invisible Internet Project“ [7], nebo Web MIXes [8]. My se v dalších částech tohoto článku budeme podrobněji věnovat nejpopulárnějšímu zástupci soudobých anonymizačních sítí s nízkou latencí, kterým je síť Tor.
Fl
3 Anonymizační síť Tor
Fragmentace se kombinuje s technikou průběžného šifrování. Průběžným šifrováním se rozumí postup, kdy se fragment Fi ze spoje (X, Y) v tranzitním uzlu Y dešifruje, následně zašifruje jiným klíčem a předá jako fragment Fk do spoje (Y, Z). Změnou šifrovacího klíče dojde ke změně hodnot bitů v zašifrovaném fragmentu (tj. Fi ≠ Fk) a útočník tímto způsobem ztratí možnost podle hodnot bitů fragmentů zjišťovat, který fragment vstupující do uzlu Y odpovídá jakému vystupujícímu fragmentu. Popsanými technikami jsme útočníkovi znemožnili rozeznávat transportní datové jednotky v síti podle jejich délky, či bitových hodnot. Útočníkovi však ještě zůstává možnost sledovat počty přenesených fragmentů a časové vztahy mezi fragmenty. Vraťme se k dolnímu schématu na obr. 1 a představme si, že útočník může monitorovat fragmenty přenášené ve spoji (A, B) a porovnávat je s provozem ve spoji (C, D). Předpokládejme přitom, že spoj (B, C) reprezentuje celou anonymizační síť. Pokud potom útočník například zjistí, že ve spoji (A, B) byla přenesena série x fragmentů a současně za dobu T, která odpovídá střednímu zpoždění fragmentů v síti, se ve spoji (C, D) objevila série právě x fragmentů s podobnými vzájemnými odstupy jako ve spoji (A, B), tak může konstatovat, že s velkou pravděpodobností spolu uzly A a D komunikují. K ochraně před tímto typem útoků se používá technika klamného provozu a technika mixování provozu. V případě techniky klamného provozu se v anonymizační síti záměrně přenášejí balastní fragmenty. Nejčastěji se jedná o zcela bezvýznamné fragmenty (tj. o fragmenty, které nenesou žádnou informaci), nebo jde o fragmenty komunikace, která pro klienta není potřebná a má jen sloužit k odlákání pozornosti útočníka a k vyčerpávání jeho zdrojů. Technika klamného provozu je z bezpečnostního hlediska velmi robustní typ ochrany, neboť útočník není schopen z důvodu šifrování fragmentů rozeznat, které z nich jsou součástí komunikace a které jsou klamné. Velkou nevýhodou této techniky je však skutečnost, že klienti se často připojují spoji, které jsou zpoplatňovány právě na základě přeneseného objemu dat. Technika klamného provozu je proto často neakceptovatelná z finančních důvodů. Technika mixování provozu je založena na dávkovém zpracování fragmentů různých komunikačních toků. Princip metody ilustruje obr. 2, kde vidíme dvě komunikující dvojice A-C a B-D. A
C Fi X Fk
B
D
Fi
Fk
Fj , Fl
ti
tk
tX
Doba zpracování dávky Obr. 2: Anonymizace mixováním provozu
t
Síť Tor je virtuální anonymizační síť s nízkou latencí. V současné době sestává z cca 6500 uzlů, využívá ji kolem 2 miliónů uživatelů a asi 25 tisíc skrytých serverů [9]. Uživatelé ji používají k ochraně svého soukromí a pro přístup k cenzurovaným službám. Správci skrytých serverů využívají síť Tor ke skrytí místa, v němž je jejich server umístěn. Koncept sítě Tor byl navržen v polovině 90. let zaměstnanci Námořní výzkumné laboratoře USA („US Naval Research Laboratory“). Účelem vyvíjené sítě byla ochrana komunikace v rámci zpravodajské komunity. První verze sítě Tor
126
VOL.17, NO.4, AUGUST 2015 byla spuštěna v roce 2002 a současná druhá verze funguje od roku 2004. Od roku 2006 jsou další vývoj a podpora sítě Tor garantovány v rámci projektu „The Tor project“ [10], který je finančně podporován řadou organizací. Původně bylo označením sítě zkratka z názvu původního projektu „The Onion Routing“, tj. TOR. V současné době se označení sítě chápe nikoliv jako zkratka, ale jako slovo a proto se píše Tor. Specifikace sítě Tor se na základě provozních zkušeností poměrně rychle aktualizují se snahou zachovat zpětnou kompatibilitu. Důsledkem je skutečnost, že prvky sítě mohou zajišťovat stejnou funkci více různými způsoby. Základními prvky sítě Tor jsou následující. Adresářový server − TA („directory server“). Zajišťuje důvěryhodné informace o síti Tor pro ostatní prvky. V síti Tor z bezpečnostních důvodů funguje více navzájem nezávislých adresářových serverů. Každý z nich má svůj podepisovací kryptosystém. Adresářové servery běží na vybraných směrovačích Tor. • Směrovač sítě − TR („onion router“). Zajišťuje směrování přenosových datových jednotek (tzv. buněk) v síti. Každý TR má svůj podepisovací a utajovací kryptosystém. • Skrytý server − TS („hidden server“). Server, který má být pro své uživatele z hlediska identity majitele i geografického umístění anonymní. Každý TS má svůj podepisovací kryptosystém. Ten se také používá i jako utajovací. • Klient sítě Tor − TC („client“). Klient na počítačích těch uživatelů, kteří chtějí zůstat při svém využívání internetu anonymními.
•
K označení TA a TR se používají dva základní identifikátory. Prvním je přezdívka („nickname“) a druhým je kód („fingerprint“). Přezdívka je unikátní řetězec dlouhý 1 až 19 alfanumerických znaků (velká i malá písmena a číslice). Kód je hexadecimálně vyjádřený heš ověřovacího klíče zařízení vypočítaný funkcí SHA-1. Servery TS se identifikují názvem serveru v podobě TS.onion, kde řetězec TS se odvozuje podobně jako kód TA, či TR, tj. z heše ověřovacího klíče zařízení. Klienti (tj. TC) žádný unikátní identifikátor nepotřebují. V rámci sítě Tor se používají následující elektronické dokumenty [11]. • Deskriptor („descriptor“). Výčet údajů o jednotlivém TR. Každý TR periodicky zasílá svůj deskriptor všem TA. Deskriptor (zkráceně DR) každého TR obsahuje: - přezdívku, kód a IP adresu, - veřejný šifrovací a ověřovací klíč, - podpis výše uvedených dat podepisovacím klíčem TR. • Konsensus („consensus“). Výčet deskriptorů, s jehož obsahem souhlasí nejvíce TA. Každé TA na základě jemu doručených deskriptorů generuje vlastní přehled, který zasílá ostatním TA k odsouhlasení. Přehled, který získal nejvíce podpisů TA, se stává konsensem (zkráceně KS). TC, TS i TR spolupracují pouze s těmi TR, jejichž deskriptor je uveden v aktuálně platném konsensu. • Certifikát („certificate“). Certifikát podle standardu X.509, který obsahuje veřejný klíč prvku Y. Veřejný klíč může přitom být buď šifrovací, nebo ověřovací. Certifikát (zkráceně CTY) je podepsán soukromým podepisovacím klíčem prvku Y.
V dalším textu budeme klíče asymetrických kryptosystémů (podrobněji viz 4. kapitola) značit dvojicí písmen. První písmeno bude značit, zda je klíč veřejný (V), nebo soukromý (S). Druhé písmeno bude vyjadřovat, zda jde o utajovací kryptosystém (E), nebo o autentizační (neboli podepisovací) kryptosystém (Q). Majitele kryptosystému bude vyjadřovat index označení klíče. Potom například směrovač TR bude mít dvojici klíčů (VETR, SETR) pro utajovací kryptosystém a dvojici (VQTR, SQTR) pro podepisovací kryptosystém. Jádro sítě Tor tvoří několik směrovačů TR, které zároveň fungují jako adresáře TA. Další směrovače provozují různé organizace, nebo dobrovolníci. Tím se dosahuje nezávislost na jediném provozovateli a vyšší důvěryhodnost pro uživatele. Síť se o nové směrovače rozšiřuje podle následujícího postupu. 1. Kdo chce poskytnout hardware ve funkci směrovače TR, tak zašle správcům TA deskriptor DRTR svého směrovače. Deskriptor obsahuje přezdívku, či kód nabízeného TR, IP adresu IPTR, klíče VQTR, VETR a je podepsán SQTR. 2. Po schválení nabídnutého směrovače se toto zařízení objeví v konsensu KS sítě Tor, který je podepsán SQ většiny TA. Konsensus kromě jiného obsahuje IPTR a heš klíče VQTR. Ten umožňuje ověřit autentičnost DRTR, který je spolu s KS distribuován z TA na vyžádání jednotlivých TR, TC a TS sítě Tor. 3. Majitel TR si následně vytvoří vlastní certifikát CTTR, který obsahuje jeho veřejný šifrovací klíč VETR podepsaný klíčem SQTR. Pomocí tohoto certifikátu se bude autentizovat vůči ostatním prvkům sítě Tor. 4. Nový směrovač TR naváže spojení s dalšími směrovači Tor pomocí standardního kryptografického protokolu TLS („Transport Layer Security“) [12]. Certifikáty CTTR jsou v tomto protokolu použity ke vzájemné autentizaci stran.
4 Přenos dat v síti Tor Již jsme si uvedli, že síť Tor je specializovaná virtuální síť nad internetem. Její jádro tvoří směrovače Tor (TR), které jsou navzájem propojeny kryptograficky zabezpečenými virtuálními spoji. K tomuto zabezpečení se používá protokol TLS a uvedené spoje proto budeme nazývat TLS spoje. Jednotlivý TLS spoj nad segmentem sítě internet ilustruje obr. 3. V našem příkladě segment internetu tvoří čtyři standardní IP směrovače R1 až R4 propojené spoji podle obrázku. Na IP směrovač R1 a R3 jsou připojeny směrovače sítě Tor označené TR1 a TR2. Předpokládejme, že k vytvoření virtuálního TLS spoje mezi TR1 a TR2 je na základě aktuálních směrovacích tabulek využita posloupnost spojů (TR1, R1) - (R1, R3) - (R3, TR2).
127
TR1
R1
R2
R4
R3
Obr. 3: TLS spoj nad segmentem internetu
TR2
VOL.17, NO.4, AUGUST 2015 Protokolovou architekturu uvedeného spoje ilustruje obr. 4. Vrstva TLS protokolu přebírá data k přenosu (v dalším uvidíme, že se jedná o buňky protokolu Tor), opatří je pečetí („Message Authentication Code“ - MAC), zašifruje a předá vrstvě protokolu TCP („Transmission Control Protocol“). Úlohou protokolu TCP je zajistit spolehlivý přenos dat mezi koncovými body TR1 a TR2 tím, že řeší případné ztráty, duplicity nebo chyby v přenášených datech. Data z vrstvy TCP jsou předávána vrstvě IP protokolu, který uskutečňuje přenos obdržených dat po síťové cestě TR1-R1-R3-TR2. V každém z použitých spojů jsou data předávána příslušným linkovým protokolem (na obrázku označeným zkratkou LP), kterým zpravidla bývá buď protokol PPP, Ethernet, či Wi-Fi. Vidíme, že spoj TLS je sám o sobě poměrně složitým systémem, avšak v dalším jej budeme chápat jen jako základní prvek složitějšího systému, kterým je síť Tor. TLS TCP IP LP TR1
IP LP
IP LP R1
IP LP
IP LP R2
AP TCP Tor TLS
TLS TCP IP LP
TC
TR2
Obr. 4: Protokolová architektura TLS spoje Přenos dat v síti Tor si přiblížíme na příkladu segmentu sítě Tor z obr. 5. Tento segment tvoří čtyři Tor směrovače TR1 až TR4 propojené TLS spoji podle obrázku. Na směrovač TR1 je připojen klient sítě Tor s označením TC a na TR3 je připojen skrytý server označený TS. Ke komunikaci mezi TC a TS je vytvořen virtuální spoj, který se nazývá okruh („circuit“). V našem případě okruh sestává z posloupnosti TLS spojů (TC, TR1) - (TR1, TR3) - (TR3, TS). TC
TR1
TR2
TR4
TR3
funguje podobně a tak je nakonec buňka doručena do TS. Komunikace v opačném směru je analogická. Upozorňujeme, že tento popis je poněkud zjednodušený, protože v dalším uvidíme, že buňky jsou v rámci protokolu Tor ještě pečetěny a mnohonásobně šifrovány. V této chvíli si však už můžeme povšimnout, že k uskutečnění spojení stačí TR1 vědět, že buňky od TC má předávat do TR3 a směrovači TR3 postačuje znát, že buňky daného okruhu má směrovat do TS. Zásada, že každý prvek sítě Tor zná pouze předešlý a následující prvek v daném okruhu, je základem pro zajištění anonymizace koncových prvků okruhu. Směrovač TR1 ví, že TC komunikuje, ale neví se kterým serverem. Analogicky TR3 ví, že TS komunikuje, ale neví, se kterým klientem tato komunikace probíhá. Tuto informaci, pokud mu ji nesdělí samotný klient TC, nezná ani samotný server TS.
TS
Obr. 5: Segment sítě Tor Protokolovou architekturu sítě Tor ilustruje obr. 6. Aplikace na straně klienta a na straně serveru (například webový prohlížeč a webový server) spolu komunikují pomocí příslušného přenosového protokolu AP (v našem příkladě protokolem HTTP – „Hypertext Transfer Protocol“). Zprávy aplikačního protokolu AP jsou předávány do vrstvy TCP, která mezi oběma konci okruhu zajišťuje spolehlivý přenos těchto zpráv. Tato vrstva předává data z aplikačních zpráv do vrstvy protokolu Tor. Zde se přenášená data umisťují do specifických přenosových jednotek, které se nazývají buňky. Buňka je následně předána do vrstvy TLS spoje, který zajistí kryptograficky zabezpečený přenos buňky k dalšímu prvku sítě Tor tak, jak jsme si popsali v předchozím odstavci. V našem příkladu je buňka z TC předána do směrovače TR1, který ji na základě informace v záhlaví buňky přesměruje do TR3. Směrovač TR3
Tor TLS
Tor TLS
TR 1
Tor TLS
Tor TLS
TR2
Obr. 6: Protokolová architektura sítě Tor
AP TCP Tor TLS TS
Na architektuře Tor ještě stojí za zmínku, že je analogická čtyřvrstvé architektuře TCP/IP. Linková vrstva je realizována spoji TLS a funkce síťové vrstvy plní protokol Tor. V transportní vrstvě je v architektuře Tor používán pouze protokol TCP - jiné protokoly (např. UDP) nejsou podporovány. Uživatelé sítě proto mohou využívat pouze aplikace, jejichž komunikace je založena právě na protokolu TCP.
5 Kryptografie v síti Tor K řádnému fungování sítě Tor je zapotřebí zajistit důvěrnost i autentičnost přenášených informací. K zajišťování důvěrnosti se používají utajovací kryptosystémy a k zajišťování autentičnosti slouží autentizační kryptosystémy [13]. Použité utajovací i autentizační kryptosystémy jsou jak symetrického, tak i asymetrického typu. Jedná se o následující. • Asymetrický autentizační kryptosystém. Tento typ kryptosystému slouží k podepisování elektronických dokumentů. Používá se podpis typu RSA podle standardu PKSC#1 [14]. • Asymetrický utajovací kryptosystém. Používá se DiffieHellmanův protokol k sestrojení klíčů pro symetrické kryptosystémy a utajovací RSA kryptosystém, opět podle standardu PKCS#1. • Symetrický šifrovací kryptosystém. Je použita šifra AES s délkou klíče 128 bitů v režimu CTR. • Symetrický autentizační kryptosystém. Je založen na průběžném hešování zpráv z tajné počáteční hodnoty stavové proměnné hešovací funkce SHA-1. Nejprve si vysvětlíme účel a princip fungování hešovací funkce. Účelem hešovací funkce H je vytvořit krátký bitový řetězec h (v případě SHA-1 o délce 160 bitů), který bude v dalším kryptografickém zpracování reprezentovat libovolně dlouhý řetězec Z. Formálně tedy můžeme psát, že h = H(Z).
128
VOL.17, NO.4, AUGUST 2015 Hešovací funkce se v protokolu Tor využívá k podepisování zpráv a k jejich autentizaci. K podepisování a šifrování se využívá kryptosystém RSA. V případě podepisovacího kryptosystému je soukromý klíč SE dvojice (d, n), kde d je tajný exponent a n je veřejný modulus. Veřejný klíč VE = (e, n), kde e je veřejný exponent. Šifrování zprávy Z do podoby kryptogramu C se provádí pomocí klíče VE, tj. šifrovat může kdokoliv. Konkrétně u šifrování platí, že C = Ze mod n. K dešifrování kryptogramu je zapotřebí SE, přičemž se postupuje tak, že Z = Cd mod n. Pokud je RSA použito k podepsání zprávy Z, tak podepisující potřebuje soukromý klíč SQ = (d, n). Platí, že podpis P = hd mod n, kde h = H(Z). Podepsaná zpráva je pak dvojice (Z, P), kterou může pomocí VQ = (e, n) ověřit kdokoliv. Podpis je platný, pokud platí, že Pe mod n = H(Z). Dalším kryptosystémem používaným v síti Tor je DiffieHellmanův protokol se standardizovanými hodnotami generátoru g i modulusu p. Jedna ze stran zvolí tajný klíč a, druhá tajný klíč b a navzájem si předají hodnoty A = ga mod p, resp. B = gb mod p. Následně mohou sestrojit sdílenou tajnou hodnotu M = Ab mod p = Ba mod p. Skutečnost, že dospějí ke stejné hodnotě, vyplývá z toho, že M = Ab mod p = (ga)b mod p = (gb)a mod p = Ba mod p. Ze společné hodnoty M se stanoveným postupem odvodí tajné klíče pro symetrické kryptosystémy. V některých částech článku budeme kvůli typografickému problému indexování indexů používat k zápisu mocnění zx také notaci z^x. Nyní k použitým symetrickým kryptosystémům. K šifrování se používá bloková šifra. Ta se vyznačuje tím, že pracuje s bloky dat o pevné délce l. Konkrétně je použita šifra AES s l = 128 bitů (tj. 16 bajtů) a délkou klíče K rovněž 128 bitů. Bloková šifra funguje tak, že pokud na její vstup přivedeme řetězec X o délce l bitů, tak na jejím výstupu se objeví řetězec Y o téže délce. Šifrování budeme v dalším formálně zapisovat jako Y = E(X, K) a dešifrování X = D(Y, K), kde E a D jsou šifrovací, resp. dešifrovací transformace. V protokolu Tor je použita bloková šifra v režimu CTR (viz obr. 7), kde se i-tý šifrovaný blok Zi přenášených zpráv zašifruje do podoby itého bloku Ci tak, že Ci = Zi ⊕ E(i–1, K).
K
Šifrování
Dešifrování
i-1
i-1
E
K
E(i-1, K) Zi
E E(i-1, K)
Ci
Zi
V dalším uvidíme, že v protokolu Tor se přenášejí tzv. buňky, přičemž šifrovaná těla buněk mají délku 509 bajtů. Tělo buňky se proto rozdělí na celkem 32 bloků Zi, kdy prvních 31 bloků má plnou délku 16 bajtů (tj. 128 bitů) a poslední blok bude mít délku 13 bajtů (tj. 104 bitů). Poslední blok se zašifruje tak, že z výstupu šifrátoru E odebereme pouze prvních 104 bitů. Index i se s každým zašifrovaným blokem Zi inkrementuje. Dešifrování protistrana provede tak, že Zi = Ci ⊕ E(i–1, K). Popsané šifrování se v síti Tor provádí vícenásobně, tj. již zašifrovaná data se šifrují jinými klíči. Například pro dva klíče K1 a K2 můžeme psát, že Ci = [Zi ⊕ E(i–1, K1)] ⊕ E(i–1, K2). Jak si v dalším ukážeme, tak vícenásobné šifrování dovoluje komunikaci odesílatele s různými uzly v přenosové cestě. Nyní nám už zbývá si vysvětlit jen autentizaci buněk symetrickým kryptosystémem. Data přenášená v těle buněk se autentizují pečetí (ve standardu nazývanou „Digest“) vypočítanou pomocí hešovací funkce. U hešovací funkce jsme si uvedli, že její výstup h = H(Z), kde Z je vstupní řetězec. Přesněji řečeno však platí, že h = H(Z, s0), kde s0 je počáteční hodnota tzv. stavové proměnné. U standardních hešovacích funkcí je hodnota s0 veřejně známou konstantou a proto se hešovací funkce formálně vyjadřuje jednoduše jen jako h = H(Z). V síti Tor je však hodnota s0 tajná, což umožňuje vypočítat správnou kontrolní hodnotu z přenesených dat jen těm stranám, které tajnou hodnotu s0 znají. S výpočtem každého nového heše hi se změní stavová proměnná a tak tzv. průběžnou hešovací funkci (viz obr. 8) můžeme definovat jako (hi, si) = H(Zi, si–1).
si-1
Zi H
si
hi
Obr. 8: Průběžná autentizace zpráv hešovací funkcí Postup je takový, že odesílatel i příjemce si před zahájením komunikace sjednají tajnou hodnotu s0 (tzv. semeno). Odesílatel z dat Z1 první buňky vypočítá (h1, s1) = H(Z1, s0). Z hodnoty h1 vezme první čtyři bajty, které slouží jako pečeť pro data této buňky. Buňku spolu s pečetí zašle protistraně. Ta provede kontrolní výpočet a pokud se dopracuje ke stejné hodnotě pečeti, tak data Z1 akceptuje jako autentická. Uvedený postup se analogicky zopakuje pro druhou buňku, přičemž hešovací funkce je ponechána ve svém vnitřním stavu s1, tj. (h2, s2) = H(Z2, s1). Stejně se postupuje pro všechny následující buňky. Útočník hodnotu s0 nezná a tak nemůže odvodit ani všechny následující hodnoty stavové proměnné si. Nemůže tak modifikovat přenášená data bez toho, že by to adresát těchto dat nezjistil.
Obr. 7: Bloková šifra v režimu CTR Symbol ⊕ vyjadřuje xorování po odpovídajících bitech obou řetězců a index i = 1, 2, 3, .... Jinými slovy to znamená, že 128 bitů dlouhé číslo X = (i–1) se zašifruje a výsledný řetězec Y = E(i–1, K) se bit po bitu xoruje (⊕) se 128 bitů dlouhým řetězcem Zi.
6 Buňky sítě Tor Jak už jsme zmínili, v síti Tor jsou data přenášena v transportních datových jednotkách, které se nazývají buňky („cell“) [15]. Buňky mají konstantní délku 512 B, aby porovnáváním podle délek zašifrovaných dat v TLS spojích nebylo možné
129
VOL.17, NO.4, AUGUST 2015 usuzovat na to, kdo s kým komunikuje. Na obr. 9 je uvedena struktura buňky protokolu Tor. První dva bajty tvoří pole nazývané identifikátor okruhu (ID). Tento identifikátor slouží k rozlišování různých okruhů vedených ve stejném TLS spoji. Z důvodu vyšší bezpečnosti má stejný okruh v různých TLS spojích různou hodnotu. Například u okruhu z obr. 5 bude ve spoji (TC, TR1) identifikátor s hodnotou ID1 a ve spoji (TR1, TR3) budou mít buňky tohoto okruhu identifikátor s hodnotou ID2. Ve směrovací tabulce TR1 je pak uvedeno, že buňky s ID1 ze spoje (TC, TR1) je zapotřebí předat do spoje (TR1, TR3) s identifikátorem ID2. Volbu hodnot identifikátoru si vysvětlíme při popisu sestrojování okruhu. ID
Typ
Tělo Zašifrováno
Obr. 9: Struktura buňky protokolu Tor Hodnota v poli Typ určuje význam buňky. Z tohoto hlediska lze buňky protokolu Tor rozdělit do dvou základních kategorií a to na tranzitní a lokální. Tranzitní buňky Tranzit (Typ = 3, „Relay“) slouží ke komunikaci v rámci celého okruhu. Lokální buňky (Typ ≠ 3) platí jen v rámci daného TLS spoje a slouží ke komunikaci mezi sousedními uzly sítě. K nejdůležitějším lokálním buňkám patří následující. • Vytvoř („Create“, Typ = 1). Příkaz k vytvoření nového okruhu v daném TLS spoji. • Vytvořeno („Created“, Typ = 2). Potvrzení protistrany o vytvoření okruhu. • Zruš („Destroy“, Typ = 4). Příkaz ke zrušení daného okruhu v TLS spoji. Za záhlavím buňky se nachází tělo, které obsahuje data s významem, který je dán typem buňky. Tělo je vždy zašifrováno kryptografickými technikami v rámci protokolu Tor. Znamená to, že přenášená data se šifrují dvěma různými protokoly. Těla buněk jsou šifrována technikami protokolu Tor, aby směrovače Tor nemohly sledovat jimi tranzitovaná data. Celé buňky jsou pak ještě šifrovány v rámci protokolu TLS, aby se zamezilo sledování cesty buněk sítí na základě hodnot bitů. Strukturu tranzitní buňky ilustruje obr. 10. Záhlaví buňky obsahuje identifikátor ID okruhu a jak jsme si již uvedli, v pole Typ je uvedena hodnota 3. V těle buňky je prakticky zapouzdřena samostatná zpráva protokolu Tor. 2B ID
1B Typ
7 Anonymizace klienta
509 B Tělo Zašifrováno
Podtyp 1B
AI = 0 2B
ID toku 2B
Pečeť 4B
Zašifrováno Délka =x 2B
Data xB
Výplň (498–x) B
Obr. 10: Struktura tranzitní buňky protokolu Tor
•
Adresní indikátor („Recognized“, AI): Pokud uzel sítě Tor obdrží po dešifrování těla buňky v tomto dvojbajtovém poli samé nuly a navíc souhlasí i hodnota pečeti (viz dále), tak to znamená, že dešifrovaná data jsou danému uzlu adresována. V opačném případě je buňka předána následujícímu uzlu příslušného okruhu. Nulovou hodnotu AI může teoreticky obsahovat i některý kryptogram. Pravděpodobnost, že k tom dojde a navíc bude souhlasit i hodnota pečeti je však zanedbatelná. Pomocí techniky adresního indikátoru může iniciátor vytvoření okruhu (tj. buď TC, nebo TS) komunikovat nejen s koncovým uzlem okruhu, ale i s libovolným tranzitním uzlem tohoto okruhu. To lze využít například ke zkracování okruhu. • ID toku („Stream ID“): Tento identifikátor slouží k odlišení buněk různých TCP spojení. V okruhu spojujícím dvojici počítačů tak lze provozovat několik TCP spojení současně (např. u protokolu FTP spojení na portech 20 a 21). • Pečeť („Digest“): průběžná pečeť ze všech doposud přenesených buněk v daném okruhu mezi iniciátorem okruhu a adresátem buňky. Pečeť se počítá průběžným hešováním odesílaných, resp. přijatých buněk. K hešování se používá funkce SHA-1, jejíž počáteční stav je při zahájení spojení dán náhodným semenem (viz dále). Pečeť jsou první 4 bajty heše. • Délka („Length“): počet bajtů v poli Data. • Data („Data“): přenášená data o maximální délce 498 bajtů. • Výplň („Padding“): nulové výplňové bajty. Nyní si uvedeme nejdůležitější typy tranzitních zpráv. • TCP („Data“, Podtyp = 2). V těle buňky jsou data TCP spojení. • Spoj („Begin“, Podtyp = 1). Příkaz pro vytvoření TCP spojení. • Spojeno („Connected“, Podtyp = 4). Potvrzení o vytvoření TCP spojení. • Ukonči („End“, Podtyp = 3). Příkaz pro ukončení TCP spojení. • Prodluž („Extend“, Podtyp = 6). Příkaz k prodloužení okruhu do dalšího TLS spoje. • Prodlouženo („Extended“, Podtyp = 7). Potvrzení o prodloužení okruhu. Použití a obsah výše uvedených zpráv si vysvětlíme na konkrétním příkladu vytvoření okruhu.
•
Význam jednotlivých polí této zprávy je následující. Podtyp („Relay command“). Určuje, zda tělo zprávy obsahuje data TCP spojení (Podtyp = 2), nebo se jedná o řídící data v rámci okruhu (jinak).
V tomto případě chce uživatel vytvořit anonymní spojení s veřejným (tj. nikoliv se skrytým) serverem (budeme jej zkráceně označovat VS) s IP adresou IPVS. V software klienta TC jsou uvedeny IP adresy a veřejné ověřovací klíče VQTA všech TA. Pomocí protokolu HTTP klient získá aktuální konsensus KS a jeho autentičnost si pomocí jemu známých VQTA ověří. Z údajů v KS klient zjistí schválené TR a následně si z TA stáhne jejich deskriptory DR. Každý deskriptor kromě jiného uvádí veřejný klíč VQTR daného směrovače. Klient zkontroluje, zda heš každého VQTR odpovídá hodnotě, která je uvedena v konsensu a poté pomocí VQTR zkontroluje podpis deskriptoru. Tím získá záruku, že daný deskriptor skutečně uvádí údaje
130
VOL.17, NO.4, AUGUST 2015 směrovače uvedeného v konsensu. Klient popsaným způsobem bezpečně získá informace o aktuálním stavu sítě Tor. Dejme tomu, že klient na základě znalosti topologie sítě Tor plánuje vytvořit spojení TC-TR1-TR2-VS (viz obr. 11 nahoře). K tomu je nejprve zapotřebí vybudovat okruh TCTR1-TR2. Okruhy se v síti Tor budují inkrementálně, po jednotlivých TLS spojích, od iniciátora (v našem případě od TC) ke koncovému směrovači TR (v našem případě TR2). Postup si vysvětlíme po jednotlivých krocích. Předávanou buňku B budeme zapisovat B = 〈ID, Typ, Tělo〉, přičemž pro tranzitní buňku (tj. Typ = 3) budeme uvádět Tělo T ve zjednodušené podobě, konkrétně T = 〈AI, P, Podtyp, Data〉. Připomínáme, že proměnná AI je hodnota adresního indikátoru a P je hodnota pečeti. Jednotlivé kroky anonymizace klienta ilustruje obr. 11. TR1
TC K1 K2
1. 2. 3. 6. 7. 11. 12.
K1
TR2
4. 5. 8. 10. 13.
K2
VS
9. 14.
1. B1 = 〈ID1, Vytvoř, T1〉, kde T1 = E(g^a1 mod p, VE1). 2. B2 = 〈ID1, Vytvořeno, T2〉, kde T2 = g^b1 mod p. 3. B3 = 〈ID1, Tranzit, T3〉, kde T3 = E(Z3, K1) a Z3 = 〈Prodluž k TR2, E(g^a2 mod p, VE2)〉. 4. B4 = 〈ID2, Vytvoř, T4〉, kde T4 = E(g^a2 mod p, VE2). 5. B5 = 〈ID2, Vytvořeno, T5〉, kde T5 = g^b2 mod p. 6. B6 = 〈ID1, Tranzit, T6〉, kde T6 = E(Z6, K1) a Z6 = 〈Prodlouženo k TR2, g^b2 mod p〉. 7. B7 = 〈ID1, Tranzit, T7〉, kde T7 = E(E(Z7, K2), K1) a Z7 = 〈Spoj s IPVS〉. 8. B8 = 〈ID2, Tranzit, T8〉, kde T8 = E(Z7, K2) a Z7 = 〈Spoj s IPVS〉. 9. Standardní navázání TCP spojení. 10. B10 = 〈ID2, Tranzit, T10〉, kde T10 = E(Z10, K2) a Z10 = 〈Spojeno s IPVS〉. 11. B11 = 〈ID1, Tranzit, T11〉, kde T11 = E(E(Z10, K2), K1) a Z10 = 〈Spojeno s IPVS〉. 12. Bi = 〈ID1, Tranzit, Ti〉, kde Ti = E(E(Zi, K2), K1) a Zi = 〈Data TCP spojení〉. 13. Bi+1 = 〈ID2, Tranzit, Ti+1〉, kde Ti+1 = E(Zi, K2) a Zi = 〈Data TCP spojení〉. 14. Data TCP spojení.
3.
Obr. 11: Protokol při anonymizaci klienta 1.
2.
4.
TC→TR1: TC nejprve podle údajů v příslušném deskriptoru vybuduje TLS spoj k TR1. Tento spoj budeme značit TLS1. Následně v něm odešle buňku B1 = 〈ID1, Vytvoř, T1 = E(A1, VE1)〉. Parametr ID1 je unikátní identifikátor okruhu v daném TLS spoji a jeho hodnotu volí TC. Buňka má pole Typ = 1, tj. jedná se o příkaz k vytvoření (Vytvoř) nového okruhu v daném spoji. V těle buňky se přenáší
131
proměnná A1 = g^a1 mod p, kde g a p jsou konstanty Diffie-Hellmanova (DH) protokolu a proměnná a1 je náhodně zvolený soukromý klíč TC. Hodnota A1 je v buňce zašifrována veřejným klíčem VE1 směrovače TR1. Účelem tohoto šifrování není zajištění důvěrnosti hodnoty A1, ale autentizace protistrany, tj. TR1. Pouze TR1 může T1 dešifrovat a tak pouze TR1 může zjistit předávanou hodnotu A1. Směrovač TR1 následně zvolí svůj soukromý klíč b1 a vypočítá tajnou sdílenou hodnotu M1 = A1^b1 mod p. Pro protistranu vypočítá hodnotu B1 = g^b1 mod p. TR1→TC: TR1 odešle do TC buňku B2 = 〈ID1, Vytvořeno, B1〉. Identifikátor signalizuje příslušnost buňky k našemu okruhu a její typ potvrzuje splnění příkazu z předchozí buňky. Nyní také TC může sestrojit tajnou hodnotu M1 = B1^a1 mod p. Obě strany hodnotu M1 použijí k odvození klíčů pro symetrické kryptosystémy. V protokolu Tor se používá odvozovací funkce typu KDF („Key Derivation Function“) [15] a tak budeme psát, že KDF(M1) = (S1, K1). Semeno S1 se použije k pečetění zpráv mezi TC a TR1 metodou průběžného hešování (přičemž platí, že počáteční stav s0 = S1) a klíč K1 je určen pro šifrování těl všech buněk mezi TC a TR1 pomocí blokové šifry v režimu CTR. Přesněji řečeno, výstupem funkce KDF jsou dva klíče a dvě semena - každé pro jeden směr přenosu. Kvůli přehlednosti však nebudeme klíče a semena z hlediska směrů přenosu rozlišovat. Ještě upozorňujeme, že v každé tranzitní buňce je vždy jen jediná pečeť a ta se vypočítává pro konečného adresáta buňky. Pokud je tedy hodnota adresního indikátoru nenulová (tj. AI ≠ 0), tak tranzitní uzly ověřování autentičnosti dat umístěných v těle dané buňky neprovádějí. V této chvíli máme sestrojen okruh TC-TR1 a nyní je zapotřebí jej prodloužit do TR2. TC→TR1: TC odešle do TR1 buňku B3 = 〈ID1, Tranzit, T3 = E(Z3, K1)〉, kde zpráva Z3 = 〈AI, P, Prodluž, Data〉. Data obsahují k příkazu Prodluž (Podtyp = 6) identifikátor uzlu, do něhož je zapotřebí okruh prodloužit (v našem případě k TR2) a dále obsahují kryptogram E(A2, VE2). Směrovač TR1 má pro buňky s ID1 přiřazen klíč K1 a tak tímto klíčem dešifruje tělo buňky. Nyní směrovač zjistí, že v poli AI jsou samé nuly a tak pomocí hešovací funkce a semena S1 provede kontrolní výpočet pečeti. Vypočtená hodnota bude stejná jako hodnota P, čímž si TR1 potvrdí, že zpráva Z3 je určena pro něho. V této zprávě je uveden příkaz k prodloužení okruhu ke směrovači TR2 a dále je zde pomocí veřejného klíče TR2 zašifrovaná proměnná A2 = g^a2 mod p, kde a2 je náhodně zvolený soukromý klíč TC pro DH protokol s TR2. TR1 příkaz provede, tj. pokud mezi TR1 a TR2 doposud TLS spoj neexistuje, tak jej vybuduje (budeme jej značit TLS2) a okruh podle následujícího kroku do něj prodlouží. TR1→TR2: TR1 odešle přes TLS2 do TR2 buňku B4 = 〈ID2, Vytvoř, T4 = E(A2, VE2)〉. Parametr ID2 je unikátní identifikátor nově budovaného okruhu ve spoji TLS2, jehož hodnotu zvolí TR1. Směrovač TR1 si do své směrovací tabulky zapíše, že dešifrovaná těla tranzitních buněk s identifikátorem ID1 ze spoje TLS1 má předávat do spoje TLS2 v buňkách s ID2. Formálně se jedná o přiřazení (TLS1, ID1) ↔ (TLS2, ID2). Směrovač TR2 kryptogram E(A2, VE2), který mu TR1 předal ze zprávy Z3, dešifruje
VOL.17, NO.4, AUGUST 2015 svým soukromým klíčem SE2 a získá tak hodnotu A2 = g^a2 mod p. TR2 poté zvolí svůj soukromý klíč b2 a vypočítá tajnou sdílenou hodnotu M2 = A2^b2 mod p. Pro protistranu vypočítá hodnotu B2 = g^b2 mod p. 5. TR2→TR1: TR2 odešle do TR1 buňku B5 = 〈ID2, Vytvořeno, B2〉, kterou potvrzuje splnění příkazu. 6. TR1→TC: TR1 nyní zašle do TC buňku B6 = 〈ID1, Tranzit, T6 = E(Z6, K1)〉, kde Z6 = 〈AI, P, Prodlouženo, B2〉. Po dešifrování T6 a kontrole pečeti se TC dozví, že okruh byl prodloužen a může i sestrojit tajnou hodnotu M2 = B2^a2 mod p. K odvození klíčů obě strany (tj. TC a TR2) opět použijí odvozovací funkci KDF, čímž získají klíče K2 a semena S2. Klíče K2 jsou pro šifrování dalšího provozu mezi TC a TR2. Semena S2 se použijí k pečetění zpráv, jejichž původcem, resp. adresátem je TC, resp. TR2. Nyní je vybudován okruh TC-TR1-TR2 a klient může přistoupit k navázání komunikace s cílovým serverem VS. Postup je následující. 7. TC→TR1: Klient odešle do TR1 buňku B7 = 〈ID1, Tranzit, T7 = E(E(Z7, K2), K1)〉, kde Z7 = 〈AI, P, Spoj, IPVS〉. Povšimněme si, že tělo je šifrováno dvakrát. Nejprve klíčem nejvzdálenějšího směrovače a nakonec klíčem nejbližšího směrovače. Směrovač TR1 dešifruje tělo buňky svým klíčem K1 a získá kryptogram E(Z7, K2). Tento řetězec bitů má v poli AI nenulovou hodnotu, čímž TR1 zjistí, že buňka není určena pro něho. Proto podle své směrovací tabulky kryptogram předá v následujícím kroku do TR2. 8. TR1→TR2: TR1 odešle do TR2 buňku B8 = 〈ID2, Tranzit, T8 = E(Z7, K2)〉. Směrovač TR2 tuto buňku dešifruje klíčem K2 a získá zprávu Z7 = 〈AI, P, Spoj, IPVS〉. Hodnota AI = 0, souhlasí i hodnota pečeti a tak je zpráva Z7 určena pro TR2. Jak jsme si již uvedli, zpráva obsahuje příkaz navázat TCP spojení (Spoj) se zařízením, které má adresu IPVS. 9. TR2↔VS: Směrovač TR2 standardním způsobem naváže TCP spojení se zařízením s adresou IPVS, tj. s žádaným serverem VS. Veřejné servery obecně pomocí protokolu TLS nekomunikují a tak spoj mezi TR2 a VS často není kryptograficky zabezpečen. 10. TR2→TR1: TR2 odešle do TR1 buňku B10 = 〈ID2, Tranzit, T10 = E(Z10, K2)〉, kde Z10 = 〈AI, P, Spojeno〉. TR1 podle směrovací tabulky ví, že buňka putuje směrem k iniciátoru okruhu (k TC) a tak hodnotu AI ani nekontroluje, tělo přijaté buňky jednoduše zašifruje klíčem K1 a buňku předá do spoje k TC. 11. TR1→TC: TR1 zašle do TC buňku B11 = 〈ID1, Tranzit, T11 = E(E(Z10, K2), K1)〉. TC nejprve tělo buňky B11 dešifruje klíčem K1. Pole AI bude nenulové a tak buňka neobsahuje zprávu, jejímž původcem by byl TR1. Proto TC vzniklé tělo dešifruje dalším klíčem, tj. klíčem K2. Adresní pole bude nyní již nulové a tak TC provede kontrolní výpočet pečeti. Porovnáním s hodnotou přijaté pečeti TC zjistí, že zpráva pochází od TR2 a že jejím obsahem je potvrzení o navázání TCP spojení s VS. Tímto je vybudováno TCP spojení mezi TC a VS. 12. TC→TR1: V další komunikaci se postupuje tak, že na straně TC jsou data z TCP vrstvy segmentována na bloky o délce 498 bajtů. Z nich a z příslušných polí se v souladu s obr. 10 vytvoří tělo tranzitované buňky Zi. Toto tělo je
zašifrováno nejprve pomocí klíče K2 a posléze K1, čímž získáme Ti = E(E(Zi, K2), K1). Před dvojitě zašifrované tělo se předřadí záhlaví buňky (tj. ID1 a Typ = 3) a buňka je předána vrstvě TLS spoje k přenosu do TR1. 13. TR1→TR2: V TR1 je tělo přijaté buňky dešifrováno klíčem K1, přičemž je zjištěno, že AI není nulový. To znamená, že buňka není určena pro TR1. Prvním dešifrováním vzniklé tělo je podle směrovací tabulky doplněno záhlavím s ID2, údajem Typ = 3 a tranzitní buňka je odeslána do TR2. 14. TR2→VS: Směrovač TR2 dešifruje tělo buňky klíčem K2, zjistí, že adresní indikátor je nulový, ověří pečeť a 498 bajtů dat odešle TCP spojem do VS. V opačném směru přenosu je postup analogický. Vybudovaný okruh může zrušit buď klient (obvykle po ukončení TCP spojení), nebo koncový TR (obvykle v důsledku detekce chyby). Iniciátor zrušení okruhu odešle sousednímu uzlu lokální buňku Zruš (Typ = 4). Uzel po přijetí této buňky je povinen okruh s daným ID v TLS spoji zrušit a dále je povinen následujícímu uzlu rovněž zaslat lokální buňku Zruš. Tímto štafetovým způsobem jsou nakonec o zrušení okruhu postupně od jednoho konci ke druhému vyrozuměny všechny zúčastněné uzly. Na obr. 12 je ilustrováno kryptografické zabezpečení našeho TCP spojení (černě) mezi TC a VS. Povšimněme si, že pokud server VS nepodporuje protokol TLS, tak mezi TR2 a VS nejsou data zabezpečena. V okruhu TC-TR1-TR2 jsou data přenášená v rámci spojů zabezpečena jednak protokolem TLS i protokolem Tor. Z obrázku je zřejmé, že čím jsme blíže TC, tím protokol Tor vícekrát data zašifroval. Obecně platí, že pokud okruh sestává z N spojů, tak v 1. spoji jsou data zašifrována N klíči a to v pořadí od klíče KN až ke klíči K1, ve 2. spoji (N–1) klíči v pořadí od klíče KN ke klíči K2 a tak dále až v posledním N-tém spoji jsou data šifrována jedním klíčem a to klíčem KN. Vícenásobné šifrování umožňuje bezpečnou komunikaci v rámci okruhu, kdy každý směrovač je schopen přečíst pouze data, která jsou určena jemu. Vícenásobné šifrování také dalo jméno síti Tor („The Onion Routing“). Název reprezentuje představu, že každé šifrování chráněných dat je jednou ze slupek cibule („onion“). Kdo se chce dostat k přenášeným datům (k jádru cibule), musí postupně oloupat všechny její slupky. TR1
TC
TR2
VS
TLS
šifrováno K2
šifrováno K1
TCP data
Obr. 12: Příklad mnohovrstvého šifrování v síti Tor
8 Anonymizace serveru V následujícím si popíšeme princip anonymizace serveru (tzv. skrytý server) [16]. Uvedená možnost je určena provozovatelům serverů, kteří chtějí, aby geografické umístění jejich serveru nebylo zjistitelné. K tomu si provozovatel nejprve
132
VOL.17, NO.4, AUGUST 2015 musí vygenerovat RSA kryptosystém s dvojicí klíčů (SETS, VETS). Tento kryptosystém je používán nejen k šifrování zpráv, ale také k podepisování. Další postup je následující (viz obr. 13). 1. TS↔KB: Server TS si na základě aktuálního konsensu vybere několik TR, které budou plnit roli jeho kontaktního bodu (KB, anglicky „introduction point“). Ke každému z nich vybuduje okruh, podobně jako jsme si popsali v předchozí části. Koncovému TR okruhu zašle tranzitní buňku s podtypem 32, která je žádostí o plnění zmiňované role. Žádost obsahuje VETS a je podepsána SETS. Směrovač TR tento podpis ověří a souhlas s navrženou rolí potvrdí odesláním buňky podtypu 38. 2. TS→TA: Když skrytý server TS získal souhlas dostatečného počtu kontaktních bodů, tak vytvoří svůj deskriptor DRTS. Deskriptor skrytého serveru TS obsahuje veřejný klíč VETS serveru a seznam jeho kontaktních bodů. Podepsán je soukromým klíčem SETS. Poté server TS vybuduje okruhy Tor do všech TA a pomocí protokolu HTTP jim svůj deskriptor předá. Servery TA ukládají zaslané deskriptory ve svých adresářích tak, že jsou klientům veřejně dostupné. Z heše veřejného klíče VETS serveru se odvodí řetězec TS o délce 16 alfanumerických znaků, který spolu s příponou onion tvoří unikátní identifikátor serveru (např. 234567ABCDEFGHIJ.onion). 3. TC↔TA: Pokud chce uživatel využívat služby serveru TS, tak do adresního řádku svého klienta napíše identifikátor TS.onion. Klient následně vybuduje okruh k některému z TA a z jeho adresáře si stáhne deskriptor požadovaného TS.
4.
5.
6.
7.
8.
KB 5.
1. a 6.
9.
TC
3.
TA
4., 8 a 9.
2.
TS
7. a 9.
TC→PB: Klient si zvolí směrovač TR, v němž dojde k propojení s TS (tzv. propojovací bod – PB, anglicky „rendezvous point“). Klient vybuduje do PB okruh a předá mu buňku podtypu 33, která obsahuje tajné heslo AH. Tato buňka je prakticky žádost o propojení se stranou, která bude znát AH. TC→KB: Klient si z deskriptoru DRTS vybere jeden z kontaktních bodů KB, vybuduje k němu okruh a do tohoto KB odešle buňku podtypu 34. Buňka obsahuje identifikátor propojovacího bodu PB, autentizační heslo AH a parametr A = g^a mod p, kde a je soukromý klíč klienta v DH protokolu mezi TC a TS. Všechny uvedené údaje jsou zašifrovány klíčem VETS. Tělo tranzitní buňky tedy obsahuje kryptogram E(Z5, VETS), kde Z5 = (PB, AH, A). KB→TS: Kontaktní bod KB vloží přijatý kryptogram E(Z5, VETS) do těla buňky podtypu 35 a tu v již připraveném okruhu (viz 1. krok) odešle do serveru TS. Server TS svým soukromým klíčem SETS kryptogram dešifruje a získá tak trojici (PB, AH, A). TS→PB: Server TS zvolí b, což je jeho soukromý klíč v DH protokolu mezi TC a TS. S jeho pomocí může nyní určit tajnou sdílenou hodnotu M = A^b mod p. Pro protistranu vypočítá B = g^b mod p, dále vybuduje okruh Tor do propojovacího bodu PB a v buňce podtypu 36 mu předá heslo AH a parametr B. PB→TC: Propojovací bod zkontroluje správnost hesla AH (zná jej ze 4. kroku) a klientovi předá v již vybudovaném okruhu buňku podtypu 37, která obsahuje parametr B. Klient TC sestrojí tajnou sdílenou hodnotu M = B^a mod p. K odvození klíčů obě strany opět použijí odvozovací funkci KDF, čímž získají klíče K a semena S. Klíče K jsou pro šifrování dalšího provozu mezi TC a TS. Semena S se použijí k pečetění zpráv, jejichž původcem, resp. adresátem je TC, resp. TS. TC↔PB↔TS: TC a TS nyní mohou zahájit komunikaci. Buňky s daty od TC se přenášejí v okruhu TC-PB a v uzlu PB se tranzitují do okruhu PB-TS a dostávají se tak nakonec do TS. Těla buněk předávaných z jednoho okruhu do druhého jsou kryptograficky zabezpečeny klíčem K a semenem S. PB tak nemůže narušit důvěrnost ani autentičnost tranzitovaných dat. V opačném směru je postup analogický.
9 Bezpečnost sítě Tor PB 1. 2. 3. 4. 5. 6. 7. 8. 9.
Žádost TS „Můžeš mi dělat KB?“ a její odsouhlasení. Uložení deskriptoru DRTS do TA. Stažení deskriptoru DRTS do TC. Žádost TC „Můžeš mi dělat PB? Heslo bude AH.“ a její odsouhlasení. E(Z5, VETS), kde Z5 = „Čekám tě v PB. Heslo je AH a g^a mod p = A.“ E(Z5, VETS), kde Z5 = „Čekám tě v PB. Heslo je AH a g^a mod p = A.“ Zpráva „Heslo je AH a do TC předej B“, kde B = g^b mod p. Zpráva „Předávám B.“ Buňky šifrované klíčem K.
Obr. 13: Protokol při anonymizaci serveru.
V této kapitole prodiskutujeme otázky bezpečnosti sítě Tor [4]. Nejprve si zrekapitulujme možnosti útočníka. Útočník má možnost provozovat vlastní prvky v síti Tor (klienty, skryté i veřejné servery a dokonce i směrovače a adresáře Tor). Dále může generovat vlastní provoz a sledovat, či modifikovat provoz jiných uživatelů. Nakonec útočník ještě může síť Tor uživatelům blokovat buď útoky na dostupnost (útoky typu „Denial-of-service“ - DoS), nebo blokováním přístupu k síti Tor (např. blokováním IP adres TR ve firewalu). Z hlediska svého cíle mohou být útoky vedeny na anonymitu komunikujících stran, na důvěrnost, či autentičnost přenášených dat a na dostupnost služeb. V síti Tor je prioritou anonymita a tak začneme odtud. Síť Tor poskytuje dobrou úroveň anonymity vůči lokálním útočníkům, tj. útočníkům, kteří mají pod kontrolou jen část
133
VOL.17, NO.4, AUGUST 2015 spojení. V praxi se jedná zejména o poskytovatele internetu a o útočníky s lokální působností (např. policie jednotlivých států). Vůči globálním útočníkům (tj. útočníkům, kteří mají pod kontrolu velkou část internetu), nebo spolupracujícím lokálním útočníkům není síť Tor dostatečně rezistentní. Je to cena za nízkou latenci sítě. Pokud například podle obr. 1 existuje podezření, že strana A komunikuje se stranou D, tak sledováním a porovnáním provozu mezi A-B a C-D lze tuto komunikaci prokázat. K porovnávání se používají statistické metody v nichž se kombinují informace o přeneseném objemu dat i o časových intervalech mezi jednotlivými datovými bloky. Kromě pasivního pozorování může útočník analýzu urychlit tím, že začne aktivně na jednotlivé prvky spojení působit. Například skutečnost, že uzel B bude útočníkem nakrátko zahlcen daty se projeví v prodloužení intervalů mezi datovými bloky ve spoji C-D. Globální útočník, který má pod kontrolou připojení všech klientů i serverů, může výše popsanými technikami teoreticky zjistit všechny navzájem komunikující dvojice. Částečnou obranou je zvětšování sítě Tor tak, aby ji žádný útočník nebyl schopen celou obklíčit. Druhý typ útoků na anonymitu je spojen s tím, že síť Tor sice zajišťuje transportní anonymitu, ale nezajišťuje anonymitu dat. To znamená, že software Tor obecně nekontroluje, zda si aplikace nevyměňují nějaká data, s jejichž pomocí lze identitu komunikujících stran odhalit. Typicky se jedná o protokol BitTorrent, v jehož rámci se přenáší IP adresy zúčastněných stran. Útočníci rovněž využívají skutečnost, že otevřením z internetu stažených dokumentů typu DOC, či PDF se aktivuje stažení dalších dat z internetu, k čemuž se samozřejmě použije skrývaná IP adresa daného zařízení. Ochranou vůči popsaným útokům je nepoužívat protokol BitTorrent v síti Tor a stažené soubory otevírat na počítači, který je odpojen od internetu. K surfování uživatelů po internetu se doporučuje používat prohlížeč Tor, který je konfigurován tak, aby popsaný typ útoků znemožnil. Dalším typem útoků jsou útoky na důvěrnost a autentičnost přenášených dat. Zde je slabým článkem poslední směrovač TR v okruhu – na našem příkladu z obr. 12 je to TR2. Pokud tento směrovač není k veřejnému serveru VS připojen pomocí spoje TLS, tak provozovatel tohoto směrovače získává možnost přenášená data sledovat a případně i modifikovat. Ochranou je, že software Tor při volbě okruhu vybírá jako poslední směrovače TR takové směrovače, které jsou důvěryhodné. Posledním typem útoků jsou útoky zaměřené na blokování přístupu k síti Tor. Příkladem je situace, kdy poskytovatelé internetu v určitém státu musí blokovat IP adresy prvků sítě Tor. Obranou v tomto případě jsou tzv. mosty („bridge“), což jsou směrovače Tor, které nejsou uváděny v konsensu a nejsou tudíž blokovány. Uživatelé se o adresách těchto mostů dozvídají různými způsoby (např. e-mailem).
10 Závěr Na závěr lze shrnout, že síť Tor je anonymizační síť s nízkou latencí určená pro podporu aplikací, které využívají protokol TCP. Její výhodou je široká podpora a dostupnost. Z hlediska bezpečnosti chrání anonymitu svých uživatelů proti
lokálním útočníkům. Proti globálním útočníkům není anonymita garantována. V anonymizační síti Tor se k přenosu dat mezi klientem a serverem využívá posloupnost TLS spojů (tzv. okruh). Z výše uvedených anonymizačních technik se v této síti využívají prakticky všechny možné techniky s výjimkou mixérů. V síti Tor se tak setkáváme s technikou průběžné substituce adres (úlohu adres zde plní identifikátory ID), šifrováním cílových adres (použito při prodlužování okruhu), unifikací délek transportních jednotek (buňky o délce 512 B) a průběžným šifrováním buněk. Ve standardech Tor je rovněž pamatováno na možnost vkládání klamných buněk, avšak tato možnost se v praxi nepoužívá. V oblasti anonymizačních sítí je v současné době mnoho otevřených problémů. Patří k nim zejména výzkum efektivnosti různých protiopatření (např. vedení klamného provozu, použití dalších kryptografických technik apod.) s cílem zvýšit především odolnost vůči útokům, které jsou vedeny globálními útočníky.
Literatura [1] PFITZMANN Andreas; HANSEN Marit. A terminology for talking about privacy by data minimization: Anonymity, Unlinkability, Undetectability, Unobservability, Pseudonymity, and Identity Management. (Ver.0.34 Aug. 10, 2010). [online]. [cit. 2015-07-27]. Dostupné z:
. [2] Common Criteria for Information Technology, Part 2: Security functional requirements. Sept. 2012. [online]. [cit. 2015-07-27]. Dostupné z: < https://www. commoncriteriaportal.org/files/ccfiles/CCPART2V3.1R4.pdf>. [3] JONES, Andy. Anonymous communication on the internet. Indiana University, 2004, 13. [4] DINGLEDINE, Roger; MATHEWSON, Nick; SYVERSON, Paul. Tor: The second-generation onion router. Naval Research Lab Washington DC, 2004. [5] TCHABE, Gildas Nya; XU, Yinhua. Anonymous Communications: A survey on I2P. CDC Publication Theoretische Informatik–KryptographieundComputeralgebra (https://www. cdc. informatik. tu-da rmstadt. de), 2014. [6] BERTHOLD, Oliver; FEDERRATH, Hannes; KÖPSELL, Stefan. Web MIXes: A system for anonymous and unobservable Internet access. In: Designing Privacy Enhancing Technologies. Springer Berlin Heidelberg, 2001. p. 115-129. [7] CHAUM, David L. Untraceable electronic mail, return addresses, and digital pseudonyms. Communications of the ACM, 1981, 24.2: 84-90. [8] DANEZIS, George; DINGLEDINE, Roger; MATHEWSON, Nick. Mixminion: Design of a type III anonymous remailer protocol. In: Security and Privacy, 2003. Proceedings. 2003 Symposium on. IEEE, 2003. p. 2-15.
134
VOL.17, NO.4, AUGUST 2015 [9] Tor Metrics [online]. [cit. 2015-07-27]. Dostupné z: .
[14] JONSSON, John; KALISKI, Burt. Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography. Specifications Version 2.1. [online]. [cit. 2015-07-27]. Dostupné z: , případně z: .
[10] Tor [online]. [cit. 2015-07-27]. Dostupné z: . [11] Tor directory protocol, version 3. [online]. [cit. 2015-0727]. Dostupné z: . [12] DIERKS, Tim; RESCORLA, Eric. The Transport Layer Security (TLS) Protocol, Version 1.2. [online]. [cit. 2015-07-27]. Dostupné z: . [13] BURDA, Karel. Aplikovaná kryptografie. VUTIUM, Brno 2013.
[15] DINGLEDINE, Roger; MATHEWSON, Nick. Tor Protocol Specification. [online]. [cit. 2015-07-27]. Dostupné z: . [16] Tor Rendezvous Specification. [online]. [cit. 2015-0727]. Dostupné z:
135