Planet Metax - Chaos & Logik

Verschlüsselte Datenträger und Images

23. Dez 2006 Verschlüsselte Datenträger und Images

Wie man unschwer erkennt, habe ich mich auf die Suche nach (relativ) sicheren, praktikablen und kompatiblen Verschlüsselungen gemacht. Der Hintergrund: einerseits interessiere ich mich sehr fü die Kryptographie, andererseits finde ich, dass die heutigen Computersysteme geradezu nachlässig sind bezüglich unserer Geheimnisse und persönlichen Daten.

Und wer jetzt das Killerargument „wer nichts verbotetes tut, muss nichts geheimhalten, ergo Datenschützer = Terroristen“ im Hinterkopf hat, dem sei gesagt, dass dieses Argument aus logischer Sicht sehr bedenklich ist:

Wie auch immer, ich machte mich jedenfalls (unter Linux) auf die Suche nach anwendbare Verschlüsselungstechniken.

Jetzt habe ich mich intensiver mit direkter Harbwarenaher Verschlüsselung mittels eines Device Mappers beschäftigt.

Es gibt unter Linux den Device Mapper dm-crypt, welcher verschlüsselte Datenträger in lesbarer Form in das Dateisystem einhängen kann. Dabei wird der Datenträger mit einem binären Key verschlüsselt.

Will man darauf zugreifen, muss man den Key irgendwie bereitstellen und über den Device Mapper die Partition als Blockdevice in eine Gerätedatei mappen. Wird die Erweiterung luks verwendet, so wird der binäre Schlüssel aus einem Passwort generiert, das zum entschlüsselten Einbinden ausreicht.

Man kann mit dieser Technik viel anfangen, aber ich beschränke mich hier auf die Basisfunktion.

Mein Ziel: Ich möchte eine Imagedatei erzeugen, die verschlüsselt ist und vor jedem Einbinden erst mit der Passphrase entschlüsselt werden muss. Eine Imagedatei ist eine Datei, die eine „virtuelle Festplatte“ darstellt, die von einem Device Mapper dem System als reales Gerät simuliert wird. Ergo ein abgeschlossener Bereich im Dateisystem, dessen Inhalt in einer einzigen Datei lagert.

Schritt 1: Erstellen der virtuellen Partition

Ich möchte (da ich evtl. mehrere dieser Images habe) ein Verzeichnis dafür anlegen. Dann erstelle ich die Datei und fülle sie mit Pseudo-Zufallswerten (Achtung: Zufallswerte können lange dauern, wenn man keinen schnellen Prozessor hat; wenn du darauf verzichten willst, nimm lieber if=/dev/zero). Die resultierende Größe ergibt sich aus den Parametern „bs“ (bytesize, Größe eines Blpocks) und „count“ (Anzahl der Blöcke): Größe in Bytes = bs * count.

metax@metalinux:~$ sudo bash root@metalinux:~# mkdir ~/virtual root@metalinux:~# cd virtual/ root@metalinux:~/virtual# touch privacy.img root@metalinux:~/virtual# dd if=/dev/urandom of=privacy.img bs=1000000 count=500 500+0 records in 500+0 records out 500000000 bytes (500 MB) copied, 124,149 Sekunden, 4,0 MB/s

Schritt 2: Verschlüsseln

Es gibt verschiedene Verschlüsselungsalgorithmen. Um zu sehen, welche gerade in deinem Kernel laufen, kannst du cat /proc/crypto aufrufen.

Alles von Typ "cipher" ist für diesen Zweck geeignet. Es gibt beispielsweise „aes“ und „twofish“. Evtl. musst du die entsprechenden Module in den Kernel laden, damit du sie verwenden kannst:

root@metalinux:~/virtual# modprobe aes root@metalinux:~/virtual# modprobe twofish root@metalinux:~/virtual# cat /proc/crypto name : md5 module : kernel type : digest blocksize : 64 digestsize : 16 name : aes module : aes type : cipher blocksize : 16 min keysize : 16 max keysize : 32 name : twofish module : twofish type : cipher blocksize : 16 min keysize : 16 max keysize : 32

So, jetzt geht's los. Als erstes musst du deine Imagedatei als sog. „Loop“-Device simulieren (der Kernel muss das unterstützen! Falls deine Distribution das nicht kann, musst du einen eigenen Kernel konfigurieren, der diese Funktion aktiviert hat):

root@metalinux:~/virtual# losetup -f privacy.img root@metalinux:~/virtual# ls /dev/loop 0

In meinem Fall ist das simulierte Gerät nun unter /dev/loop/0 zu finden.

Wenn man es statt mit einer Imagedatei mit einem echten Gerät zu tun hat, kann man sich alle Befehle mit dem Loop Device Mapper natürlich sparen und gleich den richtigen Gerätepfad verwenden.

Als nächstes muss ich die Verschlüsselung initiieren:

root@metalinux:~/virtual# cryptsetup -c aes-cbc-essiv:sha256 -y -s 256 luksFormat /dev/loop/0 WARNING! ======== Daten auf /dev/loop/0 werden unwiderruflich überschrieben. Are you sure? (Type uppercase yes): YES Enter LUKS passphrase: Verify passphrase: Command successful.

Nachdem das erledigt ist, sollte man das Gerät testweise einmal entschlüsseln:

root@metalinux:~/virtual# cryptsetup luksOpen /dev/loop/0 sicher Enter LUKS passphrase: key slot 0 unlocked. Command successful.

Schritt 3: Vorbereiten

Jetzt wurde das Gerät unter dem Namen „sicher“ im unverschlüsselten Zustand gemappt, so dass wir es jetzt bearbeiten können. Zuerst muss ein Dateisystem aufgespielt werden:

root@metalinux:~/virtual# mkfs.ext3 /dev/mapper/sicher mke2fs 1.38 (30-Jun-2005) Dateisystem-Label= OS-Typ: Linux Blockgröße=1024 (log=0) Fragmentgröße=1024 (log=0) 121920 Inodes, 487252 Blöcke 24362 Blöcke (5.00%) reserviert für den Superuser erster Datenblock=1 [...]

Schritt 4: Einbinden

Diese Schritte müssen jetzt jedesmal ausgeführt werden, wenn das verschlüsselte Medium eingebunden werden soll (evtl. muss vorher - z.b. nach einem Neustart - das Loopbackgerät mit losetup -f privacy.img neu gemappt werden.)

Wurde das Gerät zwischendurch geschlossen, muss die Verbindung zum Gerät über den Device Mapper neu geöffnet werden:

root@metalinux:~/virtual# cryptsetup luksOpen /dev/loop/0 sicher Enter LUKS passphrase: key slot 0 unlocked. Command successful.

Jetzt kann die virtuelle Festplatte zum ersten mal gemountet werden:

root@metalinux:~/virtual# mkdir -p /mnt/sicher root@metalinux:~/virtual# mount /dev/mapper/sicher /mnt/sicher/

Wenn kein Fehler auftritt, war der Vorgang erfolgreich.

Jetzt kann man mit den Daten auf dem Datenträger bzw. der Imagedatei arbeiten.

Schritt 5: Verbindung trennen

Möchte man die Verbinung trennen und damit die Verschlüsselung wieder aktivieren, muss man zuerst den mount lösen und dann den Device Mapper deaktivieren.

root@metalinux:~/virtual# umount /mnt/sicher root@metalinux:~/virtual# cryptsetup luksClose sicher root@metalinux:~/virtual# exit exit metax@metalinux:~$

---
Hinweis: Dieser Artikel ist auch zu finden unter: "Verschlüsselte Datenträger und Images" auf Kahl-com.de

Schlagworte: HowTo, Linux, Sicherheit, Technik
Veröffentlicht am 23.12.2006 19:24 in Linux | Keine Kommentare »

Kommentare

Es sind noch keine Kommentare vorhanden

Kommentar schreiben:

Mit (*) gekennzeichnete Felder sind optional.
BBCode im Kommentarfeld erlaubt.