GNUnet
Aus Gentoo Linux Wiki
| Installationsmethoden • LiveCDs • Kernel & Hardware • Laptops & Notebooks • Portage • System • Netzwerke & Services • X • Software • Anderes • alphabetischer HOWTO Index |
Diesem Artikel ist eine Todo-Liste in der Diskussionsseite beigefügt. - Du kannst uns helfen, diesen Artikel zu erweitern, indem du die Punkte auf der Liste abarbeitest.
GNUnet ist ein freies Framework für sicheres Peer-to-Peer-Networking, das keine zentralisierten oder anderweitig vertrauten Dienste verwendet.
Eine erste Implementation, die auf der Netzwerk-Schicht aufsetzt, erlaubt anonymes zensur-resistentes Filesharing. GNUnet benutzt ein einfaches, Überschuss-basierendes Modell, um Ressourcen bereitzustellen. Teilnehmer des GNUnet überwachen das Verhalten der anderen in Bezug auf Ressourcengebrauch; Teilnehmer, die zum Netzwerk beitragen werden mit besseren Dienstleistungen belohnt.
GNUnet ist Teil des GNU-Projekts.
Inhaltsverzeichnis |
[Bearbeiten] Anonymität und Sicherheit
[Bearbeiten] Anonymes Routing
Datenpakete (Suchanfragen, Dateiteile) werden nicht direkt von der Quelle zum Ziel gesendet, sondern über mehrere andere Netzwerk-Teilnehmer ("Mittelsmänner" sozusagen) an das Ziel geschickt. So gibt es keine direkte Verbindung zwischen bestimmten Teilnehmern, ihre IP-Adressen bleiben einander und anderen gegenüber unbekannt. Dadurch, dass Pakete weitergeleitet werden, kann niemand wissen, ob ein bestimmter anderer Teilnehmer ein Paket nur weitergeleitet oder selbst auf die Reise geschickt hat (z.B. als Antwort auf eine Suchanfrage).
[Bearbeiten] Vertraulichkeit
Alle Daten im Netzwerk werden verschlüsselt vom Absender zum Empfänger übertragen (Ende-zu-Ende-Verschlüsselung). Niemand (auch keiner der Teilnehmer, die ein Datenpaket weiterleiten) kann die Kommunikation abhören, stören oder zensieren. Außerdem werden Suchanfragen und Suchbegriffe nicht im Klartext gespeichert und übertragen, sondern nur deren "Prüfsummen" (sog. "Hashes", vergleichbar mit einer "Quersumme"), die nur schwer mit einen bestimmten Suchbegriff in Verbindung gebracht werden können, trotzdem jedoch eindeutig sind. Die Vertraulichkeit hat zum Ziel, dass niemals eine folgende Zuordnung möglich ist:
GNUnet-Teilnehmer <=> IP-Adresse (Rechner) <=> Benutzer <=> Suche, Download, Upload
[Bearbeiten] Abstreitbarkeit
Dateninhalte können im GNUnet auf der Festplatte eines anderen Teilnehmers gespeichert werden (wenn er das wünscht). Selbst wenn jemand beweisen kann, dass auf einem PC bestimmte Daten gespeichert sind, kann nicht bewiesen werden, dass der Betreiber des PCs davon wusste. Die Daten können auch von einem völlig anderen Teilnehmer stammen und automatisch auf diesem PC gespeichert worden sein ("Migration").
[Bearbeiten] Ökonomie/Buchführung
Um ein System lahmzulegen bedienen sich Angreifer häufig der Möglichkeit des "flutens". Eine gesamte Tauschbörse kann mit Fälschungen (Dateiname entspricht nicht dem Inhalt, Spam) geflutet werden, einzelne Teilnehmer können mit zu vielen Anfragen geflutet werden. Um dies zu verhindern, muss sich im GNUnet ein Knoten "Vertrauen" verdienen. Jeder einzelne Teilnehmer führt Buch, inwieweit er jemandem vertraut und belohnt ihn dann entsprechend mit besserer Behandlung (z.B. durch einen Download hat ein Teilnehmer A bei B "etwas gut").
[Bearbeiten] Dezentralisierung
GNUnet hängt nur beim Start von zentralen Diensten ab, nämlich dann, wenn automatisch Kontaktdaten von anderen Teilnehmern (von den sog. "Hostlists") geladen werden. Ab dann werden keine zentralen Server benötigt, Downloads und Suchanfragen laufen unter den Teilnehmer selbst ab. Auch die Inhalte bleiben nicht zentral bei einem Teilnehmer, sie "migrieren" (s.o.) zu anderen Teilnehmern und sorgen so auch dafür, dass der Veröffentlicher entlastet wird.
[Bearbeiten] Offenheit
Das "anonyme Kommunikation" ein Markt ist, haben einige zwielichte Anbieter erkannt und bieten entsprechende Produkte an. Diese zeichnen sich oft dadurch aus, dass nur das fertige Programm heruntergeladen werden kann und der Quellcode (das "Backrezept" für das Programm) und die konkrete Funktionsweise geheim bleibt. GNUnet ist eine echte Open-Source-Software, d.h. es ist genau bekannt, was die Software tut und jede einzelne Erweiterung wird per Mail an eine große Gruppe von Interessierten und Spezialisten auf der ganzen Welt verteilt und auf mehreren Internetseiten archiviert. So ist sichergestellt, dass keine Hintertürchen eingeschmuggelt werden. Außerdem wurden fünf wissenschaftliche Publikationen, mehrere Fachvorträge und eine vollständige Dokumentation des Quellcodes angefertigt und stehen jedem zur Einsicht bereit (GNUnet Publikationen).
[Bearbeiten] Installation
GNUnet besteht aus zwei Komponenten. Zum Einen benötigt es zum Betrieb den GNUnet-Kern (Core), der die Verbindung zu anderen Peers herstellt und Kommandozeilentools zur Verfügung stellt. Zum Anderen die optionale grafische Benutzeroberfläche (GUI), die Suchergebnisse aufbereitet darstellt, Daten der Freigabe hinzufügen kann und Statistiken zur Verbindung (verbundene Knoten, Upload, Download und CPU-Auslastung) bietet.
Aktuelle Ebuilds können auch im Gentoo Bugtracker gefunden und über ein Overlay installiert werden.
[Bearbeiten] Core
Da die Paketquellen als testing markiert sind, müssen sie erst freigeschaltet werden:
echo "net-p2p/gnunet" >> /etc/portage/package.keywords
Jetzt kann der GNUnet-Kern installiert werden:
Wichtig: Das USE-Flag sqlite ist dringend empfohlen! Die Installation mit MySQL ist für Endnutzer nicht ratsam und würde weitergehende Einstellungen nach sich ziehen.
emerge -av gnunet
[Bearbeiten] GUI
[Bearbeiten] GTK
Die Benutzeroberfläche ist auch noch maskiert und muß erst freigeschaltet werden:
echo "net-p2p/gnunet-gtk" >> /etc/portage/package.keywords
Danach kann das Paket installiert werden:
emerge -av gnunet-gtk
[Bearbeiten] QT
Zum Zeitpunkt der Überarbeitung (2007-11-23) gab es kein Ebuild für die auf QT basierende Benutzeroberfläche.
[Bearbeiten] Core
[Bearbeiten] Konfiguration
[Bearbeiten] Manuell
Um den Daemon konfigurieren zu können, muss das Setup als Superuser mit dem Parameter -d gestartet werden:
gnunet-setup -d
Wichtige Parameter sind:
- General Settings
- Where should gnunetd write the PID?
- Auf den Pfad /var/run/gnunet/gnunetd.pid ändern und dem user gnunetd Rechte auf diesen Ordner geben.
- Transports
- Network Interface (INTERFACE)
- Netzwerkinterface von dem die IP-Adresse zum bekannt machen des eigenen Knoten (engl. node) verwendet werden soll.
- External IP address (IP)
- IP-Adresse des Routers/Gateways mit direkter Netzanbindung, falls NAT verwendet wird.
- Is this machine unreachable behind a NAT? (LIMITED)
- Nur aktivieren wenn das Netzwerk NAT verwendet, kein Port-Forwarding aktiviert ist und der Rechner nicht in einer DMZ steht.
- Applications
- Allow migrating content to this peer. (ACTIVEMIGRATION)
- Freigaben anderer Teilnehmer zwischenspeichern.
[Bearbeiten] Setup-Wizard
Alternativ kann die Konfiguration auch mit dem Setup-Wizard durchgeführt werden:
gnunet-setup -d wizard-gtk
[Bearbeiten] Programmstart
- Es wird empfohlen beim ersten Start den Daemon im Debug-Modus (-d) zu betreiben, um etwaige Fehler in der Konfiguration direkt zu sehen und gleich beheben zu können.
- Der Programmaufruf sollte immer mit dem Parameter -u gnunetd stattfinden, um späteren Problemen mit Zugriffsrechten aus dem Weg zu gehen. (Ohne diesen Parameter würde die Datenbank in /var/lib/gnunet mit den Rechten des aktuellen Benutzers angelegt.)
gnunetd -u gnunetd -c /etc/gnunetd.conf -d
Mit der Konfiguration der Benutzeroberfläche kann man sich jetzt ruhig Zeit lassen, da der Daemon sich erst im Netz bekannt machen und andere Knoten (engl. nodes) finden muss, um bei der späteren Suche gute Ergebnisse zu erzielen. Das dauert je nach Netzanbindung und Aktivität ungefähr eine Stunde. Wird der Daemon beendet, speichert er die Verbindungsinformationen und kann später die Verbindung schneller aufbauen.
Wenn der Dienst zufriedenstellend läuft, sollte er zukünftig mit Hilfe des Init-Skriptes gestartet werden.
rc-update add gnunetd default
[Bearbeiten] GUI
[Bearbeiten] Konfiguration
gnunet-setup
Wichtige Parameter sind:
- Options related to gnunet-gtk
- To which directory should gnunet-gtk save downloads to? (INCOMINGDIR)
- Verzeichnis in dem heruntergeladene Dateien abgelegt werden
[Bearbeiten] Programmstart
gnunet-gtk
Dokumentation der Benutzeroberfläche und Screenshots
[Bearbeiten] Kommandozeilentools
Eine Dokumentation der Kommandozeilentools findet man auf der offiziellen Homepage:
[Bearbeiten] Begriffsdefinitionen
GNUnet bedient sich einfacher Begriffe um Funktionen zu beschreiben. Leider sind diese nicht immer einfach voneinander abzugrenzen und bedürfen einer eindeutigen Definition (offizielle Definitionen).
[Bearbeiten] URI
GNUnet benutzt Uniform Resource Identifier (dt. „einheitlicher Bezeichner für Ressourcen“; Wikipedia: URI) um Dateien und Verzeichnisse eindeutig identifizieren zu können. Die URI-Schreibweise hat sich im Laufe der Entwicklung mehrfach geändert. Im folgenden wird die Schreibweise der aktuellen Version (0.7.0) erläutert.
Die GNUnet-URI besteht aus zwei Hauptteilen: das Modul und der Modul-Spezifische Bezeichner. Die Schreibweise lautet: gnunet://modul/bezeichner. Modul steht für den Modul-Namen und Bezeichner ist ein Modul-Spezifischer String.
[Bearbeiten] Das ECRS Modul
Im GNUnet freigegegebene Dateien sind mittels ECRS (Encoding for Censorship-Resistant Sharing) kodiert. Das ecrs-Modul kennt folgende Kategorien: chk, sks, ksk und loc. Diese enden mit einem Slash und einer Kategorie-Spezifischen Variable.
- chk identifiziert Dateien; üblicherweise: gnunet://ecrs/chk/[Hash-Wert, mit den Zeichen 0-9A-V]
- sks identifiziert Dateien in Namensräumen; üblicherweise: gnunet://ecrs/sks/NAMENSRAUM/BEZEICHNER
- ksk identifiziert Anfragen; typischerweise: gnunet://ecrs/ksk/SCHLÜSSELWORT[+SCHLÜSSELWORT]*
- loc identifiziert einen Wert auf einem bestimmten Peer; üblicherweise: gnunet://ecrs/loc/PEER/ABFRAGE.TYP.SCHLÜSSEL.GRÖSSE
[Bearbeiten] Beispiele
Diese URI zeigt auf eine bestimmte Kopie des Lizenztextes der GNU GPL:
gnunet://ecrs/chk/9E4MDN4VULE8KJG6U1C8FKH5HA8C5CHSJTILRTTPGK8MJ6VHORERHE68JU8Q0FDTOH1DGLUJ3NLE99N0ML0N9PIBAGKG7MNPBTT6UKG.1I823C58O3LKS24LLI9KB384LH82LGF9GUQRJHACCUINSCQH36SI4NF88CMAET3T3BHI93D4S0M5CC6MVDL1K8GFKVBN69Q6T307U6O.17992
Ein anderer Abfragetyp zeigt alle Ergebnisse der Suche nach dem Schlüsselwort gpl:
gnunet://ecrs/ksk/gpl
[Bearbeiten] Indizieren
Beim Indizieren (engl. to index) wird zu jeder Datei, die anderen Benutzern des GNUnets zur Verfügung gestellt werden soll, eine URI erzeugt und in der internen Datenbank abgelegt. Der Vorgang kann je nach Größe der Datei und Leistungsfähigkeit des Systems einige Zeit in Anspruch nehmen.
Wichtig: Verschiebe oder verändere indizierte Dateien auf keinen Fall, da GNUnet die Pfade von indizierten Dateien nutzt um aktuell zu bleiben. Wenn es dennoch unumgänglich ist, benutze erst gnunet-unindex, verschiebe dann die indizierten Daten und füge diese dann mit gnunet-insert wieder in GNUnet ein!
[Bearbeiten] Einfügen
Beim Einfügen (engl. to insert) wird eine Kopie der freizugebenden Daten verschlüsselt in der internen Datenbank abgelegt. Die Quelle kann danach entfernt werden. Bei Suchanfragen kann nicht mehr unterschieden werden, ob die gefundenen Daten lokal oder auf einem anderen Peer hinterlegt sind. Dieses Verfahren bietet die Möglichkeit der vollkommenen Abstreitbarkeit der freigegebenen Daten.
[Bearbeiten] Verzeichnis
Ein Verzeichnis (engl. directory) ist ein guter Weg in GNUnet Dateien zu aussagekräftigen Gruppen zusammenzufassen. Die Verzeichnisse können eine frei wählbare Anzahl von Zeigern auf Namensräumen (SBlocks), Zeiger auf andere Verzeichnisse und Zeiger auf Dateien enthalten. Verzeichnisse bieten den Benutzern die Möglichkeit ein Netzwerk von Inhalten aufzubauen, das nicht nur eingefügte Dateien beinhaltet, sondern auch interessante weitere Inhalte oder Namensräume auf die verwiesen werden kann - wie auch im WWW. Zusätzlich erhalten Verzeichnisse zwei nette Eigenschaften. Zum Einen sind sie unveränderlich, das heißt, sie können nicht verfälscht werden, enthalten aber genau die Zeiger, die der Veröffentlicher beabsichtigt hat. Die zweite Eigenschaft ist, dass identische Dateien, auf die von zwei verschiedenen Verzeichnissen verwiesen wird, keinen zusätzlichen Speicherplatz verschwenden, sogar wenn die Verzeichnisse von verschiedenen Benutzern erstellt wurden. Ganz anders verhält es sich, wenn ähnliche Dateien von einem Packprogramm archiviert wurden, die dann die doppelte Bandbreite benötigen können, ohne jegliche Beschleunigungen in der Übertragung. Durch das Benutzen von Verzeichnissen um Inhalte zu gruppieren ermöglicht GNUnet das Verbreiten von identischen Dateiblöcken auf eine effizientere Art und Weise.
[Bearbeiten] Namensraum
Ein Namensraum (engl. namespace) wird durch das Angeben eines oder mehrerer Schlüsselwörter definiert. Indizierte oder eingefügte Daten können mit Hilfe dieses Namensraums in Gruppen (Themen) zusammengefasst und darüber auch wieder gefunden werden.
[Bearbeiten] Kollektion
Eine Kollektion (engl. collection) ist ein Namensraum, der indizierten/eingefügten Daten automatisch Schlüsselwörter zuweist. Es muß nicht mehr bei jedem Aufruf von gnunet-insert das Schlüsselwort angegeben werden.
[Bearbeiten] Beispiel
Übersetzung zu 99 % durchgeführt.
Wie man eine Kollektion beginnt:
$ gnunet-pseudonym -a -C NICKNAME -D DESCRIPTION -r AUTHORNAME $ gnunet-insert FILENAME $ gnunet-search collection $ gnunet-gtk
In gnunet-gtk select Advanced-Search Namespace. In the dialog, select the NICKNAME from the list of namespace identifiers. The search key identifier will be filled out automatically to point to the root of the namespace.* The search should yield a directory which contains the file FILENAME. After inserting additional files, additional directories with more files will show up in the search. To stop the collection, use
$ gnunet-pseudonym -E
Beachte: Das Verwalten von Kollektionen über die grafische Benutzeroberfläche ist nicht immer optimal, da es ein sehr neues Feature ist.
[Bearbeiten] Alternative Benutzeroberflächen
- GNUnet Qt (Screenshot)
- GnetCurses - kein Release (wahrscheinlich tot)
[Bearbeiten] Shell-Skripte
- gnunet-autounindex.sh
- Hilfreiches Skript zum rekursiven Entfernen indizierter Dateien.
#!/bin/sh
STATUS=0
# Setting autounindexed directory
if test ${#} -gt 0; then
if test -d ${1}; then
echo "Using shared directory: ${1}"
else
echo "Directory (${1}) doesn't exist!"
STATUS=1
fi
else
echo "No parameter given!"
echo "Example: gnunet-autounindex ~/shared"
STATUS=1
fi
# Unindexing files
if test ${STATUS} -eq 0; then
for i in `find ${1} -type f`; do
test -r ${i} || continue
echo -n "Indexing: ${i} "
gnunet-unindex ${i} && echo '... done!'
done
fi
[Bearbeiten] Weblinks
- GNUnet offizielle Homepage (deutsch)
- GNUnet Projektseite
- GNUnet FAQ (deutsch)
- GNUnet bugtracking (englisch)
- GNUnet Tutorial & Wiki (englisch)
- Freeway (GNUnet Portierung nach Java) (englisch)
- VMware (GNUnet Live System) (englisch)
- GNUnet - Wikipedia (deutsch)
- GNUnet - Wikipedia (englisch)
- Vergleich mit anderen P2P-Systemen
- GNUnet FAQ (deutsch)
- Planet Peer Wiki (englisch)
[Bearbeiten] Community
- GNUnet-Community (Forum & Blog) (englisch)
- Planet Peer (Forum) (englisch)
- Planet Peer (Forum) (deutsch)
- IRC Server: irc.frenode.net Channel: #GNUnet (englisch)
- Mailingliste help-gnunet@gnu.org (englisch)
[Bearbeiten] Presse
- golem.de GNUNet: Filesharing der nächsten Generation? (deutsch)
- Kefk.net GNUnet-Netzwerk (deutsch)
- LWN.net An introduction to GNUnet (englisch)
Wiki > Artikel nach Themen > HOWTOs
Wiki > Artikel nach Themen > Software
Wiki > Wartung > Übersetzen
Wiki > Wartung > Todo
