Verschlüsselung mit LUKS, Veracrypt, cryfs oder gpg

Autor: Gerd Raudenbusch
Stand: 09.08.2025

Inhalt

Motivation zum Verschlüsseln aller Festspeicher

Egal, ob USB-Stick oder Festplatte - nach dem Kauf ist es heutzutage angemessen und verhältnismäßig, seinen Festspeicher aus Prinzip verschlüsseln, weil unverschlüsselte Daten bei Verlust oder Diebstahl des Geräts leicht ausgelesen werden können und Verschlüsselung einen elementaren Schutz vor unbefugtem Zugriff bietet.

Wesentliche Gründe sind:

4 Terabyte USB Festspeicher auf einem DIN-A4 Blatt)
4 Terabyte USB Festspeicher auf einem DIN-A4 Blatt)

Verfügbarkeit der Technologien

Die hier vorgestellten Technologien sind vor allem für Linux-Rechner interessant, da konzernabhängigen Betriebssystemen nur begrenzt Vertrauen ausgesprochen werden kann. Die Tabelle zeigt, auf welchen Plattformen die vorgestellten Verschlüsselungstechniken LUKS, Veracrypt, CryFS, Cryptomator und GPG verfügbar sind:

Technik Anwendungsfall Linux Windows macOS Android iOS
LUKS Datenträger, Container Ja Teilweise Teilweise Nein Nein
Veracrypt Datenträger, Container Ja Ja Ja Ja Ja
Cryptomator Ordner Ja Ja Ja Ja Ja
CryFS Ordner Ja Ja Ja Nein Nein
gpg Datei Ja Ja Ja Teilweise Teilweise

LUKS

LUKS (Linux Unified Key Setup) ist der aktuelle Standard für die Verschlüsselung von Festplatten unter Linux, der sichere Verwaltung von Schlüsseln und mehrere Passwörter pro Container ermöglicht. Damit können Partitionen vollständig verschlüsselt und kontrolliert werden, wer darauf zugreifen kann.

Anwendungsfall von LUKS

LUKS eignet sich hervorragend, um Datenträger komplett zu verschlüsseln.

Installation von LUKS

sudo apt update
sudo apt install cryptsetup

Neue LUKS-Partition erstellen

  1. Partition vorbereiten Wenn die Platte noch nicht partitioniert ist, muss muss z.B. mit fdisk oder parted ein freier Bereich zugewiesen werden. Im folgenden Beispiel wird angenommen, dass die Platte auf /dev/sdb eingehängt ist und ihre Partition /dev/sdb1 heißt.

  2. LUKS-Partition anlegen:

    sudo cryptsetup luksFormat /dev/sdb1
    

    (Die führt zur Abfrage der Passphrase. Das Kennwort sollte aus mindestens 20 Zeichen bestehen)

  3. Partition öffnen und Mapper erstellen:

    sudo cryptsetup luksOpen /dev/sdb1 mein_luks
    

    Damit wird der verschlüsselte LUKS-Container (die LUKS-Partition) unter /dev/mapper/mein_luks eingehängt.

  4. Dateisystem anlegen:

    sudo mkfs.ext4 /dev/mapper/mein_luks
    

    Damit wird ein ext4-Dateisystem angelegt.

  5. Verschlüsselte Partition wieder schließen:

    sudo cryptsetup luksClose mein_luks
    

    Dieser Befehl hängt den LUKS-Container wieder aus.

Manuelles Mounten und Unmounten

Wenn die Platte in /dev/mapper/mein_luks eingehängt ist,

Automatisches Einbinden beim Booten (Auto-Mount)

Damit eine verschlüsselte Partition beim Booten automatisch entschlüsselt und eingebunden wird, sind folgende Schritte notwendig:

  1. /etc/crypttab bearbeiten:

    Zeile hinzufügen:

    mein_luks   /dev/sdb1   none   luks
    

    oder mit Keyfile:

    mein_luks   /dev/sdb1   /root/luks.key   luks
    
  2. /etc/fstab bearbeiten (um das Dateisystem nach dem Entschlüsseln zu mounten):

    /dev/mapper/mein_luks   /mnt   ext4   defaults   0   2
    

Der Mountpoint /mnt muss existieren.

  1. Neuladen & Test:

    sudo systemctl daemon-reload
    sudo systemctl restart systemd-cryptsetup@mein_luks
    sudo mount -a
    

    Nach einem Neustart sollte eine Passwort-Abfrage für die Platte erscheinen.

  2. Optional: Keyfile anlegen

    Wenn keine Passworteingabe beim Boot erwünscht ist (nicht empfehlenswert):

    sudo dd if=/dev/urandom of=/root/luks.key bs=1 count=4096
    sudo chmod 400 /root/luks.key
    sudo cryptsetup luksAddKey /dev/sdb1 /root/luks.key
    

    (Keyfile muss in /etc/fstab verwendet werden, s. Punkt 2)

Veracrypt

VeraCrypt ist eine kostenlose, quelloffene Software zur Verschlüsselung von Daten, insbesondere ganzer Festplatten oder einzelner Container-Dateien, die wie ein virtuelles, verschlüsseltes Laufwerk agieren. Zwar ist sie interoperabel auf jeder Plattform verfügbar, doch lassen sich die Container nicht überall nativ für das Betriebssystem selbst nutzen, sondern sie müssen manuell oder über Skripte eingehängt werden. Linux ist jedoch dazu in der Lage. Veracrypt hat außerdem das einzigartige Feature, einen doppelten Boden zu bieten, um damit glaubhafte Abstreitbarkeit zur ermöglichen. Veracrypt lässt sich entweder auf Partitionen oder auf Container-Dateien anwenden.

Anwendungsfall von Veracrypt

Veracrypt eignet sich hervorragend, um größere Datenmengen inform einer Containerdatei interoperabel auf allen Plattformen verfügbar zu machen. Der Zugriff ist schnell genug, um ein Streaming daraus zu ermöglichen.

Installation von Veracrypt

sudo add-apt-repository ppa:unit193/encryption -y
sudo apt update
sudo apt install veracrypt -y

Veracrypt-Container erstellen

Folgender Befehl erstellt einen neuen Veracrypt-Container:

veracrypt --text --create /pfad/zum/container

Der Assistent führt durch die Erstellung. Es geht aber auch ohne Interaktion:

veracrypt --text --create /pfad/zum/container --size 100M --password DEINPASSWORT --hash sha512 --encryption AES --filesystem ext4 --volume-type normal --pim 0

(Parameter nach Bedarf ersetzen)

Veracrypt-Container mounten

veracrypt --text --mount /pfad/zum/container /mnt/veracrypt1

Optional kann das Passwort mitgegeben werden (Achtung: Landet in der history):

veracrypt --text --mount --password DEINPASSWORT /pfad/zum/container /mnt/veracrypt1

Veracrypt-Container unmounten

Zum aushängen:

veracrypt --text --dismount /mnt/veracrypt1

Oder, um alle gemounteten Container zu aushängen:

veracrypt --text --dismount

VeraCrypt-Container müssen wie LUKS-Container auch über /etc/crypttab und anschließend /etc/fstab eingebunden werden.

Cryptomator

Cryptomator ist eine freie Open-Source-Software, die es ermöglicht, Daten sicher und verschlüsselt zu speichern. Die Clients wurden insbesondere darauf zugeschnitten, auch in öffentlichen Clouds anwendbar zu sein. Jedoch läßt sich Cryptomator als solches auch auf dem eigenen System einrichten. Die Einrichtung eines Command Line Interfaces (CLI) zur reinen Steuerung über Befehle muss jedoch nachinstalliert werden und die Cryptomator-Clients sind als Freeware oft eingeschränkt.

Anwendungsfall

Cryptomator eignet sich hervorragend für weniger versierte Einsteiger, die keine eigene Cloudlösung und keinen NAS ("Network Attached Storage" = Cloudspeicher auf dem Heimserver) haben.

Installation von Cryptomator

sudo add-apt-repository ppa:sebastian-stenzel/cryptomator
sudo apt update
sudo apt install cryptomator

CryFS

CryFS ist ein Open-Source-Tool zur clientseitigen Verschlüsselung von Verzeichnissen, das auch von Cloud-Providern zum sicheren Speichern von Daten verwendet wird. Es erstellt einen verschlüsselten Container und bindet diesen als virtuelles, entschlüsseltes Dateisystem in ein anderes Verzeichnis ein.

Anwendungsfall von CryFS

CryFS eignet sich hervorragend, um im eigenen Dateisystem spontan einen verschlüsselten Ordner zu erzeugen, der zwar mehrere Dateien aufnimmt, aber nicht gleich den ganzen Datenträger beansprucht und trotzdem dynamisch wachsen kann. CryFS ist jedoch langsamer als LUKS und Veracrypt; dies macht sich z.B. bemerkbar, wenn Mediendateien aus diesen Quellen gestreamt werden sollen, was nicht immer gut funktioniert.

Installation von cryFS

sudo apt update
sudo apt install cryfs

Ordner in der Konsole erstellen

Beispiel:


# Backend-Ordner für verschlüsselten Inhalt:
mkdir ~/MeinCryfsContainer

# Mountpunkt für entschlüsselten Backend-Ordner:
mkdir ~/MeinCryfsMount

CryFS-Container initialisieren und mounten

cryfs ~/MeinCryfsContainer ~/MeinCryfsMount

Das Passwort wird bei der Initialisierung abgefragt.

Unmounten (Aushängen) des CryFS-Verzeichnisses

fusermount -u ~/MeinCryfsMount

Damit wird das CryFS-Verzeichnis sicher ausgehängt und der Zugriff auf die Daten ist nur noch verschlüsselt möglich.

gpg

GPG (GNU Privacy Guard) ist ein altbewährtes Programm zur Verschlüsselung und digitalen Signierung von Dateien und Nachrichten, basierend auf dem OpenPGP-Standard. Es kann Dateien sowohl mit einem Passwort (symmetrisch) als auch mit einem Schlüsselpaar aus öffentlichem und privatem Schlüssel (asymmetrisch) verschlüsseln.

Anwendungsfall von gpg

gpg eignet sich hervorragend zur Verschlüsselung einzelner Dateien.

Installation von gpg

sudo apt update
sudo apt install gnupg

Verschlüsseln mit gpg

Beispiel:

gpg -c geheim.txt

Dabei wird man nach einem Passwort gefragt, das zur Verschlüsselung genutzt wird. Das Ergebnis ist eine verschlüsselte Datei mit der Endung .gpg. Beispiel für eine Datei „geheim.txt“:

Die verschlüsselte Datei heißt dann „geheim.txt.gpg“.

Entschlüsseln mit gpg

Um die verschlüsselte Datei wieder zu entschlüsseln, verwendet man:

gpg geheim.txt.gpg

Dabei wird man nach dem Passwort gefragt, das zur Entschlüsselung benötigt wird.

Dies entschlüsselt die Datei und entfernt die gpg-Erweiterung. Alternativ kann man mit der Option -o den entschlüsselten Inhalt in eine Datei speichern, z.B.:

gpg -d -o geheimentschluesselt.txt geheim.txt.gpg

Anhang I: Hardware lokalisieren

Wenn ein neues Speichermedium angeschlossen wird, muss zunächst ermittelt werden, wo der neue Datenträger (USB-Stick, Festplatte) erkannt wurde. Auch Datenträger ohne gültige Formatierung werden in Linux als Blockgeräte im /dev-Verzeichnis, z.B. als /dev/sdX angezeigt. Partitionen heißen dann /dev/sdX1, /dev/sdX2 usw.
Wenn gar keine neue Device-Node erscheint, ist ggf. ein Hardware- oder Treiberproblem die Ursache. Um herauszufinden, unter welchem Pfad im /dev-Verzeichnis der neue USB-Stick oder die Festplatte erkannt wird, führen folgende Methoden zum Ziel:

Anhang II: Mount

Ein Dateisystem zu "mounten" bedeutet, es in die Verzeichnisstruktur eines Betriebssystems einzublenden, bzw. einzubinden, sodass auf dessen Inhalte zugegriffen werden kann. Unter Linux werden Datenträger (Festplatten, USB-Sticks, Netzlaufwerke) einem sogenannten Mountpoint (meist ein sonst leeres Verzeichnis) zugeordnet – ab diesem Moment erscheinen die darauf gespeicherten Dateien in diesem Verzeichnis und sind im System nutzbar. Beliebte Verzeichnisse sind z.B. /mnt oder /media.

Beispiel:
Ein regulärer USB-Stick wird nach dem Einstecken automatisch erkannt und gemountet, sodass er z. B. unter /mnt/usbstick im Dateisystem sichtbar und benutzbar wird.

Entferntes Dateisystem über SSH mounten

Die Protokolle NFS oder SMB lassen sich zwar präzise für viele Benutzer konfigurieren und administrieren, sind aber ohne VPN unverschlüsselt, während SSHFS eine sehr einfache Lösung ist, um ein Dateisystem entfernt über SSH zu mounten. Damit lässt sich ein Verzeichnis auf einem entfernten Rechner wie ein lokales Verzeichnis einbinden, solange SSH-Zugang besteht.

Installation (Ubuntu/Debian):

sudo apt install sshfs

Mount-Befehl:

sshfs benutzername@remote-server:/pfad/zum/ordner /lokaler/mountpunkt

Beispiel:

mkdir -p ~/meinserver
sshfs user@192.168.1.100:/home/user ~/meinserver

Der gemountete Ordner /home/user auf dem Rechner 192.168.1.100 kann nun wie jeder andere lokale Ordner unter ~/meinserver verwendet werden. Zusätzlich können Veracrypt-Container gemountet werden, auf CryFS-Ordner oder gpg-Dateien zugegriffen werden, die sich auf dem entfernten Rechner befinden.

Um das Dateisystem wieder zu lösen, dient der Befehl:

fusermount -u ~/meinserver

Anhang III: Loop Container

Ein Loop-Container ist eine Datei, die als virtuelles Blockgerät über ein Loop-Device angesprochen wird. Das bedeutet, diese Datei wird – mithilfe eines Loop-Devices – so behandelt, als ob sie eine eigene Festplattenpartition oder ein eigenes Laufwerk wäre. Das erlaubt es, in dieser Datei Dateisysteme anzulegen, sie zu verschlüsseln, zu mounten und wie eine echte Festplatte zu nutzen, ohne dabei eine physische Partition zu benötigen:

Das folgende Skript demonstriert, mit welchen Befehlen ein loop-Container erzeugt, mit LUKS partitioniert, mit ext4 formatiert, gemountet und wieder ausgehängt wird:

# Herausfinden, welches das letzte loop device ist
# und incrementieren
LASTLOOPNUM=$(losetup | cut -d " " -f1 | sed "s,/dev/loop,,g" | grep -v "NAME" | sort -n | tail -1)
if [ "${LASTLOOPNUM}" == "" ]; then
      # No kein loop device vorhanden -> loop0
      LOOPNUM="0"
else
      # Letzer gefundener Eintrag + 1
      LOOPNUM="$((${LASTLOOPNUM}+1))"
fi

# Geplante loop node
LOOPNODE="/dev/loop${LOOPNUM}" 

# Geplanter Mountpunkt
MOUNTPOINT="/media/myloopfs"   

# Dateiname für loop Containerdatei
CONTAINERFILE="/opt/myloopfs.img" 

# Name des LUKS-Containers 
LUKSNAME="loopedluks"

# Leere Container-Datei mit 512 MB erzeugen
/bin/dd if=/dev/zero of=${CONTAINERFILE} bs=1M count=512  

# loop-Containerdatei auf Node einhängen
/sbin/losetup ${LOOPNODE} ${CONTAINERFILE}

# LUKS Partition auf loop Container erstellen
cryptsetup luksFormat --batch-mode ${CONTAINERFILE}

# LUKS-Container öffnen
cryptsetup luksOpen ${CONTAINERFILE} ${LUKSNAME}

# LUKS Partition mit ext4 formatieren
echo "y" | mkfs.ext4 /dev/mapper/${LUKSNAME}

# FormatierteLUKS Partition mounten
/bin/mount /dev/mapper/${LUKSNAME} ${MOUNTPOINT}

# LUKS Partition schliessen
cryptsetup luksClose ${LUKSNAME}

# loop Container aushängen
/sbin/losetup --detach ${LOOPNODE}

Zurück zur Hauptseite