Linux verschlüsselt datei loopback twofish sicheres löschen
Verschlüsselte Dateisysteme via loopback-Device
Note for English-speaking readers
This article is about how to use encrypted filesystems with Linux.
Available in German only, sorry.
Hinweis
Der vorliegende Artikel befasst sich nur mit einem winzigen Aspekt von Linux.
Informationen zu vielen anderen Themen findet man z.B. auf dem
Linux Knowledge Portal
(in deutscher und englischer Sprache) sowie beim
Linux Documentation Project
(in englischer Sprache).
History
13. Mai 2002: Kurze Erweiterung zum Thema "Sicheres Löschen von Daten"
02. Feb 2002: Erste Version (gilt z.B. für SuSE Linux 7.1 und neuer)
Allgemeines
Die folgende Anleitung beschreibt die Realisierung eines verschlüsselten
Dateisystems via loopback-Device. Das verschlüsselte Dateisystem befindet sich
in einer Datei eines lokalen Dateisystems. Beim "Mounten" erfolgt eine
Passphraseabfrage. Sinn macht dieses Vorgehen bei Rechnern auf die Dritte u.U.
physikalischen Zugriff erlangen könnten (z.B. durch Diebstahl eines Laptops).
Während das verschlüsselte Dateisystem "gemounted" ist, ist es natürlich wie jedes andere
Dateisystem (z.B. auf einer Festplattenpartition) "nur" durch Unix-Zugriffsrechte geschützt.
Verbesserungsvorschläge zu dieser Anleitung sind willkommen, Anfragen
(insbesondere zum Kompilieren und Konfigurieren von Kernels) werden nicht
beantwortet. Diese Anleitung macht bewusst keine Aussage zur Sicherheit des
verwendeten Crypto-Algorithmus (fragen Sie den Mathematiker Ihres Vertrauens).
Leider sind für manche Algorithmen bekannte Angriffe vorhanden oder aber (fast
noch schlimmer) sie sind patentiert und nicht frei verwendbar. Soweit mir
bekannt, trifft auf den Twofish-Algorithmus beides nicht zu (was nicht
notwendigerweise heisst, dass es tatsächlich so ist).
Damit alles klappt, muss der Linux Kernel über die erforderlichen Crypto-Module
verfügen und die Systemprogramme mount und losetup
(üblicherweise im Paket util-linux) müssen mit Crypto-Unterstützung kompiliert
sein. Beides trifft für SuSE Linux 7.1 und neuer zu.
Indirekt gehört zu diesem Thema auch das sichere Löschen von Daten. Das einfache
Löschen einer Datei mit "rm" lässt sich oft ganz oder teilweise rückgängig machen.
Um eine Datei sicher zu löschen, gibt es das Programm "wipe" und die Tools aus
dem "secure_deletion toolkit". Letztere können ausser dem sicheren Löschen von Dateien
auch noch freien Plattenplatz und Swapspace "schreddern".
Empfohlene Lektüre
Vorgehen
Ziel sei es, ein mit dem Twofish-Algorithmus verschlüsseltes ext2-Dateisystem
in einer Datei zu erzeugen, die vom Benutzer hugo in seinem Homeverzeichnis auf
das leere Verzeichnis /home/hugo/privat gemountet werden kann. Die Datei selbst
befindet sich in /home/hugo/. Das Dateisystem soll 100MB gross sein, hugo muss
eine Passphrase eingeben, um es zu mounten und er kann praktischerweise
Symlinks von seinem Homeverzeichnis in das verschlüsselte Dateisystem anlegen,
die nur funktionieren, wenn es tatsächlich gemounted ist.
- Twofish-Kernelmodul laden (als root, dieses Modul muss immer geladen sein)
modprobe loop_fish2
- Datei mit verschlüsseltem ext2-Dateisystem erzeugen (als root, Vorsicht bei der
Eingabe der Passphrase; wird nur einmal abgefragt)
dd if=/dev/urandom of=/home/hugo/cryptfile bs=1M count=100
losetup -e twofish /dev/loop0 /home/hugo/cryptfile
mkfs -t ext2 -m 0 /dev/loop0
losetup -d /dev/loop0
chown hugo /home/hugo/cryptfile
- Eintrag in /etc/fstab (als root, am Ende eine Zeile einfügen - die folgenden
2 Zeilen zu einer zusammenfassen)
/home/hugo/cryptfile /home/hugo/privat ext2
defaults,noauto,loop,encryption=twofish,user 0 0
- leeres Verzeichnis anlegen und verschlüsseltes Dateisystem mounten (als hugo)
cd /home/hugo
mkdir privat
mount privat
hugo wird in /home/hugo/privat ein Verzeichnis lost+found vorfinden, das von mkfs angelegt wurde.
Finger weg davon. Es empfiehlt sich, ein Verzeichnis anzulegen (z.B. "files") in dem hugo dann seine
Dateien und Verzeichnisse ablegen kann. Evtl. muss root hier noch einmal eingreifen, das Verzeichnis
anlegen und mit chown an hugo "vererben".
Verschlüsselte Dateisysteme via loopback-Device (alt)
History
02. Feb 2002: Diese Anleitung ist für neuere Versionen von SuSE Linux (ab 7.1) nicht mehr
aktuell und nur noch der Vollständigkeit halber hier. Es geht jetzt wesentlich einfacher (s.o.).
08. Apr 2000: Erste Version
Allgemeines
Die folgende Anleitung beschreibt die Realisierung eines verschlüsselten Dateisystems via loopback-Device.
Das verschlüsselte Dateisystem befindet sich in einer Datei eines lokalen Dateisystems
und muss mit losetup (Passphraseabfrage) und mount gemountet werden.
Sinn macht dieses Vorgehen bei Rechnern auf die Dritte u.U. physikalischen Zugriff erlangen
könnten (z.B. durch Diebstahl eines Laptops).
Folgende, nicht-triviale Änderungen zu einer SuSE Linux-Standardinstallation sind erforderlich:
- Neuer Kernel mit dem internationalen Patch und entsprechender Konfiguration
- gepachte Versionen von losetup, mount und umount
(Der entsprechende Patch ist im internationalen Kernel enthalten.)
- Änderung der Standard-Permissions für losetup (mögliche Sicherheitslücke)
Verbesserungsvorschläge zu dieser Anleitung sind willkommen, Anfragen
(insbesondere zum Kompilieren und Konfigurieren von Kernels) werden nicht
beantwortet. Diese Anleitung macht bewusst keine Aussage zur Sicherheit des
verwendeten Crypto-Algorithmus (fragen Sie den Mathematiker Ihres Vertrauens).
Empfohlene Lektüre
Quellen
Vorgehen
- Die Quellen des Kernels 2.2.14 sowie alle nötigen Entwicklungswerkzeuge sowie die Quellen des Utils-Paketes installieren.
Für das Utils-Paket wird `autoconf' benötigt.
- Den Kernel mit dem internationalen Patch patchen und konfigurieren. Ausgehend von der jeweiligen Standard-Kernelkonfiguration
werden folgende Optionen benötigt (soweit möglich als Kernelmodul):
- CONFIG_CIPHERS
- CONFIG_CIPHER_SERPENT (evtl. noch andere, hier wurde Serpent benutzt)
- CONFIG_BLK_DEV_LOOP_USE_REL_BLOCK
- CONFIG_BLK_DEV_LOOP_GEN
- Kernel kompilieren und installieren
- Das Utils-Paket patchen und kompilieren. Benötigt werden nur die neuen Binaries für
losetup, mount und umount
Alle anderen Binaries dieses Paketes (viele!) brauchen _nicht_ ausgetauscht zu werden. Die zentrale Konfigurationsdatei
`MCONFIG' des Util-Paketes soll in den Einträgen HAVE_* die normale SuSE-Konfiguration enthalten. Lediglich
die Einträge `LO_OBJS' und `losetup' unterscheiden sich von der Standard-Konfiguration.
Der Patch befindet sich in /usr/src/linux/Documentation/crypto.
- In /etc/modules.conf müssen folgende Einträge vorgenommen werden:
alias loop-xfer-gen-0 loop_gen
alias loop-xfer-gen-10 loop_gen
alias cipher-2 des
alias cipher-4 blowfish
alias cipher-6 idea
alias cipher-7 serp6f
alias cipher-8 mars6
alias cipher-11 rc62
alias cipher-15 dfc2
alias cipher-16 rijndael
alias cipher-17 rc5
- Permissions für losetup ändern:
chmod 4755 /sbin/losetup
- Neu booten. Beim Booten sollten keine einschlägigen Fehlermeldungen ausgegeben werden.
- Als User eine Datei erzeugen, die später das Crypto-Filesystem abbildet:
dd if=/dev/urandom of=/path/to/cryptfile bs=1M count=10
(Beispiel: 10 MB Filesystem)
- Als User Loopdevice initialisieren (incl. Vergabe der Passphrase):
/sbin/losetup -e serpent /dev/loop0 /path/to/cryptfile
- Als User Filesystem erzeugen:
/sbin/mkfs -t ext2 /dev/loop0
- Als root einen Eintrag in /etc/fstab erzeugen:
/dev/loop0 /path/to/directory ext2 user,noauto,rw,loop 0 0
- Als User das neue Filesystem mounten:
mount -t ext2 /dev/loop0 /path/to/directory
- Unmounten des Crypto-Filesystems: Erst
umount /path/to/directory
dann
/sbin/losetup -d /dev/loop0
Diagnose
-
/sbin/losetup /dev/loop0
/dev/loop0: [0306]:685495 (/path/to/cryptfile) offset 0, serpent encryption
-
/sbin/losetup /dev/loop1
/dev/loop1: [0306]:2123302 (/dev/loop0) offset 0, no encryption
-
mount
/dev/loop0 on /path/to/directory type ext2 \
(rw,noexec,nosuid,nodev,loop=/dev/loop1,user=werauchimmer)
Nützliche Zweizeiler
Vorkompilierte Binaries für SuSE Linux 6.4 (i386)
Ein Archiv mit einem passenden Kernel und gepatchten Versionen der o.g. Systemtools
gibt es hier.
Copyright (c) 2000 daniel(-at-)bischof.org - Permission is granted to copy,
distribute and/or modify this document under the terms of the
GNU Free Documentation License, Version 1.2 (GFDL).
|