Seit der Veröffentlichung von Debian Etch nutze ich standardmäßig die Festplattenverschlüsselung mit LVM des Debian-Installationsprogramms. Im folgenden möchte ich kurz die wichtigsten Schritte aufzählen, die nötig sind um eine einzelne USB-Festplatte oder einen USB-Stick zu verschlüsseln und über dabei gemachte Erfahrungen berichten. Mir hat der umfangreiche Artikel Festplattenverschlüsselung mit Debian GNU/Linux sehr geholfen, welchen ich ebenfalls unbedingt empfehle zu lesen.
Warum Verschlüsselung?
USB-Festplatten, USB-Sticks oder Laptops sind nicht nur praktisch sondern bergen leider auch das Risiko leicht verloren zu gehen und sind auch häufiger der Gefahr von Diebstahl ausgesetzt. Oft werden aber gerade auf diesen mobilen Datenträgern persönliche Dokumente, Bilder oder Emails mitgeführt, die nicht jeder lesen soll. Einen sicheren Schutz gegen solche Szenarien bietet die komplette Verschlüsselung des Datenträgers.
Vorbereitung
Bevor es losgeht sollte das Modul dm_crypt im Kernel geladen sein. Wurde die Systemfestplatte schon bei der Installation verschlüsselt, ist das Modul standardmäßig geladen. Bei den mit Debian oder Ubuntu mitgelieferten Kerneln lässt es sich mit root Rechten und dem Befehl
modprobe dm_crypt
aktivieren. Im folgenden müssen alle Befehle als root Benutzer ausgeführt werden (bei Ubuntu sudo voranstellen). Als Beispieldatenträger habe ich /dev/sdc gewählt.
Bei vorher schon beschriebenen Festplatten empfiehlt es sich, alle vorhandenen Daten vor der Verschlüsselung nachhaltig zu löschen oder die Festplatte mit Zufallswerten zu überschreiben. Dafür gibt es verschiedene Möglichkeiten.
- dd mit /dev/urandom als Quelle
- shred
dd und /dev/urandom
dd if=/dev/urandom of=/dev/sdc1 bs=10M conv=trunc
Mit dem oben angegebenen Befehl wird die komplette Partition /dev/sdc1 bitweise mit Zufallswerten überschrieben. Diese Methode wird häufig sowohl als Möglichkeit beschrieben Daten endgültig zu löschen als auch den Datenträger so vorzubereiten, dass die spätere Verschlüsselung nicht mehr von den mit dd geschriebenen Zufallswerten zu unterscheiden ist.
Während letzteres auf den ersten Blick sinnvoll und nachvollziehbar zu sein scheint, stellt sich doch die Frage, ob es sich hier nicht eher um "Security through Obscurity" handelt. Denn tatsächlich kommt es einzig und allein auf die Güte des Verschlüsselungsalgorithmus an inwiefern tatsächliche Sicherheit gegeben ist oder nicht.
Bei heutigen Plattengrößen muss man sich allerdings stark in Geduld üben. Folgendes Ergebnis erhielt ich bei einer 1,5 TB Festplatte.
dd: Schreiben von „/dev/sdc1“: No space left on device
143077+5 Datensätze ein
143076+5 Datensätze aus
1500299265024 Bytes (1,5 TB) kopiert, 229675 s, 6,5 MB/s
Obwohl die Option bs=10M die Performance deutlich erhöhen konnte, dauerte es dennoch 229675 Sekunden oder knapp 64 Stunden! die Festplatte vollständig mit Zufallswerten zu überschreiben.
Leider gibt es keine direkte Option für eine Fortschrittsanzeige bei Benutzung von dd. Dennoch kann man sich mit dem Befehl
kill -USR1 $pid
eine kleine Statistik anzeigen lassen. Dadurch wird dd nicht abgebrochen. Die Prozess ID ($pid) von dd lässt sich z.B. mit ps -A|grep dd ermitteln. Eine Alternative zu dd bietet das Programm dcfldd.
dcfldd if=/dev/urandom of=/dev/sdc1 bs=10M statusinterval=10 conv=notrunc
Im Prinzip ist dcfldd eine Erweiterung zu dd. Besonders interessant ist hierbei die Option statusinterval, mit welcher der Fortschritt fortlaufend angezeigt wird.
shred
Wer hingegen eine weitere sichere Möglichkeit unter Linux sucht, um seine alten Daten dauerhaft zu löschen, kann auch auf das Programm shred zurückgreifen.
shred -n2 -z -v /dev/sdc
Dieser Befehl hätte den gesamten Datenträger sdc zweimal komplett mit Zufallszahlen überschrieben und danach noch einmal komplett mit Nullen. Wie oft sollte man die Daten nun tatsächlich überschreiben? Ein Artikel auf heise.de gibt hierauf die Antwort: Einmal komplett alles mit Zufallszahlen zu überschreiben genügt schon. Da aber natürlich auch heise.de von bösartigen Aliens kontrolliert werden kann, bleibt als einzig sicherer Weg die Daten endgültig zu vernichten nur das Einschmelzen der Festplatte selbst.
Luksformat
Die eigentliche Verschlüsselung des Datenträgers ist ein Einzeiler. Dazu kommt der Wrapper luksformat zum Einsatz, der die Programme cryptsetup und mkfs ausführt.
luksformat -t ext4 /dev/sdc1
Damit wird der Datenträger mit AES-256 verschlüsselt und ein ext4 Dateisystem angelegt. Hierbei wird man drei Mal aufgefordert das Passwort zum Entsperren einzugeben. Benutzt man Ubuntu wird der verschlüsselte Datenträger automatisch erkannt und man muss beim Einhängen nur noch dieses Passwort eingeben. Manuell entsperren und in /media/backup mounten, lässt sich die Festplatte mit
cryptsetup luksOpen /dev/sdc1 sdc1_crypt
mount /dev/mapper/sdc1_crypt /media/backup
Zum Sperren des Datenträgers geht man in umgekehrter Reihenfolge vor.
umount /media/backup
cryptsetup luksClose /dev/mapper/sdc1_crypt
Nützliches
Der reservierte Speicher auf der Festplatte ist mit 5% bei reinen Backuplösungen standardmäßig zu großzügig gewählt. Mit
tune2fs -m 1 /dev/mapper/sdc1_crypt
lässt sich der reservierte Speicher auf 1 % verkleinern.
Damit die Festplatte anstelle einer kryptischen UUID auch einen leicht wiedererkennbaren Namen beim Mounten erhält, kann man mit folgendem Befehl den Namen z.B. auf backup ändern.
tune2fs -L backup /dev/mapper/sdc1_crypt
Das waren schon die wichtigsten Schritte um eine Festplatte zu verschlüsseln. Wie eingangs schon geschrieben, empfehle ich für weitere Ideen zu diesem Thema diesen Artikel.
2 Replies to “Festplatten und USB-Sticks mit dm-crypt und LUKS verschlüsseln”