Festplattenverschlüsselung
Wozu braucht man Festplattenverschlüsselung
- Der böse Dieb hat mein Notebook geklaut
- Die Bullen nehmen meine Daten auseinander
- Die Konkurenzfirma hats auf den Sourcecode abgesehen
- Ich bin paranoid
Implementationen unter:
Linux
Linux 2.2 / 2.4 / 2.6
Unter Linux 2.4 wird die Festplattenverschlüsselung mit dem Loopback-Device realisiert. Es können alle im Kernel verwendbaren Verschlüsselungsalgorythmen verwendet werden, jedoch ist nach verschiedenen Angaben die Implementation "nicht sehr sauber" und das Design kann zu fehlern führen. Dazu kommt, dass es offensichtlich früher (oder auch heute ?) zahlreiche Bugs in der loop.c des Linux Kernels gegeben hat.
Die Dokumentation für cryptoloop des Linux Kernels (2.6) meint dazu auch:
WARNING: This device is not safe for journaled file systems like ext3 or Reiserfs.
Please use the Device Mapper crypto module instead, which can be configured to be on-disk
compatible with cryptoloop device.
Linux 2.6
Die bessere Methode um eine Verschlüsselung unter Linux 2.6 zu realisieren ist der Device-mapper. Die Implementation ist wesentlich sauberer und unterstützt (bis jetzt) alle filesystems, auch die "Journaled file systems". Es sollte allerdings eine Kernelversion von mindestens 2.6.4 verwendet werden. Empfohlen ist jedoch eine Kernelversion ab 2.6.10.
...more will come
Praktischer Teil
Linux
Es sollte sich beim Kernel mindestens um die Version 2.6.10 handeln, da dort und schon früher verschiedene Bugs gefixt wurden.
Mit Linux 2.6 einen verschlüsselten Container erstellen
Ein Container hat den Vorteil, dass wir die Partitionstabelle nicht anrühren müssen, gleîchzeitig die grösse des Containers aber wählen können.
Hierfür sollten folgende Teile im Kernel vorhanden sein.
loopback device
device mapper
crypto-targed
Wir erstellen uns ein Image-File mit 100MB (count=100)
% dd if=/dev/urandom of=/home/user/secret bs=1M count=100
Danach setzen wir die dateil /home/user/secret als loopback-Device
% losetup /dev/loop/0 /home/user/secret
Hier unterscheidet sich die Device-mapper methode von der alten loopback-crypt Methode. Diese würde nun nach dem aufruf von losetup noch die encryption-Option -e [cypher] benötigen.
% losetup -e aes /dev/loop/0 /home/user/secret
Da diese Methode jedoch veraltet ist, fahren wir wiefolgt fort.
Wir erstellen ein virtuelles Crypto device mittels dmcrypt
% cryptsetup -y create secret /dev/loop/0
Dies erstellt ein Device in /dev/mapper/ mit dem Namen secret. Also /dev/mapper/secret. Dieses virtuelle Device kann jetzt wie eine Partition behandelt werden.
Anmerkung: Die Option -y von cryptsetup bewirkt dass der Passphrase zwei Mal abgefragt wird. Sollten wir beim späteren "entschlüsseln" den Passphrase falsch eingeben, wird das Device trozdem erstellt. Beim mounten hingegen wird kein Dateiensystem gefunden.
Doch zunächst erstellen wir uns ein Dateiensystem auf dem Loopback-Device.
% mkfs.ext3 /dev/mapper/secret
Jetzt können wir das Device ganz normal mounten, wohin wir auch immer wollen.
% mount /dev/mapper/secret /mnt/secret
Mit Linux 2.6 einzelne Partitionen verschlüsseln
Wir haben, sagen wir mal, unsere /home Partion auf /dev/hda6 und natürlich root-Rechte.
Wir machen ein simples backup von home.
% tar -cvvjf home.tar.bz2 /home/
Partition unmounten...
% umount /home/
Festplatte zufällig überschreiben...
% wipe -qk /dev/hda6
Damit wird die Partition (/dev/hda6) aus /dev/random 4 Mal überschieben (Option -q). Die Option "-k" (keep) gibt an, dass die Datei nach Beendigung des Überschreibens nicht gelöscht wird.
Wir müssen nun den Key und den Passphrase festlegen. Es gibt mehrer Möglichkeiten dies zu tun. Die einfachste Möglichkeit, ist den Key im Partitionsheader festzulegen, und einen Passphrase um ihn freizuschalten.
% cryptsetup create homepartition /dev/hda6
Jetzt müssen wir einen Passphrase eingeben. Beim erstellen sollten man jedoch die Option -y verwenden, welche veranlasst, dass man das Password zweimal eingeben muss.
% cryptsetup -y create homepartition /dev/hda6
All dies erstellt ein virutelles Blockdevice, nämlich /dev/mapper/homepartition. Sollte man das Password allerdings zweimal falsch eingegeben haben, wird das Device auch erstellt. dann muss man das device wieder löschen.
% cryptsetup remove homepartition /dev/hda6
Sollten wir allerdings den Passphrase richtig eingegeben haben, können wir jetzt ein Dateiensystem auf dem virtuellen Blockdevice erstellen.
% mkfs.ext3 /dev/mapper/homepartition
Dann können wir unsere neue home-Partition mounten.
% mount /dev/mapper/homepartition /home/
...soweit erster Teil
- Rootfs verschlüsseln (ganze Festplatte zubetonieren)
Sollte man wirklich an einem Praktikum teilnehen wollen, empfiehlt es sich sehr stark ein Backup seiner zu verschlüssenen Daten anzulegen.
Probleme / Insecurity von Algorythmen / Anmerkungen
Journaling Dateiensysteme (ext3, Reiserfs, usw)
Man Sollte z.B. das Keyfile nicht auf einer ext3 oder einem anderen Journaling Filesystem haben. 1. Nicht im Klartext (logisch) und 2. ist das Löschen einer Datei auf einem Journaling Dateiensystem mit Problemen verbunden. Auch mittels wipe kann die Möglichkeit bestehen, dass die Datei nach Löschen aus dem Journaling wieder hergestellt werden kann, da ja das Dateiensystem "Buch führt" über die Veränderungen des Dateiensystems. Dies ist ja eines der Features von Journaling Dateiensystemen.
AES
Es gibt sehr ernstzunehmende Hinweise, dass AES möglichweise doch nicht so sicher ist wie von vielen Behauptet. Die Kritik bezieht sich hier hauptsächlich auf den Rijndael algorythmus dem AES zugrunde liegt. Die geringe Rundenanzahl von nur 10 Runden ist nach Meinung von Kryptografen zu wenig. Zudem die Struktur sehr einfach. Mehr dazu gibts auf hier:
http://www.cryptolabs.org/aes/WeisLucksAESattacksDS1202.html