Il progetto Internet invisibile (I2P)

I2P is an anonymous network, exposing a simple layer that applications can use to anonymously and securely send messages to each other. The network itself is strictly message based (a la IP), but there is a library available to allow reliable streaming communication on top of it (a la TCP). All communication is end to end encrypted (in total there are four layers of encryption used when sending a message), and even the end points ("destinations") are cryptographic identifiers (essentially a pair of public keys).

Come funziona?

Per render anonimi i messaggi inviati, ogni applicazione client ha un "router" I2P che costruisce "tunnel" in entrata e in uscita: una sequenza di peer che passano messaggi in una direzione (per e dal client, rispettivamente). A sua volta, quando un client vuole inviare un messaggio ad un altro client, il client manda quel messaggio attraverso uno di quei tunnel in uscita, diretto verso uno dei tunnel in entrata dell'altro client, raggiungendo finalmente la destinazione. Ogni partecipante della rete decide la lunghezza di questi tunnel, e facendo così, determina un compromesso tra anonimato, latenza e velocità di gestione, in accordo con le proprie necessità. Il risultato è che il numero dei peer che si ritrasmettono reciprocamente, da un capo all'altro, il messaggio è assolutamente il minimo necessario per venire incontro alle esigenze di sicurezza sia di chi invia, sia di chi riceve.

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.

Sono disponibili ulteriori dettagli sul funzionamento di I2P.

Cosa puoi farci?

All'interno della rete I2P, non vi sono limiti al modo in cui le applicazioni possono comunicare: quelle che usano normalmente UDP possono far uso delle funzionalità base di I2P, e quelle che usano generalmente TCP possono usare la libreria di streaming simil-TCP. Abbiamo un'applicazione generica che fa da ponte TCP/I2P ("I2PTunnel") che permette alle persone di inoltrare stream TCP nella rete I2P, nonché ricevere stream dalla rete e inoltrarle verso uno specifico indirizzo TCP/IP.

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.

Il team di sviluppo di I2P è un gruppo aperto a chiunque sia interessato a partecipare, e tutto il codice è open source. Il cuore del kit di sviluppo di I2P e l'attuale implementazione del router sono scritti in Java (utilizzano attualmente sia sun che kaffe, in futuro è pianificato il supporto a gcj), ed esiste anche una semplice API basata su socket per accedere alla rete da altri linguaggi (è disponibile una libreria C, e sono in sviluppo quelle di Python e Perl). La rete è in continuo sviluppo e non ha ancora raggiunto la versione 1.0, ma l'attuale roadmap definisce il nostro piano di lavoro.