Festplattenverschlüsselung mit losetup

Dieses Thema im Forum "Linux & BSD Tutorials" wurde erstellt von Crack02, 7. Februar 2006 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 7. Februar 2006
    da es inzwischen auch möglich ist, mit truecrypt (TrueCrypt - Free Open-Source On-The-Fly Disk Encryption Software for Windows 7/Vista/XP, Mac OS X and Linux) container unter linux zu erstellen, ist das vielleicht einfacher zu handhaben, als die umständliche losetup variante.


    "losetup" ist ein Teil Paketes "util-linux", welches bei Bedarf nachinstalliert werden muss.
    SuSE-Nutzer können dies über

    Code:
    yast -i util-linux
    Bei Debian verläuft eine nachträgelich Installation ähnlich einfach:

    Code:
    apt-get install util-linux
    Bei SuSE 9.0 habe ich die Erfahrung gemacht, dass man in in die version 2.12 von util-linux noch einen patch einspielen und das paket von hand compilieren musste.
    Hier gehe ich mal von einer neueren Version oder einer anderen Distribution aus.

    Außerdem müssen (entweder direkt im Kernel oder als Module) "loop", "cryptoloop" sowie mindestens ein Cipher (Algorithmus, z.B. AES, Blowfish, Twofish, Serpent, DES...) vorhanden sein.
    Bei den meisten fertigen Kernelimages ist "loop" entweder direkt integriert oder als Modul dabei, "cryptoloop" hingegen als Modul oder im schlechtesten Fall, gar nicht vorhanden. Wenn dies der Fall sein sollte, kommt man um einen neuen handgearbeiteten Kernel nicht herum.

    Sofern Module vorhanden sind, diese mit

    Code:
    modprobe <modulname>
    laden.
    Das wären in unserem Fall (hier AES als Beispielalgorithmus).

    Code:
    modprobe loop
    modprobe cryptoloop
    modprobe aes
    Mit

    Code:
    lsmod
    vergewissern wir uns, ob die Module korrekt geladen sind.

    Die aktiven Cipher findet man in /proc/crypto

    Code:
    cat /proc/crypto

    Jetzt kommts drauf an, ob ein Dateicontainer erstellt werden soll, eine Partiton oder eine ganze Festplatte verschlüsselt werden soll.
    Gehen wir mal von einem Dateicontainer mit 10GB Größe aus.

    Wir erstellen uns also aus dem Zufallsgenerator eine 10GB große Datei.

    Code:
    dd if=/dev/urandom of=/daten bs=1M count=10240 &
    
    Zur Erklärung: 
    dd konvertiert oder kopiert Dateien
    if=/dev/urandom if ist die Quelle und in unserem Fall der einfach Zufallsgenerator urandom. 
     Alternativen wären /dev/zero (Nullgenerator) und /dev/random (normaler Zufallsgenerator).
     Die Frage, wieso nicht das eine oder das andere benutzt wird, ist leicht zu beantworten:
     /dev/random würde zu lange dauern (und damit mein ich Zeitspannen, je nach Kapazität von
     mehreren Tagen, Wochen) und /dev/zero spuckt nur Nullen und kein Datengulasch aus.
     Verschlüsselte Dateien wären also aus dem Haufen Nullen leicht zu isolieren.
    of=/daten of ist der Zielort und das ist bei uns im Wurzelverzeichnis / die Datei "daten".
    bs=1M bs gibt die Menge an Daten an, die bei jedem Durchlauf geschrieben werden.
     Hier 1M, entspricht 1 Megabyte oder 1.048.576 Byte.
    count=10240 count gibt die Anzahl der Durchläufe an, in unserem Fall 10240, weil wir damit am Ende
     auf genau 10 Gigabyte kommen.
    & & startet den Prozess im Hintergrund, d.h. wir können unsere aktuelle Shell weiter
     verwenden. Aus dem einfachen Grund, weil dieser Vorgang lange (bis zu einigen Stunden)
     dauern kann.
    Das ganze wie gewünscht anpassen und durchlaufen lassen.

    Sobald die Datei voller Datenmüll fertig ist, bügeln wir unsere Verschlüsselung darüber. Losetup fungiert dann als Datenvermittler zwischen dem Rechner und dem Dateicontainer. Der Begriff "Live-Verschlüsselung" o.ä. sollte jeder schon einmal gehört haben.

    Code:
    losetup -e aes-256 /dev/loop0 /daten
    
    Zur Erklärung:
    losetup das losetup-Programm.
    -e aes-256 -e definiert den Cipher (Algorithmus) hier AES mit einer Schlüssellänge von 256 bit.
     Man könnte auch einen stärkeren oder schwächeren Schlüssel wie 128 bit oder 512 bit
     oder 1024 bit nehmen. Jedoch geht das alles zu Lasten der Performance. 256bit oder
     512bit ist ein guter Kompromiss zwischen Sicherheit und Performance.
    /dev/loop0 das Loop-Laufwerk.
    /daten unser Dateicontainer.
    Dann noch ein kugelsicheres Passwort eingeben (z.B. " W39h§jg!jnaEn$/gs "). Dieses Passwort gut wählen und merken. Es kann nachträglich nicht geändert werden und bei Verlust sind alle Daten im Eimer!!
    Jetzt ist unser Dateicontainer über eine Live-Verschlüsselung mit einem block device oder loop device (hier /dev/loop0) verbunden. Also erstellen wir uns ein Dateisystem darauf:

    Code:
    mkfs.ext2 /dev/loop0
    bzw.

    Code:
    mkfs -t ext2 /dev/loop0
    
    Zur Erklärung:
    mkfs.ext2 ein Symlink auf "mkfs -t ext2".
    mkfs Programm zum Formatieren (Dateisysteme erstellen) von Laufwerken.
    -t ext2 -t definiert das Dateisystem, hier ext2.
     Wieso kein ext3 oder reiserfs? Ganz einfach. Das sind beides journaling filesystems,
     d.h. einfach ausgedrückt: Diese Dateisysteme führen Buch über alles was darauf
     geschrieben und gelöscht wird. Das sollte jedoch bei sensiblen Daten nicht der Fall sein.
    /dev/loop0 das Laufwerk, welches unseren Dateicontainer beherbergt.
    Jetzt haben wir auf unserer Datenmüllhalde ein verschlüsseltes Dateisystem und können unseren Dateicontainer wie eine ganz normale Festplatte einbinden.

    Code:
    mount -t ext2 /dev/loop0 /dateicontainer
    
    Zur Erklärung:
    mount Programm zum einbinden von Laufwerken und Verzeichnissen.
    -t ext2 definiert das Dateisystem (bei bekannten Dateisystemen optional).
    /dev/loop0 der Dateicontainer.
    /dateicontainer der Ordner, in den das loop device eingebunden werden soll,
     hier beispielshalber im Wurzelverzeichnis / der Ordner "dateicontainer.
    Alles was nun im Ordner /dateicontainer passiert wird verschlüsselt in unserer 10GB Datei abgelegt bzw. wieder herausgeholt.

    Wenn wir das Laufwerk nicht mehr brauchen lösen wir die Verbindung mit dem Laufwerk:

    Code:
    umount /dateicontainer
    
    Zur Erklärung:
    umount Befehl zum Lösen von Laufwerksverbindungen
    /dateicontainer Der Ordner, dessen Verbindung mit einem Laufwerk gelöst werden soll.
    Jetzt ist zwar der Ordner weg, jedoch ist der Dateicontainer immernoch mit dem loop device verbunden, d.h. er kann jederzeit ohne Passworteingabe wieder eingebunden werden.

    Um die Verbindung zwischen der Datei und dem loop device zu lösen geben das hier ein:

    Code:
    losetup -d /dev/loop0
    
    Zur Erklärung:
    losetup das losetup-Programm
    -d /dev/loop0 -d definiert das loop device, dessen Verbindung gekappt werden soll und
     /dev/loop0 ist das block device, welches mit /daten verbunden ist.
    Jetzt ist /daten wieder eine ganz normale uneinbare 10GB große Datei.

    Zum wiedereinbinden einfach die Schritt wiederholen (ausgenommen vom Dateisystem erstellen, denn das würde sämtliche Daten zerstören).
    Wichtig dabei ist, das der Cipher-Parameter im losetup-Befehl (sprich -e aes-256) exakt dem Anfangsparameter entspricht. losetup wird bei einem falschen Parameter zwar keine Fehlermeldung ausgeben, jedoch wird das mounten des loop devices scheitern.
    Wer klug ist und nicht viel Zeit hat, schreibt sich ein kleines Script welches alle notwendigen zum Wiedereinbinden automatisiert (ausgenommen der Passworteingabe versteht sich).


    FaQ:
    F: Gibt es noch andere Möglichkeiten zur Verschlüsselung?
    A: Ja, z.B. loop-aes oder dmcrypt (einfach mal googlen).

    F: Das ist total kompliziert.
    A: Machst jetzt einen auf Mädchen oder was? Sicherheit hat seinen Preis

    F: Wieso ausgerechnet losetup?
    A: Fällt mir am leichtesten, außerdem bin ich damit flexibel. Kann ich einfach Cipher und Keysize bestimmen.

    F: Hast du immer langeweile?
    A: Nein, weil mich ständig irgendwelche dummen Leute nach irgendwas fragen. Ich glaub ich änder meinen Nick auch mal. Darf ich vorstellen? DrCrack....


    created and licensed under MIT-License
    # EOF
     
  2. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.