NoctisNode
← GuidesSécurité2026-10-238 min

LUKS2 ou LUKS1 : différences, vérification et conversion

LUKS2 ajoute Argon2id, un en-tête JSON redondant, des tokens et l'intégrité par rapport à LUKS1. Vérifiez votre version avec cryptsetup luksDump et convertissez en toute sécurité après une sauvegarde de l'en-tête.

En bref : LUKS2 est le format sur disque actuel du chiffrement de disque sous Linux et le format par défaut de cryptsetup depuis la version 2.1. Par rapport à LUKS1, il ajoute un en-tête de métadonnées JSON redondant et protégé par somme de contrôle, la dérivation de clé Argon2id gourmande en mémoire au lieu de PBKDF2, 32 keyslots au lieu de 8, des tokens pour le déverrouillage par TPM2 et FIDO2, et un chiffrement authentifié optionnel. Utilisez LUKS2, sauf si un ancien GRUB doit déchiffrer `/boot` lui-même.

Les deux formats chiffrent les données de la même façon, généralement en AES-XTS. Ce qui diffère, c'est l'en-tête : la manière dont les clés sont stockées, la difficulté de casser les phrases de passe par force brute et les outils capables de le lire. Ce guide couvre les différences, comment savoir lequel vous utilisez et comment convertir avec `cryptsetup convert` sans perdre le disque. Si vous chiffrez un nouveau serveur pour une stack d'auto-hébergement sur petit VPS, LUKS2 est le format à choisir.

LUKS2 ou LUKS1 en un coup d'œil

FonctionnalitéLUKS1LUKS2
En-têteUn seul en-tête binaire de 592 octets plus la zone des keyslotsDeux en-têtes binaires plus des métadonnées JSON, avec somme de contrôle et copie redondante
Décalage par défaut en-tête / données2 MiB16 MiB
Keyslots832
Dérivation de clé (PBKDF)PBKDF2 uniquementArgon2id (par défaut), Argon2i ou PBKDF2
Tokens (TPM2, FIDO2, PKCS#11, Clevis)NonOui
Chiffrement authentifié (dm-integrity)NonOptionnel, expérimental
Rechiffrement en ligneHors ligne uniquementOui, `cryptsetup reencrypt` sur un périphérique monté
Drapeaux persistants et labelNonOui, par exemple `--allow-discards --persistent`
Déverrouillage par GRUB pour un /boot chiffréOuiUniquement les keyslots PBKDF2 dans GRUB upstream

Format d'en-tête et keyslots

Un en-tête LUKS1 est une structure binaire fixe suivie de huit zones de keyslots. Si les premiers secteurs du périphérique sont écrasés, par exemple par un `mkfs` malencontreux ou un outil de partitionnement, tous les keyslots disparaissent et les données sont perdues, sauf si vous avez une sauvegarde de l'en-tête.

LUKS2 stocke un en-tête binaire et une zone de métadonnées JSON, et conserve une seconde copie des deux. Chaque copie porte une somme de contrôle : `cryptsetup` peut ainsi détecter une corruption et se rabattre sur l'autre copie. La zone JSON décrit keyslots, segments, digests et tokens, ce qui permet d'ajouter de nouvelles fonctionnalités sans changer à nouveau de format. La redondance ne remplace pas pour autant une sauvegarde de l'en-tête : un écrasement complet des premiers mégaoctets détruit les deux copies.

Argon2id ou PBKDF2

La phrase de passe n'est jamais utilisée directement comme clé. Une fonction de dérivation de clé l'étire pour que chaque tentative coûte cher. LUKS1 ne peut utiliser que PBKDF2, peu coûteux à exécuter sur GPU et ASIC : un attaquant disposant d'une copie de l'en-tête peut tester des phrases de passe en parallèle à grande vitesse.

LUKS2 utilise par défaut Argon2id, qui exige une quantité de mémoire configurable par tentative (jusqu'à 1 GiB par défaut, plafonnée par la RAM disponible au moment du formatage) et se parallélise bien plus difficilement. Une phrase de passe forte reste la défense principale, mais Argon2id augmente considérablement le coût de chaque tentative.

Sur les petits serveurs, gardez le coût mémoire à l'esprit. Un keyslot créé sur une machine dotée de beaucoup de RAM peut exiger plus de mémoire pour le déverrouillage qu'un VPS de 1 Go, comme l'offre Wisp de NoctisNode, ne peut en offrir dans l'initramfs. Fixez-la explicitement avec `--pbkdf-memory` (en KiB) lorsque vous formatez ou ajoutez des clés sur une grosse machine pour une petite.

# 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, intégrité et limites de GRUB

Les tokens sont des objets JSON de l'en-tête LUKS2 qui indiquent aux outils comment obtenir une clé automatiquement. `systemd-cryptenroll` s'en sert pour lier un keyslot à une puce TPM2, une clé de sécurité FIDO2 ou une carte à puce PKCS#11, et Clevis les utilise pour le déverrouillage lié au réseau avec un serveur Tang. Rien de tout cela n'existe en LUKS1.

Le mode intégrité (`cryptsetup luksFormat --integrity hmac-sha256`) combine chiffrement et dm-integrity pour que des secteurs altérés produisent des erreurs de lecture au lieu de données silencieusement modifiées. Il coûte de l'espace disque et de la vitesse d'écriture, exige un effacement complet au formatage et reste marqué expérimental. La plupart des serveurs ne l'utilisent pas.

GRUB est la principale raison pour laquelle on croise encore LUKS1. GRUB upstream 2.06 et ultérieur peut ouvrir LUKS2, mais uniquement les keyslots utilisant PBKDF2, car la prise en charge d'Argon2 ne fait pas partie de GRUB upstream. Si GRUB lui-même doit déchiffrer un `/boot` chiffré, utilisez LUKS1 ou un keyslot LUKS2 avec `--pbkdf pbkdf2`. Les installateurs Debian et Ubuntu laissent `/boot` non chiffré : ce sont le noyau et l'initramfs qui déverrouillent, et Argon2id fonctionne, y compris pour le déverrouillage à distance via SSH.

Comment savoir si un volume est en LUKS1 ou LUKS2

Chacune de ces commandes fonctionne sur un système en marche, en root. La ligne `Version:` de `cryptsetup luksDump` fait foi ; le dump affiche aussi les keyslots, le type de PBKDF et les 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

Convertir avec cryptsetup convert

`cryptsetup convert` réécrit l'en-tête sur place ; les données chiffrées ne sont pas touchées. Le périphérique doit être fermé : pour un système de fichiers racine, lancez la commande depuis un système de secours ou live. Un échec ou une coupure de courant en cours de conversion peut rendre l'en-tête inutilisable, d'où le caractère obligatoire de l'étape de sauvegarde.

  1. 01.Démarrez un système de secours ou live et assurez-vous que le périphérique LUKS n'est pas ouvert (`cryptsetup close` si nécessaire).
  2. 02.Sauvegardez l'en-tête avec `cryptsetup luksHeaderBackup` et copiez le fichier hors du serveur. Quiconque possède ce fichier et une ancienne phrase de passe peut déverrouiller le disque : stockez-le chiffré.
  3. 03.Convertissez LUKS1 en LUKS2 avec `cryptsetup convert --type luks2`. Les keyslots existants restent en PBKDF2.
  4. 04.Passez chaque keyslot en Argon2id avec `cryptsetup luksConvertKey --pbkdf argon2id`, sauf si GRUB doit le lire.
  5. 05.Vérifiez que le périphérique s'ouvre, puis reconstruisez l'initramfs avec `update-initramfs -u` et redémarrez.
  6. 06.Pour revenir de LUKS2 à LUKS1, convertissez d'abord chaque keyslot en PBKDF2 et supprimez les tokens et les fonctionnalités propres à LUKS2 ; sinon `cryptsetup convert --type luks1` refuse.
# 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 · Après la restauration d'un en-tête, les phrases de passe valides au moment de la sauvegarde fonctionnent de nouveau, y compris celles supprimées depuis. Supprimez les anciennes sauvegardes d'en-tête lorsque vous changez de phrase de passe. Conservez la sauvegarde actuelle à part, par exemple dans le dépôt décrit dans le guide des sauvegardes restic.

FAQ

QLUKS2 est-il meilleur que LUKS1 ?

APour presque toute nouvelle installation, oui. LUKS2 offre un en-tête redondant, la dérivation de clé Argon2id, des tokens pour TPM2 ou FIDO2 et le rechiffrement en ligne ; LUKS1 n'est nécessaire que lorsqu'un ancien GRUB doit déchiffrer `/boot` lui-même.

QComment vérifier ma version de LUKS ?

ALancez `cryptsetup luksDump /dev/sdX | grep Version` en root ; la commande affiche 1 ou 2. `lsblk -f` montre aussi la version dans la colonne FSVER pour les partitions crypto_LUKS.

QPuis-je convertir LUKS1 en LUKS2 sans perdre de données ?

AOui. `cryptsetup convert --type luks2` ne réécrit que l'en-tête, périphérique fermé. Sauvegardez d'abord l'en-tête avec `cryptsetup luksHeaderBackup`, car une conversion interrompue peut rendre le volume illisible.

QGRUB prend-il en charge LUKS2 ?

AGRUB upstream 2.06 et ultérieur peut déverrouiller LUKS2, mais uniquement les keyslots utilisant PBKDF2, pas Argon2id. Cela ne compte que si `/boot` lui-même est chiffré ; avec un `/boot` non chiffré, l'initramfs déverrouille normalement LUKS2 avec Argon2id.

QQuel chiffrement LUKS2 utilise-t-il par défaut ?

ALe cryptsetup actuel utilise par défaut `aes-xts-plain64` avec une clé de 512 bits (AES-256 en mode XTS) et Argon2id pour la dérivation de clé. Lancez `cryptsetup --help` pour voir les valeurs par défaut compilées sur votre système, et consultez le guide racine chiffrée LUKS pour une installation complète.

LUKS2 ou LUKS1 : différences, vérification et conversion · NoctisNode