Laufwerke verschlüsseln mit Loop-AES
 

Von Jan Allgeier

Inhalt
    1. Einleitung
    2. Loop-AES - so wird's installiert
    3. Einrichten einer verschlüsselten Partition (als root!)
    4. Einrichten eines verschlüsselten Containers (als root!)
    5. Problemlösungen und weitere Infos

1. Einleitung

Diese kleine Anleitung beschreibt, wie sich mit Hilfe von Loop-AES (loop-aes.sourceforge.net) ein verschlüsseltes Laufwerk unter Linux erstellen lässt. Loop-AES habe ich ausgewählt, weil es sehr ausgereift ist, bei mir seit Jahren problemlos arbeitet und ständig weiterentwickelt wird. Die Verschlüsselung erfolgt dabei durch das modifizierte Kernelmodul "loop", verwendet wird der Algorithmus AES (Advanced Encryption Standard), der sich in verschiedenen Schlüssellängen (128, 196 und 256 Bit) verwenden lässt. Wahlweise lässt sich mit dem Modul eine komplette Partition oder ein virtuelles Laufwerk verschlüsseln.

2. Loop-AES - so wird's installiert

Für die Installation sind folgende Programmpakete erforderlich:

Zuerst besorgen wir uns die aktuelle Version von Loop-AES unter der Adresse loop-aes.sourceforge.net und das aktuelle Paket von util-linux unter ftp://ftp.kernel.org/pub/linux/utils/util-linux/. Anschließend entpacken wir beide Pakete und prüfen, ob die Rahmenbedingungen wie Compiler, Bibliotheken und Kernel-Sourcecode auf unserem System vorhanden sind. Gegebenenfalls die fehlenden Pakete nachinstallieren, meist wurden sie auf den CDs mitgeliefert oder können aus dem Internet für die jeweilige Distribution nachgeladen werden.

Das Paket util-linux enthält so wichtige Programme wie z.B. mount, die für die Verschlüsselung modifiziert werden müssen. Mit cd util-linux* wird in das Verzeichnis des Programmpakets gewechselt. Mit


cat /pfad/zu/Loop-AES/util-linux-2.xx.diff | patch -p1

werden die entsprechenden Programme gepatcht, mit make übersetzt und danach können sie installiert werden. Dies geschieht mit folgenden Befehlen (als root!):


cd util-linux*
./configure
make ADD_RAW=no
cd mount
install -m 4755 -o root mount umount /bin
install -m 755 losetup /sbin

Im Verzeichnis mount befinden sich noch die veränderten Manpages von fstab, losetup, umount und mount. Sie sollten in die entsprechenden Pfade kopiert werden und die alten Versionen überschreiben. Leider sind die Pfadangaben zu den Manpages nicht bei allen Linux-Distributionen gleich, sodass wir sie zuerst auf dem System suchen müssen. Mit man -w mount finden wir z.B. heraus, wo die Beschreibung zum Befehl mount liegt.

Nach der Installation der Programme mount, umount und losetup wechseln wir ins Verzeichnis von Loop-AES und übersetzen das Kernelmodul mit make (als root!). Ein make install ist nicht nötig, das Modul sollte bereits in einem Unterverzeichnis von /lib/modules liegen. Der Befehl make tests zeigt, ob soweit alles funktioniert.

Wenn ja, können wir nun eine verschlüsselte Partition oder einen entsprechenden Container erstellen. Die beiden Vorgänge sind sich sehr ähnlich, ich behandle sie zugunsten der Übersichtlichkeit dennoch getrennt.

3. Einrichten einer verschlüsselten Partition (als root!)


losetup -e AES128 /dev/loop0 /dev/hda7
mkfs -t ext2 /dev/loop0
losetup -d /dev/loop0
mkdir /mnt/crypted

Mit losetup wird die zu verschlüsselnde Partition ausgewählt, in meinem Beispiel ist dies /dev/hda7 (Achtung: Daten auf /dev/hda7 werden überschrieben!). Als Schlüssellänge habe ich 128 Bit ausgewählt, meiner Meinung nach völlig ausreichend. Anschließend erfolgt die Frage nach einem Passwort, es muss mehr als 20 Zeichen besitzen. Der Befehl mkfs -t ext2 erstellt ein ext2-Dateisystem, es können jedoch auch andere Dateisysteme verwendet werden.

Als nächstes muss die Datei /etc/fstab abgeändert werden, die Zeile


/dev/hda7 /mnt/crypted ext2 defaults,loop=/dev/loop0,encryption=AES128 0 0

wird hinzugefügt. Möchte man nicht bei jedem Rechnerstart automatisch nach dem Passwort gefragt werden, empfiehlt es sich, die Option noauto noch unterzubringen.

Das verschlüsselte Laufwerk kann - wie andere Laufwerke auch - mit dem einfachen Befehl mount /mnt/crypted eingebunden werden. Mit umount /mnt/crypted und losetup -d /dev/loop0 wird es wieder ausgehängt.

Übrigens lässt sich mit dem ebenfalls unter loop-aes.sourceforge.net vorhandenen Tool aes-pipe eine bereits bestehende Partition verschlüsseln. Der entsprechende Befehl lautet:


aespipe -e AES128 -T < /dev/hda7 > /dev/hda7

Allerdings sollten sicherheitshalber wichtige Daten vor der Prozedur gesichert werden. Dank geht an Matthias Schniedermeyer für den Tipp.

4. Einrichten eines verschlüsselten Containers (als root!)

Diese Option empfiehlt sich dann, wenn gerade keine geeignete Partition frei ist und die Partitionstabelle nicht geändert werden soll.


dd if=/dev/zero of=/container bs=1024 count=5120
losetup -e AES128 /dev/loop0 /container
mkfs -t ext2 /dev/loop0
losetup -d /dev/loop0
mkdir /mnt/crypted

Der Befehl dd lässt eine Datei (unseren Container) mit 5 MB Größe entstehen (5120x1024 Byte). losetup weist dem Container das Loop-Device zu und fragt nach dem Passwort, mkfs erstellt ein ext2-Dateisystem und mkdir erstellt das Verzeichnis, in das später die zu verschlüsselnden Daten kommen.

Wie bei meinem Beispiel mit der verschlüsselten Partition muss wieder die Datei /etc/fstab angepasst werden, die Zeile


/container /mnt/crypted ext2 defaults,loop=/dev/loop1,encryption=AES128 0 0

wird hinzugefügt.

Das Laufwerk kann mit umount /mnt/crypted und losetup -d /dev/loop0 wieder ausgehängt werden.

5. Problemlösungen und weitere Infos

Probleme gibt es leider bei allen neueren SuSE-Distribution. SuSE liefert eine eigene Verschlüsselung mit. Leider liegt diese nicht als Modul vor, sondern wurde fest in den Linux-Kernel eingebacken. Die Lösung des Problems besteht darin, den Kernel mit make xconfig neu zu konfigurieren und darauf zu achten, dass unter "Blockdevices" die Option »Loopback device support« auf m wie Modul gesetzt wird. Anschließend muss der Kernel neu übersetzt und installiert werden. Linux-Neulingen empfehle ich allerdings nicht, einen eigenen Kernel zu bauen.

Ebenfalls sollten wir anhand des Datums prüfen, ob das alte Modul loop.o von Loop-AES überschrieben wurde. Dazu gehen wir unter /lib/modules in das entsprechende Verzeichnis unseres Kernels und schauen, ob im Verzeichnis block das Modul loop.o überschrieben wurde.

Viele weitere Einsatzmöglichkeiten von Loop-AES werden in der englischen README beschrieben, sie alle aufzuführen würde den Rahmen meiner kleinen Anleitung sprengen. Unter dem Namen Encrypted-Root-Filesystem-HOWTO gibt es unter http://www.tldp.org/HOWTO/Encrypted-Root-Filesystem-HOWTO/ eine Anleitung, welche die Verschlüsselung der kompletten Festplatte mit Loop-AES ausführlich beschreibt.


Copyright (C) Jan Allgeier
Erschienen auf Pro-Linux, letzte Änderung 2004-02-25