LUKS2 vs. LUKS1: Unterschiede, Version prüfen und konvertieren
LUKS2 bringt gegenüber LUKS1 Argon2id, einen redundanten JSON-Header, Tokens und Integritätsschutz. Version mit cryptsetup luksDump prüfen und nach einem Header-Backup sicher konvertieren.
Kurz gesagt: LUKS2 ist das aktuelle On-Disk-Format für Festplattenverschlüsselung unter Linux und seit cryptsetup 2.1 Standard. Gegenüber LUKS1 bringt es einen redundanten JSON-Metadaten-Header mit Prüfsummen, die speicherintensive Schlüsselableitung Argon2id statt PBKDF2, 32 statt 8 Keyslots, Tokens zum Entsperren per TPM2 und FIDO2 sowie optional authentifizierte Verschlüsselung. Nutzen Sie LUKS2, es sei denn, ein altes GRUB muss `/boot` selbst entschlüsseln.
Beide Formate verschlüsseln die Daten auf dieselbe Weise, typischerweise mit AES-XTS. Der Unterschied liegt im Header: wie Schlüssel gespeichert werden, wie schwer Passphrasen per Brute Force zu knacken sind und welche Tools ihn lesen können. Diese Anleitung behandelt die Unterschiede, wie Sie Ihre Version prüfen und wie Sie mit `cryptsetup convert` konvertieren, ohne die Disk zu verlieren. Wenn Sie einen frischen Server für einen Self-Hosting-Stack auf einem kleinen VPS verschlüsseln, ist LUKS2 das Format der Wahl.
LUKS2 vs. LUKS1 im Überblick
| Merkmal | LUKS1 | LUKS2 |
|---|---|---|
| Header | Einzelner binärer Header mit 592 Byte plus Keyslot-Bereich | Zwei binäre Header plus JSON-Metadaten, mit Prüfsummen und redundanter Kopie |
| Standard-Header- / Daten-Offset | 2 MiB | 16 MiB |
| Keyslots | 8 | 32 |
| Schlüsselableitung (PBKDF) | Nur PBKDF2 | Argon2id (Standard), Argon2i oder PBKDF2 |
| Tokens (TPM2, FIDO2, PKCS#11, Clevis) | Nein | Ja |
| Authentifizierte Verschlüsselung (dm-integrity) | Nein | Optional, experimentell |
| Online-Neuverschlüsselung | Nur offline | Ja, `cryptsetup reencrypt` auf einem eingehängten Gerät |
| Persistente Flags und Label | Nein | Ja, zum Beispiel `--allow-discards --persistent` |
| Entsperren durch GRUB bei verschlüsseltem /boot | Ja | Im Upstream-GRUB nur PBKDF2-Keyslots |
Header-Format und Keyslots
Ein LUKS1-Header ist eine feste Binärstruktur, gefolgt von acht Keyslot-Bereichen. Werden die ersten Sektoren des Geräts überschrieben, etwa durch ein versehentliches `mkfs` oder ein Partitionierungstool, sind alle Keyslots weg und die Daten verloren — es sei denn, Sie haben ein Header-Backup.
LUKS2 speichert einen binären Header und einen JSON-Metadatenbereich und hält von beiden eine zweite Kopie. Jede Kopie trägt eine Prüfsumme, sodass `cryptsetup` Beschädigungen erkennen und auf die andere Kopie ausweichen kann. Der JSON-Bereich beschreibt Keyslots, Segmente, Digests und Tokens — so lassen sich neue Funktionen ergänzen, ohne das Format erneut zu ändern. Die Redundanz ersetzt trotzdem kein Header-Backup: Ein vollständiges Überschreiben der ersten Megabytes zerstört beide Kopien.
Argon2id vs. PBKDF2
Die Passphrase wird nie direkt als Schlüssel verwendet. Eine Schlüsselableitungsfunktion streckt sie, sodass jeder Rateversuch teuer wird. LUKS1 kann nur PBKDF2 nutzen, das auf GPUs und ASICs billig zu berechnen ist — ein Angreifer mit einem kopierten Header kann Passphrasen also parallel und mit hoher Geschwindigkeit testen.
LUKS2 nutzt standardmäßig Argon2id, das pro Rateversuch eine konfigurierbare Menge Speicher benötigt (standardmäßig bis zu 1 GiB, begrenzt durch den beim Formatieren verfügbaren RAM) und viel schwerer zu parallelisieren ist. Eine starke Passphrase bleibt die wichtigste Verteidigung, aber Argon2id erhöht die Kosten jedes Versuchs erheblich.
Auf kleinen Servern sollten Sie die Speicherkosten im Blick behalten. Ein Keyslot, der auf einer Maschine mit viel RAM angelegt wurde, braucht zum Entsperren unter Umständen mehr Speicher, als ein 1-GB-VPS wie der NoctisNode-Wisp-Plan im initramfs entbehren kann. Setzen Sie ihn explizit mit `--pbkdf-memory` (in KiB), wenn Sie auf einer großen Maschine für eine kleine formatieren oder Schlüssel hinzufügen.
# Inspect PBKDF parameters of each keyslot
cryptsetup luksDump /dev/vda3 | grep -A6 '^ [0-9]*: luks2'
# Re-derive keyslot 0 with Argon2id and 512 MiB memory cost
cryptsetup luksConvertKey /dev/vda3 --key-slot 0 \
--pbkdf argon2id --pbkdf-memory 524288Tokens, Integrität und Einschränkungen bei GRUB
Tokens sind JSON-Objekte im LUKS2-Header, die Tools sagen, wie sie automatisch an einen Schlüssel kommen. `systemd-cryptenroll` nutzt sie, um einen Keyslot an einen TPM2-Chip, einen FIDO2-Sicherheitsschlüssel oder eine PKCS#11-Smartcard zu binden, und Clevis nutzt sie für netzwerkgebundenes Entsperren mit einem Tang-Server. Nichts davon gibt es bei LUKS1.
Der Integritätsmodus (`cryptsetup luksFormat --integrity hmac-sha256`) kombiniert Verschlüsselung mit dm-integrity, sodass manipulierte Sektoren Lesefehler erzeugen statt stillschweigend veränderter Daten. Das kostet Speicherplatz und Schreibgeschwindigkeit, erfordert beim Formatieren ein vollständiges Wipe und gilt weiterhin als experimentell. Die meisten Server nutzen es nicht.
GRUB ist der Hauptgrund, warum man LUKS1 noch begegnet. Upstream-GRUB ab 2.06 kann LUKS2 öffnen, aber nur Keyslots mit PBKDF2, weil Argon2 nicht Teil des Upstream-GRUB ist. Muss GRUB selbst ein verschlüsseltes `/boot` entschlüsseln, verwenden Sie LUKS1 oder einen LUKS2-Keyslot mit `--pbkdf pbkdf2`. Die Installer von Debian und Ubuntu lassen `/boot` unverschlüsselt, sodass Kernel und initramfs das Entsperren übernehmen und Argon2id funktioniert — auch beim Entsperren per SSH aus der Ferne.
So prüfen Sie, ob ein Volume LUKS1 oder LUKS2 ist
Jede dieser Varianten funktioniert auf einem laufenden System als root. Die Zeile `Version:` von `cryptsetup luksDump` ist die maßgebliche Antwort; der Dump zeigt außerdem Keyslots, PBKDF-Typ und Tokens.
# Find encrypted partitions (FSVER column shows 1 or 2)
lsblk -f
# Authoritative: header version
cryptsetup luksDump /dev/vda3 | grep -E '^Version'
# Version: 2
# Exit code 0 only if the device is LUKS2
cryptsetup isLuks --type luks2 /dev/vda3 && echo LUKS2Konvertieren mit cryptsetup convert
`cryptsetup convert` schreibt den Header an Ort und Stelle neu; die verschlüsselten Daten werden nicht angefasst. Das Gerät muss geschlossen sein, für ein Root-Dateisystem führen Sie es also aus einem Rescue- oder Live-System aus. Ein Fehler oder Stromausfall während der Konvertierung kann den Header unbrauchbar machen — deshalb ist der Backup-Schritt nicht optional.
- 01.Booten Sie ein Rescue- oder Live-System und stellen Sie sicher, dass das LUKS-Gerät nicht geöffnet ist (bei Bedarf `cryptsetup close`).
- 02.Sichern Sie den Header mit `cryptsetup luksHeaderBackup` und kopieren Sie die Datei vom Server weg. Wer diese Datei und eine alte Passphrase hat, kann die Disk entsperren — speichern Sie sie also verschlüsselt.
- 03.Konvertieren Sie LUKS1 nach LUKS2 mit `cryptsetup convert --type luks2`. Bestehende Keyslots bleiben PBKDF2.
- 04.Stellen Sie jeden Keyslot mit `cryptsetup luksConvertKey --pbkdf argon2id` auf Argon2id um, sofern GRUB ihn nicht lesen muss.
- 05.Testen Sie, ob sich das Gerät öffnen lässt, bauen Sie dann das initramfs mit `update-initramfs -u` neu und starten Sie neu.
- 06.Um von LUKS2 zurück zu LUKS1 zu wechseln, konvertieren Sie zuerst jeden Keyslot zu PBKDF2 und entfernen Tokens und LUKS2-spezifische Funktionen; andernfalls verweigert `cryptsetup convert --type luks1` den Dienst.
# From a rescue system, device closed
cryptsetup luksHeaderBackup /dev/vda3 --header-backup-file /root/vda3-luks-header.img
cryptsetup convert --type luks2 /dev/vda3
cryptsetup luksConvertKey /dev/vda3 --key-slot 0 --pbkdf argon2id
cryptsetup open /dev/vda3 cryptroot && cryptsetup close cryptroot
# Emergency restore (overwrites the current header!)
# cryptsetup luksHeaderRestore /dev/vda3 --header-backup-file /root/vda3-luks-header.imgNote · Nach dem Wiederherstellen eines Headers funktionieren die zum Zeitpunkt des Backups gültigen Passphrasen wieder — auch solche, die Sie später entfernt haben. Löschen Sie alte Header-Backups, wenn Sie Passphrasen rotieren. Bewahren Sie das aktuelle Backup getrennt auf, zum Beispiel im Repository aus der Anleitung zu restic-Backups.
FAQ
QIst LUKS2 besser als LUKS1?
AFür fast jedes neue Setup: ja. LUKS2 hat einen redundanten Header, Schlüsselableitung mit Argon2id, Tokens für TPM2 oder FIDO2 und Online-Neuverschlüsselung; LUKS1 brauchen Sie nur, wenn ein älteres GRUB `/boot` selbst entschlüsseln muss.
QWie prüfe ich meine LUKS-Version?
AFühren Sie als root `cryptsetup luksDump /dev/sdX | grep Version` aus; es gibt 1 oder 2 aus. Auch `lsblk -f` zeigt die Version für crypto_LUKS-Partitionen in der Spalte FSVER.
QKann ich LUKS1 ohne Datenverlust nach LUKS2 konvertieren?
AJa. `cryptsetup convert --type luks2` schreibt bei geschlossenem Gerät nur den Header neu. Sichern Sie den Header vorher mit `cryptsetup luksHeaderBackup`, denn eine unterbrochene Konvertierung kann das Volume unlesbar machen.
QUnterstützt GRUB LUKS2?
AUpstream-GRUB ab 2.06 kann LUKS2 entsperren, aber nur Keyslots mit PBKDF2, nicht mit Argon2id. Das spielt nur eine Rolle, wenn `/boot` selbst verschlüsselt ist; bei unverschlüsseltem `/boot` entsperrt das initramfs LUKS2 mit Argon2id ganz normal.
QWelche Verschlüsselung nutzt LUKS2 standardmäßig?
AAktuelles cryptsetup nutzt standardmäßig `aes-xts-plain64` mit einem 512-Bit-Schlüssel (AES-256 im XTS-Modus) und Argon2id zur Schlüsselableitung. Mit `cryptsetup --help` sehen Sie die einkompilierten Standardwerte auf Ihrem System; ein vollständiges Setup zeigt die Anleitung zu LUKS-verschlüsseltem Root.