Rätten att kommunicera säkert är i fara. Just nu finns flertalet lagförslag som på ett eller annat sätt är tänkta att kringgå totalsträckskryptering. Det är således dags att hitta alternativ till de vanliga kanalerna ifall lagförslagen går igenom. Ett sådant alternativ är att gömma sig på Tor-nätverket, eller darknet som det också kallas.

irssi-klienten över Tor
Irssi-klienten ansluten till en server över IRC. Tor-loggan tillagd i efterhand.

På Tor-nätverket finns något som heter Hidden Services. Detta är tjänster som enbart är nåbara på Tor via onion-adresser. Hidden Services kallas också numera för Onion Services.

Det finns flera fördelar med Hidden Services på Tor. Bland annat är tjänsterna svåra att hitta då adresserna är en lång sträng med slumpade tecken. Det är således mycket svårt att hitta en Hidden Service om man inte på förhand vet adressen. Man använder således inte IP-adresser på Tor.

En annan stor fördel med Hidden Services är att all trafik är krypterad per automatik mellan servern och klienten. Även om man använder sig av ett okrypterat protokoll som exempelvis IRC eller HTTP krypteras trafiken. Här är det alltså Tor som står för krypteringen.

Det är också alltid flera hopp, eller noder, mellan klienten och servern. Detta försvårar att en enstaka nod kan övervaka trafiken eller censurera en Hidden Service. Det försvårar också att hitta vem som äger en viss Hidden Service.

Men den största fördelen av alla är kanske möjligheten att låsa sin Hidden Service med nycklar. Detta gör att ingen, som inte har tillgång till en giltig nyckel, ens kan se att det finns en Hidden Service på en viss onion-adress. På så sätt kan man vara säker på att en Hidden Service bara kan nås och användas av ens närmaste vänner, familj eller inbjudna medlemmar som man litar på.

Installera IRC-servern

Här kommer vi använda en Debian 13-dator som IRC-server. IRC-programvaran blir ngircd.

Vi börjar med att installera ngircd som root med kommandot:

# apt install ngircd

När paketet är installerat behöver vi ändra ett par saker. För att undvika att någon ansluter till IRC-servern utanför Tor ändrar vi så att servern endast accepterar anslutningar från 127.0.0.1, alltså den egna datorn. Detta gör vi i filen /etc/ngircd/ngircd.conf. Här ändrar vi Listen-raden under [Global] till följande:

Listen = 127.0.0.1

Vi kan också ändra Info-raden till något eget, helst något generellt som inte går att identifiera, exempelvis:

Info = Private IRC server on Darknet

När dessa rader är ändrade sparar vi filen. Vi kan också passa på att ändra /etc/ngircd/ngircd.motd till något eget. Texten i denna filen skrivs ut när någon ansluter till servern.

När dessa ändringar är utförda startar vi om ngircd:

# systemctl restart ngircd

Installera Tor och skapa en Hidden Service

Vi installerar Tor med kommandot:

# apt install tor

Nu är Tor installerat och körs i bakgrunden.

Innan vi går vidare kan vi testa att anslutningen till Tor fungerar genom att surfa in på en onion-adress. Som exempel använder vi här onion-adressen till sökmotorn DuckDuckGo. För att inte fylla hela skärmen med HTML-koden läser vi bara ut de första 50 tecknen.

$ torify wget -qO - https://duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion | cut -c1-50

Om svaret från ovanstående kommando blev något i stil med följande fungerar anslutningen till Tor:

<!DOCTYPE html><html lang="en-US" class=""><head><

Skapa en Hidden Service för IRC-servern

Öppna filen /etc/tor/torrc som root och lägg till följande två rader:

HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 6667 127.0.0.1:6667

Starta nu om Tor:

# systemctl restart tor

Vi har nu en Hidden Service på Tor-nätverket. Vi hittar adressen till tjänsten i filen /var/lib/tor/hidden_service/hostname. Detta är vår onion-adress och ser ut som nedan:

6yjffsdmowqdi5cd7wgofbj4gmjhuzl4cg4kz77vfne5orkxmqtzgtyd.onion

Redan nu kan vi testa att ansluta till den via en klient på Tor-nätverket.

Ansluta till IRC-servern via Tor från en annan dator

På en annan Debian-dator installerar vi Tor och IRC-klienten irssi. För att ansluta till en IRC-server över Tor med irssi behöver vi även installera proxychains4 (eftersom irssi inte stödjer socks-anslutningar).

# apt install tor irssi proxychains4

När paketen är installerade kan vi ansluta till IRC-servern via dess onion-adress på följande sätt:

$ proxychains4 -q irssi -n kalle -c 6yjffsdmowqdi5cd7wgofbj4gmjhuzl4cg4kz77vfne5orkxmqtzgtyd.onion

Flaggan -q till proxychains4 gör att programmet inte skriver ut något på terminalen, vilket hade gjort att irssi hade sett trasigt ut.

Flaggan -n till irssi anger ditt smeknamn som du vill använda på IRC-servern. Flaggan -c anger adressen till IRC-servern som i det här fallet är onion-adressen.

Vi är nu ansluta till IRC-servern över Tor via irssi-klienten. Ingen vet vem som äger den, ingen kan avlyssna trafiken till den och förhoppningsvis är det ingen som hittar den. Redan nu är har vi kommit en bra bit på vägen. Vi kan dock göra mer än så här – vi kan även låsa den så att det krävs en nyckel för att ansluta till den.

Lås IRC-servern så att endast de med en nyckel kan ansluta

Nu är det dags att låsa hela vår Hidden Service så att ingen kan ansluta till den utan en giltig nyckel. På så sätt kan vi vara säkra på att endast våra nära och kära har tillgång till IRC-servern.

Nycklarna i Tor bygger på principen med publika och privata nycklar. Man genererar ett nyckelpar som har en publik och en privat del. Den publika nyckeln placeras på servern. Den privata nyckeln ges till den person som ska kunna logga in på tjänsten.

Första steget är att skapa ett nyckelpar. Det gör vi på servern. Men först behöver vi installera paketet basez.

# apt install basez

Vi börjar med att skapa själva nyckeln. Det bästa är att skapa en nyckel åt varje person som ska kunna ansluta till servern. Fördelen med att ha en nyckel per person är att vi då enkelt kan ta bort nyckeln för någon som inte längre ska ha tillträde till servern, utan att påverka de övriga.

Allt detta gör vi i en ny katalog så att vi kan hålla ordning på filerna. Här döper vi nyckeln till Kalle eftersom den är för vår kompis Kalle.

# mkdir my-keys
# cd my-keys
# openssl genpkey -algorithm x25519 -out kalle.prv.pem

Därefter behöver vi ändra formatet på nyckeln så att vi kan använda den tillsammans med Tor. Det är den privata nyckeln som kommer kunna ansluta till servern. Med andra ord är denna delen som vi ger till den person som ska kunna logga in på IRC-servern.

# cat kalle.prv.pem | grep -v " PRIVATE KEY" | \
base64pem -d | tail --bytes=32 | base32 | \
sed 's/=//g' > kalle.prv.key

Vi behöver också skapa den publika delen av nyckeln. Det är denna delen som vi placerar på servern.

# openssl pkey -in kalle.prv.pem -pubout | \
grep -v " PUBLIC KEY" | base64pem -d | \
tail --bytes=32 | base32 | sed 's/=//g' > kalle.pub.key

Nu ska vi skapa själva auth-filen som ska placeras i Tor. Den filen har ett speciellt format. Vi kan skapa filen med rätt format med följande kommando:

# echo "descriptor:x25519:$(cat kalle.pub.key)" > kalle.auth

Kontrollera att filen ser korrekt ut med cat kalle.auth. Den ska se ut som nedan (med undantag för själva nyckeln som är unik):

descriptor:x25519:W6OACQ3Z76XGRWYWNQMC7PUNKRTROO2TT5AIDLZ3VVFDHBENZIAQ

Nu kopierar vi filen till /var/lib/tor/hidden_service/authorized_clients/ (på servern).

# cp kalle.auth /var/lib/tor/hidden_service/authorized_clients/

Starta om Tor:

# systemctl restart tor

Skapa den privata nyckelfilen

Om vi nu försöker ansluta till IRC-servern igen kommer vi få meddelandet Connection refused. Vi vet då att IRC-servern är låst.

Vi kan förbereda den privata nyckelfilen på servern där vi har alla filerna som behövs. Därefter kopierar vi nyckelfilen till klienten.

På servern, kör följande kommando för att skapa filen som vi behöver ge till Kalle.

# echo "$(cat /var/lib/tor/hidden_service/hostname | \
cut -c1-56):descriptor:x25519:$(cat kalle.prv.key)" > \
irc-server-kalle.auth_private

Kontrollera så att filen ser korrekt ut med kommandot cat irc-server-kalle.auth_private. Den ska se ut som nedan:

6yjffsdmowqdi5cd7wgofbj4gmjhuzl4cg4kz77vfne5orkxmqtzgtyd:descriptor:x25519:WCAQTXKGY7TDAJMHWJJTO3OYRRAGWLXYVKHWPF53Y5J3ASW3MZAQ

Första fältet är adressen utan onion-delen. Därefter följer fälten för descriptor och x25519. Det sista fältet är den privata nyckeln.

Installera nyckelfilen på klienten

Nu kopierar vi nyckeln till klienten, alltså Kalles dator. Filen ska placeras i katalogen /var/lib/tor/onion_auth. Vi behöver dock skapa katalogen först och därefter ändra ägare för katalogen:

# mkdir /var/lib/tor/onion_auth
# chown debian-tor:debian-tor /var/lib/tor/onion_auth

Nu placerar vi filen i katalogen och sedan ändrar vi ägare även för filen. Observera att detta görs på klientdatorn (Kalles dator).

# cp irc-server-kalle.auth_private /var/lib/tor/onion_auth
# chown /var/lib/tor/onion_auth/irc-server-kalle.auth_private

Det sista steget är att aktivera autentiseringen i Tor. Det gör vi i filen /etc/tor/torrc. Lägg till följande rad i filen:

ClientOnionAuthDir /var/lib/tor/onion_auth

Nu startar vi om Tor (på Kalles dator) för att ändringarna ska träda i kraft:

# systemctl restart tor

Nu kan vi återigen testa att ansluta till IRC-servern med följande kommando:

$ proxychains4 -q irssi -n kalle -c 6yjffsdmowqdi5cd7wgofbj4gmjhuzl4cg4kz77vfne5orkxmqtzgtyd.onion

Om allt har fungerat ska vi nu återigen vara anslutna till IRC-servern. Nu kan vi också vara säkra på att ingen annan än de vi har gett en nyckel till kan ansluta till IRC-servern.

Att tänka på

Även om det går att använda samma nyckel för flera personer är det säkrare att skapa unika nycklar för alla. På så sätt kan vi ta bort den publika nyckeln för en viss person och därmed blockera bara den personen, utan att påverka någon annan.

Alla användare som ansluter till IRC-servern ser ut att komma från localhost, alltså själva servern. Detta beror på att inkommande anslutningar går till Tor-demonen. Tor-demonen ansluter sedan till IRC-demonen via IP-adressen 127.0.0.1, alltså localhost.

En kort demonstration av IRC över Tor.

Vidare läsning

För den intresserade för mängder av djupare information att förkovra sig i.

Om den ökade massövervakningen

Om Tor

Om IRC