computerseite-spezial.de

handverlesene Infos zu Linux, FreeBSD und OpenSolaris

  • Full Screen
  • Wide Screen
  • Narrow Screen
  • Increase font size
  • Default font size
  • Decrease font size
Sie sind hier: Startseite Besondere Programme Partitionen verschlüsseln mit dm-crypt und LUKS

Partitionen verschlüsseln mit dm-crypt und LUKS


Dieser Beitrag ist erschienen in freiesMagazin (Link) 07/2009 / Lizenz: GNU Free Documentation License (GNU FDL) (Link) / Autor: Martin Böcher.

Wenn Sie diesen Artikel weiterverwenden möchten, beachten Sie bitte die Lizenzbedingungen. Vielen Dank.


Partitionen verschlüsseln mit dm-crypt und LUKS


von Martin Böcher

Es gibt viele Gründe, Daten zu verschlüsseln. Egal weshalb man sich dafür entscheidet, man sollte wissen, was man tut und was man zu beachten hat. Dieser Artikel soll als kurze Anleitung dienen. Für weitere, tiefergehende Informationen seien die später erwähnten Links empfohlen.

Hinweis: Das in dieser Anleitung verwendete dm-crypt ist ein Verschlüsselungsmodul, das zum Device Mapper des Linux-Kernels gehört. LUKS ist eine Erweiterung, die unter anderem die Verwendung von mehreren Passwörtern erlaubt.

Voraussetzungen

Der Linux-Kernel kann ab Version 2.6.10 verwendet werden. Besser ist jedoch Version 2.6.20 oder höher, da ab dieser Version der Encrypted-Salt-Sector IV (ESSIV) unterstützt wird (Link). Am besten verwendet man den aktuellen Kernel der jeweiligen Distribution.
Die Kernel-Optionen „Device Mapper Support“ und „Crypt Target Support“ müssen aktiviert sein, ebenso ein gewünschtes „Crypto-API“. Dies sollte bei den fertigen Kerneln der großen Distributionen alles gegeben sein.
Die Module müssen unter Umständen noch geladen werden, wenn sie nicht fest in den Kernel kompiliert sind. Es ist das Modul dm-crypt und gegebenenfalls ein Modul des gewünschten Glossar
Kernel-Optionen
Der „Device Mapper Support“ ermöglicht das Verbinden von verschiedenen Gerätedateien. Zusammen mit der Verschlüsselung (dm-crypt und LUKS) nutzt man die Partition /dev/sdb1 zum Beispiel als /dev/mapper/meinCryptoGeraet. Für die Nutzung der Verschlüsselung benötigt man dabei den „Crypt Target Support“.

Chiffriermodus
Der Chiffriermodus ist der Algorithmus, der zur Verschlüsselung verwendet wird.

Schlüssellänge
Die Länge des Schlüssels ist ein Faktor für die Sicherheit der Verschlüsselung. Je länger der Schlüssel ist, desto höher ist die Sicherheit der Verschlüsselung.
Crypto-API
Kryptographie Application Programming Interface, Schnittstelle zum Verwenden des jeweiligen Verschlüsselungsalgorythmus.

Crypto-Container
Mit Container ist die verschlüsselte Partition gemeint. In diesem befindet sich wiederum ein eigenes Dateisystem, also eine Partition.

Keyslots
Ein Keyslot ist ein Speicherplatz für ein Passwort bzw. eine Schlüsseldatei.

LUKS
Dank LUKS (Linux Unified Key Setup) ist es möglich, bis zu acht Passwörter bzw. Schlüsseldateien für einen Crypto-Container zu nutzen.

Schlüsseldatei
Anstatt eines Passworts kann auch eine Datei verwendet werden, die an Stelle des Passwortes zur Entschlüsselung des Crypto-Containers verwendet wird.

/dev/urandom
/dev/urandom ist ein spezielles Gerät, durch das man Zugriff auf Zufallszahlen hat, die direkt vom Linux-Kernel erzeugt werden.

Crypto-API. Also wechselt man in eine Konsole und lädt die Module per
# modprobe dm-crypt
# modprobe crypt_aes

An Softwarepaketen wird cryptsetup samt Abhängigkeiten benötigt.
Des Weiteren benötigt man natürlich eine (leere) Partition. In den hier gezeigten Beispielen wird ein USB-Stick verwendet (/dev/sdb1), um bei ersten Tests nicht gleich eine ganze Partition unbrauchbar zu machen. Man sollte sich immer im Klaren sein, dass die Daten bei Verlust des Passwortes oder des Dateischlüssels nicht mehr erreichbar sind!

Verschlüsseln einer Partition

Meist möchte man nicht nur eine Datei verschlüsseln, sondern gleich mehrere. Deshalb ist es praktisch, gleich eine ganze Partition zu verwenden. Dank Logical Volume Manager (siehe „Der Logical Volume Manager“, freiesMagazin 03/2009 (Link)) ist es kein Problem, eine Festplatte in nahezu beliebig viele Partitionen zu zerlegen. Im folgenden Beispiel ist es die Partition eines USB-Sticks. Das Beispiel ist aber auf jede beliebige Festplattenpartition anwendbar.
Mit dem Kommando cryptsetup wird die Verschlüsselung gesteuert. Beim Anlegen einer verschlüsselten Partition muss zum Anfang festgelegt werden, welcher Chiffriermodus verwendet werden soll. Außerdem legt man fest, ob ein Passwort oder eine Schlüsseldatei zum Öffnen des Crypto-Containers verwendet werden soll.
Es ist zu einer zufällig generierten Datei (Schlüsseldatei) zu raten, da Passwörter im Allgemeinen leichter zu erraten oder zu knacken sind (gegebenenfalls mit einer Brute-Force-Attacke).

Schlüsseldatei erzeugen

Man sollte aus Sicherheitsgründen die Schlüsseldatei natürlich nicht auf der Festplatte oder demselben USB-Stick lagern. Ein anderer USB-Stick wäre angebracht, vor allem dann, wenn später mit einer Festplattenpartition und nicht mehr mit einem Test-USB-Stick gearbeitet wird. Die Schlüsseldatei (hier mit dem Namen schluessel-sdb1 im Verzeichnis /tmp) erzeugt man z. B. mit einer zufälligen Zeichenfolge, die mit Hilfe von /dev/urandom generiert wird.
$ head -c1024 /dev/urandom > /tmp/schluessel-sdb1

So erhält man einen Schlüssel, der nahezu unmöglich zu erraten/knacken ist. Doch Vorsicht! Wenn die Datei schluessel-sdb1 abhanden kommt oder beschädigt wird, kommt man nicht mehr an die Daten. Alternativ kann natürlich mit einem Passwort gearbeitet werden.

Anlegen einer verschlüsselten Partition

Die Partition (hier /dev/sdb1) wird mit der Datei /tmp/schluessel-sdb1 verschlüsselt. Der gewählte Chiffriermodus ist aes-xts-plain und wird mit einer Schlüssellänge von 256 Bit angewandt. Wenn man lieber mit einem Passwort arbeiten möchte, lässt man die Angabe der Schlüsseldatei einfach weg. Ratsam ist dann aber die Option -y, die das Passwort sicherheitshalber zweimal eintippen lässt, damit keine Tippfehler den späteren Zugriff verhindern. Um Ebengenanntes zu erreichen, wechselt man in die Konsole und setzt folgenden Befehl ab:
# cryptsetup luksFormat -y -c aes-xts-plain -s 256 /dev/sdb1 /tmp/schluessel-sdb1

Nach Eingabe des Befehls muss auch bestätigt werden, dass alle Daten der Partition überschrieben werden dürfen (dessen sollte man sich bewusst sein). Vorher sollte lieber ein Backup zu viel als eines zu wenig angelegt werden.

Öffnen des Crypto-Containers

Nun wird der Container mit dem Schlüssel geöffnet und das Gerät meinCryptoGeraet erzeugt. Dies befindet sich dann unter /dev/mapper/meinCryptoGeraet.
# cryptsetup luksOpen /dev/sdb1 meinCryptoGeraet --key-file /tmp/schluessel-sdb1

Beim ersten Öffnen muss die Partition noch formatiert werden, hier z. B. durch mke2fs mit der Option -j als ext3-Dateisystem:
# mke2fs -j /dev/mapper/meinCryptoGeraet

Jetzt kann die Partition ins System eingehängt werden:
# mount /dev/mapper/meinCryptoGeraet /mnt/meineDaten

Verwenden der verschlüsselten Partition

Nun kann die eingehängte Partition ganz normal verwendet werden. Dateien lassen sich anlegen, verschieben und löschen. Im normalen Gebrauch unterscheidet sie fast nichts von einer unverschlüsselten Partition. Ein kleiner Unterschied ist die Lese- und Schreibgeschwindigkeit, welche man aber vernachlässigen kann.

Schließen des Containers

Mit dem Schließen des Crypto-Containers entfernt man auch das Gerät. Vorher muss natürlich die Partition wieder aus dem System ausgehängt werden, was man durch folgende Befehle erreicht:
# umount /mnt/meineDaten
# cryptsetup luksClose meinCryptoGeraet

Weitere Passwörter/Key-Files

Insgesamt kann man bis zu acht Passwörter bzw. Schlüsseldateien verwenden (Slot 0 bis 7). Zum Hinzufügen eines weiteren Passwortes gibt man dieses Kommando ein:
# cryptosetup luksAddKey /dev/sdb1

Um eine weitere oder neue Schlüsseldatei zu nutzen, gibt es den Befehl:
# cryptosetup luksAddKey /dev/sdb1 /tmp/neuerSchluessel ?key-file /tmp/key-file.hdb3

Zu beachten ist, dass nach dem Gerät (/dev/sdb1) erst die neue Schlüsseldatei angegeben wird und dann zur Authentifizierung ein bestehender Schlüssel.

Löschen eines Passwortes/Schlüsseldatei

Möchte man z. B. den Keyslot Nummer 5 löschen, nutzt man folgenden Befehl:
# cryptsetup luksDelKey /dev/sdb1 5

Um die Nummer des Keyslots herauszufinden und weitere Informationen über den Crypto-Container einzusehen, gibt es die Option luksDump:
# cryptsetup luksDump /dev/sdb1

Fazit

Kryptografie ist ein sehr komplexes Thema. Man sollte sich damit auseinandersetzen, nicht nur was die Befehle von cryptsetup angeht, sondern ebenso wie die Algorithmen (zumindest im Groben) funktionieren und wie das ganze System ineinandergreift. Wichtig ist erst einmal, alles auszuprobieren, damit man später auch an seine Daten kommt und sich nicht aussperrt!

Weiterführende Artikel

Ein guter, wenn auch älterer Artikel ist z. B. im Linux Magazin erschienen (Link). Zwei sehr gute Wiki-Einträge im Gentoo-Wiki kommen von Misterjack (Link) (Link), die mir bei meinen ersten dm-crypt-Versuchen sehr geholfen haben. Außerdem gibt es auf der Seite des Entwicklers (Link) weiterführende Links und Infos.

Alternativen

Es gibt natürlich auch andere Programme, um Partitionen zu verschlüsseln. TrueCrypt (für Linux, Mac OS X und Windows erhältlich) (Link) gehört sicherlich zu den bekanntesten und in der Windows-Welt auch zu den verbreitetsten Verschlüsselungsprogrammen. Als Vorgänger von dm-crypt kann man die Variante Linux-Kernel plus cryptoloop (Link) ansehen. Sie ist allerdings schon etwas veraltet.

Anmerkung von Computerseite-Spezial.de: einen Einführungsartikel über TrueCrypt finden Sie unter der Rubrik "Ausgewählte Programme": (Link).


Links
  1. http://de.gentoo-wiki.com/wiki/DM-Crypt
  2. http://www.freiesmagazin.de/freiesMagazin-2009-03
  3. http://www.linux-magazin.de/heft_abo/ausgaben/2005/08/geheime_niederschrift
  4. http://de.gentoo-wiki.com/wiki/DM-Crypt
  5. http://de.gentoo-wiki.com/wiki/DM-Crypt/Daten-Partition_verschl\%C3\%BCsseln
  6. http://www.saout.de/misc/dm-crypt/
  7. http://www.truecrypt.org/
  8. http://tldp.org/HOWTO/text/Cryptoloop-HOWTO


Autoreninformation

Martin Böcher benutzt seit vielen Jahren Linux und andere freie Software. Um seine Daten zu schützen, beschäftigt er sich mit Kryptografie und anderen Sicherheitsmechanismen im Netzwerk und im Serverbereich.


You are here: