home | gallery | blog | contact Diese Website ist allenfalls für Leute interessant, die mich kennen.
This Website is solely of interest to people who know me, if at all.
Daniels Homepage

tinker stuff
(completely obsolete)
Mitsubishi AMiTY Laptop
Verschlüsselte Dateisysteme
Palm Pilot Potpourri
VPS mit Debian
TechniSat TechniPlayer
Openmoko Freerunner
GTD mit TiddlyWiki
bastelkram
(obsolet)
 
last change
03. April 2019
letzte Änderung
 

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

  • Crypto-Filesystem mounten:

    #!/bin/bash
    #
    
    /sbin/losetup -e serpent /dev/loop0 /path/to/cryptfile
    mount /path/to/directory
    
  • Crypto-Filesystem unmounten:

    #!/bin/bash
    #
    
    umount /path/to/directory
    /sbin/losetup -d /dev/loop0
    

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).



 
links
Humanistische Union
FFII
Deutsche Vereinigung für Datenschutz
Big Brother Awards
Fefes Blog

Linux Weekly News
Linux Today
Slashdot
xkcd
verweise
 
quote
"Trust the math.
Encryption is your friend."

   Bruce Schneier
zitat