Úvod
Vlastnosti typu anonymita, utajenie, integrita apod. spadajú pod obor kryptografie a siete, ktoré chcú tieto vlastnosti zaručiť, budú kryptografiu využívať hojne. Predpokladám, že rozumiete základom asymetrickej kryptografie (čo znamená zašifrovať verejným kľúčom, ako sa vytvára a overuje digitálny podpis). Celkom sa tiež hodí rozumieť princípu Diffie-Hellman protokolu dohody na kľúči (názorne je vysvetlený tu analógiou truhlice a dvoch zámkov).
Cieľom anonymných p2p sietí je, aby žiadny vonkajší ani vnútorný útočník nedokázal zistiť, kto s kým komunikuje a o čom sa bavia. Kým tajnosť komunikácie sa dá zaručiť šifrovaním, stále načúvajúci útočník vidí, kto s kým komunikuje, môže skúšať analyzovať tok dát (tzv. traffic analysis). P2P siete postavené na TCP/IP protokole v každom pakete uvádzajú, od koho je a komu smeruje, takže je hneď vidieť, kto s kým komunikuje (alebo aspoň vidieť, za ktorým NATom je). Na zabezpečenie anonymity musia byť tieto charakteristiky schované.
Detailnejší prehľad prehľad traffic-analysis útokov a bezpečnostného modelu anonymných p2p sietí som sa rozhodol nechať až na ďalšiu časť. Na jednej strane by bolo logické ich uviesť pred popisom anonymných sietí (aby sme vedeli, čomu sa bránime). Na druhej strane im budeme lepšie rozumieť, keď pozname, ako anonymné siete fungujú.
Len na okraj, veľmi zaujímavé protiopatrenie proti analýze toku dát je tzv. meteor scatter. Funguje tak, že si odosielateľ počká na roj meteorov, ktoré prechodom cez atmosféru ionizujú častice. Elektromagnetické (rádiové) vlnenie sa od týchto ionizovaných stôp odráža, takže je možné poslať modulovanú správu niekomu veľmi ďaleko namierením antény von do atmosféry. Pre útočníka je oveľa ťažšie takúto komunikáciu odchytiť, než keby išla popri zemskom povrchu. Pre p2p siete, o ktorých sa tu bavíme, to nie je moc praktické, takže použijeme iné techniky. Prenos dát cez meteor scatter má naviac pomerne nízku kapacitu (cca 100–300 bitov za sekundu podľa niektorých experimentov).
Onion routing
Pre účely anonymity vznikol koncept tzv. mixnetu (alebo mix network): každý uzol v sieti je zároveň router. Úlohou každého routera je preposielať správy, lenže každý vie len o predchádzajúcom routri (od ktorého správu dostal) a o ďalšom routeri, kam má správa pokračovať. Žiadny router nevie, odkiaľ sa vzala a kde je jej konečný cieľ. Pri posielaní správy sa musí používať nejaké adresovanie, aby odosielateľ mohol adresovať konečného príjemcu. Pointa je v tom, aby sa nedalo korelovať medzi týmito adresami a IP adresami. Až keď sa správa preroutuje cez niekoľko routerov k zamýšľanému príjemcovi, až vtedy spozná, že je správa preňho (žiadny z routerov po ceste to nevedel). Fakt, že daný počítač je router v onion-routingovej sieti, nie je tajomstvo – utajuje sa, kto komunikuje s kým a o čom.
Z konceptu mixnetov bol odvodený koncept onion routingu. Je to presne to, ako sa to nazýva: budú sa routovať cibule. Každý router ma priradený svoj pár kľúčov (verejný a súkromný), ktoré si sám vygeneroval. Ak chce Alica poslať Bobovi správu cez routery K, L, M, vyrobí takýto paket: samotnú správu zašifruje Bobovým verejným kľúčom. K tomu pridá pokyn, že router M prijímajúci správu ju má poslať ďalej Bobovi. To celé zašifruje verejným kľúčom routera M. K tomu pridá pokyn pre router L, že túto správu má poslať routeru M. Celé to zase zašifruje verejným kľúčom routera L. Pridá k tomu pokyn pre router K, že má správu ďalej poslať routru L a zašifruje to celé verejným kľúčom routera K. Zobrazené je to na obrázku 1.
Takýto paket (cibuľu) pošle routeru K. Pretože je zašifrový jeho verejným kľúčom, vie si ho rozšifrovať. Takto odstráni najvrchnejšiu vrstvu cibule. Vidí pokyn pre seba, že má paket ďalej poslať routeru L, tak to spraví. Router L dostane paket zašifrovaný svojím verejným kľúčom, tak ho rozšifruje (odstráni ďalšiu vrstvu cibule) a prepošle ďalej. Takto to pokračuje až kým paket nedostane Bob. Všimnite si, že router K nevie, či správa pôvodne pochádzala od Alice alebo nie, pretože kľudne mohol niekto routovať inú cibuľu cez ňu. Rovnako router M netuší, či po poslaní Bobovi správa bude putovať ďalej. Jednotlivé vrstvy cibule sa autentizujú digitálnym podpisom, aby sa nedali správy falšovať (pretože zašifrovať verejným kľúčom môže hocikto). Každý router môže naviac správy pozdržať a preposlať v inom poradí, ako ich dostal, aby sťažil analýzu toku dát.
Obrázok 1: Posielanie správy m obalenej do „cibule“, X{} znamená zašifrovanie verejným kľúčom X. Vrstvy sa postupne „odbaľujú“ ako paket prechádza cez onion routre.
Teoretický koncept je síce funkčný, ale skutočné implemenentácie onion routingu sú zložitejšie – napríklad šifrovanie verejným kľúčom je pomalá operácia, čo by znižovalo priepustnosť siete a umožňovalo jednoduchý denial-of-service zaplavením routera správami. Cestu je vždy možné voliť inak, čo napomáha anonymite, ale príliš častá zmena cesty môže odhaliť identitu komunikujúcich strán. Siete implementujúce onion routing preto vytvárajú dočasné tunely (trasy), s obmedzenou životnosťou, danou buď časom (niekoľko minút) alebo objemom správ. Porovnanie rozličných anonymných p2p sietí si môžete pozrieť na wiki planetpeer.de.
TOR – The Onion Router
Projekt TOR vznikol pôvodne ako projekt sponzorovaný od US Naval Research Laboratory. V roku 2004 prevzala záštitu nad projektom Electronic Frontier Foundation. Hlavným rozdielom oproti teoretickému konceptu onion routingu je fakt, že účastník môže využiť sieť TOR bez toho, aby v nej bol routerom. TOR slúži predovšetkým ako proxy: účastník sa pripojí na niektorý z routerov TORu a nechá cez sieť poslať správu, ktorá vylezie niekde v sieti a spojí sa s cieľovým serverom. Z API hľadiska TOR klient funguje ako SOCKS proxy, takže je možné ho využiť na proxovanie ľubovolných TCP spojení.
Fakt, že účastníci využívajúci TOR nemusia byť zároveň routermi, má výhodu v tom, že klientovi nestúpne prenos dát kvôli routovaniu cudzích správ. Má to ale bezpečnostné nevýhody: jednak z posledného routeru (posledného hopu na ceste) odchádza nešifrovaný plaintext na cieľový server a jednak útočník sledujúci skutočného odosielateľa a príjemcu dokáže korelovať pakety, čiže vie dokázať, že dané dva počítače komunikovali. TOR sa nesnaží brániť tomuto druhu útoku (tzv. traffic confirmation attack). Skôr sa brání obecnejšej analýze toku dát, z ktorej by sa útočník mohol dozvedieť, koho má vlastne sledovať a ktoré uzly napadnúť. Predpokladá sa, že útočník dokáže sledovať časť siete (ale nie celú), vytvárať, meniť a mazať pakety na TCP/IP vrstve, kompromitovať niektoré onion routery a ich kľúče alebo pustiť vlastné onion routery do siete. TOR je navrhnutý ako systém s nízkou latenciou, nevkladá žiadne zdržania medzi posielaním paketov, ani nemení ich poradie. To ho síce robí rýchlejším za cenu nižšej ochrany proti časovej analýze toku dát.
Okrem proxy funkčnosti ponúka TOR hidden services, čo sú nejaké služby (napr. web server), ktorých umiestnenie má byť skryté a ktoré sa dajú kontaktovať cez TOR sieť. Služby sa kontaktujú (z užívateľského hľadiska) cez ich FQDN ako napr. x.y.onion
. Pseudo-TLD .onion
slúži na rozoznanie obyčajných internetových domén od skrytých služieb. TOR neponúka žiadny ekvivalent DNS, namiesto toho sú všetky služby a ich FQDN zverejnené ako súbor na webe, ktorý si klientská aplikácia stiahne. V budúcnosti, ako sieť bude rásť, sa plánuje algoritmus na štýl distribuovanej hašovej tabuľky (á la Kademlia, o ktorej sme hovorili minule). Rovnako zoznam serverov je zverejnený na webe a spolu s distribúciou TOR softwaru. Nutné ešte poznamenať, že každý onion router si ale môže všimnúť, či je prvý hop v tuneli (porovná zoznam IP známych serverov voči IP klienta, ktorý sa k nemu pripája).
Routovanie cez „deravú rúru“
TOR používa dočasné tunely na routovanie dát. Tunelom sa myslí určitá cesta cez niekoľko hopov, TOR routerov. Tunel je zároveň end-to-end zašifrovaný, čiže ani vnútorný útočník nevidí obsah routovanej komunikácie (okrem posledného hopu v prípade proxovania na internet). Dávnejšie verzie TORu vytvárali osobitný tunel pre každý nový TCP stream, čo nebolo jednak príliš efektívne a jednak útočník mohol ľahšie rozlíšiť jednotlivé streamy. V súčasnej implementácii sa tunel zdieľa viacerými streamami až kým nevyprší. Vnútri tunela identifikuje je stream identifikovaný vlastným stream ID.
Tunel sa chová ako „deravá rúra“, paket ho môže opustiť skôr (a íst na cieľový počítač), než dorazí úplne na koniec tunelu. Toto rozhodnutie je čisto na pôvodnom odosielateľovi správy. Tunely sa dajú skracovať a predlžovať za behu, je možné tak časť tunela od konca zrušiť a natiahnuť ho cez iné routery. Cieľom oboch posledných techník je zase zmiasť útočníka. TOR klientská aplikácia vytvára tunely asynchrónne v pozadí, keď príde požiadavok na vytvorenie TCP streamu, použije už vytvorený tunel. Pomáha to tiež pri zlyhaní tunela (napr. výpadok routra). Cez tunel sa občas posiela „dummy traffic“ (prázdne pakety), zase na zmätenie útočníka.
Protokol vytvorenia tunela
Všetky riadiace správy posielané medzi jednotlivými routermi sa v TOR terminológii nazývajú cell, tak ich budeme nazývať ďalej. Spojenie medzi každými dvoma účastníkmi (router-router, klient-router) je šifrované cez TLS, okrem posledného hopu, ktorý ide von na internet. Na obrázku 2 máme diagram vytvorenia tunela, kde si Alica vytvorí tunel cez dva routery, OR 1 a OR 2, na nejaký website na internete. Tunel je vytváraný „teleskopicky“, vytvorí sa najprv časť od Alice k OR 1, cez takýto čiastočný tunel sa pošle požiadavok o rozšírenie o jeden hop k OR 2, atď.
Obrázok 2: Priebeh vytvárania tunela v sieti TOR (čas plynie smerom nadol)
Najprv Alica vyšle routeru OR 1 cell Create. Cell Create obsahuje ID tunela (circID) a prvú časť Diffie-Hellman dohody na session key. OR 1 odpovie Created, cell obsahuje druhú časť dohody na session key. Alica a OR 1 už ďalej používajú medzi sebou len session key v symetrickej šifre AES-128 v counter móde (tj. bloková šifra sa používa ako prúdová). Takto vytvorila prvú časť tunela.
Druhú časť vytvorí poslaním cellu Relay extend routeru OR 1, čím mu hovorí, nech komunikáciu v tomto tuneli s circID c1 posiela ďalej na OR 2. OR 1 si musí na to podobne vytvoriť čiastočný tunel s OR 2 (to sú tie celly Create c2 a Created c2). Potom OR 1 odpovie Alici Relay extended. Týmito správami si Alica dohodne s OR 2 session key. Keď nabudúce bude niečo posielať routeru OR 2, zašifruje správu týmto kľúčom a to celé zašifruje session kľúčom OR 1. Tým pádom OR 1 nebude vedieť, o čom sa Alica baví s OR 2. Na obrázku sú tieto vrstvy šifrovania zobrazené zloženými závorkami.
Letní fotosoutěž o ceny
Čas dovolených, prázdnin a digitálních foťáků je tady. Připravili jsme pro vás na prázdniny velkou fotosoutěž o zajímavé ceny. Máte šanci vyhrát PDA s operačním systémem Palm OS, set-top-box pro příjem digitální televize a další skvělé ceny! Pošlete nám své fotky a vyhrajte.Alica by mohla pokračovať v teleskopickom vytváraní tunelu ďalej, ale rozhodne sa, že jej dva hopy stačia a že chce ísť od OR 2 priamo na internet. Pošle cez OR 1 cell pre OR 2 Relay begin website:80, aby sa spojil s website na porte 80. OR 2 urobí TCP handshake s website na porte 80 a o úspechu cez tunel (cez OR 1) vráti cell Relay succeeded. Alica vie, že je už spojená, tak môže posielať dáta cez cell Relay data a bude dostávať odpovede v podobnom celli.
Keď chce Alica uzavrieť stream, mala by poslať cell Relay end, aby zbytočne neviseli streamy vo vzduchu. Ďalšie celly v protokole sú Relay teardown na zrušenie tunelu, Relay truncate a Relay truncated na skrátenie tunelu (možno potom predĺžiť cez iné routre). Protokol obsahuje ešte spomínaný „prázdny“ cell Relay drop a celly na riešenie zahltenia. Bežne sa používajú 3 routre v tuneli, ale je možné to nastaviť.
Hidden services
Anonymné publikovanie služby (napr. web server) vyžaduje od autora, aby vytvoril introduction points. Tie vytvorí tak, že natiahne tunely cez niekoľko onion routerov. Tunely vedú k jeho službe. Autor potom niekde na internete publikuje verejný kľúč k službe a zoznam introduction pointov. Je dôležité, aby verejný kľúč k službe bol iný než verejný kľúč jeho routera, inak by bolo jednoduché nájsť IP, kde služba beží.
Záujemca o službu si zistí jej verejný kľúč a natiahne si tunel cez sieť. Posledný z routerov v záujemcovom tuneli sa volá rendezvous point. Záujemca následne iným tunelom skontaktuje skrytú službu cez introduction point, pošle jej požiadavok na pripojenie s rendezvous cookie (veľké náhodné číslo) a povie jej, kde je rendezvous point, všetko zašifrované verejným kľúčom služby. Pri tom sa služba a záujemca cez Diffie-Hellmana dohodnú na session key. Ak služba prijme požiadavok, pripojí sa na rendezvous point, ktorý si záujemca vybral. Rendezvous point musí odpovedať rovnakým rendezvous cookie, ako čo záujemca poslal pri kontaktovaní služby. Spojenie je potom naviazané. Router, na ktorom je rendezvous point, netuší, kto sa tam stretáva s kým a nevie dešifrovať ich dáta.
Každá služba môže pravidelne obmieňať introduction pointy, len je treba, aby pri publikovaní služby uviedla ich životnosť. Zmena introduction pointov (teda aj tunelov) je dôležitá ako ochrana proti zlyhaniu v dôsledku výpadkou routera v tuneli, ako aj proti DOS útoku.
Postranné kanály
Anonymita poskytovaná TORom môže byť narušená aplikáciou využívajúcou TOR ako proxy. Typický príklad sú dotazy na DNS. Ak napr. prehliadač posiela DNS dotazy priamo a nie cez TOR, útočník sledujúci jeho pakety si jednoducho môže domyslieť, kam sa naozaj pripája. Podobne je to s HTTP hlavičkami: nič nebráni JavaScriptu na stránke, aby zistil IP adresu a poslal ju späť ako cookie. TOR sa preto často využíva s Privoxy, proxy aplikáciou, ktorá detekuje podľa definovaných pravidiel „zlé“ časti HTTP hlavičky a odstraňuje ich.
Ďalšie čítanie
V našom výklade sme vynechali mnoho podrobností, ako napríklad spôsob zaistenia integrity. Tradičný haš alebo digitálny podpis má pri onion routingu nevýhodu, že predlžuje správu pri každom hope – bolo by možné odhadovať dĺžku tunelu (alebo dokonca zistiť, kadiaľ vedie). O riešení tohto problému hovorí sekcia 4.4 v dizajne siete TOR. Ďalej sa tam záujemci môžu dozvedieť, ako funguje férové rozdelenie šírky pásma, predchádzanie zahlteniu siete, presný popis bezpečnostného modelu, riešenie rôznych útokov, atď.
V ďalšom dieli
Okrem TORu existuje niekoľko anonymných sietí. Nabudúce porovnáme TOR s I2P a ukážeme si nové koncepty v I2P sieti, ktoré majú zlepšiť anonymitu. Nakoniec si popíšeme traffic-analysis útoky podrobnejšie.