Linux: Verschlüsselung von Datenträgern mit LUKS

Diese Anleitung wurde für die Linux-Distribution Xubuntu getestet, ist aber auf allen Ubuntu-Varianten und fast allen Linux-Distributionen anwendbar.

Um diese Anleitung nutzen zu können muss

  • ein Terminal benutzt werden.

Achtung! Das Verschlüsseln eines Datenträgers führt zum VOLLSTÄNDIGEN Verlust ALLER Daten auf dem betreffenden Datenträger. Die Daten werden auch nicht wiederherstellbar sein. Wenn irgendetwas (wichtiges) auf dem Datenträger ist, muss es VORHER gesichert werden.

Außerdem: Das Verschlüsseln eines Datenträgers, welcher bereits genutzt wird (z.B. die Festplatte auf der das Betriebssystem läuft) ist hiermit NICHT möglich!

Hinweis: Ein mit LUKS verschlüsselter Datenträger kann NICHT unter Windows verwendet werden.

Bitte die Anleitung vorher ein Mal komplett durchlesen bevor ihr irgendetwas mit eurer Festplatte macht. Ich übernehme keine Verantwortung dafür, wenn etwas schief geht.

0. Terminal öffnen

Es gibt mehrere Möglichkeiten ein Terminal zu öffnen. Ich bevorzuge den Shortkey. Unter (X)Ubuntu ist das Strg+Alt+T. Ein Terminal kann aber auch über das Anwendungsmenü geöffnet werden. Unter Ubuntu könnt ihr oben links auf das Ubuntu-Logo klicken und dann im Suchfeld „Terminal“ eingeben. Bei Xubuntu muss auf das Xfce-Logo geklickt werden und dann nach „Terminal“ gesucht werden.

1. Datenträger identifizieren

Zunächst muss der Datenträger identifiziert werden, damit nicht aus Versehen ein anderer Datenträger gelöscht und verschlüsselt wird. Soll ein externer Datenträger (z.B. USB-Stick, externe Festplatte, etc.) verschlüsselt werden, erstmal die Verbindung trennen aka (USB-)Kabel abziehen. Dann im Terminal den Befehl

sudo fdisk -l

eintippen. Ihr werden nach eurem Benutzer_innen-Passwort gefragt. Eingeben (es gibt keine visuelle Ausgabe, also keine *** oder so) und dann ‚Enter‘ drücken. Als Ergebnis erhaltet ihr eine Liste von Datenträgern die in etwa wie folgt aussieht:

Festplatte /dev/sda: 465,8 GiB, 500107862016 Bytes, 976773168 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
Festplattenbezeichnungstyp: gpt
Festplattenbezeichner: […]

Gerät       Anfang      Ende  Sektoren  Größe Typ
/dev/sda1     2048    923647    921600   450M […]
/dev/sda2   923648   1128447    204800   100M […]
/dev/sda3  1128448   1161215     32768    16M […]
/dev/sda4  1161216 976773119 975611904 465,2G […]

Jetzt die externe Festplatte wieder anschließen und den Befehl nochmal aufrufen. Es folgt ein Ergebnis ähnlich dem folgenden:

Festplatte /dev/sda: 465,8 GiB, 500107862016 Bytes, 976773168 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
Festplattenbezeichnungstyp: gpt
Festplattenbezeichner: […]

Gerät       Anfang      Ende  Sektoren  Größe Typ
/dev/sda1     2048    923647    921600   450M […]
/dev/sda2   923648   1128447    204800   100M […]
/dev/sda3  1128448   1161215     32768    16M […]
/dev/sda4  1161216 976773119 975611904 465,2G […]

Festplatte /dev/sdb: 931,5 GiB, 1000204886016 Bytes, 1953525168 Sektoren
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 4096 Bytes
E/A-Größe (minimal/optimal): 4096 Bytes / 4096 Bytes
Festplattenbezeichnungstyp: gpt
Festplattenbezeichner: […]

Gerät       Anfang       Ende   Sektoren  Größe Typ
/dev/sdb1     2048    1050623    1048576   512M […]
/dev/sdb2  1050624    2549759    1499136   732M […]
/dev/sdb3  2549760 1953523711 1950973952 930,3G […]

Hier ist die Festplatte ausschlaggebend. In unserem Beispiel möchten wir die Festplatte

/dev/sdb

verschlüsseln. Bei euch kann es auch eine andere Bezeichnung sein. Ihr müsst einfach danach gucken, was neu dazu gekommen ist. Solltet ihr euch nicht sicher sein, könnt ihr die Festplattenbezeichner miteinander vergleichen. Dadurch könnt ihr euch sicher sein, das ihr auch die Festplatte wählt, die neu dazu gekommen ist nachdem ihr die externe Festplatte angeschlossen habt. Außerdem bitte beachten: Wenn ihr eine Festplatte mit z.B. 1 TB Speicherplatz habt, dann wird in der Liste nicht „1 TB“ angezeigt, sondern (wie hier im Beispiel) „931,5 GiB“. Das liegt an der unterschiedlichen Umrechnung. Auf Datenträgern wird der Speicherplatz in der Regel als Megabyte, Gigabyte, Terabyte, etc. angegeben bzw. aufgedruckt. Dabei sind 1.000 Kilobyte = 1 Megabyte, 1.000 Megabyte = 1 Gigabyte, 1.000 Gigabyte = 1 Terabyte. Das Betriebssystem rechnet aber mit Mebibyte, Gibibyte, Tebibyte, etc. Dabei sind 1.024 Kibibyte = 1 Mebibyte, 1.024 Mebibyte = 1 Gibibyte, 1.024 Gibibyte = 1 Tebibyte. Es „fehlt“ also kein Speicherplatz, sondern es ist einfach in einer anderen Maßeinheit angegeben.

Die (externe) Festplatte muss ausgehängt werden, falls sie (automatisch) eingehängt wurde. In der Regel kann das erreicht werden, in dem im Dateimanager auf des „Auswerfen“-Symbol geklickt wird. Sollte dieses Symbol nicht sichtbar sein oder es nicht klappen, kann das ganze auch mit dem Terminal gemacht werden:

sudo umount /media/BENUTZER_IN/FESTPLATTE
sudo rmdir /media/BENUTZER_IN/FESTPLATTE

Mit dem ersten Befehl wird die Festplatte ausgehängt, mit dem zweiten der Ordner gelöscht durch den auf die Festplatte zugegriffen werden konnte. Hier muss BENUTZER_IN durch den eigenen Namen und FESTPLATTE durch den Namen der Festplatte ersetzt werden. Es kann auch sein, dass die Festplatte nicht unter /media eingehängt wurde. Um das herauszufinden, öffnet die Festplatte und guckt in die Adresszeile des Dateimanagers. Diesen Pfad könnt ihr dann Copy+Pasten.

2. Datenträger mit zufälligen Daten überschreiben (optional, aber empfohlen)

Es gibt mehrere gute Gründe, warum dieser Schritt durchgeführt werden sollte. Bei neu gekauften, noch ungenutzten Datenträgern ist der Speicher einheitlich. Es ist also leicht zu erkennen, wo (verschlüsselte) Daten abgespeichert sind und wo nicht. Dadurch können bei einer IT-forensichen Untersuchung[1] Daten effizienter angegriffen werden. Das überschreiben mit zufälligen Daten ist also eine Art der Verschleierung. Wurde der Datenträger schon (häufiger) verwendet, werden die bisherigen Daten effektiv gelöscht, überschrieben und so nicht-wiederherstellbar gemacht. Das Überschreiben ist natürlich nur ein kleiner Teil in der Verschlüsselung und ersetzt keinesfalls ein starkes Passwort.

Zum Überschreiben mit zufälligen Daten ist folgende Befehlsfolge nötig:

sudo sh -c 'cryptsetup -d /dev/urandom -c aes-xts-plain64 create delete /dev/sdb && shred -vz /dev/mapper/delete && sync && sleep 4 && cryptsetup remove delete'

Zur kurzen Erläuterung: Mit dieser Befehlsfolge wird das (virtuelle) Gerät /dev/urandom [2] als Quelle für Zufallsdaten genutzt um die Festplatte /dev/sdb zu beschreiben. Danach werden diese Daten wieder gelöscht. Das ganze dauert zum Teil sehr lange. Es empfiehlt sich, den Prozess Abends zu starten und dann die Nacht durch laufen zu lassen. Bei meiner 4 TB großen Festplatte hat es ca. 30 Stunden gedauert bis alles fertig war. Das liegt daran, dass die Daten nicht nur ein Mal geschrieben werden. Es gibt insgesamt vier Durchläufe. Die ersten drei Druchläufe schreiben zufällige Daten und der vierte Durchlauf schreibt 0en. Das ist wichtig, um die vorherigen Daten wirklich zu zerstören.

3. Datenträger verschlüsseln

LUKS[3] ist die Abkürzung für „Linux Unified Key Setup“ und ist eine weitverbreitete und als sicher geltende Verschlüsselung. Das Prinzip ist, dass auf der Festplatte ein LUKS-Container erzeugt wird, welcher dann mit Daten gefüllt werden kann. Es ist quasi eine Box, in die Dinge getan werden können und die Box abgeschlossen werden kann. Ein solches Prinzip wird z.B. auch von VeraCrypt verwendet. Es ist mit LUKS auch möglich, kleine Container beliebiger Größe zu erzeugen und als Datei z.B. an eine E-Mail anzuhänge. Aber das soll nicht Gegenstand dieser Anleitung sein.

Um die Festplatte für LUKS zu formatieren wird der Befehl

sudo cryptsetup luksFormat /dev/sdb

gebraucht. Es wäre möglich noch weitere Einstellungen anzugeben, aber die Standard-Einstellungen sind sicher.

Ihr werdet nach einem Passwort für den neuen Container gefragt. Hier bitte folgendes beachten:

  • Das Passwort ist der Zugang zur Festplatte. Ohne Passwort sind eure Daten verloren!
  • Wählt ein sicheres Passwort. Das bedeutet: mindestens 16 Zeichen (Buchstaben, Zahlen UND Sonderzeichen).
  • KEINE Worte/Sätze benutzen. Solche Passwörter sind trotz guter Länge leicht zu erraten durch Computer.
  • Nutzt einen Passwortgenerator, welcher die Stärke des Passworts angibt (z.B. den Passwortmanager KeePassXC[4]).
  • Schreibt das Passwort bitte nicht auf einen Zettel der neben dem Monitor, unter der Tastatur oder sonst wo leicht auffindbar liegt.
  • Und natürlich: Das Passwort NIEMALS veröffentlichen oder weitergeben (auch nicht an vertrauenswürdige Leute, es gibt bessere Möglichkeiten mehreren Leuten Zugang zu einem verschlüsselten Datenträger zu geben).

Das verschlüsseln dauert wieder ein bisschen. Je nach Größe der Festplatte.

Wenn die Verschlüsselung fertig installiert ist, könnt ihr die Festplatte öffnen, in dem ihr mit dem Befehl

sudo cryptsetup open /dev/sdb FESTPLATTE

den verschlüsselten Container öffnet. Hierbei ist FESTPLATTE der bzw. ein Name für die Festplatte, der angegeben werden muss, damit ihr die Festplatte später finden könnt. Den Namen könnt ihr bei jedem öffnen neu vergeben, es empfiehlt sicht aber einen Namen zu wählen und beizubehalten, da im nächsten Schritt auch ein Name benötigt wird. Beim Öffnen werdet ihr nach dem Passwort gefragt.

4. Datenträger mit einem Dateisystem ausstatten

Ein Datenträger braucht ein Dateisystem damit auf ihm Daten abgelegt werden können. Da wir unter Linux arbeiten wählen wir das Dateisystem ext4. Mit dem Befehl

sudo mkfs.ext4 -L FESTPLATTE /dev/mapper/FESTPLATTE

wird das Dateisystem ext4 auf die Festplatte FESTPLATTE installiert. Das Programm mkfs (=makefilesystem) akzeptiert die optionale Einstellung -L (=Label) um dem Dateisystem einen Namen zu geben. Dieser Name wird dann später vom Betriebssystem genutzt um die Festplatte für euch identifizierbar zu machen. Wie im vorherigen Schritt erwähnt ist es sinnvoll für das Öffnen des Containers wie auch für das Dateisystem den selben Namen zu verwenden.

Hinweis: Wenn ihr NICHT den selben Namen verwenden wollt, dann muss bei /dev/mapper/FESTPLATTE der Name angegeben werden, den ihr beim Öffnen des Containers genutzt habt. Bei -L kann dann ein anderer Name angegeben werden.

5. Datenträger schließen

Wenn alles fertig ist und im LUKS-Container ein Dateisystem installiert werden konnte, kann der Container wieder geschlossen werden. Zum Schließen benutzt den Befehl

sudo cryptsetup close /dev/mapper/FESTPLATTE

6. Datenträger verwenden

Wenn ihr euren Dateimanager aufruft wird euch (wenn alles gut gelaufen ist) die Festplatte als bereit zum Einhängen angezeigt. In Ubuntu-Varianten steht links in der Leiste oft etwas wie „1,0 TB verschlüsselt“ o.ä. Dann einfach darauf klicken. Es öffnet sich ein Fenster in dem ihr zur Passwort-Eingabe aufgefordert werdet. Ist das Passwort korrekt, wird die Festplatte geöffnet und eingehängt. Danach könnt ihr die Festplatte genauso wie eine nicht-verschlüsselte verwenden.

Hinweis: Solange die Festplatte geöffnet ist, liegen ALLE darin enthaltenen Daten unverschlüsselt vor. Wenn ihr die Festplatte also nicht mehr braucht, schließt sie wieder. Auch solltet ihr die Festplatte nicht einfach vom PC/Laptop trennen ohne sie vorher zu schließen. Im schlimmsten Fall bedeutet das nämlich Datenverlust (passiert nicht immer, aber mir ist das schon mehrmals passiert).

Weiterführendes…

Eine verschlüsselte Festplatte kann statt mit einem Passwort auch mit einer sog. Keyfile geöffnet werden. Dabei handelt es sich um eine Datei die (1) das Passwort enthält oder (2) eine zufällige beliebig lange Zeichenfolge enthält oder (3) jede andere binäre Datei (z.B. ein Bild) ist. Es empfiehlt sich aber, eine solche Key-File nur ergänzend zu einem Passwort zu nutzen. Dadurch kann auf die verschlüsselte Festplatte auch dann zugegriffen werden, wenn die Keyfile verloren gegangen ist. Ob eine Keyfile verwendet werden sollte oder nicht hängt von der Situation ab. Je nach Typ der Keyfile und Anwendungsfall gibt es einen Gewinn an Sicherheit, keinen Gewinn oder sogar einen Verlust an Sicherheit. Auf das Hinzufügen und Nutzen einer Keyfile gehe ich hier aber nicht ein.