Brig«: Ein Werkzeug Zur Sicheren Und Verteilten Dateisynchronisation
Total Page:16
File Type:pdf, Size:1020Kb
Hochschule Augsburg University of Applied Sciences Masterarbeit an der Fakultät Informatik »brig«: Ein Werkzeug zur sicheren und verteilten Dateisynchronisation Verfasser: Prüfer: Christopher Pahl Prof. Dr.-Ing. Schöler Holzbachstraße 35 / 86152 Augsburg Zweitkorrektor: Telefon: +49 015 121340235 Prof. Dr. Hubert Högl E–Mail: [email protected] 17. Oktober 2016 Abstract A new open source tool for secure and distributed file synchronization called »brig«is presented. Most established ways to exchange files rely on a central instance, often exclusively controlled by a single company or have other design deficits. The shown alternative describes the usage of a distributed peer to peer network to achieve flexible, convenient and encrypted file exchange between any amount of users. The main novelty from a technical point of view is the complete decoupling of metadata from the actual data, combined with git–like version control of the former and encrypted compression of the latter. Special attention is given to the balance of usability and security in order to enable inexperienced users to use the software. This paper describes the architecture and implementation of the software, but also reflects critically on how the featured ideas and techniques could be improved. In addition, there is a partner work at [1], which discusses »brig«from a security perspective. Zusammenfassung Es wird ein neuartiges, quelloffenes Werkzeug zur sicheren und verteilten Dateisynchronisation namens »brig«vorgestellt. Die meisten etablierten Möglichkeiten zum Austausch von Dateien ver- lassen sich auf eine zentrale Instanz, die oft von einem einzigen Unternehmen abhängig ist, oder die andere architetktonische Defizite haben. Der hier vorgestellte Gegenentwurf beschreibt die Ver- wendung eines verteilten Peer–to–Peer–Netzwerks, um flexibel, bequem und verschlüsselt Dateien zwischen einer beliebigen Menge an Nutzern auszutauschen. Technischen Neuwert hat dabei die vollständige Entkopplung der Metadaten von den eigentlichen Daten, kombiniert mit git–ähnlicher Versionskontrolle, sowie verschlüsstelter Kompression der Daten. Besonderer Wert wird dabei auf die Balance zwischen Usability und Sicherheit gelegt, um die Nutzung des Werkzeugs auch unerfahrenen Nutzern zu ermöglichen. Die vorliegende Arbeit beschreibt die Architektur und Implementierung der Software, reflektiert aber auch kritisch wie die vorgestellten Ideen und Techniken erweitert und verbessert werden können. Zudem existiert eine Zwillings–Arbeit (vgl. [1]), welche die Sicherheitsmechanismen von »brig«genauer betrachtet und evaluiert. © Copyleft Christopher Pahl 2016. Some rights reserved. Diese Arbeit ist unter den Bedingungen der c b Creative Commons Attribution–3.0 lizensiert. http://creativecommons.org/licenses/by/3.0/de Danksagung: Dank sei an folgende lebenden Personen und toten Dinge gerichtet: Die Gattungen Felis silvestris, Ursus arctos und Procyon lotor, sowie der Obergattung der Aves, Espressohersteller aller Länder und Freunde des weichgummierten Holzschlägers und Cellulose–Ellipsoids. Der Kapelle Moonsorrow gilt Dank für die kraftvolle und melancholische Musik, die mich die langen Stunden unterhalten hat. Insbesondere gilt Herrn Prof. Dr. Schöler 23–facher Dank für alles. Meinen Eltern sei gedankt, dass sie das überraschte Wesen in die Welt gesetzt haben, welches meinen Namen trägt. Dass ich jetzt wohl mein Studium abschließen werde, kommt für mich übrigens genauso plötzlich wie für euch. Inhaltsverzeichnis Tabellenverzeichnis viii Abbildungsverzeichnis ix 1. Einleitung 1 1.1. Motivation.........................................1 1.2. Projektziel..........................................2 1.3. Der Name..........................................3 1.4. Lizenz............................................3 1.5. Gliederung der Arbeit...................................3 1.6. Über die Autoren der Software..............................4 1.7. Konventionen........................................4 2. Stand der Technik5 2.1. Peer–to–Peer Netzwerke..................................5 2.1.1. Zugrundeliegende Technik............................6 2.1.2. Dateisynchronisation in P2P–Netzwerken....................6 2.2. Ähnliche Arbeiten.....................................8 2.3. Wissenschaftliche Lücke..................................9 2.4. Markt und Wettbewerber................................. 10 2.4.1. Dropbox + Boxcryptor............................... 10 2.4.2. ownCloud / Nextcloud ............................... 11 2.4.3. Syncthing ..................................... 11 2.4.4. resilio ....................................... 13 2.4.5. git-annex ..................................... 13 2.4.6. Weitere Alternativen................................ 14 2.4.7. Zusammenfassung................................. 15 2.5. Zielgruppen......................................... 16 2.6. Einsatzszenarien...................................... 17 2.7. Annahmen während der Konzeption........................... 17 3. Anforderungen 19 3.1. Anforderungen an die Integrität.............................. 20 3.2. Anforderungen an die Sicherheit............................. 21 3.3. Anforderungen an die Usability.............................. 22 4. Grundlagen 24 4.1. ipfs: Das Interplanetary Filesystem ............................. 24 4.1.1. Eigenschaften des Interplanetary Filesystems .................... 25 iv Inhaltsverzeichnis Inhaltsverzeichnis 4.2. Datenmodell von ipfs ................................... 27 4.3. Datenmodell von git .................................... 29 5. Architektur 34 5.1. Datenmodell von brig ................................... 34 5.1.1. Operationen auf dem Datenmodell........................ 39 5.2. Synchronisation...................................... 43 5.2.1. Die Remote–Liste.................................. 43 5.2.2. Synchronisation einzelner Dateien........................ 44 5.2.3. Synchronisation von Verzeichnissen....................... 46 5.2.4. Austausch der Metadaten............................. 49 5.2.5. Abgrenzung zu anderen Synchronisationswerkzeugen............. 50 5.2.6. Speicherquoten................................... 50 5.3. Architekturübersicht.................................... 50 5.3.1. Lokale Aufteilung in Client und Daemon..................... 51 5.3.2. brigctl: Aufbau und Aufgabe........................... 52 5.3.3. brigd: Aufbau und Aufgabe............................ 53 5.4. Einzelkomponenten.................................... 54 5.4.1. Dateiströme..................................... 54 5.4.2. Transfer–Layer................................... 59 5.4.3. Benutzermanagement............................... 61 6. Implementierung 65 6.1. Wahl der Sprache...................................... 65 6.2. Status der Implementierung................................ 66 6.2.1. Umfang....................................... 67 6.2.2. Dokumentation................................... 67 6.2.3. Paketübersicht................................... 68 6.3. Ausgewählte Themen................................... 69 6.3.1. Aufbau des Store .................................. 69 6.3.2. FUSE–Dateisystem................................. 72 6.3.3. Repository Struktur................................ 73 6.3.4. Nennenswerte Bibliotheken............................ 75 6.3.5. Sonstiges...................................... 76 6.4. Entwicklungsumgebung.................................. 77 6.5. Entwicklungshistorie.................................... 78 6.5.1. Sackgassen bei der Entwicklung.......................... 78 6.5.2. Beiträge zu anderen Projekten........................... 80 7. Usability 81 7.1. Einführung......................................... 81 7.2. Anforderungen an die Usability.............................. 81 7.3. Die Kommandozeile.................................... 82 7.4. Grafische Oberfläche.................................... 83 v Inhaltsverzeichnis Inhaltsverzeichnis 7.5. Mockups von brig-ui ................................... 84 7.5.1. Anlegen eines neuen Repositories......................... 84 7.5.2. Verwalten und Hinzufügen von Remotes..................... 86 7.5.3. Dateibrowser.................................... 87 7.5.4. Versionsverwaltung................................ 89 7.5.5. Einstellungen.................................... 89 8. Evaluation 92 8.1. Was brig nicht ist...................................... 92 8.2. Erfüllung der Anforderungen............................... 93 8.2.1. Anforderungen an die Integrität......................... 93 8.2.2. Anforderungen an die Sicherheit......................... 94 8.2.3. Anforderungen an die Usability.......................... 95 8.3. Stand der Testsuite..................................... 96 8.4. Benchmarks......................................... 96 8.4.1. Aufbau....................................... 96 8.4.2. Ergebnisse..................................... 97 8.5. Zukünftige Erweiterungen................................. 100 8.5.1. Verbesserungen an der Implementierung.................... 100 8.5.2. Konzeptuelle Verbesserungen........................... 102 9. Fazit 104 9.1. Zusammenfassung..................................... 104 9.2. Selbstkritik......................................... 104 9.3. Offene Fragen........................................ 104 9.3.1. Beziehung zum ipfs–Projekt........................... 105 9.3.2. Zukunft der Autoren................................ 105 9.3.3. Veröffentlichung der Software.......................... 106 A. Anhang: Benutzerhandbuch 107 A.1. Installation......................................... 108