Das Invisible Internet Projekt (I2P)

I2P ist ein anonymes Netzwerk. Es stellt einen einfachen Kommunikationslayer für Anwendungen zur Verfügung, über den sie Nachrichten anonym und sicher austauschen können. Das Netzwerk ist streng Nachrichten-basiert (wie IP), aber es gibt auch eine Bibliothek, um verlässliche Streamingkommunikation zu ermöglichen (wie TCP). Jede Kommunikation ist End-zu-End-verschlüsselt (insgesamt gibt es vier Verschlüsselungsebenen beim Senden einer Nachricht), und sogar die Endpunkte ("Ziele") sind kryptographische Identifizierer (im Wesentlichen ein Paar von öffentlichen Schlüsseln).

Wie funktioniert es ?

Um die gesendeten Nachrichten zu anonymisieren, lässt jede Clientanwendung ihren I2P "Router" einige eingehende und ausgehende "tunnels" bauen - eine Folge von Peers, die Nachrichten in eine Richtungen weitergeben (beziehungsweise zum Client und vom Client weg). Wenn ein Client eine Nachricht zu einem anderen Client senden will, gibt der Client die Nachricht aus einem seiner ausgehenden Tunnel aus, der auf einen eingehenden Tunnel des anderen Clients zielt, und erreicht so schließlich sein Zeil. Jeder Teilnehmer im Netzwerk wählt die Länge dieser Tunnel, und macht damit einen Kompromiss zwischen Anonymität, Wartezeit und Verarbeitungsmenge, so wie er es selbst braucht. Das Ergebnis ist, dass die Anzahl von Peers, die jede End-zu-End Nachricht vermitteln, das absolute Minimum ist, um das Bedrohungsmodell vom Sender und Empfänger gleichermaßen zu treffen.

Wenn sich ein Klient das erste Mal einen anderen Klienten verbinden möchte, stellt er eine Anfrage an die verteilte "Netzwerkdatenbank" - eine strukturierte verteilte Hashtabelle (DHT)basierend auf dem Kademlia-Algorithmus. Dadurch können die Eingangstunnel anderer Klienten effizient aufgespürt werden. Der weitere Nachrichtenaustausch zwischen den Klienten beinhaltet dann diese Inforamtionen, sodass weitere Anfragen an die Netzwerkdatenbank nicht mehr erforderlich sind.

Mehr Details über die Funktionsweise von I2P sind hier verfügbar.

Was kann ich damit machen?

Im I2P-Netzwerk sind Anwendungen in der Wahl ihrer Kommunikation nicht eingeschränkt - die, die typischerweise UDP verwenden, können dies über die I2P-Baisfunktionalität tun. TCP-Anwendungen werden eher die TCP-artige Streamingbibliothek benutzen. Es gibt eine generische TCP/I2P -Brückenanwendung ("I2P-Tunnel") mit der Nutzer sowohl ihre TCP-Daten ins I2P-Netz leiten können als auch von dort TCP-Daten empfangen und weiterleiten können.

I2P-Tunnel können von Nutzern verwendet werden, um darüber hire eigene anonyme Webseite (Eepseite) anzubieten. Hierbei zeigt der I2P-Tunnel auf einen normalen Webserver, wodurch andere anonym über I2P mit ihrem Webbrowser auf diese Seite zugreifen können. Auf dessen Seite läuft dann ein I2P-Tunnel HTTP-Proxy (Eepproxy). Die gleiche Technik wird auch verwendet, um ein anonymes IRC-Netzwerk zu betreiben. Dabei wird der IRC-Server anonym gehostet und beliebige IRC-Klienten können I2P-Tunnel benutzen, um sich mit dem Server zu verbinden. Es gibt noch weitere Anwendung, die sich in der Entwicklung befinden, wie z. B. eine verteilte Datentauschplattform (a la BitTorrent), ein verteilter Datenspeicher (ähnlich wie Freenet / MNet) und ein vollständig verteiltes Blogsystem LiveJournal). Diese sind jedoch noch nicht anwendungsreif.

I2P ist nicht als Proxy zu normalen Internetdiensten gedacht - die Empfängeradresse von Datenpaketen ist immer eine kryptografische Kennung, nicht eine IP-Adresse. Daher können Datenpakete nur an jemanden versendet werden, der auch I2P benutzt. Allerdings können I2P-Teilnehmer selbst einen Ausgangsproxy zu normalen Internetdiensten anbieten, um damit anderen I2P-Teilnehmern deren anonyme Nutzung zu ermöglichen. Beispielsweise kann der "eepproxy" Anfragen an normale, nicht-I2P-URLs (z.B. "http://www.i2p.net") an einen bestimmten Zielrechner weiterleiten, auf dem der HTTP-Proxy squid läuft. Auf diese einfache Weise kann anonymes Surfen im Web ermöglicht werden. Solche Ausgangsproxies sind aus verschiedenen Gründen keine Dauerlösung (u.a. wegen der Betriebskosten und dadurch entstehender Sicherheitsprobleme), aber unter bestimmten Umständen kann diese Methode hilfreich sein.

Das I2P-Entwickler-Team ist eine offene Gruppe, die jeden willkommen heißt, der mitarbeiten möchte. Der gesamte Code ist Open Source. Das I2P-SDK des Kerns sowie der Router sind in Java implementiert (läuft momentan mit SUN Java und Kaffe, die Unterstützung des GCJ ist geplant). Es gibt eine einfache, Socket-basierte API, um die Netzwerkschicht aus anderen Programmiersprachen einzubinden (Bibliothek für C verfügbar, für Python und Perl in Entwicklung). Das Netzwerk befindet sich in aktiver Entwicklung und hat die Version 1.0 noch nicht erreicht, der aktuelle Entwicklungsplan zeigt unseren Zeitplan.