The Invisible Internet Project (I2P)

I2P är ett anonymt nätverk, som tillhandahåller ett enkelt lager, vilket applikationer kan använda för att på ett säkert sätt skicka meddelande till varandra. Nätverket i sig självt är strikt meddelandebaserat (a laIP), men det finns ett bibliotek tillgängligt som tillåter strömmande kommunikation ovanpå detta lager (a la TCP). All kommunikation krypteras ändpunkt till ändpunkt (sammanlagt används fyra lager krypteringar för att sända ett meddelande), och även slutpunkterna ("destinationerna") är kryptografiska identiteter (i huvudsak ett par offentliga nycklar).

Hur fungerar det?

För att anonymisera meddelanden som skickas, så får varje klient-applikation sin I2P-"router" att bygga några få ingående och utgående "tunnlar" - en sekvens av noder som skickar meddelanden i en riktning (till och från klienten, respektive). När en klient vill skicka ett meddelande till en annan klient, så skickas meddelandet ut genom en av dess utgående tunnlar som är inriktad på en av den andra klientens ingående tunnlar, och till slut nås målet. Varje deltagare i nätverket väljer längden på dessa tunnlar och när det väljs så bestäms en balans mellan anonymitet, fördröjning och bandbredd enligt deras behov. Resultatet är att antalet noder som vidarebefodrar varje start-till-slut-meddelande är det absoluta minimum som krävs för att möta både avsändaren och mottagarens hotbild.

Första gången en klient vill kontakta en annan klient, gör den en förfrågan till en fullt distribuerad "nätverksdatabas " - en specialkonfigurerad distribuerad hash table (DHT) baserad på Kademlia-algoritmen.

Mer detaljer om hur I2P fungerar finns tillgängliga här.

Vad kan du göra med det?

Inom I2P-nätverket är applikationer inte begränsade i hur de kan kommunicera - de som typiskt använder UDP kan den grundläggande funktionaliteten och de som typiskt använder TCP kan använda det TCP-lika streaming biblioteket. Vi har en generisk TCP/I2P brygg-applikations ("I2PTunnel") som låter folk vidarebefodra TCP-strömmar in i I2P-nätverket och även mottaga strömmar från nätverket och vidarebefodra dom till en specifik TCP/IP adress.

I2PTunnel används för närvarande till att låta användare köra sin egen anonyma websajt ("eepsite") genom att använda en normal webserver och peka en I2PTunnel 'server' mot den, som människor kan använda för att anonymt ansluta till över I2P med en normal webläsare genom att köra en I2PTunnel HTTP proxy ("eepproxy"). Dessutom använder vi samma teknik för att köra ett anonymt IRC-nätverk (där IRC-servern hostas anonymt och vanliga IRC-klineter använder I2PTunnel för att kontakta den). Det finns andra applikationer under utveckling som t ex en för att bygga en optimerad swarming file transfer applikation (a la BitTorrent), en distribuerad datalagring (a la Freenet / MNet), och ett bloggsystem (en helt distribuerad LiveJournal), men dess är inte färdiga för användning än.

I2P är inte ett inherent "outproxy"-nätverk - klienten du skickar ett meddelande till är den kryptografiska identiteten, inte någon IP-adress, så meddelandet måste vara adresserat till någon som kör I2P. Emellertid, det är möjligt för en klient att vara en outproxy, och tillåta dig att anonymt nå deras internetuppkoppling. För att demonstrera detta, "eepproxyn" kommer att acceptera normala icke-I2P URLer (såsom "http://www.i2p.net") och vidarebefordra till en specifik destination som kör en squid HTTP proxy, vilken tillåter anonym browsing på det vanliga nätet. Sådana enkla outproxies är inte gångbara i det långa loppet av flera skäl (inklusive kostnaden och anonymitets- och säkerhetsfrågor), men i vissa fall kan tekniken vara lämplig.

I2Ps utvecklar-team är en öppen grupp, som välkomnar alla som är intresserade av att hjälpa till, all källkod är open source. Kärnan av I2P SDK:n och den nuvarande routerimplementationen är gjord i Java (som för närvarande fungerar med både sun och kaffe, gcj-stöd planeras för senare) och det finns ett simple socket baserat API för att ge tillgång till nätverket från andra språk (med ett C bibliotek tillgängligt och både Python och Perl under utveckling). Nätverket är under aktiv utveckling och har inte ännu nått 1.0 releasen, men den nuvarande utvecklingsplanen beskriver vårt tidschema.