I2P

I2P - Das anonyme Netzwerk Beschreibung des I2PAndroid-console-0.9.20.png-Images. Information
Erste Version 2003
Letzte Version 0,9,45 (25. Februar 2020)
Anzahlung github.com/i2p/i2p.i2p , [cvs: //cvs.i2p.net/cvsroot/ cvs: //cvs.i2p.net/cvsroot] und [cvs: //cvs.invisiblenet.net: / cvsroot / freeweb cvs: //cvs.invisiblenet.net: / cvsroot / freeweb]
Qualitätssicherung Kontinuierliche Integration
Projekt-Status Aktiv
Geschrieben in Java
Betriebssystem Microsoft Windows , Linux , MacOS , OpenBSD , FreeBSD und Android
Umgebung unabhängig
Sprachen Französisch, Englisch, Spanisch und viele andere
Art P2P-Client
Verteilungsrichtlinie Kostenlos
Lizenz BSD- Lizenz , GNU General Public License , MIT-Lizenz und vom Inhaber des Urheberrechts öffentlich zugänglich gemacht ( d )
Webseite geti2p.net

I2P ("  Invisible Internet Project  ") ist ein anonymes Netzwerk , das eine einfache Netzwerkschicht vom Typ Software- Netzwerk-Overlay bereitstellt , mit der Anwendungen Informationen anonym und sicher aneinander senden können. Die Kommunikation ist durchgängig verschlüsselt .

Insgesamt werden vier Verschlüsselungsebenen zum Senden einer Nachricht verwendet. Die Anonymität wird durch das Konzept des „ Mix-Netzwerks  “ sichergestellt,  das darin besteht, direkte Verbindungen zwischen Peers zu entfernen , die Informationen austauschen möchten. Stattdessen durchläuft der Datenverkehr eine Reihe anderer Peers, sodass ein Beobachter nicht bestimmen kann, wer der ursprüngliche Absender und wer der endgültige Empfänger der Informationen ist. Jeder Peer kann zu seiner Verteidigung sagen, dass die Daten nicht für ihn bestimmt waren.

Im Internet wird ein Empfänger mit einer IP-Adresse und einem Port identifiziert . Diese IP-Adresse entspricht einer physischen Schnittstelle ( Modem oder Router , Server usw.). Bei I2P identifizieren wir jedoch einen Empfänger mit einem kryptografischen Schlüssel .

Im Gegensatz zur IP- Adressierung können Sie den Computer, dem dieser Schlüssel gehört, nicht festlegen. Da der Schlüssel öffentlich ist , wird die Beziehung zwischen dem Schlüssel und der ihm gehörenden Schnittstelle nicht bekannt gegeben.

Technisches Konzept

Die "Ziele" (Beispiele: Webserver, IRC, Spiel  usw. ) sind kryptografische Kennungen (und keine IP-Adressen), die durch ein Paar asymmetrischer Schlüssel (privates Schlüssel / öffentliches Schlüsselpaar) definiert werden. Das Ziel wird durch die Kennung eines Hosts und die zu verbindende Portnummer bestimmt. Es kann sein , POP - Server , ein SMTP - Server , ein IRC - Server , ein Web - Server , ein SVN - Server , ein Newsgroup - Server ,  usw.

Der Router baut Tunnel , um eingehende und ausgehende Nachrichten zu tragen. Um einen Tunnel zu erstellen, fordert der Router einen der Peers, mit denen er verbunden ist, auf, diesen Tunnel zu bilden. Dieser Peer wird sich dann wiederum mit einem anderen Peer in Verbindung setzen und ihn bitten, das nächste Glied in der Kette von Peers zu sein, die den Tunnel bilden. Um ein kryptografisches Ziel - und damit einen Peer - zu erreichen, muss bekannt sein, welcher Tunnel "beendet" werden soll. Um dieses Problem zu lösen, wurde dem Netzwerk eine bestimmte Klasse von Routern hinzugefügt. Dies sind die "  Floodfill  ". Diese führen eine Liste der Verbindungen zwischen Tunneln und Zielen. Auf diese Weise fragt ein Router, wenn er ein Ziel erreichen möchte, Floodfill, in welchen Tunnel er gehen soll, um dieses Ziel zu kontaktieren. Die Anzahl der Floodfill- Router wird daher mit dem Wachstum des Netzwerks zunehmen. Alles ist automatisch. Wenn das Netzwerk neue Floodfills benötigt , werden die Router, die die Bedingungen für Geschwindigkeit, Stabilität und Anzahl der Verbindungen erfüllen, dies automatisch tun.

Alle Router des Netzwerks sind am Transport der Nachrichten der anderen Router beteiligt und ermöglichen es so, den von Ihnen erzeugten Verkehr ununterscheidbar zu machen , indem Sie ihn im konstanten Fluss des Netzwerks ertränken. Für einen Angreifer ist es sehr komplex festzustellen, ob die Daten wirklich für Sie bestimmt waren oder nur durch Sie hindurchgingen.

Die I2P-Lunge ist I2PTunnel und verwaltet die ein- und ausgehenden Tunnel. Insbesondere können Sie Ihre eigenen als erstellen HTTP - Tunnel , dass Punkte auf Port 80 des Geräts Ihren eigenen Host Eepsite und eine andere zu Ihrem Jabber oder POP3 - Server .

Anwendungen

Wie bei VPNs oder Darknets nutzt I2P das Tunneln , um ein „Netzwerk innerhalb des Netzwerks“ bereitzustellen. Im Gegensatz zu den meisten Software- Dateifreigaben in Peer-to-Peer in anonymem P2P konzentriert sich I2P auf die autonome Verwaltung des Netzwerks und die Bereitstellung einer anonymen Transportschicht . Wenn allein verwendet wird , ist I2P nicht die Dienste zur Verfügung stellen , die auf dem gefunden werden kann Internet ( E - Mail , Download , Web ,  usw. ). I2P wird jedoch mit einigen Anwendungen geliefert, mit denen einige gemeinsame Dienste gefunden werden können, während die vom Netzwerk angebotenen Eigenschaften der Vertraulichkeit und Anonymisierung gewahrt bleiben.

Die Entwicklung von Anwendungen über das Netzwerk ist daher möglich, ohne dass das I2P-Projekt geändert werden muss. Auf diese Weise können wir Anwendungen sehen, die das I2P-Netzwerk ausnutzen und dieselben Protokolle verwenden wie im Internet (z . B. iMule ).

IRC

I2P enthält ursprünglich ein anonymes IRC- Netzwerk : Sie können eine Verbindung mit der IRC-Client- Software (egal welche) herstellen, die auf die Serveradresse 127.0.0.1 und auf Port 6668 verweist.

Beispiele für die am häufigsten besuchten Kanäle: # i2p-fr , # i2p-help , # i2p , #anonops ( anonym ).

Original geliefert

Optional

Live-Dateifreigabe

Für Entwickler

Eine API wird ebenfalls bereitgestellt , um die Entwicklung von Software wie neuen Anwendungen auf I2P-Basis ( SDK , Router usw.) zu erleichtern .

Der I2PTunnel

Kommunikations-Indirektion

Korrespondenten setzen sich nicht direkt aus. Sie verwenden jeweils eine Reihe von I2P- Routern als Vermittler, um einen I2PTunnel zu erstellen. Diese Tunnel sind einseitig und werden verwendet, um sowohl den Empfänger als auch den Absender zu maskieren. Wir können daher zwei Kategorien von I2PTunnel unterscheiden:

Um ein Mitglied des Netzwerks zu kontaktieren, müssen die I2P- Router gefunden werden, die den Einträgen der vom Empfänger bereitgestellten Tunnel entsprechen. Diese Suche erfolgt über die Netzwerkdatenbank .

Anonymität innerhalb der Indirektion

Eine Verschlüsselung , die als Knoblauchzehe bezeichnet wird, um den Unterschied zur Zwiebelverschlüsselung von TOR zu kennzeichnen , wird für Nachrichten verwendet, die über I2PTunnels gesendet werden. Diese Verschlüsselung stellt sicher:

  1. die Vertraulichkeit der Nachricht
  2. und dass die Vermittler nur die Router kennen können, die dem Tunnel vorausgehen und ihm folgen .

Punkt 1 verhindert, dass die in der Nachricht enthaltenen Informationen zur Identifizierung der Korrespondenten verwendet werden. Punkt 2 verhindert, dass Vermittler ihre Position im Tunnel kennen, und verhindert daher, dass diese Vermittler zwischen Korrespondenten und Vermittlern unterscheiden.

Tunnelgröße und Anonymitätsqualität

Die Größe der I2PTunnels wird von demjenigen festgelegt, der sie erstellt. Es hat einen erheblichen Einfluss auf alle Mechanismen, die die Anonymität schützen.

Ein Tunnel ohne Vermittler bietet Schutz, da es nicht möglich ist, Korrespondenten und Vermittler innerhalb des Netzwerks zu unterscheiden. eine plausible Ablehnung schützt sie. Ein Angreifer außerhalb des Netzwerks, der über die Ressourcen verfügt, um den Verkehr eines solchen Tunnels zu überwachen, kann jedoch einen Angriff durch statistische Analyse starten.

Wenn Vermittler eingreifen, müssen alle Vermittler kompromittiert werden, bevor ein Angriff durch statistische Analyse gestartet wird. Der Verkehrsmischungsmechanismus behebt dieses Problem.

Einschränkungen und Einschränkungen des I2PTunnels

Wenn der I2PTunnel die Anonymität innerhalb des Netzwerks relativ effektiv bewahrt, reicht dies allein nicht mehr für diejenigen aus, die eine globale Sicht auf das I2P-Netzwerk haben können. Es würde ausreichen, den Verkehr zu beobachten, um zu sehen, wo er beginnt und wo er aufhört.

Ein Tunnel , I2P oder ein anderer, bewirkt eine Drosselung der Rate und eine Erhöhung der Latenz . Die Multiplikation von Tunneln ermöglicht es, die Nutzung des nicht genutzten Flusses zu erhöhen.

Tunnelerstellung

Um zu kommunizieren, muss ein Korrespondent einen Tunnel erstellen, ohne seine Anonymität aufheben zu müssen (um seine Nachricht durch Gleichaltrige weiterzuleiten). Der Ersteller des Tunnels muss zuerst die Peers auswählen, die möglicherweise an seinem Tunnel teilnehmen. Anschließend wird eine Anforderungsanforderung (TunnelBuildMessage) erstellt, die die ausgewählten Peers durchläuft, bevor sie mit den jeweiligen Antworten an den Ersteller zurückkehrt.

Peer-Auswahl

Die Auswahl der Peers erfolgt nach bestimmten Kriterien. Diese Kriterien umfassen unter anderem ihre Antwortzeiten und Bandbreiten. Diese Auswahl wird auf der Grundlage der Leistung, Zuverlässigkeit oder des vom Benutzer gewünschten Grads an Anonymität getroffen.

Erstellen der TunnelBuildMessage

Die TunnelBuildMessage ist eine Nachricht, die vom Tunnelersteller erstellt wurde . Es wird verwendet, um die Antworten von Peers aufzulisten, die sich bereit erklären, am Tunnel teilzunehmen oder nicht. Wenn alle Antworten positiv sind, wird der Tunnel erstellt. Diese Nachricht besteht aus acht Aufzeichnungsblättern. Ein Registrierungsformular enthält den Antrag auf Teilnahme eines Peers. Ein Tunnel kann daher maximal acht Peers haben.

bytes 0-3: tunnel ID to receive messages as bytes 4-35: local router identity hash bytes 36-39: next tunnel ID bytes 40-71: next router identity hash bytes 72-103: AES-256 tunnel layer key bytes 104-135: AES-256 tunnel IV key bytes 136-167: AES-256 reply key bytes 168-183: reply IV byte 184: flags bytes 185-188: request time (in hours since the epoch) bytes 189-192: next message ID bytes 193-222: uninterpreted / random padding

Beschreibung eines Anmeldeformulars

AES-256-Tunnelschichtschlüssel und AES- 256-Tunnel-IV-Schlüssel  : Verschlüsselungsschlüssel, die bei Transaktionen im Tunnel verwendet werden, wenn dieser erstellt wird.

AES-256-Antwortschlüssel IV und AES-256-Antwortschlüssel  : Antwortverschlüsselungsschlüssel und sein Initialisierungsvektor ermöglichen es dem Peer, seine Antwort vor dem Weiterleiten der Nachricht zu verschlüsseln.

ID  der nächsten Nachricht : Der nächste Peer im Tunnel . Derjenige, an den die Nachricht nach der Antwort gesendet werden soll.

Mit den anderen Optionen können Sie die Integrität der Nachricht überprüfen, aber auch zusätzliche Informationen zur Antwort hinzufügen.

Vorbereitung zum Senden

Vor dem Senden der TunnelBuildMessage verschlüsselt der Tunnelersteller diese Nachricht auf zwei aufeinanderfolgende Arten. Durch asymmetrische Verschlüsselung , die Informationen im Netzwerk vertraulich behandelt, und durch symmetrische Verschlüsselung, die sicherstellt, dass die Nachricht in der vom Ersteller festgelegten Reihenfolge weitergeleitet wurde:

Asymmetrische Verschlüsselung  : Jedes Registrierungsformular wird mit dem öffentlichen Schlüssel des entsprechenden Peers verschlüsselt , sodass jeder Peer nur auf sein Registrierungsformular zugreift.

Symmetrische Verschlüsselung  : Die Nachricht wird dann von mehreren Ebenen verschlüsselt, um die Datei nur zum richtigen Zeitpunkt verfügbar zu machen. Die Verschlüsselung erfolgt so, dass, wenn ein Peer die Nachricht mit seiner Antwort verschlüsselt, die Registrierungskarte des nächsten Peers von ihm entschlüsselt werden kann. Sie können sich das als eine Zwiebel vorstellen, bei der bei jeder Übertragung von einer zur anderen eine Schicht entfernt wird. Zum Beispiel ein Tunnel mit drei Peers A, B und C:

Der Datensatz des letzten Peers des Tunnels (C) wird mit dem Antwortschlüssel des vorletzten (B) so verschlüsselt, dass, wenn B seine Antwort verschlüsselt, der Registrierungsdatensatz von C durch C entschlüsselt werden kann Datensätze von B und C werden mit dem Schlüssel von A verschlüsselt, so dass B erst nach A gelesen werden kann.

Peer- Verarbeitung der TunnelBuildMessage Wiederherstellung von Dateien

Wenn ein Peer eine TunnelBuildMessage empfängt , gibt es nur eine Datensatzkarte, die nicht symmetrisch verschlüsselt ist. Er entschlüsselt diese Datei mit seinem privaten Schlüssel, um die Aufforderung zur Teilnahme am Tunnel abzurufen .

Wahl der Teilnahme

Wenn die Datei entschlüsselt wird, ersetzt sie den Inhalt der Datei durch ihre Antwort, entweder nimmt sie am Tunnel teil oder nicht. Wenn er sich weigert, gibt er seinen Grund für die Ablehnung an.

Nachrichtenverschlüsselung

Sobald die Antwort erstellt und in das Registrierungsformular geschrieben wurde, verschlüsselt sie das Registrierungsformular symmetrisch mit dem in der Anfrage angegebenen Schlüssel. Anschließend werden die anderen Aufzeichnungskarten verschlüsselt. Die Verschlüsselung der anderen Dateien hat zur Folge, dass eine symmetrische Verschlüsselungsschicht entfernt wird , sodass die Datei des nächsten Empfängers keine symmetrische Verschlüsselung mehr aufweist. Es kann vom Empfänger entschlüsselt werden.

Gehe zum nächsten

Die letzte Operation, die der Peer beim Erstellen des Tunnels ausführt , besteht darin, die TunnelBuildMessage an den nächsten Empfänger zu übergeben. Der nächste Empfänger wird während der Anfrage im Registrierungsformular angegeben.

Der letzte Peer, der an der Erstellung des Tunnels beteiligt ist, ist der Ersteller des Tunnels. Es entschlüsselt die Formulare in umgekehrter Reihenfolge der symmetrischen Verschlüsselung, die beim Erstellen der TunnelBuildMessage ausgeführt wird , um die Antworten abzurufen.

Routing-Mechanismus

Das I2P reagiert auf das Routing- Problem, indem es versucht, Anonymität, Netzwerkqualität (Latenz und Durchsatz) und Ablehnungsangriffe auf das gesamte Netzwerk nicht zu beeinträchtigen.

NetdB

Das Konzept ist einfach, aber wichtig. Die NetdB (für Netzwerkdatenbank ) ist eine Datenbank, die die Kennungen der Router im Netzwerk enthält . Diese Datenbank ist verteilt und ähnelt einer Routing-Tabelle in einem herkömmlichen Router (außer dass sie hier die Identifikationsschlüssel der I2P-Router enthält). Sie benutzte das DHT von Kademlia an der Basis als Fallback-Lösung, aber dies wurde aufgegeben.

Floodfill- Router

Für die gemeinsame Nutzung von Metadaten aus dem Netzwerk wird Peer- Floodfill initialisiert (eine kleine Anzahl von Routern I2P verwendet diesen Algorithmus, der andere eine abgeleitete Kademlia , die jetzt jedoch nicht mehr verwendet wird). Wenn ein Floodfill Peer neuen tritt Verschlüsselungsschlüssel in die Netzwerk - Datenbank , eine andere zufällig ausgewählten Floodfill Peer fordert diese Taste erneut, dann , wenn es der Peer gültig ist , die ersten Ansätze und den Schlüssel republishes. Am Ende des Floodfill teilen Peers ihren Schlüssel, indem sie die Datenbank kontinuierlich abfragen und eine Kopie der gültigen Schlüssel in ihrem lokalen Speicher erstellen. Dies bewirkt, dass die Nähe der Floodfill- Peers zueinander geändert wird (die Peers kommen näher). Alle in der Datenbank gespeicherten Daten authentifizieren sich selbst, indem die Signatur des gespeicherten Elements überprüft wird. Die Daten werden mit einem Zeitstempel überprüft. Router überprüfen die Zeit regelmäßig, indem sie einen SNTP- Server (pool.ntp.org) abfragen und Inkonsistenzen auf der Transportebene erkennen (um Angriffe zu vermeiden). Einfach ausgedrückt stellen Floodfill- Router die Schlüsselübereinstimmung, das Informationsrouting und den Datentransport im Netzwerk sicher (3 bis 5 Floodfill- Router stellen theoretisch die ordnungsgemäße Funktion eines Satzes von 10.000 Routern im Netzwerk sicher). Der verwendete Algorithmus ist kein vollständiger Algorithmus, wurde jedoch angepasst, um dem Bedarf an I2P zu entsprechen, ohne die Implementierung zu belasten .

Aufgabe von Kademlia

Die Algorithmen von Kademlia wurden für den Austausch von Metadaten zwischen Routern verwendet . Diese Lösung wurde Wegen der Schwierigkeiten beim Einrichten des Algorithmus aufgegeben . Der Algorithmus erforderte ein Minimum an Ressourcen (PC und Prozessor ), die die Router nicht annehmen konnten (gute Idee auf Papier, aber nicht in dieser Anwendung).

Router Info

Der Router speichert nur Informationen, die für das Senden von Nachrichten über das Netzwerk erforderlich sind . Dies sind seine Identität (ein öffentlicher 2048-Bit- ElGamal- Schlüssel , ein öffentlicher DSA- Schlüssel, dann ein Zertifikat ) und Adressen (eine Liste von IP-Adressen , Ports und Veröffentlichungsoptionen). Der Schlüssel zu dieser Struktur ist ein SHA256 der Identität der Router. Solange sich die Version des I2P nicht in der Version 1.0 befindet, debuggen die Veröffentlichungsoptionen Daten .

Durchsuchen des Netzwerks nach einem bestimmten Router

In einem solchen verteilten System könnte die Suche nach Informationen wie eine Suche in einem traditionellen DHT aussehen (wie die, die in den Netzwerken in P2P durchgeführt wird ). Da das Netzwerk jedoch volatil ist und sich ständig weiterentwickelt (angesichts der 10-minütigen Gültigkeitsdauer der Tunnel ), wird die iterative Suche erleichtert, da sich die Informationen nicht auf dem nächstgelegenen Router, sondern auf den Routern befinden und einen Identifikationsschlüssel in der Nähe haben SHA 256 (Identität des Routers + ein Zeitstempel im Format JJJJMMTT), wodurch es möglich wird, eine Reihe von Routern mit den angeforderten Informationen zu haben. Dies ermöglicht auch eine Erneuerung des Ortes der Informationen im Netzwerk und den Schutz vor Angriffen (um einen Computer mit diesem Prinzip anzugreifen, ändert sich der Ort der Informationen jeden Tag und zwingt den Angreifer, seinen Angriff jedes Mal neu zu erstellen). Da Forschungsdaten sensibel sind, werden sie durch Erkundungstunnel geleitet, die sich von Datentunneln unterscheiden.

Eintauchen der Nutzlast

Das Eintauchen der Nutzdaten ermöglicht es, die tatsächlich vom Benutzer eines I2P-Routers gesendeten oder empfangenen Daten zu verbergen. Das Eintauchen ist sehr wichtig, da dies die Anonymität gegenüber einem externen Angreifer schützt, der einen Überblick über das Netzwerk hat.

Angriffe von einem Netzwerkrouter

Bei der Konzeption berücksichtigen die Entwickler die Angriffe und listen sie auf, um den Schutz der Benutzer und des Netzwerks zu gewährleisten (um beispielsweise eine Überlastung der Floodfill- Router zu vermeiden ).

Anmerkungen und Referenzen

  1. "  https://staas.home.xs4all.nl/t/swtr/documents/wt2015_i2p.pdf  "
  2. "  Vergleich anonymer Netzwerke  " (abgerufen am 20. Dezember 2009 )
  3. http://i2pbote.i2p.us
  4. http://wiki.vuze.com/w/I2P_HowTo
  5. (in) I2P-Team, "Funktionsweise des  Tunnelroutings  " (abgerufen am 18. Dezember 2009 )
  6. "  TOR, DAS VERSCHLÜSSELTE GESICHT DES INTERNETS - CAMILLE BOSQUÉ  " , auf www.camillebosque.com (abgerufen am 10. April 2016 )
  7. (in) I2P-Team "  I2Ps Bedrohungsmodell - Vorgängerangriffe  " (abgerufen am 18. Dezember 2009 )
  8. (in) Matthew K. Wright , Micah Adler , Brian Neil Levine und Clay Shields , passive Protokollierungsangriffe gegen anonyme Kommunikationssysteme ,Juni 200734  p. ( online lesen )
  9. "  Tunnelimplementierung  "

Anhänge

Zum Thema passende Artikel

  • Flood Fill- Begriff (auf Englisch: Floodfill ), der I2P dazu inspiriert, einige Knoten zu qualifizieren
  • Anonymes P2P (enthält eine Liste der Software)
  • Freenet  : komplementäres Netzwerk.
  • GNUnet  : anonymes P2P- und F2F-Netzwerk mit Dateifreigabe. Multifunktions- und Multiplattform-Software. ( GNU- Projekt , geschrieben in C).

Externe Links