encfs – oder Daten verschlüsselt sichern

Heutzutage kommt man für relativ kleines Geld an Speicherplatz im Internet. Teilweise gibt es den auch umsonst, und am Besten sind die Dienste die zudem auch noch anbieten die Daten auf mehreren Rechnern synchron zu halten.

All das hat aber einen mächtig großen Haken: man gibt seine Daten aus der Hand. Sicherlich gibt es Dateien bei denen ist das so ziemlich egal, andere möchte man aber gar nicht bei fremden Leuten wissen und irgndwo dazwischen gibt es auch noch den grauen Bereich wo man sich nicht sicher ist.

Das Problem wenn man die Daten jemanden anvertraut (und das liegt bereits im Verb versteckt): man muss dem Anbieter vertrauen. Wie gut schützt er die Daten gegenüber anderen und sich selbst? Was nützt mir das beste Sicherheitsaudit wenn es Angestellte und Mitarbeiter gibt die Zugriff auf die Daten haben und vielleicht etwas zu neugierig sind?
Oder, was in letzter Zeit häufig passiert ist, der Anbieter übersieht ein Sicherheitsleck in seiner Infrastruktur oder Anwendung und die Daten werden somit unbeabsichtigt Dritten zugänglich gemacht?

Um ein gewisses Maß an Datensicherheit zu erreichen kann man seine Daten verschlüsseln. Das Problem ist nur, dass unter Umständen weitere Probleme auftreten wenn man dies tut. Bekannt sind verschlüsselte „Container“ die eine komplettes Dateisystem enthalten, dummerweise sind die aber relativ schwierig über das Netz zu synchronisieren. Unter Umständen muss der komplette Container übertragen werden obwohl sich nur wenige Bytes gändert haben.
Gerade bei schwachbrüstigen Internetanbindungen ist das asolut nicht brauchbar.

In meinem Fall ging es vor einiger Zeit darum, dass ich meine Daten gerne auf einer Onlinefestplatte sichern wollte. Nichts lebenswichtiges, aber schon Daten deren Wiederbeschaffung schwierig bis unmöglich ist.
Andereseits wollte ich aber, schon alleine aus Spieltrieb, dafür sorgen, dass ich auch der einzige bin der den entsprechenden Zugang zu den Daten hat.
Ich fand sehr schnell eine Lösung die unglaublich einfach und effektiv ist:

„The Quiet Room“ beinhaltet einen Artikel der beschreibt wie man seine Daten per Rsync auf das Strato „HiDrive“, und zwar verschlüsselt. Dafür wird encfs verwendet mit dessen Hilfe verschlüsselte Verzeichnisse angelegt werden. Encfs sollte sich in der Repositories jeder wichtigen Linux-Distribution finden lassen.

Normalerweise sorgt encfs dafür, dass man eine entschlüsselte Sicht auf einen verschlüsselten Datenbestand hat. Das heißt: Irgendwo liegen verschlüsselte Daten herum und enfcs sorgt als Schicht dafür, dass der Inhalt der verschlüsselten Daten irgendwo entschlüsselt in das Dateisystem eingehängt wird.
Das ist nichts Besonderes. So funktioniert Verschlüsselung nu nmal.

Encfs kann das ganze aber auch genau umgekehrt, und hier wird es interessant. Im Klartext: Encfs kann eine verschlüsselte Sicht auf normale Daten erzeugen. Das funktioniert so, dass man ein Dateisystem einhängt das die Daten verchlüsselt „anzeigt“. Intern werden die Daten erst dann verschlüsselt wenn tatsächlich ein Zugriff passiert. Erstelle ich ein solches Dateisystem passiert erst einmal noch nichts, erst bei dem Zugriff auf das Verzeichnis werden eben diese Verzeichnisinformationen verschlüsselt. Liest man eine Datei (zum Beispiel durch Kopieren) wird sie „on the fly“ verschlüsselt. Und encfs kann auf diese Weise sogar die Dateinamen verschlüsseln, so dass auch daher kein Rückschluss mehr auf den Inhalt der Datei genommen werden kann.

Wie genau funktioniert das nun?
Als Ausgangssituation legen wir vier Verzeichnisse an, „clear“ beinhaltet unsere unverschlüsselten Daten, „crypted“ wird die verschlüsselte Sicht enthalten, „backup“ nutzen wir später zum Sichern und „restore“ um die gesicherten Daten wieder zu entschlüsseln. In „clear“ legen wir zwei Textdateien mit irgendwelchem Inhalt:

$ mkdir clear
/tmp/test$ mkdir crypted
/tmp/test$ mkdir backup
/tmp/test$ mkdir restore
/tmp/test$ echo "Hallo du" > clear/text.txt
/tmp/test$ echo "na wie gehts?" > clear/text2.txt
/tmp/test$ ls -l clear/
insgesamt 7
-rw-r--r-- 1 sparrow sparrow   14  8. Sep 06:39 text2.txt
-rw-r--r-- 1 sparrow sparrow    9  8. Sep 06:39 text.txt
/tmp/test$ cat clear/*
na wie gehts?
Hallo du
/tmp/test$

Jetzt  wird es interessant, denn nun kommt encfs zum Einsatz. Wir wollen eine verschlüsselte Ansicht unseres frisch angelegten Verzeichnisses:

/tmp/test$ encfs --reverse /tmp/test/clear /tmp/test/crypted/
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.
?>

Standard-Modus gewählt.
--reverse angegeben, unique/chained IV wird nicht benutzt

Konfiguration abgeschlossen. Das angelegte Dateisystem hat die
folgenden Eigenschaften:
Dateisystem Chiffre: "ssl/aes", Version 3:0:2
Dateinamenskodierung: "nameio/block", Version 3:0:1
Schlüssellänge: 192 Bits
Blockgröße: 1024 Byte
File holes passed through to ciphertext.

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.

Neues EncFS-Passwort:
EncFS-Passwort bestätigen:

Huch, da System erzählt uns ganz schön viel, aber was ist denn jetzt eigentlich passiert? Mount verrät uns, dass offensichtlich ein neues Dateisyetem eingehängt wurde:

/tmp/test$ mount | grep encfs
encfs on /tmp/test/crypted type fuse.encfs (rw,nosuid,nodev,default_permissions,user=sparrow)

Offensichtlich gibt es nun, wie wir es wollten, unter /tmp/test/crypted eine verschlüsselte Ansicht unseres Ausgangsverzeichnisses. Schauen wir uns das doch einmal näher an und vergleichen es mit unserem bisherigen ‚Klartext‘-Verzeichnis:

$ ls -l crypted/
insgesamt 12
-rw-r--r-- 1 sparrow sparrow   14  8. Sep 06:39 BL84939FvQfyG8cdXcd3-xFi
-rw-r--r-- 1 sparrow sparrow 1077  8. Sep 06:42 nlZxTUhpDicRlTVqpcG-d5km
-rw-r--r-- 1 sparrow sparrow    9  8. Sep 06:39 WqEikAOAgW31KozzdN6R33fu
$ ls -l clear/
insgesamt 8
-rw-r--r-- 1 sparrow sparrow 14  8. Sep 06:39 text2.txt
-rw-r--r-- 1 sparrow sparrow  9  8. Sep 06:39 text.txt

Huch, die Dateien sehen was Größe und Änderungsdatum angeht identisch aus. Der Dateiname ist jedoch verschlüsselt. Der Inhalt auch, soviel kann ich versprechen, abre ich verzichte darauf hier noch wirreres Zeug zu schreiben und verzichte auf das Zeigen des Inhalts ;)
Allerdings gibt es eine Datei mehr als im Originalverzeichnis, wie kann das sein? Die Antwort ist ziemlich einfach: Im Originalverzeichnis wurde durch encfs eine versteckte Datei angelegt die alle Eistellungen enthält um jederzeit wieder ein verschlüsseltes Abbild mit identicher Konfiguration zu erzeugen: .encfs6.xml. Dank dieser Datei wird bei erneuter Verschlüsselung automatisch wieder identische Schlüssel verwendet. Da die verschlüsselten Daten jedesmal identisch sind kann man Tools wie rsync verwenden um entsprechend Backups zu machen, und die sind dann natürlich entsprechend verschlüsselt.
Wenn man die Daten wieder entschlüsseln möchte braucht man die .encfs6.xml und sein Passwort, ansonsten stehen die Chancen ziemlich schlecht.

Zum Abschluss einmal ein kompletter Vorgang mit Aushängen, Wiedereinhängen und vor allem mit der Wiederherstellung bzw. Entschlüsseln. Kommentare stehen mit # direkt im Beispiel:

$ # Verschlüsselte Sicht aushängen
/tmp/test$ fusermount -u /tmp/test/crypted
/tmp/test$ # Verschlüsselte Sicht neu einhängen
/tmp/test$ # Nur um zu zeigen, dass bei existierender .encfs5.xml
/tmp/test$ # nicht noch einmal eine Konfiguration durchgeführt wird
/tmp/test$ encfs --reverse /tmp/test/clear /tmp/test/crypted/
EncFS-Passwort:
/tmp/test$ # Verschlüsslte Sicht kopieren
/tmp/test$ cp crypted/* backup/
/tmp/test$ # Schauen ob die Dateien da sind und verschl. Sicht aushängen
/tmp/test$ ls backup/
BL84939FvQfyG8cdXcd3-xFi  nlZxTUhpDicRlTVqpcG-d5km  WqEikAOAgW31KozzdN6R33fu
/tmp/test$ fusermount -u /tmp/test/crypted
/tmp/test$ # Die verschlüsselten Dateien wieder entschlüsseln
/tmp/test$ ENCFS6_CONFIG=/tmp/test/clear/.encfs6.xml encfs /tmp/test/backup/ /tmp/test/restore
EncFS-Passwort:
/tmp/test$ ls restore/
text2.txt  text.txt
/tmp/test$ cat restore/*
na wie gehts?
Hallo du

Fazit: Mit encfs kann man von einer unverschlüsselten Daten eine verschlüsselte Ansicht erstellen. Die Daten werden bei Bedarf durch die encfs-Schicht verschlüsselt. Da sowohl Inhalt wie Name der Datei durch die Verschlüsselung unkenntlich gemacht werden, ist ein Rückschluss auf den Inhalt höchstens durch die Dateigrö0e möglich.
Da encfs mit Hilfe der .encfs6.xml immer wieder die gleichen Schlüssel verwendet kann man die verschlüsselte Ansicht super sichern. Tools wie resync bieten die Möglichkeit nur neue Dateien in einem Backup auszutauschen, das funktioniert auch hervorragend mit encfs denn diese Dateiattribute bleiben entsprechend erhalten.

So, und ab jetzt die Backups immer brav verchlüsseln, ja?

— der Würschtlmann

Ein Gedanke zu “encfs – oder Daten verschlüsselt sichern

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s