Laufwerke verschlüsseln mit Loop-AES
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.
Loop-AES - so wird's installiert
Für die Installation sind folgende Programmpakete erforderlich:
- Quellcode von util-linux: ftp://ftp.kernel.org/pub/linux/utils/util-linux/
- Loop-AES
- Entwickler-Umgebung (Kernel-Sourcecode ab 2.0, Compiler und Bibliotheken)
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.
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.
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.
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 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.