Author Topic: Ausführliches Grundkonzept von GNUnet  (Read 3926 times)

0 Members and 1 Guest are viewing this topic.

Offline ContractSlayer

  • Elite
  • *****
  • Posts: 605
  • Karma: +4/-0
    • View Profile
Ausführliches Grundkonzept von GNUnet
« on: May 03, 2010, 09:34:55 PM »
Quote
In diesem Abschnitt werden die grundlegenden Konzepte GNUnets erläutert. Zuerst wird auf die im GNUnet-Framework verwendeten Konzepte eingegangen. Der zweite Teil beschreibt für anonymes File Sharing spezifische Konzepte.

Authentifizierung
Nahezu alle Peer-to-peer-Kommunikationen in GNUnet finden zwischen gegenseitig authentifizierten Peers statt. Die Authentifizierung funktioniert dadurch, dass jeder Peer einen geheimen Sitzungs-Schlüssel mit seinem RSA-Schlüssel signiert. Außerdem ist der Sitzungs-Schlüssel mit dem öffentlichen Schlüssel des anderes Peers verschlüsselt. Dieser Sitzungs-Schlüssel wird dann verwendet, um die Kommunikation zwischen den beiden Peers über 256-bit AES zu verschlüsseln. Ein jeder Peer erzeugt einen solchen Sitzungs-Schlüssel für die Daten, die dieser Peer zum anderen Peer übermittelt. Da nur die beiden teilnehmenden Computer (Hosts) beide Sitzungs-Schlüssel kennen, authentifiziert dies jedes Paket, ohne jedes Mal Signaturen zu benötigen. GNUnet nutzt SHA-512 Hashcodes, um die Integrität von Nachrichten zu verifizieren.

In GNUnet ist die Identität eines Hosts der (SHA-512-)Hash seines öffentlichen Schlüssels. Aus diesem Grund können Man-in-the-middle-Angriffe die Authentifikation oder Bilanzierungsziele ("accounting goals") nicht brechen. Wesentlich für GNUnet ist, dass die IP des Host keine Rolle spielt. Da der öffentliche Schlüssel das einzige ist das wirklich zählt, ist das Fälschen einer IP, eines Ports oder irgendeiner anderen Eigenschaft des darunterliegenden Transport-Protokolls irrelevant.

GNUnet nutzt einen speziellen Nachrichtentyp, um eine Anbindung zwischen öffentlichen (RSA-)Schlüsseln zu ihren aktuellen Netzwerkadressen zu vermitteln. Diese Nachrichten werden allgemein "HELLOs" oder Peer-Ankündigungen genannt. Sie beinhalten den öffentlichen Schlüssel des Peers und seine derzeitigen Netzwerkadressen für verschiedene Transport-Dienste. Ein Transport-Dienst ist eine besondere Art einer gemeinsamen Bibliothek ("shared library"), der den (ggf. unzuverlässigen und die Reihenfolge permutierenden) Transport von Nachrichten ermöglicht. Für UDP- und TCP-Transport-Dienste ist eine Netzwerkadresse eine IP und ein Port. GNUnet kann außerdem andere Transporte (HTTP, SMTP, etc.) nutzen, die verschiedene andere Formen von Adressen verwenden. Zu beachten ist, dass jeder Knoten viele verschiedene aktive Transport-Dienste zur gleichen Zeit haben kann; und, dass jeder dieser verschieden Adressen besitzen kann. Anbindungs-Adressen verfallen nach höchstens einer Woche (Die Zeitüberschreitung kann kürzer sein, wenn der Nutzer seinen Knoten angemessen konfiguriert). Dieser Verfall garantiert, dass das Netzwerk gelegentlich veraltete Ankündigungen los wird.

Buchführung zur Unterstützung von Ressourcenverteilung
Die meisten P2P-Netzwerke leiden unter einem Fehlen von Verteidigungen Vorsorgemaßnahmen gegenüber Atttacken in Form von "freeloading". Während die Intentionen eines Angreifers und Freeloaders verschieden sind, so ist ihr Effekt auf das Netzwerk der gleiche; beide machen es nutzlos. Die meisten einfachen Angriffe auf Netzwerke wie Gnutella umfassen ein Fluten des Netzwerks mit Traffic ("Flooding"), genauer mit Anfragen, die, im schlimmsten Fall durch das Netzwerk vervielfacht werden.

Um sicherzustellen, dass Freeloader oder Angreifer eine minimale Einwirkung auf das Netzwerk haben, versucht GNUnet zwischen guten (beitragenden) und bösartigen (freeloadenden) Knoten zu unterscheiden. In GNUnet behält jeder Knoten Übersicht über das Verhalten jedes anderen Knotens, mit dem er in Kontakt ist. Viele Anfragen (abhängig von der Anwendung) werden mit einem Prioritätslevel übermittelt. Diese Priorität wird benutzt, um festzusetzen was der Sender glaubt, wie wichtig die Anfrage von ihm sei. Wenn ein Peer auf eine wichtige Anfrage antwortet, wird der Empfänger das Vertrauen in den Antwortenden erhöhen: Der Antwortende spendet Ressourcen. Wenn ein Peer zu beschäftigt ist, um alle Anfragen zu beantworten, muss er priorisieren. Dafür nehmen Peers die Prioritäten der Anfragen, die mit Nennwert empfangen wurden. Zunächst überprüfen sie, wie sehr sie dem Sender vertrauen. Abhängig vom Betrag des Vertrauens weisen sie der Anfrage eine (möglicherweise niedrigere) effektive Priorität zu. Dann lassen sie die Anfragen mit der niedrigsten effektiven Priorität fallen, um ihre Ressourcen-Auflagen abzugelten. Auf diesem Weg sichert GNUnets ökonomisches Modell, dass Knoten, die momentan in Betracht gezogen werden einen Überschuss an Beiträgen zu besitzen, nicht bedient zu werden wenn die Netzwerklast zu hoch ist.

Vertraulichkeit
Feinde außerhalb von GNUnet sollen nicht wissen dürfen, an welcher Art von Aktionen ein Peer beteiligt ist. Nur die spezifischen Nachbarn eines Peers, der korrespondierende Sender oder Empfänger einer Nachricht, dürfen den Inhalt wissen; und selbst die Applikations-Protokolle dürfen weitere Restriktionen auf dieses Wissen anwenden. Um Vertraulichkeit zu garantieren nutzt GNUnet Link-Verschlüsselung, das heißt, jede zwischen zwei Peers ausgetauschten Nachrichten ist durch ein Schlüsselpaar verschlüsselt, das nur diese beiden Peers kennen. Verkehr auf diese Art zu verschlüsseln macht Traffic-Analyse wesentlich schwieriger. Natürlich könnte es - für manche Anwendungen - trotzdem wünschenswert sein, wenn selbst Nachbarn den konkreten Inhalt zwischen diesen beiden Peers nicht bestimmen können. In GNUnet wird dieses Problem mit durch spezifische Protokolle auf Anwendungsebene adressiert (siehe z.B. Abstreitbarkeit und Anonymität in anonymem File Sharing).

Anonymität
Nutzern Anonymität bereitzustellen, ist das zentrale Ziel eines anonymen File-Sharing-Programms. Viele andere Design-Entscheidungen treten in die Fußstapfen dieser Anforderung. Anonymität ist niemals absolut. Während es verschiedene wissenschaftliche Metriken gibt, die helfen können den Grad an Anonymität zu quantifizieren, den ein gegebener Mechanismus bietet, so gibt es keine Sache wie komplette Anonymität. GNUnet erlaubt es Nutzern, für jede gewählte Operation (Veröffentlichen, Suchen, Herunterladen) den gewünschten Anonymitätsgrad selbst zu bestimmen. Die verwendete Metrik ist der Betrag an verdeckendem Verkehr ("cover traffic"), um eine Anfrage zu verstecken. Während diese Metrik nicht so gut ist wie z.B. die theoretische Metrik in "scientific metrics", so ist sie vermutlich die beste verfügbare Metrik für einen Peer mit einer rein lokalen Sicht auf die Welt, die auf unzuverlässige externe Informationen angewiesen ist. Der Standard-Grad an Anonymität ist 1, welcher anonymes Routing nutzt, aber keine minimalen Anforderungen an cover traffic stellt. Es ist möglich, auf Anonymität zu verzichten wenn diese nicht benötigt wird. Der Anonymitätsgrad 0 erlaubt es GNUnet, effizienteres, nicht-anonymes Routing anzuwenden.

Wie GNUnet Anonymität erreicht
Entgegen anderen Designs glauben wir nicht, dass Nutzer starke Anonymität nur dadurch erhalten, dass ihre Anfragen durch einige Umwege verschleiert sind. Dies genügt nicht, wenn der Widersacher Traffic-Analysen benutzt. Das für anonymes File Sharing genutzte Thread-Modell nimmt an, dass der Widersacher recht machtvoll sei. Insbesondere nehmen wir an, dass der Widersacher den gesamten Verkehr im Internet sehen kann. Und während wir annehmen, dass der Widersacher die Verschlüsselung nicht durchbrechen kann, unterstellen wir dem Widersacher trotzdem, dass er viele teilnehmende Knoten im Netzwerk hat und er darum viele Knoten-zu-Knoten-Interaktionen sehen kann da er manche dieser Knoten kontrolliert.

Das System bemüht sich darum, Anonymität basierend auf der Idee zu erreichen, dass Nutzer anonym sein können wenn sie ihre Aktionen im (durch andere Nutzer erzeugten) Verkehr verstecken können. Aktionen im Verkehr anderer Nutzer zu verstecken verlangt die Teilnahme am Verkehr, was die traditionelle Technik der Umwege und des "source rewriting" zurückbringt. "Source rewriting" wird benötigt um Anonymität zu gewinnen, ansonsten könnte ein Widersacher sagen, ob eine Nachricht von einem Host ausgeht, indem er auf die Quell-Adressen schaut. Wenn alle Pakete so aussehen als stammten sie von einem Knoten ab, kann der Widersacher nicht sagen, welches von welchem Knoten abstammt und welche weitergeleitet wurden. In diesem Szenario ist zu beachten, dass jeder Knoten sich entscheiden kann, das "source-rewriting"-Paradigma nicht einzuhalten, ohne das Protokoll zu verletzen, da dies nur den Betrag an Verkehr reduziert, in dem ein Knoten seinen eigenen Verkehr verstecken kann.

Wenn wir unsere Aktionen im Verkehr anderer Knoten verstecken wollen, müssen wir unseren Verkehr ununterscheidbar vom Verkehr machen, den wir für andere weiterleiten. Da unsere Anfragen uns als Empfänger der Antwort haben müssen (ansonsten würden sie nutzlos sein), müssen wir uns selbst als Empfänger der Antworten setzen, die tatsächlich zu anderen Hosts gehen; in anderen Worten, wir müssen Antworten Umwege machen lassen. Anders als in anderen Systemen müssen wir im anonymen File Sharing wie in GNUnet implementiert, Antworten nicht umleiten, wenn wir nicht denken, dass wir mehr Verkehr benötigen, um unsere Aktionen zu verstecken.
Dies erhöht die Effizienz des Netzwerks, da wir so weniger unter höherer Last umleiten können.

Abstreitbarkeit
Selbst wenn der Nutzer, der Daten herunterlädt und der Server, der Daten bereitstellt anonym sind, könnten die Vermittler noch Ziele darstellen. Insbesondere wenn der Vermittler herausfinden kann welche Anfragen oder welchen Inhalt sie verarbeiten, könnte ein starker Angreifer versuchen, sie dazu zu wingen bestimmtes Material zu zensieren.

Durch die von GNUnets anonymen File Sharing verwendete Datei-Verschlüsselung ergibt sich dieses Problem nicht. Der Grund dafür ist, dass Anfragen und Antworten in einem verschlüsselten Format übermittelt werden, sodass Vermittler nicht sagen können, was die Anfrage ist oder um welchen Inhalt es sich handelt. Zu beachten ist, dass dies nicht die gleiche Verschlüsselung wie die Link-Verschlüsselung zwischen den Knoten ist. GNUnet besitzt Verschlüsselung auf Netzwerk-Ebene (Link-Verschlüsselung, Vertraulichkeit, Authentifikation) und wiederum auf Anwendungs-Ebene (bereitgestellt durch gnunet-publish, gnunet-download, gnunet-search und gnunet-gtk).

Hier werden die Funktionen von GNUnet noch genauer erklärt:
https://ng.gnunet.org/de/concepts