Aufbewahren geheimer Daten unter GNU/Linux


Der folgende Text ist ein Tutorial zum Artikel Aufbewahrung von vertraulichen Daten unter GNU/Linux (Hakin9 01/2005). Wir gehen davon aus, dass die folgenden Übungen mit Hilfe der beigefügten Hakin9 Live-CD durchgeführt werden.

Achtung! Wir raten von der Verschlüsselung wichtiger Daten im System Hakin9 Live ab – es besteht die Gefahr, dass nach dem nächsten Hochfahren des Rechners diese Daten unwiederbringlich verloren sind.

Ziel: Nach der Analyse der Übungen sollte der Leser imstande sein:

  • mit Hilfe des Pakets GnuPG einzelne Dateien sowohl symmetrisch als auch asymmetrisch zu verschlüsseln,
  • mit Hilfe des Werkzeugs EncFS ein verschlüsseltes Verzeichnis zu erstellen und anschliessend zu benutzen,
  • mit Hilfe des Werkzeugs cryptoloop eine verschlüsselte (reale oder virtuelle) Partition zu erstellen und einzubinden.

    Symmetrische Dateiverschlüsselung – paket GnuPG

    In der ersten Übung verwenden wir das Paket GnuPG um eine einzelne Datei zu verschlüsseln. In unserem Beispiel handelt es sich um die Datei HK1204.pdf.

    [01] Im Tutorial wird der AES-Algorithmus verwendet (er verfügt über das beste Qualität/Leistungs-Verhältnis). Wir fangen mit dem Laden des Kernmoduls an, das für die Unterstützung dieses Algorithmus zuständig ist:

    $ su -
    # modprobe aes
    # exit

    [02] Wir erstellen das Verzeichnis /home/haking/encrypted, in dem unsere verschlüsselten Daten aufbewahrt werden:

    $ mkdir ~/encrypted

    In diesem Verzeichnis speichern wir die Datei HK1204.pdfab.

    [03] Es ist an der Zeit, die Daten zu verschlüsseln. Versuchen wir also, die Datei HK2104.pdf zu verschlüsseln, indem wir folgenden Befehl eingeben:

    $ gpg --output ~/encrypted/cyph1 --symmetric --cipher-algo AES192 ~/encrypted/HK2104.pdf

    Dieser Befehl führt zur symmetrischen Verschlüsselung der Datei HK2104.pdf mit Hilfe des AES-Algorithmus mit einer Verschlüsselungsstärke von 192 Bits und speichert die Ergebnisdatei im Verzeichnis ~/encrypted/cyph1.

    [04] Um die Datei verschlüsseln zu können müssen wir ein Passwort eingeben. Denken wir kurz an einen Satz, der keinen Sinn hat und trotzdem leicht zu merken ist. Ein Elefant kauft nur Flaschen ohne Pfand. So lassen sich die Grünen nicht hassen. Wählen wir diesen Satz als unser Passwort.

    [05] Die Datei ist jetzt verschlüsselt. Wir sollten sicherheitshalber noch das Original löschen:

    $ shred -n 35 -z -u ~/encrypted/HK2104.pdf

    [06] Um die Datei zu entschlüsseln, verwenden wir folgenden Befehl:

    $ gpg --output HK2104.pdf --decrypt ~/encrypted/cyph1

    Verschlüsselte Verzeichnisse – EncFS

    [07] Bevor wir das Programm EncFS verwenden, sollten wir zunächst einmal zwei Verzeichnisse erstellen. Im ersten Verzeichnis (in unserem Fall ~/.crypto) werden die Dateien in verschlüsselter Form aufbewahrt (das Verzeichnis dient nur als Ablagefach, wir verwenden es eigentlich nicht). Im zweiten Verzeichnis (~/secret) werden die Dateien eingebunden (gemountet) und bei jedem Zugriff entschlüsselt. Die Einbindung erfolgt selbstverständlich erst nach der Eingabe des richtigen Passworts.

    $ mkdir ~/.crypto

    $ mkdir ~/secret

    [08] Im nächsten Schritt aktivieren wir den Mechanismus EncFS:

    $ su -; insmod fuse; exit

    $ encfs ~/.crypto ~/secret

    Nach dem Drücken der Taste [Enter] werden wir um die Wahl des Konfigurationsmodus gebeten. Wir entscheiden uns für den Modus für Preconfigured paranoid mode.

    Jetzt können wir ein Passwort für unser Archiv festlegen. Nach der Eingabe des Passworts und Bestätigung ist unser virtuelles Dateisystem funktionstüchtig.

    [09] Wir kopieren in das Verzeichnis ein paar Dateien (echo, ls, telnet):

    $ cp /bin/echo /bin/ls /bin/telnet ~/secret/

    Anschliessend prüfen wir, was sich in den Verzeichnissen ~/secret und ~/.crypto:

    $ ls ~/secret

    $ ls ~/.crypto

    Wie wir sehen, sind im ersten Verzeichnis unsere Dateien vorhanden, in dem zweiten hingegen befinden sich dieselben Dateien in verschlüsselter Form. Damit jetzt keiner unsere Dateien lesen kann, können wir die Einbindung des virtuellen Dateisystems lösen, indem wir folgenden Befehl eingeben:

    $fusermount -u ~/crypto

    Es hat geklappt! Unsere Daten sind endlich sicher.

    [10] Versuchen wir nun die Dateien noch einmal einzubinden, diesmal jedoch mit einer zusätzlichen Sicherung, mit deren Hilfe die Einbindung des Dateisystem erst nach einer bestimmten Zeit der Untätigkeit (10 Minuten) automatisch gelöst wird:

    $ encfs --idle=10 ~/.crypto ~/secret

    Unsere Dateien sind wieder im Verzeichnis ~/secret verfügbar. Nach 10 Minuten wird die Einbindung automatisch gelöst werden.

    Verschlüsseltes Dateisystem – cryptoloop


    Es ist noch ein Werkzeug geblieben, mit dessen Hilfe geheime Dateien verschlüsselt werden können. Es handelt sich um ein Bestandteil des Kernels des Linuxsystems namens cryptoloop

    [11] Angenommen, wir verfügen über keine freie Partition (und das ist der Fall bei Hakin9 Live), wir verwenden den sog. Loopback-Mechanismus um so eine Datei als Dateisystem zu behandeln. Zunächst einmal bereiten wir die Datei vor:

    $ dd if=/dev/urandom of=~/crypto.raw bs=1k count=10000

    So haben wir eine Datei von der Größe 10 MB erstellt, deren Inhalt aus zufälligen Werten (Müll) besteht.

    [12]Anschliessend verknüpfen wir diese Datei mit dem freien Gerät loop und verschlüsseln es mit Hilfe der von uns ausgewählten Methode:

    $ su -

    # losetup -e AES192 /dev/loop1 /home/haking/crypto.raw

    Das Programm fragt nach einem Passwort, das aus mindestens 20 Zeichen bestehen soll.

    [13] So haben wir aber nur den Platz vorbereitet. Nun müssen wir dort ein bisschen aufräumen, d.h. ein Dateisystem festlegen. Zum Beispiel ext2:

    # mkfs.ext2 /dev/loop1

    [14]Danach kann das Gerät loop1 entfernt werden (Option -d)

    # losetup -d /dev/loop1

    # exit

    [15] Unser verschüsseltes Dateisystem kann nun eingebunden und benutzt werden, so wie jedes andere Dateisystem. Wir binden das Dateisystem ein und schauen, wie es funktioniert:

    $ mkdir ~/encrypted_disk

    $ mount -t ext2 ~/crypto.raw ~/encrypted_disk -oencryption=aes-192

    Mount wird nach der Eingabe des richtigen Passworts die angegebene Datei mit dem ersten freien Gerät loop verknüpft.

    [16] Wir können jetzt unsere Dateien in den sicheren Container kopieren:

    $ cp /bin/echo /bin/ls /bin/telnet ~/encrypted_disk

    Das war's – unser neues verschlüsseltes Laufwerk kann jetzt problemlos eingebunden werden. Keiner, der das Passwort nicht kennt, kann jetzt auf die dort vorhandenen Dateien zugreifen