Freenet

From
Revision as of 14:07, 7 March 2006 by Nico (talk | contribs) (Architektur angefangen)
Jump to navigation Jump to search

Gliederung

Einleitung

Geschichte

Kurze Zusammenfassung der wichtigsten Daten

  • 1999 Erstes Paper: "Freenet: A Distributed Anonymous Information Storage and Retrieval System" von Ian Clarke, Oskar Sandberg, Brandon Wiley, Theodore W. Hong
  • 2000 Version 0.1 der Implementatierung in Java (GPL)
  • 2002 gemeinnützige "The Freenet Project Inc." beschäftigt einen Vollzeitprogrammierer -- finanziert durch Spenden
  • 2006 Version 0.7: komplette Neuimplementierung
  • bisher mehr als 2 Mio Downloads, aber wahrscheinlich deutlich weniger aktive Teilnehmer
  • sehr aktive Weiterentwicklung

Philosophie und Ziele

Die Allgemeine Erklärung der Menschenrechte, Artikel 19

Jeder hat das Recht auf Meinungsfreiheit und freie Meinungsäußerung; dieses Recht schließt die Freiheit ein, Meinungen ungehindert anzuhängen sowie über Medien jeder Art und ohne Rücksicht auf Grenzen Informationen und Gedankengut zu suchen, zu empfangen und zu verbreiten.

Negativbeispiele hierbei sind autoritäre Staaten wie China, Indonesien,... Anonyme Kommunikation ist dort Voraussetzung für freie Meinungsäußerung und freien Informationszugriff, weil nur so ein Schutz vor Verfolgung sicher gestellt werden kann.

Aber auch in der EU gibt es bedenkliche Bestrebungen: Die Richtlinie zur Vorratsdatenspeicherung von Telekommunikatiosverbindungsdaten wird, sobald umgesetzt, unter dem Vorwand der Terrorismusbekämpfung das Fernmeldegeheimnis quasi aushebeln und die Unschuldsvermutung umkehren, da die Daten aller Bürger vorsorglich für 6 Monate gespeichert werden.

Motivation des Projektes

Ziele:

  • Anonymität: Schutz von Erzeuger, Konsumenten und beteiligten Dritten (Zwischenstationen) vor Verfolgung durch Verschlüsselung und Routing
  • Pseudonymität durch digitale Signaturen
  • Resistenz gegen Zensur (Löschung von Dokumenten soll unmöglich sein), Verfügbarkeit und Zuverlässigkeit durch Dezentralisierung und Redundanz (Robustheit bei bösartigen / ausfallenden Knoten)
  • effizient und skalierbar bei Speicherung und Routing -- Performance zweitrangig, aber soll gut skalieren und sich an Nachfrage nach best. Daten anpassen

Freenet will und kann aber keine Konkurrenz zu "traditionellen" Filesharing-Netzen sein.

Architektur

Übersicht

Freenet ist ein verteiltes Speichersystem mit Replizierung der Daten. Es besteht aus Knoten, die jeweils einen (verschlüsselten) Cache für zu speichernde Dateien bereithalten, den sog. Date Store. Dabei werden dort (im Gegensatz zu Tauschbörsen) nicht nur Dateien gespeichert, die der User selbst angefordert bzw. eingefügt hat. Auch hat der User keinen Einfluss darauf, was bei ihm gespeichert wird und weiß das auch nicht unmittelbar (der Date Store ist verschlüsselt!).

Schlüssel

Dateien werden in Freenet durch verschiedene Schlüssel identifiziert. Hier eine Übersicht:

Schlüssel Content Hash Key (CHK) Signed Subspace Key (SSK) Keyword Signed Key (KSK)
Beschreibung CHKs sind die eindeutigen Bezeichner von Dateien in Freenet, vergleichbar mit Inodes in Dateisystemen. Sie werden aus dem SHA1-Hash des Inhalts der (verschlüsselten) Datei erzeugt und werden base64-kodiert (in einer modifizierten Variante, die nur die Zeichen a-z, A-Z, -, ~ zulässt. Beim Referenzieren von CHKs wird zugleich der Schlüssel zum Entschlüsseln der Datei mit angegeben und optional kann auch noch ein Dateiname vergeben werden, den der Browser dann beim Speichern der Datei benutzen kann. Beim Suchen von Dateien wird nur der Hash der (verschlüsselten) Datei benötigt und auch nur dieser verwendet. SSKs bieten einen persönlichen Namensraum, in dem jeder lesen jedoch nur der Autor schreiben kann, und für Menschen lesbare und verwertbare Informationen zum erwarteten Dateiinhalt. Ein Subspace (eines Autors) wird durch ein Public-Private-Keypair identifiziert, den der Autor einmalig generieren muss. Die SSK selber ist dabei der base64-kodierte (SHA1-)Hash vom Hash des Public-Key und dem Hash des Dokumentnamens. Zum Referenzieren von Dateien wird somit der Public-Key und der Dokumentenname (bzw. Beschreibung des Dokuments) zur Erstellung der SSK benötigt, die dann beim Suchen im Netzwerk übermitelt wird. Zur Verschlüsselung der Datei wird die Beschreibung (zusammen mit der optionalen Entropie (eine zufällige Zeichenkette)) genutzt. Die Datei wird mit dem privaten Schlüssel signiert und diese Signatur sowie der Public-Key wird zusammen mit der Datei im Netzwerk gespeichert.
Beispiel
CHK@AGP9Hnwh5q7lA3SEBd0N0eNvfwMKAwI,l1-Yast1r9sOB5DqH0CFsA
SSK@rBjVda8pC-Kq04jUurIAb8IzAGcPAgM/TFE//
KSK@gpl.txt
Aufbau
CHK@<hash(encrypted data)>,<Encryption Key>[/filename.ext]
SSK@<public key>PAgM[Entropy]/<Description>
KSK@Description
Vorteile
  • jede Datei wird nur einmal gespeichert (unter einem Namen / CHK)
  • geringe Wahrscheinlichkeit von Kollisionen
  • keine Größenbeschränkung der referenzierten Datei
  • einfache Verifikation der Datei möglich
  • Keys können nicht „entführt” werden
  • geringe Wahrscheinlichkeit von Kollisionen (aufpassen: Entropy beeinflusst die SSK nicht)
  • ermöglichen (theoretisch) Updates von Dateien, da der SSK nicht vom Dateiinhalt abhängig ist
Nachteile
  • CHK ist erst nach dem einfügen bekannt
  • CHK ist nicht menschenlesbar (und insb. schlecht zu merken)
  • keine Updates von Dateien möglich, da die CHK sich aus dem Hash des Inhaltes ergibt und sich dann ändert
  • Einfügeoperationen sind komplizierter (dabei helfen dann Tools)

Routing

Netztopologie

Diskussion

Performance

Zeitliche Entwicklung der Anfragedauer (hops) eines zufällig verbundenen Netzes von Freenet-Knoten (verbunden in einem Ring mit einigen zufälligen zusätzlichen Verbindungen) mit zufälligen Anfragen über die Zeit.

Als wichtigstes Maß für die Performance dient die Anzahl der Hops, die eine Anfrage bis zum Ziel (und die gefundene Datei zurück zum Suchenden) benötigt.

Auf Grund des (gewollten) Aufbaus des Netzwerkes ist es relativ schwierig, diese zuverlässig zu bestimmen: Einerseits sind formale Komplexitäts-Beweise auf Grund der komplizierten Struktur schwierig, andererseits entzieht sich das existierende Netzwerk im Internet sehr erfolgreich dem Blick seiner Schöpfer. Aus diesen Gründen ist die Simulation das vielversprechendste Mittel, um einen globalen Einblick zu erhalten.

Entwicklung der Request-Pfadlänge (hops) in einem wachsenden Netzwerk (ständig werden zufällige Dateien abgefragt, neue Knoten und neue Datien kommen mit der Zeit dazu).

Die Simulation ergab eine Komplexität von etwa . Danach sollte Freenet für eine Million Knoten eine mittlere Pfadlänge von 30 Hops erreichen. Praktisch kann dieser Wert in beide Richtungen variieren, da einerseits von Dateien möglicherweise mehr Replikate vorkommen als in der Simulation (das würde die Länge verkürzen), andererseis könnten zu volle Routing-Tabellen die Pfadlängen erhöhen.

Security

Anonymiät

Die gewährleistete Anonymität ist grundsätzlich schwächer als bei z.B. Onion Routing (siehe [Mixmaster]), wenn ein Angreifer hinreichend viele Nachbarknoten des Ziels kontrolliert.

Um zweifelsfrei zu beweisen, dass ein bestimmter Knoten eine bestimmte Datei angefordert oder eingefügt hat, muss der Angreifer jedoch alle empfangenen und Nachrichten kennen, denn da das Quellfeld eine Anfrage gelegentlich auf die Adresse eines routenden gesetzt Knotens wird, ist sonst nicht zweifelsfrei klar, ob der Zielknoten wirklich der Ursprung einer Anfrage ist.

Wegen der Transportverschlüsselung müsste er alle Nachbarknoten kontrollieren, bloßes Mitlesen des Traffics genügt nicht. Die Verschleierung der Nachrichtengröße durch Padding verhindert Schlüsse aus der Nachrichtenlönge. Da zudem der Inhalt der Dateien verschlüsselt ist, kann der Angreifer selbst bei Überwindung der Transportverschlüsselung keine Analyse des Inhaltes o.ä. vornehmen, sondern muss vorneweg die Keys der von ihm gesuchten Dateien kennen.

Die reine Teilnahme am Netz kann jedoch (noch) nicht (durch Steganographie o.ä.) verschleiert werden, was z.B. in China ein Problem darstellt.

Für zukünftige Versionen ist es geplant, Onion Routing als Feature zur Überwindung der ersten Nachbarknoten hinzuzufügen.

Verfügbarkeit und Integrität

Die Verfügbarkeit von Dateien ist nur einschränkbar, wenn der Angreifer über Resourcen etwa in der Größenordnung (Bandbreite, Anzahl Knoten) des gesamten Netzes verfügt.

Das gezielte Entfernen einer unerwünschten Datei ist nicht möglich, denkbar wäre es aber, das Netzwerk mit sehr viel "Müll", d.h. unsinnigen Dateien zu fluten und selbige durch enorm viele Requests zu verteilen und damit andere Dateien aus den Knoten zu verdrängen (Cache Replacement). Das könnte man jedoch durch Mittel wie [HashCash] erschweren.

Da individuelle Knotenbetreiber natürlich Kontrolle darüber haben, welche Dateien (Keys) ihre Knoten anbieten, wäre Zensur auf Basis eines allgemeinen Konsens (Key-Blacklists) dennoch möglich.

Anzumerken wäre noch, dass die Robustheit des Netzes im Gegensatz zu z.B. proprietären Filesharing-Netzen nicht auf dem Prinzip "Security by Obscurity", d.h. geheimen Protokollen, basiert, sondern bewusst pessimistischen Annahmen (was natürlich nicht ausschließt, dass in Zukunft Verwundbarkeiten bekannt werden).

Request-Pfadlänge über den Anteil der ausgefallenden Knoten. Das Small World Model ermöglicht eine hohe Ausfalltoleranz, weil zufällig verteilte Ausfälle mit sehr großer Wahrscheinlichkeit Konten aus der relativ schwach verbundenen Mehrheit treffen.
Die Größe der größten Zusammenhangskomponente bei zufälligem Ausfall und bei gezieltem Ausschalten der am stärksten verbundenen Knoten.

Selbst wenn ein Drittel der Knoten plötzlich ausfällt, ist der Großteil der Dateien immernoch verfügbar.

Probleme

Freenet befindet sich, obwohl es durchaus benutzbar ist und benutzt wird, immernoch in einer frühen Entwicklunsphase. Deshalb sollte man sich auch einiger bisher offener Probleme bewusst sein:

  • es gibt bisher keine "Suchmaschine" und wird sie auch in absehbarer Zeit nicht geben. Als Behelf dienen regelmäßig aktualisierte Verzeichnisse (Index-Freesites) oder die Weitergabe von Keys auf einem externen Weg (z.B. persönlich).
  • Dateien können nicht gelöscht werden, auch nicht vom "Eigentümer" (ist aber auch eine gewollte Eigenschaft)
  • von Gegnern wird oft angeführt, dass Freenet ein "Hort" für ungewollten Content wie bspw. Kinderpornografie, Bombenbauanleitungen u.ä. ist
  • Updates von Dateien sind nur über etwas unschöne Umwege möglich (Date Based Redirects)

Zudem gibt es in der praktischen Benutzung noch einige kleinere, aber umgehbare Schwierigkeiten, die jedoch neuen Benutzern den Einstieg erschweren

  • eine vertrauenswürdige initiale Knotenliste ist überaus wichtig, damit neue Nutzer nicht in ein separates, kontrolliertes Netz 'entführt' werden. Bisher wird die Liste aber von der Projekthomepage [[1]] zentral abgeholt. Besser wäre es, die Liste von einer vertrauenswürdigen Person zu beziehen.
  • die langen Ladezeiten (Minutenbereich) erschweren die Benutzung des Webinterfaces FProxy, da die meisten Browser in der Werkseinstellung nur recht wenige gleichzeitige Verbindungen öffnen (<20)
  • Freenet ist gerade am Anfang oft sehr langsam, wenn der neue Knoten nur wenige Bekanntschaften hat. Dies kann durch eine große initiale Knotenliste abgefedert werden (die Knoten in der zentralen Knotenliste auf der Projektseite sind jedoch oft überlastet).

momentaner Status

Im Moment (März 2006) wird in naher Zukunft Version 0.7 erwartet, die einige größere Neuerungen mitbringt:

  • es wird möglich sein ein skalierbares sog. Darknet aufzubauen, bei dem der eigene Knoten nur mit auserwählten, vertrauenswürdigen Knoten kommuniziert
  • es soll ein schneller Broadcast implementiert werden für anonyme Chats / RSS Feeds
  • die Datei/Block-größen werden festgelegt auf 1kByte oder 32kBytes. Größere Dateien werden auf mehrere Keys aufgeteilt (wei bisher schon)
  • Die Schlüssellänge wird von 128bit auf 256bit erhöht

weitere Features sind geplant, aber noch nicht in Sichtweite:

  • Pre-Mix-Routing: Anfragen werden nach dem Onion-Routing-Prinzip zuerst über einige Knoten weiter geleitet, bevor sie als offizielle Freenet-Anfrage starten. Damit kennt der erste Nachbar zwar den Sender aber nicht den Inhalt, der letzte in der Kette zwar den Inhalt aber nicht die Quelle.
  • Steganographie zum Verstecken des Freenet-Protokolls

ergänzende Links

Auf dem 22C3 haben Oskar Sandberg und Ian Clake einen Vortrag über die Neuerungen in Version 0.7 gehalten. Dazu gibt es