Peer-to-Peer Instant-Messenger - Proof of Concept back to frontpage

Ich habe mich die letzten Monate unter anderem mit Peer-to-Peer-Netzwerken und Distributed Hash Tables (DHT) beschäftigt. Im Rahmen eines kleinen Projektes von mir fiel daraufhin eine einfache und robuste Bibliothek ab, die es erlaubt, eine DHT in Python zu implementieren. Meine libdht orientiert sich an Kademlia und bietet über ein zusätzliches Modul eine einfache Bootstrapping-Möglichkeit an (d.h. die Bereitstellung einer Möglichkeit, initiale Peers zum Beitritt des Netzwerkes im Internet zu finden; z. B. per Broadcasting in die lokalen Netzwerke, IRC oder nopastes).

Zur Demonstration meiner Bibliothek habe ich heute ein kleines Peer-to-Peer Instant-Messaging-Netzwerk (P2P-IM) entwickelt, das Public-Key-Kryptographie einsetzt. Mit ihr soll eine Sicherheit gegen Identitätsdiebstahl und die Wahrung der Integrität einmal hinterlegter Daten im Netzwerk gewährleistet werden. Jedem Eintrag im Netzwerk ist hierzu zunächst vom Client signiert und ggfs. verschlüsselt. Die Daten werden im Netzwerk automatisch repliziert. Soll ein Eintrag im Netzwerk, zum Beispiel die Metadaten eines Users, aktualisiert werden, kann dies nur vom ursprünglichen Client (bzw. genauer dem Besitzer des zugehörigen privaten Schlüssels) vorgenommen werden. Die Kommunikation der Benutzer untereinander wird außerhalb des P2P geregelt und wird mittels derselben Schlüsseln verschlüsselt. Die DHT dient überwiegend der Verwaltung notwendiger Metadaten (Status-Texte, Clientinformationen, Schlüsselaustausch, u.ä.), der Bereitstellung von Offline-Funktionalitäten (z. B. Offline-Nachrichten in verschlüsselter Form) und dem Auffinden/Suchen der Kontakte.

Zum Bootstrappen habe ich bislang eine Art Zeroconf (auto-broadcasting in die verfügbaren Netze) implementiert, über das sich Peers derselben Netzwerke automatisch finden können.

Ich würde gerne einmal eine Weiterentwicklung von einem P2P-IM sehen. Es hat sicher viel Potential und als dezentrales Netzwerk genießt es alle Vorteile, die P2P-Netze so mit sich bringen (wenig Zensurmöglichkeiten, Resistenz gegen zentrale Serverausfälle, Unabhängig von Anbietern, u. ä.). Die aktuelle Notwendigkeit einer Overlay-Verschlüsselung bei den derzeitigen IM-Systemen, wie sie mit OTR (das ich übrigens sehr schätze und rege nutze) zur Verfügung steht, fällt ebenso weg - jegliche Kommunikation wird standardmäßig und transparent signiert/verschlüsselt. Neben normalen Chatnachrichten würde ich mir eine Möglichkeit wünschen, beliebige Inhalte/Dateien direkt (also nicht über einen Proxy oder Fremdserver, wie z. B. bei ICQ) und ohne Krampf (wie z. B. bei Jabber) verschlüsselt zu übertragen. Vielleicht verfolge ich die Idee einmal weiter und baue den Client soweit aus, dass er einigermaßen benutzbar ist. Nichts desto trotz ist es elementar zu wissen, wie Public-Key-Kryptographie einzusetzen ist. Hier wäre sicher Aufklärungsarbeit zwingend notwendig. Eine gewisser Aufwand (zum Beispiel ein manueller Vergleich der Fingerprints der Freunde) gehört standard- und pflichtgemäß dazu. Anderenfalls könnten in gewissen Angriffsszenarien auf das Netzwerk Man-in-the-Middle-Angriffen Tür und Tor geöffnet werden.

Die libdht werde ich demnächst vollständig samt meinem P2P-IM auf GitHub veröffentlichen (MIT-Lizenz). Bis dahin hoffe ich, dass euch der folgende Screencast (OGV) gefällt (Download des Screencasts hier; im Vollbild anschauen, da es recht groß ist). :-)

Update: libdht veröffentlicht; neues Projekt gestartet: lense/liblense (siehe unten im Post).


New comment

Comments are moderated and therefore are not published instantly.





Comments

No comments yet. Be the first! :-)