Marc Reichelt: Kryptodateisysteme mit AES und losetup unter Linux

Beitrag lesen

Hallo Candid,

langsam verzweifle ich völlig mit dem komischen Konzept des Verschlüsselns von Partitionen unter Linux. Vorweg: ich benutze Gentoo Linux, aber das dürfte eigentlich nichts zur Sache tun.

Das erinnert mich doch an etwas - ja, ich bin in den letzten Monaten auch oft genau deswegen ausgerastet, mit so einer komischen Fehlermeldung (die ich gestern aber endlich unter Kubuntu beheben konnte).

Also, was ich eigentlich will: Eine Partition mit meinem normalen achtstelligen Passwort verschlüsseln, die ich ganz einfach mounten kann, ganz normal mit -o encryption=blabla, egal an welchem Rechner meine Platte hängt.

Da wirst du schon mal Probleme bekommen, die Programme verlangen heute mindestens 20 Zeichen.

Was mir stattdessen passiert:
Vor etwa einem halben Jahr habe ich mal eine Partition auf meiner Festplatte verschlüsselt, unter welcher Linuxdistribution ich das gemacht habe, weiß ich nicht mehr, und ob mein Linux mittlerweile neu installiert wurde, habe ich auch keine Ahnung. Ich verwandte damals den twofish-Algorithmus und verschlüsselte meine Partition gemäß einer Anleitung, an die ich mich nicht mehr erinnern kann. Ich kann mich aber erinnern, dass ich die Partition ganz normal mounten konnte, wie oben beschrieben.

Wenn du SUSE verwendet hattest, könntest du dich eventuell noch an diese Anleitung erinnern. Das Problem bei SUSE: Sie verwenden einen eigenen Twofish-Algorithmus. Die beste Lösung, um an eine solche Partition ranzukommen,  ist es, eine Live-CD/DVD von SUSE selbst zu verwenden, dort mit modprobe die entsprechenden Module (s.u.) zu laden, die Partition zu mounten und die Daten woanders unverschlüsselt zu sichern.

Gestern ist mir eingefallen, dass Daten, die ich vermisse, auf dieser Partition herumliegen könnten. Also versuchte ich, die Partition wie bisher zu mounten, jedoch heißt es nun, nachdem ich das Passwort eingegeben habe:
<code>Error: Password must be at least 20 characters.</code>
So, darauf kann ich schonmal nicht zugreifen.

Wie gesagt: Wenn es eine SUSE war, könntest du mit einer alten Live-CD Erfolg haben.

[...]
Jetzt ist das reinste Chaos entstanden. [...]
Ich verstehe irgendwie nicht, was da jetzt eigentlich passiert. Kann mir jemand das ganze Konzept genauer erläutern, oder mir einen Link auf eine anständige Anleitung schicken?

So, dann will ich mal an dieser Stelle eine gute Anleitung schreiben, die dir eventuell weiterhelfen kann. Da ich selbst schon viele Probleme mit losetup und dem Kryptofilesystem unter Linux hatte, umso ausführlicher.

1. Das Prinzip:
Es wird eine beliebige Datei oder Partition ausgesucht, die als Träger der verschlüsselten Information dient. Da die bisherigen Daten in dieser Datei oder Partition verloren gehen, ist es sinnvoll, eine neue Datei anzulegen (z.B. mit "dd if=/dev/urandom of=datei bs=1024 count=5120" für eine 5 MB große Datei) bzw. eine leere Partition zu verwenden.
Mit dem Programm "losetup" wird dann ein loopback-Gerät für diesen Träger eingerichtet. Das loopback-Gerät dient also zum Ver- und Entschlüsseln der Daten. Schematisch dargestellt:

+-------------------------------+       +-----------------+       +-------------+
| Träger (Datei oder Partition) |  -->  | Loopback-Device |  -->  | Mount-Punkt |
+-------------------------------+       +-----------------+       +-------------+

Als Beispiel:
+-----------+       +------------+       +-----------+
| /dev/hdb1 |  -->  | /dev/loop0 |  -->  | /mnt/hdb1 |
+-----------+       +------------+       +-----------+

Das kann sich natürlich je nach Fall unterscheiden, bei mir unter Kubuntu habe ich z.B. kein /dev/loop0, dafür aber ein /dev/loop/0.
Gewissermaßen kann man sich das Loopback-Gerät also als eine Partition vorstellen, die unverschlüsselten Daten enthält. Man greift genauso darauf zu als würde man eine unverschlüsselte Partition mounten.

2. Die Voraussetzungen
Dieser Punkt hat mich am meisten ausrasten lassen. Man benötigt auf jeden Fall einen gepatchten Kernel (mit den für verschlüsseltes losetup getrimmten util-linux). Dieser ist ziemlich oft schon vorhanden, wie z.B. bei Gentoo (gentoo-sources), (K)Ubuntu und SUSE.
Als nächstes braucht man die beiden Kernel-Module "aes" (für AES-Verschlüsselung, für andere Verschlüsselungen braucht man andere Module) und "cryptoloop". Ohne die beiden ging es bei mir nie. Weiterhin musste ich gestern unter Kubuntu noch das Paket "loop-aes-utils" mit apt-get nachinstallieren (ist Bestandteil von "universe"!).
Diese müssen entweder in den Kernel einkompiliert sein oder mit "modprobe aes" bzw. "modprobe cryptoloop" als root nachgeladen werden.

3. Die Anleitung

3.1 Träger vorbereiten bzw. erstellen
Als erstes sucht man sich eine freie Partition aus (im Beispiel: "/dev/hdb1") oder wählt einen freien Dateinamen (im Beispiel: "datei").
Die freie Datei sollte man zunächst noch erstellen (Achtung: falls "datei" existiert, wird diese überschrieben!):
  dd if=/dev/urandom of=datei bs=1024 count=5120
Im Beispiel wird eine 5 MB große Datei erzeugt (1024 Bytes * 5120).

3.2 Verschlüsseltes loopback-Gerät einrichten
WARNUNG: Mit dem folgenden Befehl werden alle Daten auf dem gewählten Träger gelöscht!
  losetup -e aes256 /dev/loop0 <Träger>

Dabei ist <Träger> durch den gewählten Träger zu ersetzen, also in unserem Beispiel /dev/hdb1 bzw. datei.
/dev/loop0 muss hierbei ein freies loopback-Gerät sein. Um alle benutzten loopback-Geräte herauszufinden, kann man "losetup -a" verwenden.
Bei einigen Distributionen wie etwa (K)Ubuntu kann es auch /dev/loop/0 sein (da hier für die loopback-Geräte ein eigener Ordner existiert).
Das Passwort, dass man mit diesem Befehl vergibt, muss mindestens 20 Stellen lang sein, und es wird ohne Wiederholung eingegeben (also nicht vertippen!).

3.3 Dateisystem erstellen
Im Beispiel wird auf das nun existierende loopback-Gerät /dev/loop0 ein ext3-Dateisystem angelegt (es kann natürlich ein beliebiges Dateisystem verwendet werden):
  mkfs.ext3 /dev/loop0

3.4 loopback-Gerät freigeben
Um sicherzugehen, dass das oben eingetippte Passwort richtig eingegeben wurde, und um gleich einen richtigen Mountpunkt für das verschlüsselte Dateisystem anzulegen, wird das loopback-Gerät nun freigegeben:
  losetup -d /dev/loop0

3.5 Mountpunkt erstellen
Wir legen nun in der /etc/fstab einen neuen Eintrag an, der das verschlüsselte Dateisystem beschreibt:
  <Träger>   <Mountpunkt>   ext3   defaults,user,noauto,loop=/dev/loop0,encryption=aes256   0   0

<Träger> und <Mountpunkt> könnten in unserem Beispiel /dev/hdb1 und /mnt/hdb1 sein.
WICHTIG: Verwendet man mehrere verschlüsselte Dateisysteme, so muss stets ein anderes loopback-Gerät verwendet werden (also /dev/loop1, /dev/loop2 usw.).

Die beiden Einträge "user" und "noauto" in den Optionen sind wichtig, wenn man die Partition als normaler User (und nicht als root) mounten möchte, und wenn man verhindern möchte dass beim Booten des PCs das Passwort eingegeben werden muss (insbesondere für einen Server, für den man nur einen SSH-Zugriff hat, wäre das fatal, da der SSH-Dienst erst danach startet).

3.6 Verschlüsselte Partition mounten und umounten
Das geht jetzt ganz einfach über mount und umount:
  mount <Mountpunkt>
  umount <Mountpunkt>

Bei "mount" muss man stets das Passwort eingeben, das man für die verschlüsselte Partition gewählt hat.

So, ich hoffe, dass dies dein Problem geklärt hat, und einigen Anfängern in diesem Bereich helfen könnte.
Mein Tipp für deine beiden neueren Kryptodateisysteme: Hast du bei denen auch garantiert ein freies loopback-Gerät gewählt? Wenn das eine Dateisystem /dev/loop0 benutzt, kann das andere dieses natürlich nicht mehr verwenden...

Eine weitere kleine Anleitung gibt es übrigens auch auf Pro-Linux.
Falls jemand noch Fehler findet oder etwas nicht ganz versteht: Einfach nochmals nachfragen! :-)

Freundliche Grüße & in Hoffnung, geholfen zu haben

Marc Reichelt || http://www.marcreichelt.de/

--
Linux is like a wigwam - no windows, no gates and an Apache inside!
Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
http://emmanuel.dammerer.at/selfcode.html