NoctisNode
← GuíasSeguridad2026-10-238 min

LUKS2 frente a LUKS1: diferencias, cómo comprobarlo y cómo convertir

LUKS2 añade a LUKS1 Argon2id, una cabecera JSON redundante, tokens e integridad. Comprueba tu versión con cryptsetup luksDump y convierte de forma segura tras hacer una copia de la cabecera.

Respuesta corta: LUKS2 es el formato en disco actual para el cifrado de discos en Linux y el predeterminado en cryptsetup desde la versión 2.1. Frente a LUKS1, añade una cabecera de metadatos JSON redundante y con checksum, la derivación de claves Argon2id (de memoria intensiva) en lugar de PBKDF2, 32 keyslots en vez de 8, tokens para desbloqueo con TPM2 y FIDO2, y cifrado autenticado opcional. Usa LUKS2 salvo que un GRUB antiguo tenga que descifrar `/boot` por sí mismo.

Ambos formatos cifran los datos de la misma manera, normalmente con AES-XTS. Lo que cambia es la cabecera: cómo se guardan las claves, lo difícil que es atacar las frases de paso por fuerza bruta y qué herramientas pueden leerla. Esta guía cubre las diferencias, cómo saber cuál tienes y cómo convertir con `cryptsetup convert` sin perder el disco. Si vas a cifrar un servidor nuevo para un stack de self-hosting en un VPS pequeño, LUKS2 es el formato que debes elegir.

LUKS2 frente a LUKS1 de un vistazo

CaracterísticaLUKS1LUKS2
CabeceraUna única cabecera binaria de 592 bytes más el área de keyslotsDos cabeceras binarias más metadatos JSON, con checksum y copia redundante
Desplazamiento predeterminado de cabecera / datos2 MiB16 MiB
Keyslots832
Derivación de claves (PBKDF)Solo PBKDF2Argon2id (predeterminado), Argon2i o PBKDF2
Tokens (TPM2, FIDO2, PKCS#11, Clevis)NoSí
Cifrado autenticado (dm-integrity)NoOpcional, experimental
Recifrado en líneaSolo sin conexiónSí, `cryptsetup reencrypt` en un dispositivo montado
Flags persistentes y etiquetaNoSí, por ejemplo `--allow-discards --persistent`
Desbloqueo por GRUB para /boot cifradoSíSolo keyslots PBKDF2 en el GRUB oficial

Formato de cabecera y keyslots

Una cabecera LUKS1 es una estructura binaria fija seguida de ocho áreas de keyslots. Si se sobrescriben los primeros sectores del dispositivo, por ejemplo con un `mkfs` equivocado o una herramienta de particionado, desaparecen todos los keyslots y los datos se pierden salvo que tengas una copia de la cabecera.

LUKS2 guarda una cabecera binaria y un área de metadatos JSON, y mantiene una segunda copia de ambas. Cada copia lleva un checksum, así que `cryptsetup` puede detectar corrupción y recurrir a la otra copia. El área JSON describe keyslots, segmentos, digests y tokens, y eso es lo que permite añadir funciones nuevas sin volver a cambiar el formato. La redundancia sigue sin sustituir a una copia de la cabecera: sobrescribir por completo los primeros megabytes destruye ambas copias.

Argon2id frente a PBKDF2

La frase de paso nunca se usa directamente como clave. Una función de derivación de claves la estira para que cada intento sea costoso. LUKS1 solo puede usar PBKDF2, que es barata de ejecutar en GPU y ASIC, así que un atacante con una copia de la cabecera puede probar frases de paso en paralelo a gran velocidad.

LUKS2 usa por defecto Argon2id, que exige una cantidad configurable de memoria por intento (hasta 1 GiB por defecto, limitada por la RAM disponible al formatear) y es mucho más cara de paralelizar. Una frase de paso robusta sigue siendo la principal defensa, pero Argon2id encarece considerablemente cada intento.

En servidores pequeños, ten en cuenta el coste de memoria. Un keyslot creado en una máquina con mucha RAM puede necesitar para desbloquearse más memoria de la que un VPS de 1 GB, como el plan Wisp de NoctisNode, puede dedicar dentro del initramfs. Fíjalo explícitamente con `--pbkdf-memory` (en KiB) cuando formatees o añadas claves en una máquina grande para una pequeña.

# 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, integridad y salvedades de GRUB

Los tokens son objetos JSON de la cabecera LUKS2 que indican a las herramientas cómo obtener una clave automáticamente. `systemd-cryptenroll` los usa para vincular un keyslot a un chip TPM2, una llave de seguridad FIDO2 o una tarjeta inteligente PKCS#11, y Clevis los usa para el desbloqueo ligado a la red con un servidor Tang. Nada de esto existe en LUKS1.

El modo de integridad (`cryptsetup luksFormat --integrity hmac-sha256`) combina el cifrado con dm-integrity para que los sectores manipulados produzcan errores de lectura en lugar de datos alterados en silencio. Cuesta espacio en disco y velocidad de escritura, requiere un borrado completo al formatear y sigue marcado como experimental. La mayoría de los servidores no lo usan.

GRUB es la principal razón por la que todavía se ve LUKS1. El GRUB oficial 2.06 y posteriores pueden abrir LUKS2, pero solo keyslots que usen PBKDF2, porque el soporte de Argon2 no forma parte del GRUB oficial. Si el propio GRUB tiene que descifrar un `/boot` cifrado, usa LUKS1 o un keyslot LUKS2 con `--pbkdf pbkdf2`. Los instaladores de Debian y Ubuntu dejan `/boot` sin cifrar, así que el kernel y el initramfs se encargan del desbloqueo y Argon2id funciona, también para el desbloqueo remoto por SSH.

Cómo saber si un volumen es LUKS1 o LUKS2

Cualquiera de estas opciones funciona en un sistema en marcha, como root. La línea `Version:` de `cryptsetup luksDump` es la respuesta definitiva; el volcado también muestra los keyslots, el tipo de PBKDF y los 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 con cryptsetup convert

`cryptsetup convert` reescribe la cabecera en su sitio; los datos cifrados no se tocan. El dispositivo debe estar cerrado, así que para un sistema de archivos raíz lo ejecutas desde un sistema de rescate o live. Un fallo o un corte de corriente a mitad de la conversión puede dejar la cabecera inservible, por eso el paso de la copia de seguridad no es opcional.

  1. 01.Arranca un sistema de rescate o live y asegúrate de que el dispositivo LUKS no está abierto (`cryptsetup close` si hace falta).
  2. 02.Haz una copia de la cabecera con `cryptsetup luksHeaderBackup` y saca el archivo del servidor. Cualquiera con este archivo y una frase de paso antigua puede desbloquear el disco, así que guárdalo cifrado.
  3. 03.Convierte LUKS1 a LUKS2 con `cryptsetup convert --type luks2`. Los keyslots existentes siguen siendo PBKDF2.
  4. 04.Actualiza cada keyslot a Argon2id con `cryptsetup luksConvertKey --pbkdf argon2id`, salvo que GRUB tenga que leerlo.
  5. 05.Comprueba que el dispositivo se abre, luego regenera el initramfs con `update-initramfs -u` y reinicia.
  6. 06.Para volver de LUKS2 a LUKS1, convierte primero todos los keyslots a PBKDF2 y elimina los tokens y las funciones exclusivas de LUKS2; si no, `cryptsetup convert --type luks1` se niega.
# 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 · Tras restaurar una cabecera, vuelven a funcionar las frases de paso válidas en el momento de la copia, incluidas las que eliminaste después. Borra las copias antiguas de la cabecera cuando rotes las frases de paso. Guarda la copia actual en un lugar separado, por ejemplo en el repositorio descrito en la guía de copias con restic.

Preguntas frecuentes

Q¿Es LUKS2 mejor que LUKS1?

APara casi cualquier instalación nueva, sí. LUKS2 tiene una cabecera redundante, derivación de claves Argon2id, tokens para TPM2 o FIDO2 y recifrado en línea; LUKS1 solo hace falta cuando un GRUB antiguo tiene que descifrar `/boot` por sí mismo.

Q¿Cómo compruebo mi versión de LUKS?

AEjecuta `cryptsetup luksDump /dev/sdX | grep Version` como root; imprime 1 o 2. `lsblk -f` también muestra la versión en la columna FSVER para las particiones crypto_LUKS.

Q¿Puedo convertir LUKS1 a LUKS2 sin perder datos?

ASí. `cryptsetup convert --type luks2` reescribe solo la cabecera mientras el dispositivo está cerrado. Haz antes una copia de la cabecera con `cryptsetup luksHeaderBackup`, porque una conversión interrumpida puede dejar el volumen ilegible.

Q¿GRUB admite LUKS2?

AEl GRUB oficial 2.06 y posteriores pueden desbloquear LUKS2, pero solo keyslots que usen PBKDF2, no Argon2id. Esto solo importa cuando el propio `/boot` está cifrado; con un `/boot` sin cifrar, el initramfs desbloquea LUKS2 con Argon2id sin problemas.

Q¿Qué cifrado usa LUKS2 por defecto?

AEl cryptsetup actual usa por defecto `aes-xts-plain64` con una clave de 512 bits (AES-256 en modo XTS) y Argon2id para la derivación de claves. Ejecuta `cryptsetup --help` para ver los valores predeterminados compilados en tu sistema, y consulta la guía de root cifrado con LUKS para una configuración completa.

LUKS2 frente a LUKS1: diferencias, cómo comprobarlo y cómo convertir · NoctisNode