Tor
et nettverk som ruter trafikk gjennom frivilliges reléer
Hva det er
Tor skjuler hvem som snakker med hvem for alle som lytter på linjen, ved å sende hver forbindelse gjennom en kjede av maskiner der ingen enkelt maskin kjenner både starten og slutten. Kjeden velges av klienten, et program som heter tor og kjører på leserens egen datamaskin, og den er som regel tre reléer lang: en vakt (guard) som klienten bruker om igjen som inngang, et mellomrelé og et utgangsrelé (exit) som tar den siste forbindelsen til målet. Klienten bygger denne kretsen ett ledd om gangen og forhandler fram en egen nøkkel med hvert relé. Deretter pakker den hver bit data inn i ett krypteringslag per ledd. Hvert relé skreller av sitt eget lag og får bare vite hvem som kom før, og hvem som kommer etter. Lagene inni hverandre er løken i tittelen på designartikkelen, The Second-Generation Onion Router. I dagligtale er reléene samlet Tor-nettverket, tor med liten forbokstav er programmet, og Tor Browser er nettleseren som er pakket for å bruke det.
Data flyttes i celler med fast størrelse, så et relé ser en strøm av like store blokker i stedet for formen på de opprinnelige nettverkspakkene. Mange TCP-forbindelser deler én krets: nye forbindelser gjenbruker den i ca. ti minutter før klienten bygger en ny, mens en lang forbindelse blir værende der den startet. Applikasjonene når klienten gjennom en lokal SOCKS-proxy, og bare TCP går denne veien; designartikkelen sier rett ut at den ikke tunnelerer protokoller som UDP. Frivillige driver reléene, og hvert av dem publiserer en beskrivelse med nøkler, adresse, båndbredde og utgangsregler (exit policy). Et lite sett katalogautoriteter stemmer over hvilke reléer som skal listes, og signerer resultatet som et konsensusdokument som hver klient henter før den velger rute.
Hvorfor det er viktig
For den som driver et offentlig nettsted, er Tor først og fremst et faktum om publikum. En leser som kommer over Tor, ser ut til å komme fra adressen til et utgangsrelé og ikke fra sin egen, og listen over reléer er offentlig med vilje, fordi hver klient trenger den for å velge rute. Et nettsted kan altså kjenne igjen Tor-trafikk og behandle den annerledes. Tor Project står selv på at operatører har rett til å blokkere den, selv om prosjektet håper de lar være. Det du da må avgjøre, er hva du gjør med disse leserne: betjener dem som alle andre, bremser dem, setter en utfordring foran dem eller gir dem en vei inn som aldri forlater Tor-nettverket, og det siste er det en onion-adresse gjør.
Det lønner seg å være presis om hva Tor lover, for designartikkelen lister selv opp det som er holdt utenfor. Den hevder ikke å slå en observatør som kan se begge ender av en forbindelse og sammenligne tidspunkter og volum, og prosjektets dokumentasjon legger til at forskerne ikke kjenner noe praktisk design med lav latens som klarer det pålitelig. Tor prøver heller ikke å skjule at noen bruker Tor, bare hva de bruker det til. Og den siste strekningen, fra utgangsreléet til målet, krypteres ikke.
Sammenlignet med et VPN er tilliten fordelt annerledes. En VPN-leverandør ser både brukeren og målet og blir bedt om å se bort. På Tor ser ingen enkelt relé begge deler, og klienten nekter å sette to reléer fra samme erklærte familie, eller fra samme /16 av IPv4-adresser, på én rute. Prisen er latens, siden hver forespørsel krysser tre frivillige maskiner, så sider som er lette og trenger få rundturer, fungerer best for lesere over Tor. Å tilby en onion-adresse koster én daemon til, én privat nøkkel til å passe på og ingen åpen innkommende nettverksport, og derfor får det plass på liten infrastruktur.
Slik ser det ut i praksis
Selskapets eget nettsted kan leses over Tor. Kommandolinjesiden publiserer
onion-adressen ved siden av en curl-kommando som henter Markdown-teksten gjennom en lokal
tor-klient. Adressen er vanlig http:// med vilje: en onion-adresse er tjenestens egen offentlige
nøkkel, så kretsen er autentisert og kryptert før det i det hele tatt snakkes HTTP, og et sertifikat
ville bare bevise på nytt det adressen allerede beviser.
Om selskapets eneste produksjonsvert også kunne bære onion-tjenesten, ble avgjort med målinger og ikke med synsing. Verten har én kjerne og rundt 464 MB brukbart minne, og den terminerer allerede TLS for sju domener og kjører en git-forge. Et døgn med målinger på verten med 512 MB ga svaret: selv på det laveste var rundt 310 MB av de 464 tilgjengelig, og prosessoren var ledig 99,7 % av tiden, med swap på 2,6 %.
Personvernsiden slår fast hva som følger av å åpne den døren. Gemini- og Gopher-kopiene av nettstedet har en daglig opptelling av forespørsler og ingenting annet. Over Tor telles ingenting i det hele tatt, og det finnes ingen innstilling som ville tillatt det, fordi det å vite hvem som leste en onion-adresse, er nettopp det protokollen finnes for å hindre. Siden sier at selskapet heller vil la være å vite enn å kunne vite.
Hvor det går galt
Navnet slås opp utenfor Tor. Et program som sender forbindelsene sine til en SOCKS-proxy, kan
likevel slå opp vertsnavnet selv først, gjennom den vanlige navneoppslagstjenesten, og det oppslaget
forteller det lokale nettverket og DNS-leverandøren hvilket nettsted som besøkes. Forbindelsen går
deretter gjennom Tor, men målet har allerede lekket. I curl er forskjellen ett eneste valg: med
--socks5 slås navnet opp lokalt, med --socks5-hostname overlates det til proxyen, og
utgangsreléet slår det opp.
# Slår opp navnet lokalt, kobler så til gjennom proxyen
curl -s --socks5 127.0.0.1:9050 https://example.org/
# Gir navnet til tor; utgangsreléet slår det opp
curl -s --socks5-hostname 127.0.0.1:9050 https://example.org/
Klartekst etter utgangen. Tor krypterer leddene mellom reléene, men det siste leddet går som det er. Utgangsreléet åpner en vanlig TCP-forbindelse til målet og sender det applikasjonen ga det, så et innloggingsskjema som sendes over vanlig HTTP, kan leses av den som driver utgangsreléet, og av alle på nettet bortenfor. Lever HTTPS for alt som forlater Tor-nettverket. En onion-tjeneste slipper unna spørsmålet, fordi trafikken dens aldri forlater nettverket.
Én adresse står for mange lesere. Grenser for antall forespørsler og utestenginger knyttet til klientadressen behandler et utgangsrelé som én besøkende, selv om mange bruker det samtidig. En grense tilpasset én person stenger ute alle hvis krets tilfeldigvis ender der, og en utestenging som én misbruker har gjort seg fortjent til, rammer dem alle. Bestem med vilje hvordan utgangsadresser skal behandles, i stedet for å la en generell regel per adresse bestemme for deg.
Identiteten reiser inne i kretsen. Tor skjuler nettverksadressen og gjør ingenting med det applikasjonen sier. En innlogging på en personlig konto, et særpreget nettleseroppsett eller et dokument som henter noe når det åpnes, knytter økten til en person, uansett hvor mange reléer som ligger imellom. Prosjektets egen dokumentasjon påpeker at applikasjonstrafikken fortsatt må renses på brukerens side. Den jobben tar Tor Browser på seg, og den blir liggende når en vanlig nettleser bare pekes mot proxyen.
Et utgangsrelé på en hjemmelinje. Vakt- og mellomreléer trekker sjelden til seg klager på misbruk. Utgangen er der målene ser trafikken komme fra, så klager og en og annen juridisk henvendelse går til den som driver den, og relé-veiledningen fra Tor Project sier at du ikke bør drive en utgang hjemmefra. En frivillig med én hjemmeadresse kan heller drive en bro (bridge), et relé som står utenfor den offentlige listen, og som den samme veiledningen anbefaler i den situasjonen.
Forventningen om at UDP skal virke. Taleanrop, mange spill og verktøy som sender egne DNS-spørringer, er avhengige av UDP, og Tor frakter bare TCP-strømmer. Slike programmer går ikke gjennom Tor, og et program som ikke tvinges gjennom proxyen, kan rett og slett koble direkte til, utenfor Tor, uten å si fra.
Les mer
- Tor Specifications — protokollen, rutevalget, katalogen og spesifikasjonene for onion-tjenester, samlet på ett sted.
- Tor: The Second-Generation Onion Router — designartikkelen: kretser, celler, utgangsregler og en uttrykkelig liste over det designet ikke prøver på.
- Tor Path Specification — hvordan en klient velger vakt, mellomrelé og utgang, og hvilke reléer som ikke får dele rute.
- Types of relays on the Tor network — vakt-, mellom-, utgangs- og broreléer, med den juridiske risikoen hvert av dem gir den som driver det.
- HTTPS encryption and Tor — en interaktiv visning av hva en avlytter ser med Tor, med HTTPS, med begge og med ingen av dem.