LUKS – Externe Speichermedien verschlüsseln

Die Verschlüsselung externer Speichermedien ist die notwendige Ergänzung zur Verschlüsselung des Betriebssystems bzw. der Benutzerdaten. Eine Möglichkeit zur Verschlüsselung externer Datenträger bietet dm-crypt/LUKS (Linux Unified Key Setup). Dieses ist seit vielen Jahren im Linux-Kernel implementiert, ausgereift und stabil. Bisher unterstützt jedoch kein anderes Betriebssystem LUKS, weshalb sich sein Einsatz nur für homogene Linux-Umfelder empfiehlt. In heterogenen Umgebungen ist gegenwärtig VeraCrypt anzuraten.

Es widerspricht zwar der Idee eines Backups den Zugang zu selbigem einzuschränken, eine Verschlüsselung von Backupmedien ist aber aus Gründen der Sicherheit absolut notwendig. Es macht keinen Sinn, das Betriebssystem mit allen Daten zu verschlüsseln, wenn das Abbild des Betriebssystems auf einer externen Festplatte – am besten noch in unmittelbarer Nähe zur verschlüsselten Hardware – verfügbar ist. Dies gilt natürlich umso mehr für transportable Medien wie USB-Speichersticks.

Obwohl LUKS prinzipiell die vollständige Verschlüsselung eines Speichermediums unterstützt, hat es einige Limitationen. Im Gegensatz zu Veracrypt (früher TrueCrypt) bietet es keine Möglichkeit zur glaubhaften Abstreitbarkeit. Jedes verschlüsselte Volume hat einen Header-Bereich, der im Klartext geschrieben ist. Die eigentlichen Daten sind zwar geschützt, aber es ist für Dritte ersichtlich, dass auf dem Speichermedium ein LUKS-Volume existiert.

Das Verfahren ist für alle Medien identisch und kann daher von der SD-Karte bis zur externen Festplatte angewandt werden.

Externes Speichermedium mit LUKS verschlüsseln (Konsole)

Vorab ist ein Backup auf ein drittes Medium vorzunehmen. Falsche Formatierungs- oder Verschlüsselungsbefehle können zum Verlust aller Daten führen!

Die meisten Distributionen bieten keine ausgereifte grafische Speichermedienverwaltung, die eine zuverlässige Verschlüsselung selbiger ermöglicht. Es ist deshalb in den meisten Fällen notwendig, auf die Konsole auszuweichen.

Im ersten Schritt sorgt man dafür, dass das Betriebssystem mit LUKS umgehen kann. Normalerweise liefern Linux-Distributionen die entsprechende Pakete aus, bei Debian ist es aber z. B. in der minimalen Netzwerkinstallation nicht enthalten.

# apt-get install cryptsetup
# modprobe dm-cryptCode-Sprache: PHP (php)

Jetzt ist das Speichermedium, z.B. also die externe Festplatte, die neu formatiert werden soll, an den PC anzuschließen. Der Pfad /dev/sdx ist im Folgenden durch den Pfad zur externen Festplatte zu ersetzen.


Exkurs: Verschlüsselung

Im Folgenden wird eine Verschlüsselung auf Basis des aes-xts Algorithmus mit 512 MB vorgenommen. Dies dürfte für die meisten Systeme ein guter Kompromiss aus Sicherheit und Schnelligkeit sein. Man kann dies jedoch mittels Cryptsetup überprüfen und ggf. einen anderen Algorithmus wählen.

Die Ausgabe sieht dann so aus:

# cryptsetup benchmark
# Die Tests sind nur annähernd genau, da sie nicht auf den Datenträger zugreifen.
PBKDF2-sha1      2332760 Iterationen pro Sekunde für 256-Bit-Schlüssel
PBKDF2-sha256    5005136 Iterationen pro Sekunde für 256-Bit-Schlüssel
PBKDF2-sha512    1872457 Iterationen pro Sekunde für 256-Bit-Schlüssel
PBKDF2-ripemd160 1012138 Iterationen pro Sekunde für 256-Bit-Schlüssel
PBKDF2-whirlpool  878204 Iterationen pro Sekunde für 256-Bit-Schlüssel
argon2i      10 Iterationen, 1048576 Speicher, 4 parallele Threads (CPUs) für 256-Bit-Schlüssel (Zieldauer 2000 Millisekunden)
argon2id     10 Iterationen, 1048576 Speicher, 4 parallele Threads (CPUs) für 256-Bit-Schlüssel (Zieldauer 2000 Millisekunden)
#   Algorithmus | Schlüssel | Verschlüsselung | Entschlüsselung
        aes-cbc        128b      1493,7 MiB/s      5690,2 MiB/s
    serpent-cbc        128b        95,7 MiB/s       739,9 MiB/s
    twofish-cbc        128b       210,4 MiB/s       484,9 MiB/s
        aes-cbc        256b      1141,0 MiB/s      4753,8 MiB/s
    serpent-cbc        256b       103,9 MiB/s       741,5 MiB/s
    twofish-cbc        256b       224,2 MiB/s       490,0 MiB/s
        aes-xts        256b      4520,8 MiB/s      4542,5 MiB/s
    serpent-xts        256b       651,6 MiB/s       672,5 MiB/s
    twofish-xts        256b       451,0 MiB/s       460,2 MiB/s
        aes-xts        512b      4135,2 MiB/s      4115,0 MiB/s
    serpent-xts        512b       662,4 MiB/s       671,7 MiB/s
    twofish-xts        512b       456,0 MiB/s       459,9 MiB/sCode-Sprache: PHP (php)

Wie zu sehen ist, hat auf der Test-hardware AES-XTS die besten Werte bei der Ver- und Entschlüsselung. 


# cryptsetup -c aes-xts-plain -s 512 luksFormat /dev/sdx
# cryptsetup luksOpen /dev/sdx luksCode-Sprache: PHP (php)

Es ist zu beachten, dass eine Verschlüsselung nur so gut ist wie das Passwort, das man verwendet. Nun muss die Platte noch formatiert werden. Die Wahl des Dateisystems kann nach persönlicher Präferenz erfolgen. Linux-Distributionen setzen in vielen Fällen noch ext4 ein, weshalb in dieser Anleitung die Formatierung damit erfolgt.

# mkfs.ext4 /dev/mapper/luks
# umount /dev/mapper/luksCode-Sprache: PHP (php)

Nun die Festplatte ausstecken und wieder einstecken. Eure Desktopumgebung bzw. der Dateimanager sollten euch nun nach dem Passwort fragen, dass man ggf. im Schlüsselbund des Betriebssystems speichern kann. Jedes gespeicherte Passwort kann aber ein Sicherheitsrisiko darstellen.