Duisburger Linux User Group - http://www.dulug.de
Stammtisch 01.12.2006: Verzeichnisverschlüsselung mit encfs
Keine Garantie auf Vollständigkeit und/oder Funktionalität!!!
Autor: M. Franke

Warum sollte man überhaupt seine Daten verschlüsseln?
Ganz einfach: es geht schlicht und ergreifend niemanden etwas an welche Daten man auf der Festplatte hat!
Egal ob es die Steuererklärung ist, die E-Mails oder sonst was. Auch dieser Vortrag ist eine Woche vor seiner Veröffentlichung in einem verschlüsselten Verzeichnis entstanden.

Wie funktioniert Verschlüsselung?
Schon Cäsar hat seine Botschaften verschlüsselt. Damals ging es ein wenig primitiver zu als heute, aber das Prinzip ist das selbe. Wenn Cäsar seinen Truppen mitteilen wollte wann und von wo sie angreifen sollten dann sah die unverschlüsselte Botschaft vielleicht so aus:
Angriff 12 Uhr Osten
Um das nun zu verschlüsseln hat Cäsar einfach jeden Buchstaben erhöht, dh. aus a wird b, aus b wird c usw. Daraus folgt dann folgende Verschlüsselung für obigen Satz:
Bohsjgg 23 Vgs Ptufo
Wurde der Botschafter mit dieser Nachricht nun von feindlichen Truppen aufgegriffen hatten sie zwar die Botschaft abgefangen aber den Schlüssel nicht, denn man hat damals auch schon darauf geachtet das der Überbringer der Botschaft selbst nicht wusste wie die Nachricht zu entschlüsseln ist. Was aber das Leben des Botschafters wahrscheinlich auch nicht retten konnte...
An dem Prinzip der Verschlüsselung hat sich bis heute eigentlich nicht viel geändert, man hat seine originalen Daten, einen Schlüssel und die verschlüsselten Daten. Die Art der Verschlüsselung ist natürlich um ein vielfaches umfangreicher geworden - die Methoden einen Buchstaben zu erhöhen ist komplexen mathematischen Algorithmen gewichen.

Installation encfs
Die Installation von encfs ist nicht weiter schwierig, man muss nur vorher rlog und fuse installieren. Alle drei finden sich auf den gängigen Paket-Seiten (z.B. http://rpmseek.com) für die meissten aktuellen Distributionen (falls diese nicht eh schon beiliegen sollten). Alternativ kann man sich die Sourcen auch herunterladen und selbst übersetzen mit jeweils:
$ configure
$ make
$ make install

Desweiteren handelt es sich bei fuse um ein Kernel-Modul mit dem User spezielle Dateisysteme unabhängig vom Kernel bearbeiten können (fuse = Filesystem in Userspace). Inzwischen gibt es eine ganze Reihe Dateisysteme die fuse unterstützen wie z.B. btfs (Bluetooth), btslave (BitTorrent), Captive NTFS (über Microsoft's ntfs.sys) und unter anderem natürlich auch encfs.

Benutzung encfs
Mit encfs kann jeder User eines Systems seine Daten unabhängig von root verschlüsseln. Eine gängige Methode ist es komplette Festplatten bzw. Partitionen zu verschlüsseln. Dabei ist man aber meisstens auf die Gnade des Systemadministrators angewiesen. Zudem sind die mit encfs verschlüsselten Daten auch vor dem Zugriff von root sicher. Bevor man jetzt aber direkt loslegt muss man vorher noch das fuse-Kernel-Modul laden:
$ modprobe fuse
Das sorgt erst dafür das normale User neben root auch spezielle Dateisysteme anlegen, bearbeiten und unter anderem auch verschlüsseln können.
Nach erfolgter Installation kann man nun beginnen ein verschlüsseltes Verzeichnis zu erstellen. Der Aufruf ist denkbar einfach und gleicht dem mount-Befehl:
$ encfs /home/user/encrypt /home/user/decrypt
Wenn beide Verzeichnisse noch nicht existieren wird man gefragt ob diese erstellt werden sollen und man sollte natürlich mit 'yes' antworten. Danach wird man um die Einstellung gebeten. Für den normalen User reicht der vorkonfigurierte Paranoia-Mode sicher aus, dh. ein Druck auf die p-Taste und die Konfiguration ist abgeschlossen. Nun wird man gebeten ein Passwort einzugeben und schon ist alles fertig, man hat ein verschlüsseltes Verzeichnis (encrypt) und ein entschlüsseltes Verzeichnis (decrypt). Und nun müssen nur die privaten Daten in das entschlüsselte Verzeichnis kopiert werden:
$ cp song.mp3 decrypt/
Je nach Grösse der Datei und Schnelligkeit des Rechners kann es schonmal was dauern bis die Datei kopiert ist, schliesslich müssen die Daten erst verschlüsselt werden. Und wenn man nach dem Kopieren noch mal in die Verzeichnise schaut dann sieht man folgendes:
$ ls decrypt/
song.mp3
$ ls encrypt/
iZv,18wNaayi,8Si0,v7Ip9T

Wenn man sich jetzt auf einer anderen Shell als root einloggt und versucht den Inhalt der Verzeichnisse zu lessen, passiert folgendes:
$ su
<Passwort>
$ ls decrypt
Keine Berechtigung
$ ls encrypt/
iZv,18wNaayi,8Si0,v7Ip9T

Die Verschlüsselten Daten können alle lesen, nur die entschlüsselten nicht! Will man die entschlüsselten Daten unmounten, muss man folgenden Befehl eingeben:
$ fusermount -u /home/user/decrypt
Das entschlüsselte Verzeichnis ist nun leer, und das verschlüsselte Verzeichnis beinhaltet nun alle Daten die geschützt werden müssen. Braucht man wieder Zugriff auf seine Daten, ist wieder der obige encfs-Befehl einzugeben (gefolgt vom Passwort):
$ encfs /home/user/encrypt /home/user/decrypt
Die Daten sind nach dem obigen Beispiel dann mit AES (dem Nachfolger von DES & 3DES) verschlüsselt. Bei AES handelt es sich um einen symmetrischen Algorithmus (Blockchiffre) mit 128 Bit langen Blöcken. Die Schlüssel können bei AES eine Länge von 128, 192 und 256 Bit haben. AES wird unter anderem beim Verschlüsselungsverfahren von 802.11i (WLAN), ssh und ipsec benutzt.

Links
Projekthomepage von fuse:
http://fuse.sourceforge.net/
Projekthomepage von rlog und encfs:
http://arg0.net/users/vgough/encfs
Informationen zu AES:
http://de.wikipedia.org/wiki/Advanced_Encryption_Standard