- Freenet-China
-
Freenet ist ein weltweites Netz aus Rechnern, dessen Ziel darin besteht, Daten verteilt zu speichern und dabei Zensur zu vereiteln und anonymen Austausch von Informationen zu ermöglichen.
Dieses Ziel soll durch Dezentralisierung, Redundanz, Verschlüsselung und dynamisches Routing erreicht werden.
Freenet wird als freie Software unter der GPL entwickelt. Es ist nach Einstufung der Entwickler eine Testversion und wird dies auch noch lange nach 2007 bleiben.
Inhaltsverzeichnis
Geschichte
1999 beschrieb der irische Student Ian Clarke in einer Abhandlung ein „verteiltes dezentrales Informationsspeicher- und -abrufsystem“.[1] Kurz nach der Veröffentlichung begannen Clarke und eine kleine Zahl Freiwilliger, diese Idee als freie Software umzusetzen.
Im März 2000 war die erste Version bereit für die Veröffentlichung. In der folgenden Zeit wurde viel über Freenet berichtet, hauptsächlich beschäftigten die Presse dabei aber die Auswirkungen auf Urheberrechte und weniger das Ziel der freien Kommunikation. Auch die akademische Welt beschäftigte sich mit Freenet: Clarkes Abhandlung war laut CiteSeer das meistzitierte wissenschaftliche Dokument im Jahr 2000.
Freenet wird mit Hilfe des Internets verteilt entwickelt. Das Projekt gründete die gemeinnützige „The Freenet Project Inc.“ und beschäftigt seit September 2002 Matthew Toseland als Vollzeitprogrammierer, der von Spendengeldern und dem Erlös von Ablegerprodukten bezahlt wird. Darüber hinaus arbeiten andere frei mit.
Im Januar 2005 wurde geplant, die nächste Version, Freenet 0.7, komplett neu zu schreiben. Mitte April 2005 brachten die Entwickler von Freenet erstmals auf der offenen Mailingliste ins Gespräch, Freenet als so genanntes Darknet zu gestalten, das heißt, dass der Zugang nur auf „Einladung“ bestehender Teilnehmer erfolgen kann. (Für Einzelheiten siehe Abschnitt Darknet.) Dieses Element ist die wichtigste Neuerung in 0.7.
Die Idee hinter dem geplanten Freenet 0.7 wurde daraufhin von Ian Clarke und dem Mathematiker Oskar Sandberg auf zwei Hackerveranstaltungen präsentiert, am 29. Juli 2005 bei der 13. DEF CON und am 30. Dezember 2005 auf dem 22. Chaos Communication Congress (22C3).[2][3]
Anfang April 2006 wurde die erste Alpha-Version von Freenet 0.7 veröffentlicht.
Sonstiges
Bis Ende 2003 hat eine Gruppe namens Freenet-China das Programm ins Chinesische übersetzt und es in der Volksrepublik China auf CDs und Disketten verbreitet.[4] Die chinesischen Computer- und Internet-Filter sperren das Wort „Freenet“ (Stand: 30. August 2004).[5] Internetverbindungen Freenets werden für die Versionen vor 0.7 blockiert. Dies war möglich, weil bis dahin zu Beginn eines Verbindungsaufbaus einige vorhersagbare Bytes entstanden.
Eine im Mai 2004 veröffentlichte Analyse besagt, dass die meisten Freenet-Nutzer zu diesem Zeitpunkt aus den USA (35 %), Deutschland (15 %), Frankreich (11 %), Großbritannien (7 %) und Japan (7 %) kamen.[6] Diese Analyse gründet sich wahrscheinlich auf die IP-Adressliste der Teilnehmer, die für die Versionen vor 0.7 vom Projekt bereitgestellt wurde, und berücksichtigt somit keine separaten Freenet-Netzwerke wie Freenet-China.
Kontroverse
Während Freenet einerseits unterdrückten Menschen ermöglicht, sich mit anderen frei auszutauschen, ermöglicht es andererseits auch die Verbreitung und den Zugang zu kontroversen Informationen und Inhalten, die in vielen Staaten illegal sind.
Die Argumentation der Befürworter Freenets gestaltet sich wie folgt:
- Wissen ermöglicht es, bessere Entscheidungen zu treffen. Demokratie geht von einer gut informierten Bevölkerung aus. Damit die Demokratie effektiv bleibt, darf also der Informationsfluss nicht kontrolliert werden.
- Trotz eventueller positiver Aspekte von Zensur darf diese nicht ermöglicht werden, da diejenigen, die „gute“ Zensur ausüben können, wenn notwendig auch „schlechte“ Zensur ausüben können. Ferner kann sogar „gute“ Zensur kontraproduktiv sein, denn Überzeugung ist ohne die Widerlegung von Gegenargumenten weniger effektiv.
- Anonymität ist wichtig, da Meinungsfreiheit ohne die Möglichkeit der Anonymität nicht bestehen kann. Meinungsträger könnten sonst hinterher bestraft werden. Durch elektronische Unterschriften kann auch anonymen Informationen vertraut werden.
Die Kritiker Freenets sind nicht bereit, so eine radikale Entscheidung zugunsten vollkommener Freiheit zu treffen. Insbesondere die Konfrontation mit allgemein als inakzeptabel anerkannten Inhalten wie Terrorismusvorbereitung und Kinderpornografie im Freenet entfaltet eine abschreckende Wirkung auf manche Anwender.
Individuelle Zensur
Während Freenet in seiner Gesamtheit nicht zensierbar ist, besteht die Möglichkeit, dass einzelne Knotenbetreiber Anfragen nach bestimmten Inhalten nicht verarbeiten und somit an der Verbreitung nicht selbst „beteiligt“ sind.
Diese Möglichkeit einer schwarzen Liste ist nicht im offiziellen Programm enthalten, kann aber, da der Quellcode öffentlich ist, dazuprogrammiert werden. Dies ist für die aktuelle Version 0.5 bereits geschehen.
Freenet wird in seiner nächsten größeren Version 0.7 (siehe Zukunft) darauf reagieren und bei einzelnen Anfragen zensierende Knoten „umschiffen“. Es wird aber weiterhin möglich sein, den eigenen Knoten an der Verbreitung ausgewählter Inhalte nicht zu beteiligen und trotzdem das Netz ohne Einschränkungen zu benutzen.
Benutzung
Jeder Anwender stellt Freenet einen Teil seiner Festplatte als Speicher zur Verfügung. Man gibt hierbei nicht bestimmte Ordner oder Dateien für die anderen frei, wie das beim üblichen Filesharing der Fall ist, sondern reserviert einen bestimmten Anteil an Festplattenspeicher (in der Größenordnung von Gigabyte), den Freenet selbstständig mit Daten aus dem Netz belegt.
Die Benutzung von Freenet ist mit der des World Wide Web (WWW) vergleichbar. Mittels eines beliebigen Browsers kann, wie vom WWW gewohnt, im Freenet gesurft werden. Das Programmmodul FProxy arbeitet als lokales Server-Programm und ist im Allgemeinen unter http://localhost:8888/ erreichbar. Von dieser Einstiegsseite aus kann man einzelne Freenet-Adressen anfordern oder hochladen, außerdem werden Links zu einer kleinen Anzahl Freesites bereitgestellt, die als erste Anlaufstelle im Freenet dienen.
Eine Freesite stellt für Freenet in etwa das gleiche dar, was Websites für das WWW darstellen. Es sind Dokumente, die durch das Freenet-Gateway zugänglich werden. Sie können Links zu anderen Freesites oder zu sonstigen Daten beinhalten, welche durch einen Freenet-Schlüssel erreichbar sind.
Mithilfe sogenannter Activelinks kann die Verbreitung ausgewählter Freesites gefördert werden. Bindet man auf der eigenen Freesite ein kleines Bild einer anderen Freesite ein, so wird diese automatisch gefördert, wenn die eigene Freesite (und damit das Bild) geladen wird.
Das Laden von Inhalten dauert verhältnismäßig lange, da Freenet die Prioritäten bei der Sicherheit setzt. Besonders am Anfang kann es mehrere Minuten dauern, da der Teilnehmer noch nicht gut in das Freenet-Netz integriert ist. Erst durch die Integration lernt das Programm, an welche anderen Teilnehmer am besten Anfragen versendet werden können.
Anwendungsgebiet
Neben der schlichten Veröffentlichung von Informationen eignet sich Freenet zur zeitversetzten Kommunikation, das heißt, sowohl eine Art E-Mail-System als auch Diskussionsforen können sinnvoll auf Freenet aufbauen.
Suchmaschinen, wie sie im WWW funktionieren, gibt es in Freenet nicht. Stattdessen führen einige Autoren Index-Seiten – Listen, die aus Links zu anderen Freesites bestehen. Diese Index-Seiten werden von ihren jeweiligen Autoren meistens mit Hilfe sogenannter Spider, die ähnlich wie Webcrawler funktionieren, erstellt. Sie sind eine Art von Suchmaschinen, die Freesites nach Links durchsuchen, diese Links besuchen, und falls es wiederum Freesites sind, diese dann ebenfalls durchsuchen und so weiter. Die Ergebnisse speichern sie dann und erzeugen daraus die oben genannten Listen.
Ein sehr verbreiteter Typ von Freesites sind Blogs (Weblogs), die von den Freenet-Nutzern analog als „Flogs“ (Freelogs) bezeichnet werden. Ein besonderer Anreiz für die Einrichtung ist die Anonymität, mit der man seine Berichte im Freenet veröffentlichen kann.
Software für Freenet
Für das Hochladen von Daten gibt es spezielle Software, die insbesondere den Austausch größerer Dateien erleichtert. Diese werden intern in kleine Stücke zerlegt (Splitfiles) und gegebenenfalls mit redundanten Datenblöcken versehen (Fehlerkorrektur).
Technische Einzelheiten
Funktionsweise
Alle Inhalte werden in so genannten Schlüsseln gespeichert. Der Schlüssel ergibt sich eindeutig aus dem Hash-Wert des enthaltenen Inhalts und hat vom Aussehen her nichts mit dem Inhalt zu tun. (Zum Beispiel könnte eine Textdatei mit dem Grundgesetz den Schlüssel YQL haben.)
Jeder Teilnehmer speichert nicht etwa nur die Inhalte, die er selbst anbietet. Stattdessen werden alle Inhalte auf die verschiedenen Rechner – die so genannten Knoten (engl. nodes) – verteilt. Die Auswahl, wo eine Datei gespeichert wird, erfolgt durch Routing. Jeder Knoten spezialisiert sich mit der Zeit auf bestimmte Schlüsselwerte.
Die Speicherung auf dem Rechner erfolgt verschlüsselt und ohne Wissen des jeweiligen Nutzers. Diese Funktion ist von den Entwicklern eingeführt worden, um den Freenet-Benutzern die Möglichkeit zu geben die Kenntnis der Daten glaubhaft abstreiten zu können, die in dem für Freenet reservierten lokalen Speicher zufällig für das Netz bereitgehalten werden.[7] Bisher sind allerdings in der Rechtsprechung zumindest in Deutschland keine Fälle bekannt, in denen von der Möglichkeit Gebrauch gemacht wurde, die Kenntnis abzustreiten, so dass die Wirksamkeit dieser Maßnahme vor deutschen Gerichten nicht geklärt ist.
Wenn eine Datei aus dem Freenet heruntergeladen werden soll, wird sie mit Hilfe des Routing-Algorithmus gesucht. Die Anfrage wird an einen Knoten geschickt, dessen Spezialisierung dem gesuchten Schlüssel möglichst ähnlich ist.
Beispiel: Wir suchen den Schlüssel HGS. Wir sind mit anderen Freenet-Knoten verbunden, die die folgenden Spezialisierungen haben: ANF, DYL, HFP, HZZ, LMO. Wir wählen HFP als Adressaten unserer Anfrage, da dessen Spezialisierung dem gesuchten Schlüssel am nächsten kommt.
Wenn der Adressat den Schlüssel nicht in seinem Speicher hat, wiederholt er die Prozedur, als ob er selbst den Schlüssel haben wollte: Er schickt die Anfrage weiter an den Knoten, der seiner Meinung nach am besten darauf spezialisiert ist.
Und so geht es weiter. Wenn ein Knoten schließlich über die gesuchte Datei verfügt, wird diese vom Fundort zum ursprünglichen Anfrager transportiert. Aber dieser Transport erfolgt über alle an der Anfrage-Kette beteiligten Knoten. Diese Gestaltung ist ein zentrales Merkmal von Freenet. Sie dient dazu, die Anonymität von Quelle und Empfänger zu wahren. Denn so kann man, wenn man selbst eine Anfrage erhält, nicht wissen, ob der Anfrager die Datei selbst haben oder nur weiterleiten will.
Wenn die Datei übertragen wird, speichern einige Rechner eine Kopie in ihrem Speicher. Beliebte Dateien gelangen so auf viele Rechner im Freenet-Netz. Damit steigt die Wahrscheinlichkeit, dass weitere Anfragen nach dieser Datei schneller erfolgreich sind.
Eine Datei ins Freenet hochzuladen, funktioniert ganz ähnlich: Freenet sucht auch hier den Knoten, dessen Spezialisierung dem Schlüssel am nächsten kommt. Das ist sinnvoll, damit die Datei dort ist, wo auch die Anfragen nach solchen Schlüsseln hingeschickt werden.
Da es beim Hochladen nicht darum geht, nach einigen Weiterleitungen jemanden mit den Daten zu finden, wird vorher ein Wert gesetzt, wie oft weitergeleitet wird.
Probleme
Damit Freenet funktioniert, benötigt man neben dem Programm selbst die Adresse mindestens eines anderen Benutzers. Das Projekt unterstützt die Integration neuer Knoten, indem es eine aktuelle Sammlung solcher Adressen (seednodes) auf seinen Seiten anbietet. Wenn dieses Angebot jedoch verschwindet oder für jemanden mit eingeschränktem Zugang zum Internet nicht erreichbar ist, wird der erste Verbindungspunkt zum Problem. Darüber hinaus ist es aus Gründen der Sicherheit und der Netz-Topologie eher wünschenswert, wenn private Seednodes im Freundeskreis verbreitet werden.
Knoten mit geringer Geschwindigkeit, asynchroner Verbindung oder kurzer Lebensdauer können den Datenfluss behindern. Hier versucht Freenet durch intelligentes Routing gegenzusteuern (siehe Routing).
Freenet kann kein permanentes Speichern von Daten garantieren. Da Speicherplatz endlich ist, besteht ein Zielkonflikt zwischen der Veröffentlichung neuer und der Bewahrung alter Inhalte.
Schlüssel
Freenet verfügt über zwei Schlüsseltypen.
Content-hash key (CHK)
CHK ist der systemnahe (low-level) Daten-Speicher-Schlüssel. Er wird erzeugt, indem die Inhalte der Datei, die gespeichert werden soll, gehasht werden. Dadurch erhält jede Datei einen praktisch einzigartigen, absoluten Bezeichner (GUID). Bis Version 0.5/0.6 wird dafür SHA-1 verwendet.
Anders als bei URLs kann man nun sicher sein, dass die CHK-Referenz sich auf genau die Datei bezieht, die man gemeint hat. CHKs sorgen auch dafür, dass identische Kopien, die von verschiedenen Leuten in Freenet hochgeladen werden, automatisch vereinigt werden, denn jeder Teilnehmer berechnet den gleichen Schlüssel für die Datei.
Signed-subspace key (SSK)
Der SSK sorgt durch ein asymmetrisches Kryptosystem für einen persönlichen Namensraum, den jeder lesen, wo aber nur der Besitzer schreiben kann. Zuerst wird ein zufälliges Schlüsselpaar erzeugt. Um eine Datei hinzuzufügen, wählt man zuerst eine kurze Beschreibung, zum Beispiel politik/deutschland/skandal. Dann berechnet man den SSK der Datei, indem die öffentliche Hälfte des Subspace Key und die beschreibende Zeichenkette unabhängig voneinander gehasht werden, die Ergebnisse verkettet werden und das Ergebnis dann wieder gehasht wird. Das Unterschreiben der Datei mit der privaten Hälfte des Schlüssels ermöglicht eine Überprüfung, da jeder Knoten, der die SSK-Datei verarbeitet, deren Signatur verifiziert, bevor er sie akzeptiert.
Um eine Datei aus einem Unternamensraum zu beziehen, braucht man nur den öffentlichen Schlüssel dieses Raums und die beschreibende Zeichenkette, von welchen man den SSK nachbilden kann. Um eine Datei hinzuzufügen oder zu aktualisieren, braucht man den privaten Schlüssel, um eine gültige Signatur zu erstellen. SSKs ermöglichen so Vertrauen, da sie garantieren, dass alle Dateien im Unternamensraum von derselben anonymen Person erstellt wurden. So sind die verschiedenen praktischen Anwendungsgebiete von Freenet möglich (siehe Anwendungsgebiet).
Üblicherweise werden SSKs zur indirekten Speicherung von Dateien verwendet, indem sie Zeiger enthalten, die auf CHKs verweisen, anstatt die Daten selbst zu beinhalten. Diese „indirekten Dateien“ verbinden die Lesbarkeit für den Menschen und die Authentifikation des Autors mit der schnellen Verifizierung von CHKs. Sie erlauben es auch, Daten zu aktualisieren, während die referentielle Integrität erhalten bleibt: Um zu aktualisieren, lädt der Besitzer der Daten erst eine neue Version der Daten hoch, die einen neuen CHK erhalten, da die Inhalte anders sind. Der Besitzer aktualisiert dann den SSK, so dass dieser auf die neue Version zeigt. Die neue Version wird unter dem ursprünglichen SSK verfügbar sein, und die alte Version bleibt unter dem alten CHK erreichbar.
Indirekte Dateien kann man auch dazu verwenden, große Dateien in viele Stücke aufzuspalten, indem jeder Teil unter einem anderen CHK hochgeladen wird und eine indirekte Datei auf alle Teilstücke verweist. Hierbei wird aber auch für die indirekte Datei meist CHK verwendet. Schließlich können indirekte Dateien auch noch dazu verwendet werden, hierarchische Namensräume zu erstellen, bei denen Ordner-Dateien auf andere Dateien und Ordner zeigen.
SSK können auch verwendet werden, ein alternatives Domain Name System für Knoten zu implementieren, die häufig ihre IP-Adresse wechseln. Jeder dieser Knoten hätte seinen eigenen Unterraum, und man könnte ihn kontaktieren, indem sein öffentlicher Schlüssel abgerufen wird, um die aktuelle Adresse zu finden. Solche adress-resolution keys hat es bis Version 0.5/0.6 tatsächlich gegeben, sie wurden aber abgeschafft.
Schutz vor übermäßigen Anfragen
Anfragen und Uploads werden mit einer HTL (engl. Hops to live in Anlehnung an TTL, das heißt: Wie oft darf noch weitergeleitet werden?) ausgestattet, die nach jedem Weiterleiten um 1 verringert wird. Es gibt eine obere Grenze für den Startwert, damit das Netzwerk nicht durch Aktionen mit unsinnig hohen Werten belastet wird. Der derzeitige Wert liegt bei 20: Wenn eine Anfrage nach so vielen Hops kein Ergebnis liefert, ist der Inhalt wahrscheinlich nicht vorhanden - oder das Routing funktioniert nicht, dagegen helfen höhere HTL aber auch nicht. Ähnliches gilt für das Hochladen: Nach 20 Hops sollte eine Information ausreichend verbreitet sein. (Diese Ausbreitung kann durch Abfrage der Daten durchaus noch zunehmen.)
Routing
Bei Freenets Routing wird eine Anfrage von dem verarbeitenden Knoten an einen anderen weitergeleitet, dessen Spezialisierung, nach Einschätzung des Weiterleitenden, dem gesuchten Schlüssel möglichst ähnlich ist.
Damit hat sich Freenet gegen die beiden Hauptalternativen entschieden:
- Ein zentraler Index aller verfügbaren Dateien – das einfachste Routing, zum Beispiel von Napster verwendet – ist wegen der Zentralisierung angreifbar.
- Eine Verbreitung der Anfrage an alle verbundenen Knoten – zum Beispiel von Gnutella verwendet – verschwendet Ressourcen und ist nicht skalierbar.
Die Art und Weise, wie Freenet die Entscheidung trifft, an wen weitergeleitet wird, bildet den Kern des Freenet-Algorithmus.
Altes Routing
Freenets erster Routing-Algorithmus war relativ einfach: Wenn ein Knoten eine Anfrage nach einem bestimmten Schlüssel an einen anderen Knoten leitet und dieser sie erfüllen kann, wird die Adresse eines zurückleitenden Knotens in der Antwort aufgeführt. Das kann – nur möglicherweise – derjenige sein, der die Daten lokal gespeichert hatte. Es wird angenommen, dass der angegebene Knoten eine gute Adresse für weitere Anfragen nach ähnlichen Schlüsseln ist.
Eine Analogie zur Verdeutlichung: Weil dein Freund Heinrich eine Frage zu Frankreich erfolgreich beantworten konnte, dürfte er auch ein guter Ansprechpartner bei einer Frage zu Belgien sein.
Trotz seiner Einfachheit hat sich dieser Ansatz als sehr effektiv erwiesen, sowohl in Simulationen als auch in der Praxis. Einer der erwarteten Nebeneffekte war, dass Knoten dazu tendieren, sich auf bestimmte Schlüsselbereiche zu spezialisieren. Das kann analog dazu gesehen werden, dass Menschen sich auf bestimmte Fachbereiche spezialisieren. Dieser Effekt wurde bei realen Freenet-Knoten im Netzwerk beobachtet; das folgende Bild repräsentiert die Schlüssel, die von einem Knoten gespeichert sind:
Die x-Achse repräsentiert den Schlüsselraum, von Schlüssel 0 bis Schlüssel 2160-1. Dunkle Flächen zeigen an, dass der Knoten dort besser Bescheid weiß. Die dunklen Streifen zeigen Bereiche, wo der Knoten detailliertes Wissen besitzt, wohin Anfragen für solche Schlüssel geroutet werden sollten.
Wenn der Knoten gerade initialisiert worden wäre, wären die Schlüssel gleichmäßig auf den Schlüsselraum verteilt. Das ist ein guter Indikator dafür, dass der Routing-Algorithmus korrekt arbeitet. Knoten spezialisieren sich wie in der Grafik durch den Effekt von Rückmeldungen, wenn ein Knoten erfolgreich auf eine Anfrage nach einem bestimmten Schlüssel antwortet – es erhöht die Wahrscheinlichkeit, dass andere Knoten Anfragen nach ähnlichen Schlüsseln in Zukunft zu ihm leiten werden. Über längere Zeit sorgt das für die Spezialisierung, die im obigen Diagramm deutlich sichtbar ist.
Next Generation Routing (NGR)
NGR soll Routing-Entscheidungen viel geschickter treffen, indem für jeden Knoten in der Routing-Tabelle umfangreiche Informationen gesammelt werden, darunter Antwortzeit beim Anfragen bestimmter Schlüssel, der Anteil der Anfragen, die erfolgreich Informationen gefunden haben, und die Zeit zur Erstellung einer ersten Verbindung. Wenn eine neue Anfrage empfangen wird, werden diese Informationen benutzt, um zu schätzen, welcher Knoten wahrscheinlich die Daten in der geringsten Zeit beschaffen kann, und das wird dann auch der Knoten, zu dem die Anfrage weitergeleitet wird.
DataReply Abschätzung
Der wichtigste Wert ist die Abschätzung bei einer Anfrage, wie lange es dauern wird, die Daten zu bekommen. Der Algorithmus muss die folgenden Kriterien erfüllen:
- Er muss sinnvoll raten können bei Schlüsseln, die er noch nicht gesehen hat.
- Er muss fortschrittlich sein: Wenn die Leistung eines Knotens sich über die Zeit verändert, sollte das repräsentiert sein. Aber er darf nicht übersensibel auf jüngste Fluktuationen reagieren, die stark vom Durchschnitt abweichen.
- Er muss skalenfrei sein: Man stelle sich eine naive Implementierung vor, die den Schlüsselraum in eine Anzahl Sektionen aufteilt und für jede einen Durchschnitt hat. Nun stelle man sich einen Knoten vor, bei dem die meisten der eingehenden Anfragen in einer sehr kleinen Sektion des Schlüsselraums liegen. Unsere naive Implementierung wäre nicht in der Lage, Variationen in der Antwort-Zeit in diesem kleinen Bereich zu repräsentieren und würde daher die Fähigkeit des Knotens beschränken, die Routing-Zeiten genau zu schätzen.
- Er muss effizient programmierbar sein.
Wikimedia Foundation.