NoctisNode
← HandleidingenBeveiliging2026-10-238 min

LUKS2 vs. LUKS1: verschillen, hoe je het controleert en hoe je converteert

LUKS2 voegt ten opzichte van LUKS1 Argon2id, een redundante JSON-header, tokens en integriteit toe. Controleer je versie met cryptsetup luksDump en converteer veilig na een back-up van de header.

Kort gezegd: LUKS2 is het huidige on-disk-formaat voor schijfversleuteling onder Linux en sinds cryptsetup 2.1 de standaard. Vergeleken met LUKS1 voegt het een redundante JSON-metadataheader met checksums toe, de geheugenintensieve sleutelafleiding Argon2id in plaats van PBKDF2, 32 keyslots in plaats van 8, tokens voor ontgrendelen met TPM2 en FIDO2, en optionele geauthenticeerde versleuteling. Gebruik LUKS2, tenzij een oude GRUB `/boot` zelf moet ontsleutelen.

Beide formaten versleutelen de data op dezelfde manier, meestal met AES-XTS. Het verschil zit in de header: hoe sleutels worden opgeslagen, hoe moeilijk passphrases te brute-forcen zijn en welke tools hem kunnen lezen. Deze gids behandelt de verschillen, hoe je controleert welke je hebt en hoe je met `cryptsetup convert` converteert zonder de schijf kwijt te raken. Versleutel je een nieuwe server voor een self-hostingstack op een kleine VPS, dan is LUKS2 het formaat om te kiezen.

LUKS2 vs. LUKS1 in één oogopslag

KenmerkLUKS1LUKS2
HeaderEén binaire header van 592 bytes plus keyslotgebiedTwee binaire headers plus JSON-metadata, met checksums en een redundante kopie
Standaard header-/data-offset2 MiB16 MiB
Keyslots832
Sleutelafleiding (PBKDF)Alleen PBKDF2Argon2id (standaard), Argon2i of PBKDF2
Tokens (TPM2, FIDO2, PKCS#11, Clevis)NeeJa
Geauthenticeerde versleuteling (dm-integrity)NeeOptioneel, experimenteel
Online herversleutelingAlleen offlineJa, `cryptsetup reencrypt` op een gemount apparaat
Persistente flags en labelNeeJa, bijvoorbeeld `--allow-discards --persistent`
Ontgrendelen door GRUB voor versleutelde /bootJaAlleen PBKDF2-keyslots in upstream GRUB

Headerformaat en keyslots

Een LUKS1-header is een vaste binaire structuur gevolgd door acht keyslotgebieden. Worden de eerste sectoren van het apparaat overschreven, bijvoorbeeld door een verkeerde `mkfs` of een partitioneringstool, dan is elke keyslot weg en zijn de gegevens verloren, tenzij je een back-up van de header hebt.

LUKS2 slaat een binaire header en een JSON-metadatagebied op en houdt van beide een tweede kopie bij. Elke kopie heeft een checksum, zodat `cryptsetup` corruptie kan detecteren en op de andere kopie kan terugvallen. Het JSON-gebied beschrijft keyslots, segmenten, digests en tokens, en daardoor zijn nieuwe functies mogelijk zonder het formaat opnieuw te wijzigen. Redundantie vervangt nog steeds geen back-up van de header: als de eerste megabytes volledig worden overschreven, zijn beide kopieën weg.

Argon2id vs. PBKDF2

De passphrase wordt nooit direct als sleutel gebruikt. Een sleutelafleidingsfunctie rekt hem op zodat elke gok duur is. LUKS1 kan alleen PBKDF2 gebruiken, dat goedkoop te draaien is op GPU's en ASIC's, dus een aanvaller met een gekopieerde header kan passphrases parallel en razendsnel testen.

LUKS2 gebruikt standaard Argon2id, dat per gok een instelbare hoeveelheid geheugen vereist (standaard tot 1 GiB, begrensd door het beschikbare RAM bij het formatteren) en veel duurder is om te paralleliseren. Een sterke passphrase blijft de belangrijkste verdediging, maar Argon2id maakt elke gok aanzienlijk duurder.

Houd op kleine servers rekening met de geheugenkosten. Een keyslot die is aangemaakt op een machine met veel RAM kan meer geheugen nodig hebben om te ontgrendelen dan een VPS van 1 GB, zoals het NoctisNode-Wisp-pakket, binnen de initramfs kan missen. Stel het expliciet in met `--pbkdf-memory` (in KiB) wanneer je op een grote machine formatteert of sleutels toevoegt voor een kleine.

# 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 524288

Tokens, integriteit en kanttekeningen bij GRUB

Tokens zijn JSON-objecten in de LUKS2-header die tools vertellen hoe ze automatisch een sleutel kunnen verkrijgen. `systemd-cryptenroll` gebruikt ze om een keyslot te koppelen aan een TPM2-chip, een FIDO2-beveiligingssleutel of een PKCS#11-smartcard, en Clevis gebruikt ze voor ontgrendelen via het netwerk met een Tang-server. Niets hiervan bestaat in LUKS1.

De integriteitsmodus (`cryptsetup luksFormat --integrity hmac-sha256`) combineert versleuteling met dm-integrity, zodat gemanipuleerde sectoren leesfouten opleveren in plaats van stilletjes gewijzigde data. Dat kost schijfruimte en schrijfsnelheid, vereist bij het formatteren een volledige wipe en is nog als experimenteel gemarkeerd. De meeste servers gebruiken het niet.

GRUB is de belangrijkste reden dat mensen LUKS1 nog tegenkomen. Upstream GRUB 2.06 en later kan LUKS2 openen, maar alleen keyslots met PBKDF2, omdat ondersteuning voor Argon2 geen deel uitmaakt van upstream GRUB. Moet GRUB zelf een versleutelde `/boot` ontsleutelen, gebruik dan LUKS1 of een LUKS2-keyslot met `--pbkdf pbkdf2`. De installers van Debian en Ubuntu laten `/boot` onversleuteld, dus de kernel en initramfs doen het ontgrendelen en Argon2id werkt, ook voor ontgrendelen op afstand via SSH.

Zo controleer je of een volume LUKS1 of LUKS2 is

Elk van deze werkt op een draaiend systeem, als root. De regel `Version:` van `cryptsetup luksDump` is het gezaghebbende antwoord; de dump toont ook keyslots, PBKDF-type en 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 LUKS2

Converteren met cryptsetup convert

`cryptsetup convert` herschrijft de header ter plekke; de versleutelde data wordt niet aangeraakt. Het apparaat moet gesloten zijn, dus voor een rootbestandssysteem voer je het uit vanaf een rescue- of livesysteem. Een fout of stroomuitval halverwege de conversie kan de header onbruikbaar maken, en daarom is de back-upstap niet optioneel.

  1. 01.Start een rescue- of livesysteem en zorg dat het LUKS-apparaat niet geopend is (`cryptsetup close` indien nodig).
  2. 02.Maak een back-up van de header met `cryptsetup luksHeaderBackup` en kopieer het bestand van de server af. Iedereen met dit bestand en een oude passphrase kan de schijf ontgrendelen, dus bewaar het versleuteld.
  3. 03.Converteer LUKS1 naar LUKS2 met `cryptsetup convert --type luks2`. Bestaande keyslots blijven PBKDF2.
  4. 04.Werk elke keyslot bij naar Argon2id met `cryptsetup luksConvertKey --pbkdf argon2id`, tenzij GRUB hem moet lezen.
  5. 05.Test of het apparaat opent, bouw dan de initramfs opnieuw met `update-initramfs -u` en herstart.
  6. 06.Om terug te gaan van LUKS2 naar LUKS1 converteer je eerst elke keyslot naar PBKDF2 en verwijder je tokens en functies die alleen in LUKS2 bestaan; anders weigert `cryptsetup convert --type luks1`.
# 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.img

Note · Na het terugzetten van een header werken de passphrases die bij de back-up geldig waren weer, ook die je later hebt verwijderd. Verwijder oude header-back-ups wanneer je passphrases wijzigt. Bewaar de actuele back-up apart, bijvoorbeeld in de repository uit de handleiding voor restic-back-ups.

Veelgestelde vragen

QIs LUKS2 beter dan LUKS1?

AVoor bijna elke nieuwe opzet wel. LUKS2 heeft een redundante header, sleutelafleiding met Argon2id, tokens voor TPM2 of FIDO2 en online herversleuteling; LUKS1 is alleen nodig als een oudere GRUB `/boot` zelf moet ontsleutelen.

QHoe controleer ik mijn LUKS-versie?

AVoer als root `cryptsetup luksDump /dev/sdX | grep Version` uit; dat toont 1 of 2. `lsblk -f` toont de versie ook in de kolom FSVER voor crypto_LUKS-partities.

QKan ik LUKS1 naar LUKS2 converteren zonder gegevensverlies?

AJa. `cryptsetup convert --type luks2` herschrijft alleen de header terwijl het apparaat gesloten is. Maak eerst een back-up van de header met `cryptsetup luksHeaderBackup`, want een onderbroken conversie kan het volume onleesbaar maken.

QOndersteunt GRUB LUKS2?

AUpstream GRUB 2.06 en later kan LUKS2 ontgrendelen, maar alleen keyslots die PBKDF2 gebruiken, geen Argon2id. Dat is alleen van belang als `/boot` zelf versleuteld is; met een onversleutelde `/boot` ontgrendelt de initramfs LUKS2 met Argon2id gewoon.

QWelke versleuteling gebruikt LUKS2 standaard?

AHet huidige cryptsetup gebruikt standaard `aes-xts-plain64` met een sleutel van 512 bits (AES-256 in XTS-modus) en Argon2id voor sleutelafleiding. Voer `cryptsetup --help` uit om de ingebouwde standaarden op je systeem te zien, en zie de handleiding voor een LUKS-versleutelde root voor een volledige opzet.

LUKS2 vs. LUKS1: verschillen, hoe je het controleert en hoe je converteert · NoctisNode