I2P

Transcription

I2P
Seminar:
Erstellen und Analysieren einer Beispielimplementierung der
nichttrivialen Verzögerung in dem I nvisible I nternet P roject
(I2P)
Krieg, Lukas
53506
Kubitza, Henrik
53580
Tauchnitz, Johannes
53579
14. Juni 2016
Betreuhender Professor
Prof. Dr. Rainer Werthebach
Wir diskutieren und erstellen eine Beispielimplementierung der nichttriviale Verzögerung
im Anonymisierungsnetzwerk I2P, und besprechen die Auswirkungen auf unterschiedliche Angriffsszenarien und den Ressourcenbedarf der Router. Einführend geben wir eine
Übersicht über die Funktionsweise von I2P und anderen relevanten Anonymisierungsnetzwerken.
Arguing that you don’t care about the right to privacy because you have nothing
to hide is no different than saying you don’t care about free speech because you
have nothing to say. — EDWARD SNOWDEN
1
Eidestattliche Erklärung
Hiermit versichern wir, die vorliegende Seminararbeit selbstständig und nur unter Verwendung der von uns angegebenen Quellen und Hilfsmittel verfasst zu haben. Sowohl inhaltlich
als auch wörtlich entnommene Inhalte wurden als solche kenntlich gemacht. Die Arbeit hat
in dieser oder vergleichbarer Form noch keinem anderem Prüfungsgremium vorgelegen.
Datum
Krieg Lukas
Kubitza Henrik
Tauchnitz Johannes
2
Inhaltsverzeichnis
1 Bedeutung und Nutzen des I2P
4
2 Grundlagen der Funktionsweise von I2P
2.1 Tunnel . . . . . . . . . . . . . . . . . . . .
2.2 Garlic Verfahren . . . . . . . . . . . . . .
2.3 Eepseiten . . . . . . . . . . . . . . . . . .
2.4 Krytographische Verfahren . . . . . . . .
2.5 Vergleich zwischen I2P und Tor . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
6
7
7
8
3 Bedrohungen und Angriffsarten auf I2P
3.1 Brute-Force Angriff . . . . . . . . . . . .
3.2 Timing Angriff . . . . . . . . . . . . . .
3.3 Verkehrsanalyseangriff . . . . . . . . . .
3.4 Intersection Angriff . . . . . . . . . . . .
3.5 Denial of Service Angriffe . . . . . . . .
3.5.1 Starvation Angriff . . . . . . . .
3.5.2 CPU Load Angriff . . . . . . . .
3.5.3 Floodfill-DOS Angriff . . . . . .
3.6 Tagging Angriffe . . . . . . . . . . . . .
3.7 Partitioning Angriffe . . . . . . . . . . .
3.8 Harvesting Angriffe . . . . . . . . . . . .
3.9 Zeitvergeichsangriffe . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
9
9
10
10
11
11
11
11
11
11
12
13
4 Nichttriviale Verzögerung
4.1 Idee . . . . . . . . . . . . . . . . . . . . . .
4.2 Herausforderungen bei der Implementation
4.3 Implementierung . . . . . . . . . . . . . . .
4.4 Testen der Implementierung . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
13
13
13
15
16
.
.
.
.
.
.
.
.
.
.
.
.
5 Review
16
6 Hinweise
18
7 Code
18
3
1
Bedeutung und Nutzen des I2P
Mit der Verbreitung des Internets gegen Ende des 20. Jahrhunderts und dessen neuer Art
der Kommunikation bildeten sich auch neue Bedürfnisse auf Seiten der Nutzer aber auch
auf Seiten des Staates. Während der Staat für die Sicherheit seiner Bürger sorgen möchte,
genießt der Internetnutzer die neugewonnene Möglichkeit Texte, Bild- oder Sprachaufnahmen
weitestgehend anonym über das Internet teilen und veröffentlichen zu können.
Dies führt zu einem Spannungsfeld, in welchem das Grundrecht auf informelle Selbstbestimmung (Interessen von Journalisten, Anwälten und politischen Aktivisten) auf das staatliche Interesse der Sicherheit trifft. Dies führt zu einer undurchsichtigen Lage, in der Behörden
das existierende Recht in unterschiedlichen Bereichen zu ihren Gunsten auslegen und niemand
wirklich sicher sein kann, was über seine Kommunikation wem bekannt sein darf oder bereits
bekannt ist. Außerdem ist es wahrscheinlich, dass die Kommunikation auch durch Drittstaaten
mit anderen Rechtsgrundlagen fließt. Deshalb sind viele Bürger daran interessiert ihre Kommunikationswege, Nachrichtenquellen, sowie Freundschaften vor möglicher Identifizierung zu
schützen. Eine gute Methode um dies zu erreichen ist ein persönliches Treffen an einem sicheren Ort. Wenn dies jedoch nicht möglich ist, sind Anonymisierungsnetzwerke wie Tor und
I2P eine gute Alternative für eine ausreichend anonyme und sichere Kommunikation.
Wir gewinnen Anonymität. Und dadurch Frieden. “ [Hydra ]
”
I2P ist eines der größten Anonymisierungsnetzwerke, welches nicht von einer Regierung gesponsert wird und dadurch vollkommen autark ist. Außerdem sind einige der Kernentwickler,
sowie der (nicht mehr aktive) Gründer nicht mit bürgerlichem Namen bekannt. Dies ist gleichzeitig ein Vorteil, da Angreifer nicht wissen, welche Personen sie unter Druck setzen müssen,
um an Informationen zu gelangen. Obwohl viele Entwickler anonym sind, ist das Invisible Internet Project sehr offen. Die Besprechungsrunden sowie Email-Listen sind dokumentiert und
im Internet und innerhalb von I2P abrufbar. [I2PMeeting ] Außerdem werden alle Commits
kryptographisch signiert, und sind den Pseudonymen der Entwickler zuordenbar. [devguid ]
Zuletzt ist I2P deutlich kleiner als Tor, nicht nur in der Anzahl der Benutzer, sondern
auch in der Anzahl der Entwickler, was ein Einarbeiten in das Projekt erleichtert. Außerdem
sind viele interessante Probleme und Möglichkeiten schon in der Spezifikation angedacht und
teilweise sogar schon dokumentiert, jedoch noch nicht implementiert, was einen interessanten
Einstieg ermöglicht.
Trotz seiner (im Vergleich zu Tor) geringen Benutzerzahl sind über 60.000 Router
”
online [...].“ [I2PStat ]
4
2
Grundlagen der Funktionsweise von I2P
I2P ist ein Paket basiertes Anonymisierungsnetzwerk, dass international von Freiwilligen betrieben wir. Dazu installieren Benutzer eine Software auf ihren (ganz normalen) Computern,
mit der sich Browser und andere Dienste wie mit einem Proxy verbinden. Dadurch können
sie auch von anderen als Router verwendet werden. Um I2P Seiten (Eepsites) einsetzen zu
können, verbindet der Client sich mit den einprogrammierten oder durch die vorherigen Starts
bekannten Routern und erfrägt von ihnen Informationen über das Netzwerk. Diese verwendet
der Client, um seine eigene Netzwerkdatenbank zu erstellen. In der Netzwerkdatenbank werden alle bekannten Router, deren kryptographischer öffentlicher Schlüssel, IP-Adresse, sowie
seine Eigenschaften in signierter Form gespeichert. Zusätzlich wird seine Qualität repräsentiert
durch Datendurchsatz und Betriebszeit regelmäßig aktualisiert.
Zu den Eigenschaften eines Routers zählt auch, ob er ein Floodfill -Router ist oder nicht.
Floodfill -Router senden nicht, wie der Name vermuten ließe, eine Flut an Paketen, sondern
speichern einen Teil der im Netzwerk vorhanden LeaseSets sowie Router Infos, die für das
Kontaktieren von Knoten notwendig sind. In der Router Info sind hierbei die Physikalische
IP-Adresse und öffentlichen Schlüssel eines Routers hinterlegt. Das LeaseSet besteht mehreren
Leases, jedes Lease repräsentiert einen Tunnel dessen Informationen benötigt werden um ein
Ziel zu kontaktieren. Ein LeaseSet ist somit ein Bündel aus Tunnelinformationen und enthält
Daten darüber, wie alt es ist und einen Signaturschlüssel bzw. eine Signatur der Daten.
[leasset ] Jedes Lease enthält IP-Adresse des Gateways, Tunnel-ID und öffentliche Schlüssel
aller Teilnehmer des Tunnels. Um sich mit einer I2P Adresse verbinden zu können, muss das
LeaseSet dem Client bekannt sein. Deshalb kann dieses bei Floodfill Routern erfragt werden.
Um ein Leaseset zu bekommen, frägt der Client die Router, deren Hash in der Nähe der
.b32.I2P Adresse des Zieles liegen. Die Router senden das Leaseset anschließend dem Client
zu, welcher dann mit dem im Leaseset eingetragenen Router eine Verbindung aufbauen kann.
2.1
Tunnel
Innerhalb von I2P werden Nachrichten in eine Richtung mittels unidirektionalen Tunneln weitergereicht. Es wird deshalb zwischen Eingangstunnel (Inbound) und Ausgangstunnel (Outbound) unterschieden. Ein Tunnel besteht aus einem oder mehreren Routern, welche dabei
auch als Hops bezeichnet werden. Die Tunnellänge kann dabei in der I2P Router Konsole
eingestellt werden, wobei generell gilt: Umso länger der Tunnel, desto höher ist der Grad der
Sicherheit, aber auch die Zeit, die ein Paket durch ihn benötigt. Tunnellängen größer als drei
sind nicht signifikant sicherer als ein Tunnel der Länge drei. [torLng ]. Die variable Tunnellänge macht es Angreifern noch schwerer den Absender zu identifizieren. Es ist möglich
eine Tunnellänge von 0 zu haben. In diesem Fall ist der Absender des Paketes gleichzeitig
Anfang und Ende seiner Tunnel. Dies wird in Situationen genutzt, wenn der Serviceanbieter
bekannt ist, um eine möglichst schnelle Verbindung zu ermöglichen.
Alle Tunnel besitzen jeweils einen Gateway und einen Endpunkt. Ein Sender ist somit
Gateway seines Ausgangstunnels, dieser wird die Nachricht verschlüsselt und in 1kb große
Pakete aufgeteilt an den nächsten Router seines Ausgangstunnels senden. Wenn der Router
die Nachricht entschlüsselt hat, wird er sie an den nächsten Router des Tunnels weitersenden.
Dieser Vorgang wiederholt sich solange bis der Endpunkt des Ausgangstunnels erreicht ist.
Von diesem aus wird die Nachricht an den Gateway des Eingangstunnels des Empfängers
geschickt.
5
Abbildung 1: Aufbau der Ein- und Ausgangstunnel
Eingangstunnel besitzen einen Gateway, der die Nachrichten über die Hops an den Ersteller des Tunnels weiterschickt, welcher gleichzeitig der Endpunkt ist. Für Ausgangstunnel ist
der Ersteller der Gateway, der die Nachrichten über die Hops an den entfernten Endpunkt
schickt. Der Benutzer wählt, welche Peers an seiner Tunnelverbindung teilnehmen und stellt
jedem die benötigten Konfigurationsdaten zur Verfügung.
Nachrichten kommen am Gateway des jeweiligen Eingangstunnels an und werden dort
gebündelt, um dann in Tunnelnachrichten von 1kb zerteilt zu werden. Daraufhin werden sie
an den nächsten Hop des Tunnels gesendet, welcher die Gültigkeit der Nachricht prüft und
weiterschickt, bis der Austrittspunkt des Tunnels erreicht wurde.
Neben den obig genannten Ein- und Ausgangstunneln, die zur Datenübertragung verwendet werden, baut ein Router anfangs Erforschungstunnel (engl. Exporatory Tunnel) auf, um
mehr Informationen über das Netzwerk zu sammeln. Sie werden ebenfalls genutzt um die
Stabilität von Routern zu analysieren.[iTunnSpec ] [tunRout ]
Die benutzten Router werden von dem Ersteller des Tunnels ausgesucht. Dazu schaut
er in seiner Netzwerkdatenbank nach Routern mit hohem Datendurchsatz und Betriebszeit
[petcon ] [met86 ] und wählt so viele Router aus, wie er für seinen Tunnel verwenden möchte.
Um bestimmte Angriffe zu erschweren, werden Router in allen Tunneln zu einem Ziel immer
in der gleichen Reihenfolge verwendet. Um eine Analyse der Tunnel zu erschweren und einen
Nutzer so zu Deanonymisieren, werden Tunnel nach 10 Minuten geschlossen und über andere
Router wieder neu aufgebaut.
2.2
Garlic Verfahren
Garlic (dt. Knoblauch) ist das von I2P vorgesehen Routingverfahren. Es ist eine Weiterentwicklung des Onion Routingverfahrens, welches bei Tor Verwendung findet. Beide Verfahren
verfolgen das Ziel jede Nachricht mehrfach zu verschlüsseln und mit Lieferinformationen zu
versehen. Die Lieferinformationen enthalten unteranderem die Adresse des Empfängers. Sei es
der nächste Hop oder der Gateway des Eingangstunnels. Anhand dieser Informationen kann
die Nachricht von einem Hop an den nächsten weitergegeben werden. Jeder Hop kann dabei
nur eine Schale an Verschlüsselung wie eine Zwiebelhaut abziehen und die darunterliegende
Lieferanweisung lesen und durchführen. Auf diese Art und Weise muss und kann der erste Hop
nicht die Zieladresse der Nachricht wissen. Dies stellt sicher, dass niemand außer dem Sender
die Ziel- und Quelladresse kennt und somit keine Benutzer deanonymisiert werden kann. Dies
bedeutet auch, dass der Sender die Nachricht mit samt den Lieferinformationen für jeden
Hop entlang des Tunnels mit deren öffentlichen Schlüsseln verschlüsseln muss. Die Nachrichten sind also beim Entpacken des ersten Hops immer noch mit den öffentlichen Schlüsseln der
folgenden Hops verschlüsselt.
Beim Garlic Routing können mehrere Nachrichten (Cloves -¨¿ Zehen) in einer Knolle (Pa6
ket) gepackt sein. So könnte unter jeder Verschlüsselungsschicht anstatt einer Nachricht mit
einem Empfänger mehrere Nachrichten mit unterschiedlichen Empfängern ausgepackt werden. Die Lieferanweisungen können also bei I2P für jede Zehe unterschiedlich sein. Außerdem
können mehrere einzelne Zehen zusammengefasst und dann als Nachrichtenknolle an den
nächsten Router zugestellt werden. Dieses Verfahren setzt jedoch voraus, dass die Nachrichten
zwischengespeichert werden, bis mehrere Nachrichten des gleichen Empfängers angekommen
sind.
Das I2P Netzwerk besitzt zwei Stellen, die eine hohe Wahrscheinlichkeit haben, dass mehrere Nachrichten für den gleichen Empfänger auftreten. Diese sind somit für den Einsatz
des Garlic Routings besonders gut geeignet. Die Rede ist von den Gateways der Ein- oder
Ausgangstunnel. Garlic Routing ist jedoch (größtenteils) noch nicht in I2P implementiert.
2.3
Eepseiten
Eepsites sind werden bei Tor als Hidden Services“ bezeichnet . Eine Web“-Seite, die nur
”
”
durch das Netzwerk aufgerufen werden kann. Da I2P externe Seiten nicht (oder nicht effizient)
anzeigen kann ist das erreichbar machen von Eepsites eins der zentralen Ziele von I2P. Jeder
der I2P installiert hat kann eine Eepsite hosten. Dazu muss er lediglich die Konfiguration in der
Weboberfläche der Software anpassen und entsprechenden Inhalt auf einer TCP-Verbindung
bereitstellen. Um die Webseite erreichen zu können müssen potentielle Benutzer im Besitz
der Base32-Adresse dieser sein und sie in ihrem Router eingeben. Ein Beispiel hierfür wäre
(dsfasdfasdf). Die Benutzer können diese Adressen in ihrer lokalen Datenbank verwalten.
Um seine I2P Adresse zu verbreiten (z.B. example.I2P), muss der hoster seine Base32Adresse auf einer Jumpsite eintragen. Jumpsites sind von anderen Benutzern (meist langjährige
I2P Benutzer) gehostete Seiten, die die Verbindung zwischen den merkbaren Adressen und
ihren Bas32 gegenüber bilden. Um auf Jumsites aufgenommen zu werden muss ein potentieller
Hoster ein Formular ausfüllen. Es ist relativ einfach auch mehrere unterschiedliche Services
von einem Computer zu hosten. Es müssen dazu lediglich mehr Tunnel aufgebaut werden. Da
die Base32-Adresse abhängig von dem öffentlichen Schlüssel ist müsste für eine teilweise sprechende I2P-Adresse eine Vielzahl von privaten Schlüsseln erstellt, gehashed und verglichen
werden. Dies wird momentan nicht versucht.
2.4
Krytographische Verfahren
[i2pcrypt ] I2P benutzt Verschlüsselung, um sicherzustellen, dass kein Angreifer Inhalte, oder
soweit möglich, Metadaten abgreiffen kann. Dafür wird das ElGamal Verschlüsselungsverfahren
für asymetrische Verschlüsselung und AES als symetische Verschlüsselungsverfahren verwendet. Der ElGamal Verschlüsselungsalgorithmus wird bei Router-zu-Router Paketen, wie sie
zum Aufbau von Tunneln benötigt werden verwendet. Außerdem wird ElGamal zur Ende-zuEnde Verschlüsselung verwendet. ElGamal ist ein asymetrisches Verschlüsselungsverfahren.
Das heißt, dass ein öffentlicher Schlüssel veröffentlicht werden muss. Diese Schlüssel befinden
dann in den Leases in der Netzwerkdatenbank. Für die symetrische Verschlüsselung wird AES
mit 256 Bit Schlüsseln und einer Blockgröße von 128 Bit im Cipher Block Chaining verwendet. Dieses Verfahren wird bei der Transportverschlüsselung entlang von Tunneln und bei
Tunneltest Nachrichten verwendet. Als Schlüsselaustauschverfahren wird der Diffie Hellman
Schlüsselaustausch mit 2048 Bit verwendet, sodass Forward Secrecy gewährt wird. [dhfs ]
Für die Signierung wird der DSA-Algorithmus mit 1024 Bit Länge verwendet. Die Länge
7
ist möglicherweise nicht mehr außreichend [nistDSA ], neue Verschüsselungsverfahren sind
schon implementiert, aber ab wann sie benutzt werden können ist noch nicht beschlossen.
Als Haschverfahren wird überall SHA256 verwendet.
Aufgrund der (zur damiligen Zeit) relativ großen Schlüsselängen musste bis jetzt kein
Update der kryptoraphischen Verfahren vorgenommen werden. Dies ist jedoch in Planung.
Da die Java Kryptographie Bibliotheken nie effizient waren oder nie als besonders sicher
galten, oder erst später implementiert wurden [javaMessDig ][JavaCrypt ]wurden viele für
das I2P Projekt nachimplementiert.
2.5
Vergleich zwischen I2P und Tor
Tor ist aktuell das beliebteste und bekannteste Anonymisierungsnetzwerk. Es wurde 2002
in der Alphaversion als studentisches Projekt erstellt und ist auf Freiwillige angewiesen, die
Tor-Exit-Nodes betreiben, über die letztendlich ein anonymisierter Zugriff auf das Internet
möglich wird. Dies ermöglicht es wiederum alle Webseiten zu besuchen, die im normalen“
”
Internet (Clearnet) erreichbar sind und schützt gleichzeitig gegen eine einfache Zuordnung
der Kommunikation zu einer IP-Adresse. Die Betreiber der Internetseiten können den Torbenutzern jedoch einfach die Registrierung verweigern oder von ihnen erstellte Beiträge löschen.
Des Weiteren ist die HTTP-Kommunikation mit der Webseite nicht Verschlüsselt und daher einfach zu überwachen. Aus diesem Grund wurden im Jahre 2004 Hidden Services“ im
”
Tornetzwerk eingeführt. Diese sind nur durch das Tornetzwerk erreichbare Webseiten, deren
Betreiber anonym sind. Die Kommunikation mit diesen Services ist außerdem immer verschlüsselt, wodurch eine Reihe von SSL-Angriffen unterbunden wird.
Der Fakt, dass diese Hidden Services im Nachhinein in Tor implementiert wurden, führt
jedoch zu Problemen [goltorDean ]
I2P begann im Jahre 2003 in der Entwicklung als verteiltes Internet Relay Chat (IRC)
Netzwerk. Das Projekt wurde jedoch schnell erweitert, sodass beliebige Inhalte und Webseiten darüber verteilt werden konnten. Zwar ist es auch möglich über sogenannte Outproxies
auf das Clearnet zuzugreifen, dies ist jedoch nicht der eigentliche Verwendungszweck. Um die
Kommunikation zu ermöglichen, agieren alle Beteiligten als Router. Dies ist zwar im Tornetzwerk ebenso vorgesehen, jedoch nicht der Regelfall. Dies bedeutet auch, um in dem I2P
Netzwerk beitreten zu können lediglich die IP-Adresse eines beliebigen Routers vonnöten ist.
Im Gegensatz dazu benutzt Tor Eintrittsknoten (engl. entry node). Dies sind Torknoten, die
eingehenden Datenverkehr akzeptieren. Im I2P Netzwerk wird dieser mit nur wenigen Ausnahmen von allen Knoten akzeptiert. Alle aktiven Router und ihre IP-Adressen sind jedoch
in der Netzwerkdatenbank hinterlegt. Durch ausschalten des eigenen Routings ist dies jedoch
ein wenig zu erschweren. Außerdem benutzt Tor zentrale Server zwecks Verbindungsaufbau
[TorSpec ] , wohingegen bei I2P die Informationen über die schon vorhandenen Router von
jedem andern Router erfragt werden können.
8
3
Bedrohungen und Angriffsarten auf I2P
[i2pthM ]
Anonymität ist kein true oder false“ Attribut, es wird daher von einem Grad bzw. Level
”
an Anonymität gesprochen. Der Grad der Anonymität beschreibt, wie schwer es ist Informationen über eine Person herauszufinden, die eben das nicht will. Diese Informationen schließen
z.B. ein wer mit wem, wann über was kommuniziert . Allerdings ist auch mit I2P keine perfekte Anonymität möglich, da die Software z.B. nicht von Personen, die keinen Computer oder
kein Internet benutzen ununterscheidbar macht. Das Ziel ist, ausreichende Anonymität herzustellen. Aus diesem Grund werden in diesem Kapitel einige Angriffsmöglichkeiten vorgestellt,
die es Dritten möglich macht an einige der oben genannten Informationen zu gelangen. Viele
der Angriffe sind momentan, bedingt durch die geringe Größe des I2P Netzwerks weniger
schwer durchzuführen als sie es im Idealfall seien sollten.
3.1
Brute-Force Angriff
Ein Brute-Force Angriff kann von einem passiven oder aktiven Angreifer durchgeführt werden,
der den kompletten Datenverkehr zwischen I2P Knoten verfolgt und versucht herrauszufinden,
welche Nachrichten welchen Pfad genommen haben. Neben dem gewaltigen Aufwand den der
Angreifer betreiben müsste, um den Datenverkehr zu überwachen kommt erschwerend hinzu,
dass eine Nachricht auf ihrem Weg zum Empfänger ihre Größe und Inhalt stetig ändert. Auf
den Inhalt der Nachricht hat der Angreifer ebenfalls keinen Zugriff, da diese nur verschlüsselt
übertragen wird.
Nichtsdestotrotz kann ein mächtiger Angreifer, beispielsweise ein Internet Service Provider
oder Internet Exchange Point, mit Brute-Force Tendenzen entdecken. Indem er zum Beispiel
eine 5GB große Nachricht an eine I2P Adresse sendet, kann er jeden I2P Knoten, welcher
weniger als 5GB Daten in der gleichen Zeit empfangen hat, als mögliche Tunnelteilnehmer
ausschließen. Dieser Angriff ist zwar in der Praxis unbeschreiblich aufwändig, in der Theorie
jedoch möglich.
Verteidigungsmaßnamen gegen einen Brute-Force-Angriff sind zum Beispiel das Setzen
eines niedrigen Bandbreiten-Limits oder der Einsatz von nichttrivialer Verzögerung oder resctricted Routern. Die letzten beiden genannten Optionen sind in der aktuellen Version von
I2P noch nicht implementiert. Auf nichttriviale Verzögerung wird in Kapitel 4 weiter eingegangen.
3.2
Timing Angriff
Nachrichten in I2P sind unidirektional und der Empfänger wird nicht zwangsläufig eine Antwort senden. Allerdings besteht eine hohe Wahrscheinlichkeit, dass Anwendungen die über
I2P ausgeführt werden erkennbare Muster durch die Häufigkeit und Menge der Nachrichten
erzeugen. Beispielsweise wird bei einem HTTP-Request eine kleine Nachricht gesendet, auf
die eine große Menge an Antwortnachrichten zurückgesendet werden wird. Mit diesen Informationen gepaart mit der Überwachung des Netzwerkes, kann ein Angreifer Router aus
dem möglichen Pfad ausschließen, die zu langsam wären um die Nachrichten rechtzeitig zu
übertragen. Diese Art des Angriffs ist zwar mächtig
9
3.3
Verkehrsanalyseangriff
Netzwerkanalyseangriffe sind eine Art von Angriffen die gegenüber dem Tornetzwerk erfolgreich getestet wurde [http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=1425067&url=httpBei
Verkehrsanalyseangriffen wird der Verkehr an einer Vielzahl von Knoten analysiert und gespeichert. Ein Beispiel eines Datenpunkts wäre: um 12:50.50 wurden von Router 1.1.1.0 20
Pakete der Größe 1 Kb an 1.1.1.1 geschickt. Um 12.50.55 wurden 20 Pakete mit einer Größe
von jeweils 1 Kb von 1.1.1.1 an 1.1.1.2 geschickt. Wenn diese Daten von einer Vielzahl von
Routern vorhanden ist, kann man sie analysieren und auswerten. Mit nur diesen Datensetzen kann man nicht viel anfangen (nur einen Knoten aus der Kette rausrechnen), aber wenn
Zeitlich gesicherte Datenpakete von einer Vielzahl von Routern erfasst werden können, dann
ist es möglich dadurch Eingangspakete (die unverschlüsseltes TCP sein können) Benutzern
zuzuordnen.
Abbildung 2: Einfacher Darstellung eines Verkehrsanalyseangriffes
3.4
Intersection Angriff
Bei Systemen, die eine niedrige Latenz benötigen sind Intersection Angriffe sehr wirkungsvoll.
Hierbei wird dauerhaft Kontakt mit dem Ziel aufgenommen und beobachtet, welche Nodes im
Netzwerk online sind. Über längere Zeit werden Node Churns auftreten, die durch intersecting wichtige Informationen über das Ziel liefern. Diese Art des Angriffs wird schnell enorm
10
Kostspielig, je größer das Netzwerk wird.
3.5
3.5.1
Denial of Service Angriffe
Starvation Angriff
Ein feindseliger Benutzer, der dem Netzwerk schaden will, könnte eine Signifikanten Anzahl von Peers erzeugen. Wenn es bei diesen nicht identifiziert werden kann, dass sie unter
der Kontrolle derselben Entität stehen, kann der Angreifer sie dazu veranlassen, dem Netzwerk keine Ressourcen zur Verfügung zu stellen. Als Resultat müssen bereits existierende
Peers größere Netzwerkdatenbanken durchsuchen oder könnten mehr Tunnel anfordern als
gebraucht werden. Alternative könnten diese Peers zum Routen verwendet werden und zu
unzuverlässigen Services führen. Durch regelmäßiges verwerfen von geroutetem Traffic oder
der strikten Verweigerung von bestimmten Verbindungen kann zu Störungen führen, da Peers
die dieses Verhalten aufweisen, nicht von überlasteten Peers zu unterscheiden wären.
3.5.2
CPU Load Angriff
Über bestimmte Methoden können Peers dazu gebracht werden kryptografisch teure Berechnungen durchzuführen. Ein Angreifer könnte einen Peer mit einer großen Zahl dieser Anfragen
fluten, um zu versuchen seinen CPU zu überlasten.
3.5.3
Floodfill-DOS Angriff
Ein Angreifer kann ohne Probleme selbst ein Floodfill-Router werden und dies ausnutzen,
um falsche oder gar keine Informationen bei einem Floodfill-Lookup auszugeben. Außerdem
könnte er auch andere Floodfill-Router stören.
3.6
Tagging Angriffe
Ist ein Angreifer Teil eines Tunnels, könnte dieser versuchen ein übertragenes Paket zu verfolgen. In I2P ist es zwar unmöglich eine Nachricht so zu verändern, dass sie später wieder
identifiziert werden kann, aber der Angreifer kann, falls er einen zweiten Router im Tunnel
kontrolliert, ohne Probleme herausfinden, dass sich beide Router im selben Tunnel befinden.
Dies erkennt er durch die Tunnel-ID die für beide Router sichtbar wird, wenn sie die erhaltene
Nachricht entschlüsseln.
3.7
Partitioning Angriffe
Die Anonymität im I2P-Netzwerk wird verstärkt mit der wachsenden Größe des Netzes. Leider ist es für einen mächtigen Angreifer (z.B. Internet Service Provider) möglich dieses zu
zerteilen. Bei einem Partitioning Angriff werden Verbindungen zwischen Peers getrennt, um
separierte Netzwerke zu erzeugen. Dieses Problem wird zwar von der Netzwerkdatenbank versucht zu beheben, indem jede noch existierende Verbindung genutzt wird, um das Netzwerk
wieder zusammenzusetzen. Sollte der Angreifer aber alle Verbindungen getrennt haben, wird
auch die Netzwerkdatenbank hier chancenlos sein. Der getrennte Router müsste jetzt erkennen, dass eine große Zahl an zu vor noch verlässlichen Routern plötzlich nicht mehr verfügbar
sind, um dann seinen Client darauf hinzuweisen, dass er getrennt wurde. Leider gibt es dafür
im Moment noch keine Implementierung.
11
Bei einer analytischen Zerteilung des Netzwerks kann beobachtet werden wie sich Router und Ziel verhalten, um sie entsprechend zu gruppieren. Beispielsweise weiß ein Angreifer,
nachdem er die Netzwerkdatenbank ausgelesen hat, welche Anzahl von Eingangstunnel bestimmte Peers besitzen. Danach kann er die Peers nach diesem Kriterium einordnen.
Eine andere Art des analytischen Partition Angriffs ist in Verbindung mit nichttrivialer
Verzögerung und Batching Strategien möglich, da Tunnel und Router die eine Verzögerung
verwenden sehr wahrscheinlich statistisch auffällig werden. Allerdings müsste der Angreifer
einen großen Teil des Netzwerks kontrollieren und weiß weiterhin nicht, für welche anderen
Nachrichten dieselben Verzögerung verwendet werden.
3.8
Harvesting Angriffe
Mit einem Harvesting Angriff können Peers identifiziert werden, die I2P benutzen. Der Angreifer betreibt selbst einen Peer und verfolgt, wer sich mit ihm verbindet. Durch das Ernten“
”
aller Informationen von anderen Peers die er finden kann, ist es ihm möglich eine Liste von
I2P Nutzern zu generieren, die für weitere Angriffe oder rechtliche Schritte verwendet werden
kann. Alternativ können die Daten auch aus der Net-DB gelesen werden.
In I2P you don’t know who is talking to who, but you can know some of the
”
people who are in the I2P Network. To be part of the I2P Network you have to
let people know who you are, at least for an IP Adress [. . . ] I can basically scrape
Net-DB and find a collection of these IP Adresses“ - Adrian Crenshaw Blackhat
DC 2011
Abbildung 3: Datensammlung über im I2P Netz vorhandene Router
12
3.9
Zeitvergeichsangriffe
Jeder Server hat eine interne Uhr, die zwecks timing verwendet wird. Diese Uhr geht etwas
falsch. Wenn nun zwei Webserver (eventuell einer im Internet und der andere ausschließlich
über I2P erreichbar, oder einer mit bekannten Betreiber und einer mit unbekanntem Betreiber) dieselbe Zeit haben, so kann dadurch eine Verbindung zwischen diesen zwei vermutet
werden. Um diese Angriffsmöglichkeit zu reduzieren, verwendet und erfordert I2P die Verwendung von SMTP zwecks Zeiteinstellung. [I2PFaqPort ] I2P verwendet dazu den standard
tpool.ntp.orgserver Pool. Dadurch werden weder I2P-Cients analysiert noch ein neuer Angriffspfad eröffnet, da die (S)NTP Server als harmlos und relativ zuverlässig gelten. Selbst
wenn die Server Betreiber einzelne Benutzer deanonymisieren wollen ist dies aufgrund der
hohen Zahl [ntpUsage ] von externen anfragen schwer.
4
Nichttriviale Verzögerung
Verkehrsanalyseangriffe sind schon seit Jahren bekannt und werden als gefährlich angesehen.
In der Definition von I2P sind zwei Gegenmaßnahmen angedacht. Eine davon, die konstante
Paketgröße ist schon implementiert [iDatagSpec ]. Da alle Pakete dieselbe Größe haben
(Bei I2P 1kb), ist es bei Routern mit einem hohen Verkehrsaufkommen schwerer, die einzelne
Pakete nachzuverfolgen.
Dies bedeutet nicht, dass es unmöglich ist. So kann vermutet werden, dass wenn in kurzer
Zeit 1.1.1.0 Pakete an 1.1.1.1 sendet und 1.1.1.1 fünfundzwanzig Pakete an 1.1.1.2 übermittelt
1.1.1.0 an 1.1.1.2 sendet. Um dies zu reduzieren gibt es unteranderem das Prinzip der nicht”
trivialen Verzögerung“, welcher in diesem Kapitel beleuchtet werden soll.
Ebenso könnten Pakete verschiedener Sender, die ein Gemeinsames (nächstes)ziel haben
zusammen genommen und gemeinsam gesendet werden. Dies ist im I2P Protokoll vorgesehen
jedoch noch nicht Implementiert.
4.1
Idee
Nichttriviale Verzögerung“ (engl. nontrivial delay) bezeichnet die Idee große, nicht tech”
nisch bedingte Verzögerungen in den Transport von Paketen einzubauen, um die Zusammengehörigkeit von Paketen zu verschleiern und das Analysieren von Netzwerken zu erschweren.
Wenn ein Teilnehmer im Netzwerk ein Paket empfängt, und nicht sofort weiterleitet, so ist es,
für einen außenstehenden Beobachter nicht klar, ob das Paket an seinem Ziel angekommen
ist, oder ob es nur zwischengespeichert wird bevor es zum nächsten Ziel weitergeleitet wird.
Ebenso schwer ist es, mit Sicherheit zu sagen, ob die 25 Pakete die ein Mitglied an ein anderes
Mitglied sendet eigene Inhalte sind, oder unter Umständen vor vielen Minuten oder Stunden
zwecks weitersenden abgespeichert wurden.
Diese Idee ist von Anfang an in I2P geplant gewesen, wurde jedoch bis zum heutigen Tag
aufgrund von Schwierigkeiten nicht Implementiert. Im Folgenden wird auf einige Schwierigkeiten eingegangen und die potentiellen Gründe für die noch nicht stattgefundene Implementation beleuchtet.
4.2
Herausforderungen bei der Implementation
Bei der Implementation gibt es einige Herausforderungen, die in der Natur der Verzögerung
stecken. Diese werden im folgenden Abschnitt diskutiert und es wird nach Lösungen im Rah13
men unserer Beispielimplementation gesucht.
Ausfälle I2P benutzt Festplattenzugriffe ausschließlich, um Konfigurationen und Logs zu
speichern. Eine Vielzahl der Session Schlüssel, alle Transportschlüssel und die Nachrichten
werden zu keinem Zeitpunkt auf persistenten Medien gespeichert, wenn die Softwarekonfiguration nicht verändert wurde. Dies dient nicht nur der besseren Geschwindigkeit, weil weniger
Festplattenzugriffe notwendig sind, sondern schützt die Schlüssel von forensischer Untersuchung von heruntergefahren Computern (wie ein Angreifer mit Zugang zu einem Computer
es tuen würde). Wenn also ein als Router fungierender Computer neustartet sind die oben
erwähnten Daten nicht mehr vorhanden. Dies Stellt normalerweise kein Problem dar, da die
Weiterleitung von Paketen in der Regel innerhalb von Sekundenbruchteilen geschieht und
ein Neustart des Computers in dieser Zeit sehr selten ist. Ein Paket, das jedoch Tage auf
einem Computer liegt, bevor es Weitergeleitet wird, hat eine deutlich höhere Wahrscheinlichkeit, dass dieser in der Zwischenzeit heruntergefahren wird, ein Netzwerkproblem hat, oder
aufgrund eines Stromausfalls oder anderen Hardwaredefekten ausfällt.
Dies ist im Grunde kein Problem, da I2P Pakete nach dem Best-Effort-Prinzip nicht zuverlässig sind. Jedoch sind die Ausfälle bei allem was über 3,5% der Fälle hinausgeht in vielen
Situationen nicht vertretbar [borella98 ], und aufgrund der langen Laufzeit sind zuverlässige
Zwischenprotokolle wie TCP nicht gut nutzbar. Die Wahrscheinlichkeit, dass Pakete bei weniger als einer Stunde Verzögerung einem solchen Ausfall zu Opfer fallen ist jedoch recht
gering, da als Router eingesetzte Computer selten neugestartet werden und nur langfristig
erreichbare Router für das Versenden von Nutzdaten verwendet werden.
Für dieses Problem gibt es zwei Lösungsansätze. Die erste Möglichkeit ist, die oben genannten Daten auf der Festplatte temporär zwischenzuspeichern. Möglichkeit zwei ist die
Daten über zwei unterschiedliche Tunnel zum Ziel zu senden.
Kurze Schlüsselgültigkeiten In I2P werden Transportschlüssel, die auch zum Senden von
Nachrichten benutzt werden regelmäßig ausgetauscht und dabei die alten Schlüssel gelöscht.
Dies führt dazu, dass wenn das Paket ankommt, es potenziell nicht mehr entschlüsselt und
weitergesendet werden kann.
Dies kann zum einen dadurch gelöst werden, dass Langzeitschlüssel generiert und gehalten
werden. Diese Schlüssel wären dann Erfolg versprechende Ziele und müssten eventuell besser (sicherer) als die sonst verwendeten Schlüssel sein. Außerdem müssen Langzeitschlüssel
eventuell auch über Neustarts hinweg gesichert werden, was zu einer Vielzahl von Problemen
führt.
Speicherplatzverbrauch Ein Router muss mehrere Gigabyte von Datenverkehr pro Stunde verarbeiten können. Insbesondere, wenn er bestimmte Dienste im Netzwerk übernimmt.
Sollten alle diese Verbindungen eine Verzögerung beantragen ist dies aktuell kaum umsetzbar.
Dies kann jedoch bei einer experimentellen Implementation vernachlässigt werden, wenn die
Anzahl der zu sendenden Pakete niedrig gehalten wird. Eine mögliche Lösung ist, besonders
große Pakete früher zu senden, wenn der Speicherplatz nicht mehr ausreicht.
Ausfälle/Änderung von Komponenten entlang des Pfades Bei I2P muss jeder Client
vor dem Absenden eines Pakets den Weg bestimmen, den ein Paket nehmen soll. Dazu wählt
die Software aus den vorhandenen Routern jene aus, die eine hohe Stabilität aufweisen und
14
baut auf diesen Ersatztunnel auf. Diese Tunnel werden dann benötigt, wenn der Haupttunnel
nicht mehr funktionsfähig ist. Wenn nun während des Sendens einer der Router entlang des
Pfades nicht mehr verfügbar ist, kann das Paket nicht mehr übermittelt werden. Deshalb
sollten Kopien des Pakets über andere Wege gesendet werden. Dies wird bei dieser Beispiel
Implementation jedoch nicht beachtet.
Tunnel I2P verwendet wie in Kapitel 2.1 Tunnel beschrieben Ein- und Ausgangstunnel. Insbesondere Services die Nachrichten erhalten benötigen Tunnel. Die Existenz von Tunneln ist
mit 10 Minuten jedoch relativ kurz [goltorDean ], was das Benutzen von Verzögerungen im
Minutenbereich aktuell enorm erschwert. Es wäre jedoch möglich, dass die Verfügbarkeitsdauer
von Tunneln in einer zukünftigen Version verändert oder vom Ersteller relativ frei gewählt
werden kann.
Ein Erstellen von Tunneln mit nichttrivialer Verzögerung ist aktuell nicht möglich, da
Tunnel-Build-Nachrichten nicht als Garlic-Nachricht gesendet werden.
Benutzung Um die nichttriviale Verzögerung zu verwenden muss dem Router, der es in die
Pakete reinschreibt, bekannt geben, dass sie verwendet werden soll. Dies könnte möglicherweise
für jeden Tunnel separat in der Router Console eingestellt werden. Dies hat den Vorteil,
dass die verwendeten Dienste in dieser Hinsicht nicht angepasst werden müssen, solange der
Roundtrip der Pakete klein genug bleibt oder Daten nur in eine Richtung gesendet werden
sollen. Andererseits könnte über die I2P API (BOB:Basic Usage Bridge) die Einstellung benutzbar gemacht werden. Insbesondere Applikationen, die für I2P entwickelt werden, wie der
I2P-Bote (I2P interner Messaging Service) können diese Methode wählen. Zuletzt könnten
die benutzten Dienste Header mitschicken. Der letzte Punkt ist jedoch arbeitsintensiver für
den sendenden Computer, da er alle Pakete analysieren muss.
Außerdem muss die verwendete Software mit ausreichend langen Verzögerungen umgehen können und nicht als Bandbreitenlimit oder Timeout erkennen. Zum Testen wurde das
Empfangen von Paketen nur simuliert und Pakete an Dummy-Adressen gesendet.
4.3
Implementierung
Vorüberlegung In I2P ist die Implementation von nichttrivialer Verzögerung eingeplant
und größtenteils schon vorbereitet. Im Nachrichten Datagramm sind alle notwendigen Felder
spezifiziert [I2PspecGarl ] und im Interface als Deprecated vorhanden. Die Verzögerung
kann bei Garlic-Nachrichten bereits in Sekunden angegeben werden. Der Einfachheit halber
wurde in dieser Implementation bei den zu verzögernden Paketen die Java eigene sleep()
Methode verwendet. Dies ist alles andere als effizient. Eine für große Mengen an Paketen
sinnvollere Lösung wäre, die wartenden Pakete in einem binomialen Heap zu speichern. Pakete
mit großer Verzögerung könnten in, nach Sendezeit geordneten, Dateien gespeichert werden,
die in regelmäßigen Abständen nach zu sendenden Paketen durchsucht werden.
Dies ist auch für eine vollständige Implementierung des Garlic Routings vorteilhaft. Dafür
müssten die Pakete zusätzlich in einer Hashtabelle mit Zieladresse als Schlüssel gespeichert
werden. Aus dieser können dann effizient andere Pakete mit demselben Ziel ausgelesen und
die Garlic Zehen zu einer neuen Knolle zusammengefügt werden.
15
4.4
Testen der Implementierung
Da I2P ein großes Netzwerk ist und unter anderem von Leuten benutzt wird, für die Anonymität lebenswichtig sein kann, sollten alle Tests außerhalb dieses Netzwerkes durchgeführt
werden [TorResSec ]. Dies ist jedoch sehr kompliziert, da ein solches Vorgehen nicht dokumentiert ist, und Sicherheitsfeatures in die Software eingebaut und nicht auffindbar sind.
So werden große IP-Adressen Abstände, zu kleine Rundlaufzeiten, lokale Adressen als Ausschlusskriterium bei der Tunnelerstellung verwendet, die leider in unterschiedlichen Klassen
aufgelistet sind. Ein Ausführen der Software in einem eigenen Netzwerk und ein Senden von
Paketen über einen von uns bestimmten Knoten schlugen immer fehl. Um dieses Problem
zu umgehen, wurde das Empfangen und anschließende Senden von Paketen mit Hilfe von
Javadocs simuliert, und die eingestellte Zeit zwischen Empfangen und Senden festgestellt.
5
Review
I2P ist ein robustes Netzwerk, das von einer Vielzahl von Benutzern täglich verwendet und
darauf vertraut wird. Um diesen Anforderungen auch in Zukunft Herr zu werden sind in I2P an
vielen Stellen schon zukünftige Erweiterungen angedacht und vorbereitet. So steht der nichttrivialen Verzögerung nur noch ein Bedarf im weg. Genauso könnte eine voll funktionsfähige
Implementation von Garlic Routing eine weitere Reduktion der Erfolgswahrscheinlichkeit von
Timing Attacken erreicht werden, da die größe der Packeten damit variable währen
Dadurch, dass einer I2P Adresse mehrere Tunnel zugeordnet sein können und dadurch
auch mehrere LeaseSets, können mehrere Server gleichzeitig an unterschiedlichen Stellen der
Welt ohne zusätzlichen Aufwand dieselbe Seite ausliefern. Dies kann zum Schutz gegen die
Intersection Attacke verwendet werden. Wie erfolgreich dies ist muss jedoch noch gezeigt
werden. [I2PORQ ]
Es wird ebenfalls überlegt Tunnel mit optional fest einstellbaren Bandbreiten (400 Pakete
pro Minute o. Ä.) zu implementieren. Diese würden, wenn keine Nutzdaten versendet werden
Füllpakete transportieren und in einigen DDoS-Angriffen den Server und seine Anonymität
schützen. Dies beeinträchtigt jedoch im Regelfall die Netzwerkkapazität und im Extremfall die
Erreichbarkeit der Dienste. Wenn die Grenzen zwischen minimaler und maximaler Paketzahl
pro Minute frei eingestellt werden kann, würde dies den Einfluss auf die Netzwerkauslastung
reduzieren. Zu diskutieren wäre in diesem Fall, wie mit verzögerten Paketen umzugehen ist.
Innerhalb von I2P sind alle Transaktionen so schnell, wie sie sicher sein können. Einige Angriffsmethoden basieren jedoch darauf, dass viele Anfragen kurz hintereinander durchgeführt
werden (Sybil-Attack). Um gegen diese Art von Angriffen vorzugehen, könnte die Hashcash
Methode implementiert werden. D.h. es wird jeder Transaktion eine mathematische Aufgabe
mitgegeben, die vor der Ausführung der eigentlichen Transaktion gelöst werden muss. Dadurch, dass dann für jede Anfrage eine zusätzliche CPU-Last anfällt, wären Angreifer, die
viele Anfragen stellen dauerhaft mit Lösen dieser Aufgaben beschäftigt. Was den Preis (und
die benötigten CPUs) in die Höhe treibt. Diese Art von Kosten könnten auch für Netzwerk
Dienste eingefügt werden, um auch dort ein Schutz vor DDoS Angriffen zu bilden.
Dies könnte auch bei nichttrialer Verzögerung verwendet werden. Man könnte die Berechnung eines Wertes erzwingen, sodass wenn der Hash von ihm berechent wird, der berechnete
Hash in einer Speicherdauer und große abhängigen Anzahl von Bits mit dem Hash der Nachricht und dem Sendezeitpunkt konkateniert. Ansonsten wuerde das packet sofort gedroppedDies würde DDoS-Angriffe mit zu langen Speicherzeiten und zu großen Paketen reduzieren.
16
Die Schwirigkeiten dieser Aufgaben (Anzahl der abzugleichen Bits), sowie die Auswirkung auf
Benutzer mit rechenschwachen Computern muss noch erforscht werden.
Für Interessierte, die Java nicht verwenden wollen oder können gibt es eine C++ Implementierung, die auf GitHub gepflegt wird.[gitI2PD ] Es ist nicht der erste Versuch eine C++
Implementierung zu erstellen, die jetzige wird jedoch inzwischen von den I2P Entwicklern
unterstützt. [I2pTeam ]
17
6
Hinweise
Viele in diesem Dokument behandelte Themen können, wenn sie falsch eingesetzt werden,
dazu führen, dass Benutzer des jeweiligen Netzwerkes deanonymisiert werden können. Der
beiliegende Code ist nicht für den Einsatz im Netzwerk gedacht. Bitte vor dem Einsatz alle in
Kapitel refsubsec:impl aufgelisteten Themen bedenken und mit anderen auf den I2P Kanälen
darüber diskutieren.
Dies behandelt eine Beispiel Implementation von 3 Studenten. In allen Fragen bitte die
original Implementation auf getI2P.net lesen und verstehen.
Der besprochen Code wurde von uns nie im echten“ I2P Netz benutzt, um keine Benutzer
”
zu gefährden.
Anonymität im Internet ist schwer. Bitte lesen sie weiterreichende Informationen unter
[TorUG ] oder [secBox ], um mehr darüber zu erfahren.
7
Code
Hier sind kleine auschnitte aus dem erstellten quellcode. lstsetlanguage=Java
i n SendMessageDirectJob
p r i v a t e Date d e l a y T i l l ;
/∗∗
∗
∗ @param d e l a y T i l l t e d a t e t i m e a t w i t c h i t s c h o u l d be s e n t
∗/
p u b l i c SendMessageDirectJob ( RouterContext ctx , I2NPMessage message , Hash
t h i s ( ctx , message , toPeer , n u l l , n u l l , n u l l , n u l l , timeoutMs , p r i o r i t y ) ;
t h i s . d e l a y T i l l=d e l a y T i l l ;
}
send ( ) {
...
i f ( d e l a y T i l l != n u l l ) {
try {
l o n g delayBy=d e l a y T i l l . getTime ()−new Date ( ) . getTime ( ) ;
i f ( delayBy >1){
// delay , r e a l Delay
m e s s a g e . w a i t ( delayBy ) ;
}
// o t h e r w i s e , d e l a y a l r e a d d y handeld
}
catch ( InterruptedException ){
// N o t i f y o f b e e i n g dropped
18
o n F a i l . dropped ( ) ;
return ;
}
// message i s now a p r o p r e a t l y d e l a y e d
}
...
}
SendMessageDirectJob j o b ;
i f ( ! i n s t r u c t i o n s . getDelayRequested ( ) ) {
j o b= new SendMessageDirectJob ( g e t C o n t e x t ( ) , gw ,
i n s t r u c t i o n s . getRouter ( ) ,
1 0 ∗ 1 0 0 0 , TUNNEL PRIORITY ) ;
}
else {
Date d e l i v e r A f t e r=new Date ( ) ;
d e l i v e r A f t e r . setTime ( d e l i v e r A f t e r . getTime ( )
∗
+i n s t r u c t i o n s . g e t D e l a y S e c o n d s ( ) ∗ 1 0 0 0 ) ;
j o b= new SendMessageDirectJob ( g e t C o n t e x t ( ) , gw ,
∗
i n s t r u c t i o n s . getRouter ( ) ,
1 0 ∗ 1 0 0 0 , TUNNEL PRIORITY,
deliverAfter );
}
// run i t i n l i n e ( adds t o t h e outNetPool i f i t has t h e r o u t e r i n f o
j o b . runJob ( ) ;
}
in garlicMessage {
readBytes ( . . . ) {
//um empfangen zu konnen
}
toByteArray ( . . . ) {
um senden zu koennen
}
%found code s n i p p e t s
i f ( sent ) {
i f ( l o g . shouldLog ( Log .WARN) )
l o g . warn ( ” Not r e s e n d i n g ! ” , new E x c e p t i o n ( ” b l a h ” ) ) ;
19
Literatur
[1] [i2pMeeting] Meetings von I2p https://getI2P.net/en/meetings/
[2] [devguid] I2P
developers
devellopment
guide
https://getI2P.net/en/get-involved/guides/new-
[3] [i2pstat] I2P router informationen stats.I2P
[4] Leaseset definitionhttps://geti2p.net/spec/common-structures#struct LeaseSet
[5] Mitarbeiter an I2P https://getI2P.net/de/about/team
[6] tor blog https://blog.torproject.org/blog/one-cell-enough
[7] I2p Packet datagram https://getI2P.net/en/docs/api/datagrams
[8] I2P tunnel specificationhttps://getI2P.net/en/docs/tunnels/implementation
[9] i2p crypto specification https://geti2p.net/spec/cryptography]
[10] i2p tunnel routing https://geti2p.net/de/docs/how/tunnel-routing
[11] i2p thread moddel https://getI2P.net/en/docs/how/threat-model
[12] asd
[13] 68 irc entwickler teffen https://getI2P.net/en/meetings/68
[14] National Institute of Standarts http://csrc.nist.gov/publications/nistpubs/80057/sp800-57-Part1-revised2 Mar08-2007.pdf
[15] https://geti2p.net/ static/pdf/I2P-PET-CON-2009.1.pdf
[16] Crypto specification of java http://docs.oracle.com/javase/7/docs/technotes/guides/security/crypto/CryptoS
[17] paper about deanonymisation of Tor hidden services http://www.golem.de/news/torhidden-services-leichter-zu-deanonymisieren-1505-114347.html
[18] java
documentation
if
messagedigist
in
java
ps://docs.oracle.com/javase/6/docs/api/java/security/MessageDigest.html
6
htt-
[19] Advances in Cryptology — EUROCRYPT 2002: International Conference on the Theory
and Applications of Cryptographic Techniques Amsterdam, The Netherlands, April 28 –
May 2, 2002 Proceedings http://dx.doi.org/10.1007/3-540-46035-7 21
[20] Tor Spezifikation https://gitweb.torproject.org/torspec.git/tree/dir-spec.txt
[21] Tor User guide https://www.torproject.org/download/download-easy.html.en 06/2016
[22] Securety in a Box https://securityinabox.org 06/2016
[23] Tor Researchsecurety council https://research.torproject.org/safetyboard.html 06/2016
20
[24] Specification
of
garlicclovedeliveryinstructions 06/2016
Garlichttps://getI2P.net/spec/i2np#struct-
[25] Anonymität=Frieden http://hydra.geht.net/tino/p2p/I2P/gedanken/
[26] I2P open reaserch Questions getI2P.net/en/research/questions
[27] faq about open ports for I2Phttps://getI2P.net/de/faq#ports
[28] faq of ntp server about usagehttp://www.pool.ntp.org/en/vendors.html#pool-capacity
[29] c++ implementation von I2Phttps://github.com/PurpleI2P/I2Pd
[30] to do of I2P https://getI2P.net/en/get-involved/todo#hashcash
[31] author = Michael S. Borella and Debbie Swider and Suleyman Uludag and Gregory B.
Brewster, title = Internet Packet Loss: Measurement and Implications for End-to-End
QoS, booktitle = In International Conference on Parallel Processing, year = 1998, pages
= 3–12
21