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 peers 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 eventuellt 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 det att ett antalet peers som vidarebefodrar varje start-till-slut meddelande is det absoluta minimum som krävs för att möta både avsändaren och mottagarens hotbild.

The first time a client wants to contact another client, they make a query against the fully distributed "network database" - a custom structured distributed hash table (DHT) based off the Kademlia algorithm. This is done to find the other client's inbound tunnels efficiently, but subsequent messages between them usually includes that data so no further network database lookups are required.

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 is currently used to let people run their own anonymous website ("eepsite") by running a normal webserver and pointing an I2PTunnel 'server' at it, which people can access anonymously over I2P with a normal web browser by running an I2PTunnel HTTP proxy ("eepproxy"). In addition, we use the same technique to run an anonymous IRC network (where the IRC server is hosted anonymously, and standard IRC clients use an I2PTunnel to contact it). There are other application development efforts going on as well, such as one to build an optimized swarming file transfer application (a la BitTorrent), a distributed data store (a la Freenet / MNet), and a blogging system (a fully distributed LiveJournal), but those are not ready for use yet.

I2P is not inherently an "outproxy" network - the client you send a message to is the cryptographic identifier, not some IP address, so the message must be addressed to someone running I2P. However, it is possible for that client to be an outproxy, allowing you to anonymously make use of their Internet connection. To demonstrate this, the "eepproxy" will accept normal non-I2P URLs (e.g. "http://www.i2p.net") and forward them to a specific destination that runs a squid HTTP proxy, allowing simple anonymous browsing of the normal web. Simple outproxies like that are not viable in the long run for several reasons (including the cost of running one as well as the anonymity and security issues they introduce), but in certain circumstances the technique could be appropriate.

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.