Add to calendar

IPFS

IPFS

InterPlanetary File System

The Distributed Web

Ein Überblick

2016-09-09

VALUG.at

Wolfgang Silbermayr

Quelltext: https://gitlab.com/valug/ipfs-slides

Lizenz der Präsentation: CC-BY-SA 4.0

CC-BY-SA 4.0

Presenter Notes

Inhalt

  • Anlaufstellen
  • Installation und Starten
  • Was macht IPFS
  • Verwendung
  • Name-Service IPNS
  • Technische Hintergründe
  • Darauf Aufbauende Projekte / Ideen
  • Webhosting mit IPFS

Presenter Notes

Anlaufstellen

Presenter Notes

Installation und Starten I

  • Install Guide: https://ipfs.io/docs/install/
  • Download von: https://dist.ipfs.io/#go-ipfs
  • In ein Verzeichnis (nachfolgend $IPFSDIR genannt) entpacken
  • Checken, ob es grundsätzlich läuft: $IPFSDIR/ipfs --help ausführen
  • Hilfreich:
    • Die Binärdatei in $PATH kopieren oder verlinken
    • Alternativ: (temporär) die $PATH-Umgebungsvariable um das entpackte Verzeichnis erweitern
    • Danach kann einfach ipfs anstatt von $IPFSDIR/ipfs verwendet werden

Presenter Notes

Installation und Starten II

Presenter Notes

Was macht IPFS

  • File-Sharing ähnlich zu BitTorrent
  • Identifiziert Dateien durch interplanetar ziemlich eindeutige Identifier
  • Deduplikation auf Ebene von Blöcken, dadurch auch für Dateien
  • Verzeichnishierarchien können rekursiv hinzugefügt werden
  • Heruntergeladene Daten werden lokal im Cache behalten
  • Cache wird vom Daemon je nach Bedarf geleert
  • Keine Garantie für Verfügbarkeit ("austrocknen")
  • Explizites "Pinning" erlaubt permanentes Behalten von Daten
  • Vom restlichen Netz getrennte Inseln können die zwischengespeicherten Daten weiterhin austauschen

Presenter Notes

Verwendung (I)

Dateien oder Verzeichnisse herunterladen

ipfs get <identifier>

Dateien ins Repository laden

ipfs add <filename>

Verzeichnisse rekursiv ins Repository laden

ipfs add -r <dirname>

Dateien direkt anzeigen lassen

ipfs cat <identifier>

Presenter Notes

Verwendung (II)

Dateien "anpinnen"

ipfs pin add <identifier>

Dateien "entpinnen"

ipfs pin rm <identifier>

"Angepinnte" Dateien auflisten

ipfs pin ls [<identifier>]

Presenter Notes

Verwendung (III)

Und viele weitere Befehle

  • Datenstrukturen-Kommandos:

    • ipfs block: Interaktionen mit rohen Blöcken
    • ipfs object: Interaktionen mit rohen dag-Nodes
    • ipfs files: Interaktionen mit Objekten ähnlich Unix-Dateisystemen
  • Netzwerk-Kommandos:

    • ipfs id: Informationen über den eigenen oder andere Knoten
    • ipfs diag: Diagnose
    • ipfs swarm: Informationen über den Netzwerkschwarm

Presenter Notes

Verwendung (IV)

  • Fuse-Mount in ein Verzeichnis
    • ipfs mount -f <ipfs-path> -n <ipns-path>
  • ACHTUNG
    • Relative Pfade werden nicht in Bezug zum aktuellen Verzeichnis des Aufrufers, sondern zum Arbeitsverzeichnis des Daemons verwendet
    • Funktioniert nur, wenn der Daemon mit einem Schwarm verbunden ist

Presenter Notes

Verwendung (V)

  • Und viele weitere:
    • ipfs --help: Hilfe
    • ipfs commands: Komplette Auflistung aller Kommandos

Presenter Notes

Technische Hintergründe (I)

Hash-Kollisionen

Theoretisch möglich, allerdings sehr unwahrscheinlich. Die Entwickler versuchen, die Struktur so aufzubauen, dass in Zukunft eine Migration zu anderen Hashingalgorithmen möglich ist.

Bootstrapping

Aktuell wird eine Standard-Liste an vertrauten Bootstrapping-Nodes vorkonfiguriert, kann jedoch geändert werden.

Presenter Notes

Technische Hintergründe (II)

Referenzimplementierung in go, Spezifikation nicht sprachspezifisch

libp2p

Die P2P-Funktionalität ist in die Bibliothek libp2p ausgelagert

Datenrepräsentation in Hash-Bäumen (Merkle DAG Bäume)

  • Gerichteter azyklischer Graph
    • Kanten sind eindeutige Verweise auf Objekte, und beinhalten durch den Hash alle Informationen um die Objekte verifizieren

Presenter Notes

Technische Hintergründe (III)

Transportmethoden

Presenter Notes

Name-Service IPNS: Theorie

  • Nachteil von Hashes: ändern sich mit jeder Datei, die in einem (Unter-)Verzeichnis geändert wird.
  • IPNS ist ein PKI-Namensraum
  • Der Name ist der Hash des öffentlichen Sclhüssels
  • Mit dem privaten Schlüssel können neue signierte Werte veröffentlicht werden
  • Der Name verweist auf einen IPFS-Datei-Identifier
  • Dadurch lassen sich verändernde Inhalte unter einem stabilen Identifier veröffentlichen

Presenter Notes

Name-Service IPNS: Praxis

  • Veröffentlichen des Hashes:

    • ipfs name publish <ipfs-identifier>
  • Namensauflösung:

    • ipfs name resolve <ipns-identifier>

Presenter Notes

Statisches Webhosting mit IPFS

Namensauflösung mittels DNS:

Presenter Notes

Kontroverses Thema

DMCA-Takedowns, illegales oder nicht erwünschtes Material

Optionales Blacklisting mit vom Entwicklerteam gepflegten Einträgen in Verwendung bei Gateways, die vom Entwicklerteam betrieben werden. Nicht jedoch bei selbst installierten Nodes.

Hier ist mir erstmalig in freier Wildbahn der HTTP-Errorcode 451 Unavailable For Legal Reasons untergekommen.

Presenter Notes

Ausblick / Ideen

  • Ethereum
  • The Internet Archive: Wired-Artikel
  • Mediachain: Blockchain, die mittels IPFS-Hashes Medienobjekte (Videos, Fotos…) referenziert
  • Bezahltes IPFS-Pinning gegen "Austrocknen"
  • Diskussionen über Paketupdates per IPFS
  • OpenBazaar: Dezentrale Online-Verkaufsplattform. Wird das Backend auf IPFS migrieren
  • IPFS Pics: Bildanzeigedienst für Bilder in IPFS
  • Publish/Subscribe-Mechanismus ist geplant
  • IPFS-Gateway-Redirect: Firefox-Plugin für Adressen im Format fs:/ipfs/*
  • Meine Voraussage: Spielehersteller werden künftig Content über IPFS ausliefern

Presenter Notes