Ecryptfs – Daten sicher verpacken

Obwohl das Thema Privatsphäre nicht von jedem mit der gleichen Hingabe geteilt wird, gibt es doch gute Gründe, die persönlichen Dateien auf Computern vor Zugriff anderer zu schützen. Ein probates Mittel zur Verschlüsselung von Daten steht Linux-Nutzern seit Kernel 2.6.19 mit Ecryptfs zur Verfügung. Ein verschlüsselter Ordner wird an einem anderen Ordner (Mountpoint) eingehängt (gemountet), in dem dann die Dateien und Verzeichnisse entschlüsselt vorliegen.

In den offiziellen Anleitungen zu Ecryptfs wird folgende Vorgehensweise empfohlen:

# apt install ecryptfs-utils
# modprobe ecryptfs
# mount -t ecryptfs /encrypted/folder /decrypted/folder

Der Mountvorgang führt in einen Auswahldialog, in dem die Mountoptionen interaktiv abgefragt werden. Dabei entsteht eine vorgegebene Ordnerstruktur, in denen Daten wie Schlüsselsignatur etc. abgelegt werden.
Es geht aber auch anders.

Grundsätzlich werden zwei Passphrasen benötigt, um die Verschlüsselung zu realisieren. Die erste Passphrase (Mount-Passphrase) dient der Verschlüsselung der Daten, die zweite Passphrase (Login-Passphrase) der Verschlüsselung der ersten Passphrase (wrapped passphrase). In zwei Schritten erstellen wir einen Schlüssel und hängen ihn in den Kernel-Schlüsselbund, um damit alle verschlüsselten Ordner auf unserem Rechner einhängen zu können, ohne wiederholte Abfrage des Login-Passworts. Vorausgesetzt wird, dass das Paket ‚ecryptfs-utils‘ installiert ist und das Kernelmodul ecryptfs mit modprobe geladen wurde.

# MOUNT_PASSPHRASE="`uuidgen | sed -e 's|-||g'`"
# LOGIN_PASSPHRASE="DeinGeheimesPasswort"
# printf "%s\n%s" $MOUNT_PASSPHRASE $LOGIN_PASSPHRASE | ecryptfs-wrap-passphrase $HOME/wrapped_passphrase

Die mit ‚uuidgen‘ generierte Mount-Passphrase wird mit dem Login-Passwort verschlüsselt in der Datei ‚wrapped-passphrase‘ im Home-Ordner abgelegt. Das Einhängen der Passphrase in den Kernel-Keyring erfolgt mit:

# printf "%s" $LOGIN_PASSPHRASE | ecryptfs-insert-wrapped-passphrase-into-keyring $HOME/wrapped-passphrase

War das Einhängen erfolgreich, wird die Schlüssel-Signatur angezeigt. Diese brauchen wir, um die verschlüsselten Ordner zu mounten.

# KEY_SIG="`keyctl list @u | tail -n 1 | awk '{print $6}'`"
# echo $KEY_SIG > $HOME/key-signature
# mount -t ecryptfs /encrypted/folder /decrypted/folder -o ecryptfs_sig=$KEY_SIG,ecryptfs_fnek_sig=$KEY_SIG,ecryptfs_cipher=aes,ecryptfs_key_bytes=32

In obigem Beispiel wird der Ordner /encrypted/folder an dem Mountpoint /decrypted/folder eingehängt. Wir nutzen eine AES-Verschlüsselung der Dateien und der Dateinamen mit einer Schlüssellänge von 32 Bytes. Die Schlüsselsignatur lesen wir zuvor in die Variable KEY_SIG, deren Inhalt wir zur weiteren Verwendung im Home-Ordner speichern.
Jetzt kann auf den Ordner /decrypted/folder ganz normal zugegriffen werden (lesen, schreiben, ausführen), während im Ordner /encrypted/folder die Dateien verschlüsselt vorliegen. Das Aushängen von /decrypted/folder erfolgt wie gewohnt mit ‚umount‘.

Die offiziellen Möglichkeiten zur Verwendung von Ecryptfs werden sehr anschaulich im Archlinux-Wiki dargestellt.

Update: Wem das Generieren eines Passworts mit ‚uuidgen‘ zu unsicher ist, kann dasselbe mit ‚openssl‘ machen.

# MOUNT_PASSPHRASE="`openssl rand -base64 32`"