Home.

Technik-Blog

Willkommen auf meinem
Notiz - Blog
Blog

Kmoser's Tech-Blog

Sonntag
25
Januar 2015

Ubuntu 14.04 - EncFs auf Cloud-Speicher

Da man ja inzwischen Cloud-Speicher quasi hinterhergeworfen bekommt, bietet es sich an diesen z.B. als Backup-Speicher für seine Daten zu verwenden um diese ggf. vor Elementarschäden wie Feuer, Wasser, usw. zu schützen.

Das Problem ist dass man bei Cloud-Speichern natürlich nie weiß wer alles Zugriff auf die Daten hat. Bleibt also nur noch die Möglichkeit die Daten zu verschlüsseln.

Ein verschlüsseltes Dateisystem in einer Container-Datei, wie  man es z.B. mit cryptsetup erzeugen kann ist wenig praktikabel, da bei einer Änderung an einer Datei im verschüsselten Dateisystem die gesamte Container-Datei hochgeladen werden müsste. Bei mehreren GB Daten ist dieser Ansatz keine gute Idee.

Eine Lösung des Problems ist z.B. EncFS (encryption FileSystem). Laut ubuntuusers.de besteht allerdings eine potentielle Schwachstelle. Diese ist für meine Zwecke allerdings ein vertretbares Risiko.

Installation

Die Installation erfolgt mit

sudo apt-get install encfs

Als nächstes müssen die Benutzer, die encfs verwenden können sollen in die Benutzergruppe fuse aufgenommen werden:

sudo usermod -aG fuse BENUTZERNAME

Konfiguration

Als nächstes legen wir zwei Verzeichnisse an. Das erste Verzeichnis enthält die verschüsselten Daten auf dem Cloud Speicher und das andere dient als Mount-Point für das entschlüsselte Dateisystem auf dem wir arbeiten können.

mkdir -p /media/cloud/1und1/webdav/Backup /media/cloud/1und1/encfs

Im Verzeichnis /media/cloud/1und1/webdav ist in diesem Beispiel unser 1und1-Onlinespeicher gemounted. Es geht aber auch jeder andere wie z.B. Dropbox, Google Drive, etc.

Diese beiden Verzeichnisse verbinden wir jetzt mit encfs.

encfs /media/cloud/1und1/webdav/Backup /media/cloud/1und1/encfs

Dabei ist das erste Verzeichnis das Verzeichnis mit dem wir arbeiten können. Dieses ist an sich nur ein Mountpoint in den das zweite Verzeichnis, in dem die verschlüsselten Daten gespeichert werden sollen, eingehängt wird.

Als nächstes wird man gefragt, welchen Modus man benutzen möchte:

Neuer verschlüsselter Datenträger wird erstellt.
Bitte wählen Sie eine der folgenden Optionen:
"x" für den Expertenmodus,
"p" für den vorkonfigurierten Paranoia-Modus,
etwas anderes oder eine Leerzeile wählt den Standard-Modus.
?>

Normalerweise kann man hier p für den vorkonfigurierten Paranoia-Modus wählen. Hat man als Cloud-Speicher z.B. 1und1 und damit eine Begrenzung der Länge der Pfadnamen auf z.B. 250 Zeichen, kann das schnell eng werden. Ist das der Fall muss man mit x den Expertenmodus verwenden.

Es werden im Folgenden die gewünschten Parameter abgefragt:

Manuelle Konfiguration gewählt.
Die folgenden Verschlüsselungsalgorithmen sind verfügbar
1. AES : 16 byte block cipher
 unterstützte Schlüssellänge zwischen 128 und 256 Bits
 unterstützte Blockgröße zwischen 64 und 4096 Bits
2. Blowfish : 8-Byte-Blockchiffre
 unterstützte Schlüssellänge zwischen 128 und 256 Bits
 unterstützte Blockgröße zwischen 64 und 4096 Bits

Hier wählt man z.B. 1 für AES.

Bitte wählen Sie eine Schlüssellänge in Bit. Die von Ihnen gewählte Verschlüsselung
unterstützt Längen von 128 bis 256 Bit in 64 Bit Schritten.
Zum Beispiel:
128, 192, 256

Hier kann man je nach Sicherheitsempfinden und verfügbarer Rechenleistung die Schlüssellänge wählen. Es gilt um so höher um so sicherer. Beispielweise also 256.

Wählen Sie eine Blockgröße (in Byte) aus. Der ausgewählte Algorithmus
unterstützt Größen von 64 bis 4096 Byte in Schritten von je 16 Byte.
Oder drücken Sie Enter, um die Vorgabe (1024 Byte) zu übernehmen

Damit kann man festlegen wie viele Bytes encfs auf einmal verarbeitet. Ein höherer Wert veringert den Overhead der beim Verschlüsseln entsteht, führt aber auch dazu dass zum Lesen eines Teilbereiches einer Datei mehr Daten entschlüsselt werden müssen. Ein Mittelwert ist hier also nicht verkehrt. Z.B. der Standardwert 1024.

Die folgenden Verschlüsselungsalgorithmen für Dateinamen stehen zur Verfügung:
1. Block : Blockverschlüsselung, versteckt die Dateinamengröße etwas
2. Null : No encryption of filenames
3. Stream : Stromchiffre, möglichst kurze Dateinamen

Hier wird es jetzt interessant. Wir wählen hier 3 für möglichst kurze Dateinamen.
Mit 2 könnten wir die Verschlüsselung der Dateinamen auch ganz deaktivieren wenn man so etwas möchte. Wir wählen also 3.

Enable filename initialization vector chaining?
This makes filename encoding dependent on the complete path,
rather then encoding each path element individually.
The default here is Yes.

Dieses Feature erhöht die Sicherheit beim Verschlüsseln von Dateinamen in dem es den ganzen Pfad zum Verschlüsseln verwendet. Zwei gleiche Ordner- oder Dateinamen sehen in unterschiedlichen Pfaden somit anders aus.

Enable per-file initialization vectors?
This adds about 8 bytes per file to the storage requirements.
It should not affect performance except possibly with applications
which rely on block-aligned file io for performance.
The default here is Yes.

Dieses Feature erhöht die Sicherheit indem es zu einer Datei Zufallsdaten hinzufügt, damit zwei gleiche Dateien im verschlüsselten Zustand nicht gleich aussehen.

Enable filename to IV header chaining?
This makes file data encoding dependent on the complete file path.
If a file is renamed, it will not decode sucessfully unless it
was renamed by encfs with the proper key.
If this option is enabled, then hard links will not be supported
in the filesystem.
The default here is No.

Ist dieses Feature aktiv, kann man keine Hardlinks mehr verwenden, eine Datei lässt sich aber auch nicht mehr entschlüsseln, wenn sie ausserhalb des encfs umbenannt wurde. Die Daten innerhalb der Datei sind damit an dessen Pfad gebunden.

Enable block authentication code headers
on every block in a file?  This adds about 12 bytes per block
to the storage requirements for a file, and significantly affects
performance but it also means [almost] any modifications or errors
within a block will be caught and will cause a read error.
The default here is No.

Dieses Feature beeinflusst die Performance negativ, dafür wird jeder Block in jeder Datei mit einer kryptografischen Prüfsumme versehen und es ist damit praktisch unmöglich eine Datei zu manipulieren ohne dass die Änderung auffällt. Ist genug Rechenleistung vorhanden, kann man hier yes auswählen.

Sollen jedem Block-Vorspann Zufallsbytes hinzugefügt werden?
Das wird die Leistung veringern, aber sicherstellen, dass die
Blöcke unterschiedliche Sicherheitscodes verwenden. Sie können das selbe
Resultat mit geringeren Leistungseinbußen erzielen, indem Sie die dateispezifischen Initialisierungsvektoren aktivieren.
Auswahl der Anzahl der Bytes, von 0 (Keine Zufallsbytes) bis 8:

Da wird vorher die dateispezifischen Initialisierungsvektoren aktiviert haben ist das hier nicht mehr nötig.

Enable file-hole pass-through?
This avoids writing encrypted blocks when file holes are created.
The default here is Yes.

Bin mir nicht sicher. verhindert möglicherweise das Schreiben leerer Blöcke in Dateien. Aktivieren macht denke ich Sinn.

Zum Abschluss erfolgt eine Zusammenfassung der Konfiguration:

Konfiguration abgeschlossen. Das angelegte Dateisystem hat die
folgenden Eigenschaften:
Dateisystem Chiffre: "ssl/aes", Version 3:0:2
Dateinamenskodierung: "nameio/stream", Version 2:1:2
Schlüssellänge: 256 Bits
Blockgröße: 1024 Byte, enthält 8 Byte MAC-Kopf
Jede Datei enthält acht Byte Vorspann mit einmaligen IV Daten.
Dateinamensverschlüsselung benutzt IV Verkettungsmodus.
File holes passed through to ciphertext.

Als letztes wird das Kennwort verlangt:

Nun wird ein Kennwort für das Dateisystem benötigt.
Da es keinen Mechanismus zur Wiederhestellung gibt, müssen Sie
sich an das Kennwort erinnern! Das Kennwort kann mit encfsctl
nächträglich geändert werden.

Damit ist die Einrichtung abgeschlossen und jetzt wird jede Datei, die wir in /media/cloud/1und1/encfs anlegen verschlüsselt in die Cloud hochgeladen.

Die folgenden Verschlüsselungsalgorithmen für Dateinamen stehen zur Verfügung:
1. Block : Blockverschlüsselung, versteckt die Dateinamengröße etwas
2. Null : No encryption of filenames
3. Stream : Stromchiffre, möglichst kurze DateinamenDie folgenden Verschlüsselungsalgorithmen für Dateinamen stehen zur Verfügung:
1. Block : Blockverschlüsselung, versteckt die Dateinamengröße etwas
2. Null : No encryption of filenames
3. Stream : Stromchiffre, möglichst kurze Dateinamen

Um das Verzeichnis wieder auszuhängen gibt man folgendes ein:

fusermount -u /media/cloud/1und1/encfs

Um das Verzeichnis wieder einzuhängen gibt man erneut

encfs /media/cloud/1und1/webdav/Backup /media/cloud/1und1/encfs

ein. Nach Eingabe des Passworts wird das verschlüsselte Dateisystem unter /media/cloud/1und1/webdav/Backup eingehängt.

Möchte man z.B. für Scripts das Passwort automatisch übergeben, verwendet man folgenden Befehl:

echo "mypassword" | encfs --stdinpass /media/cloud/1und1/webdav/Backup /media/cloud/1und1/encfs