LUKS (Linux Unified Key Setup) es el estándar para el cifrado de disco en Linux. Se sitúa sobre dm-crypt y proporciona un formato estandarizado en disco, múltiples frases de contraseña por volumen y gestión segura de claves. Ya sea que necesites cifrar una partición de datos en un servidor, proteger el disco de un portátil o cumplir con requisitos de conformidad para datos en reposo, LUKS es la herramienta que todo administrador de Linux debe conocer.

Esta guía cubre el cifrado de particiones con LUKS2, gestión de ranuras de claves, configuración de desbloqueo automático al arranque y recuperación de problemas comunes.

Requisitos Previos

  • Sistema Linux con kernel 4.12+ (para soporte de LUKS2 y Argon2id)
  • cryptsetup 2.0+ instalado
  • Acceso root o sudo
  • Una partición o disco libre para cifrar (el formateo LUKS es destructivo)
  • Copia de seguridad de cualquier dato en el dispositivo objetivo

LUKS vs Otras Opciones de Cifrado en Linux

Antes de profundizar, aquí está cómo LUKS se compara con las alternativas:

CaracterísticaLUKS/dm-crypteCryptfsfscryptVeraCrypt
AlcancePartición/disco completoPor directorioPor directorioPartición/contenedor completo
RendimientoCasi nativo (AES-NI)Más lento (FS apilado)Casi nativoCasi nativo
Gestión de clavesHasta 32 ranurasEnvoltura por usuarioClaves por directorioContraseña única
Cifrado de arranqueSí (con initramfs)NoNoSí (bootloader personalizado)
Estándar en LinuxSí (predeterminado)DeprecadoSolo Ext4/F2FSMultiplataforma

LUKS es la elección correcta para particiones de servidor, cifrado de disco completo y cualquier escenario donde necesites múltiples métodos de desbloqueo (frase de contraseña + archivo de clave + clave de recuperación).

Cifrando una Partición con LUKS2

Paso 1: Identificar tu Dispositivo Objetivo

lsblk -f
NAME   FSTYPE SIZE MOUNTPOINT
sda           100G
├─sda1 ext4    50G /
├─sda2 swap     4G [SWAP]
└─sda3          46G

En este ejemplo, /dev/sda3 es la partición sin formatear que cifraremos. Verifica dos veces el nombre del dispositivoluksFormat destruirá todos los datos en él.

Paso 2: Instalar cryptsetup

En Debian/Ubuntu:

sudo apt update && sudo apt install -y cryptsetup

En RHEL/Fedora/AlmaLinux:

sudo dnf install -y cryptsetup

Verifica que la versión soporte LUKS2:

cryptsetup --version

Necesitas la versión 2.0.0 o posterior. Cualquier distribución moderna desde 2018 en adelante incluye esto.

Paso 3: Inicializar el Cifrado LUKS

sudo cryptsetup luksFormat --type luks2 /dev/sda3

Verás un aviso de confirmación y se te pedirá establecer una frase de contraseña:

WARNING: Device /dev/sda3 already contains a 'ext4' superblock signature.

WARNING!
========
This will overwrite data on /dev/sda3 irrevocably.

Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /dev/sda3:
Verify passphrase:

Elige una frase de contraseña fuerte. Este es tu método principal de desbloqueo. Si la pierdes y no tienes una ranura de clave de respaldo, los datos se perderán — ese es el punto del cifrado.

Lo que luksFormat hace internamente:

  1. Escribe una cabecera LUKS2 (16 MB por defecto) al inicio de la partición
  2. Genera una clave maestra aleatoria (AES de 256 bits por defecto)
  3. Cifra la clave maestra con tu frase de contraseña usando derivación de clave Argon2id
  4. Almacena la clave maestra cifrada en la ranura 0

Paso 4: Abrir el Volumen Cifrado

sudo cryptsetup open /dev/sda3 data_crypt

Esto solicita tu frase de contraseña, luego crea /dev/mapper/data_crypt — un dispositivo de bloque virtual que cifra/descifra todas las E/S de forma transparente.

Verifica que esté abierto:

ls -la /dev/mapper/data_crypt

Paso 5: Crear un Sistema de Archivos y Montar

sudo mkfs.ext4 /dev/mapper/data_crypt
sudo mkdir -p /mnt/encrypted
sudo mount /dev/mapper/data_crypt /mnt/encrypted

Pruébalo:

echo "Encryption works" | sudo tee /mnt/encrypted/test.txt
cat /mnt/encrypted/test.txt

Los datos ahora están cifrados en reposo. Cualquiera que extraiga el disco sin la frase de contraseña solo verá bytes aleatorios.

Gestionando Ranuras de Claves LUKS

LUKS2 soporta hasta 32 ranuras de claves. Cada ranura contiene una copia cifrada independientemente de la clave maestra. Esto significa que puedes tener múltiples frases de contraseña, archivos de clave o claves de recuperación — todas abriendo el mismo volumen.

Agregar una Frase de Contraseña de Respaldo

sudo cryptsetup luksAddKey /dev/sda3

Primero ingresarás la frase de contraseña existente, luego la nueva. Esto va a la siguiente ranura disponible.

Agregar un Archivo de Clave

Los archivos de clave permiten desbloqueo automático (scripts, secuencias de arranque) sin escribir una frase de contraseña:

sudo dd if=/dev/urandom of=/root/luks-keyfile bs=4096 count=1
sudo chmod 400 /root/luks-keyfile
sudo cryptsetup luksAddKey /dev/sda3 /root/luks-keyfile

Almacena los archivos de clave de forma segura. Si el archivo de clave está en el mismo disco sin cifrar, anula el propósito. Guárdalo en una partición raíz cifrada separada o en un token de hardware.

Listar Ranuras de Claves

sudo cryptsetup luksDump /dev/sda3 | grep -A5 "Keyslots:"

Para una vista más limpia:

sudo cryptsetup luksDump /dev/sda3 | grep "Key Slot"

Eliminar una Ranura de Clave

sudo cryptsetup luksRemoveKey /dev/sda3

Ingresa la frase de contraseña que deseas eliminar. O elimina por número de ranura:

sudo cryptsetup luksKillSlot /dev/sda3 1

Nunca elimines todas las ranuras de claves. Si eliminas la última, el volumen se vuelve permanentemente inaccesible. cryptsetup te advertirá, pero no confíes en ello.

Desbloqueo Automático de LUKS al Arranque

Para particiones de servidor que necesitan montarse automáticamente, tienes dos opciones:

Opción A: Archivo de Clave en la Partición Raíz

Esto funciona cuando la partición raíz ya está cifrada (o es un disco de arranque confiable) y quieres que las particiones secundarias se desbloqueen sin un aviso de frase de contraseña.

  1. Crea el archivo de clave (si no lo has hecho ya):
sudo dd if=/dev/urandom of=/root/luks-keyfile bs=4096 count=1
sudo chmod 400 /root/luks-keyfile
sudo cryptsetup luksAddKey /dev/sda3 /root/luks-keyfile
  1. Obtén el UUID de la partición LUKS:
sudo blkid /dev/sda3
/dev/sda3: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="crypto_LUKS"
  1. Agrega a /etc/crypttab:
echo 'data_crypt UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /root/luks-keyfile luks' | sudo tee -a /etc/crypttab
  1. Agrega a /etc/fstab:
echo '/dev/mapper/data_crypt /mnt/encrypted ext4 defaults 0 2' | sudo tee -a /etc/fstab
  1. Reconstruye el initramfs:

En Debian/Ubuntu:

sudo update-initramfs -u

En RHEL/Fedora:

sudo dracut -f

Opción B: Aviso de Frase de Contraseña al Arranque

Si quieres la seguridad de requerir una frase de contraseña en cada arranque, agrega solo esto a /etc/crypttab:

echo 'data_crypt UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 none luks' | sudo tee -a /etc/crypttab

La palabra clave none le dice al sistema que solicite una frase de contraseña durante el arranque. Este es el predeterminado para particiones raíz cifradas.

Verificando la Salud del Volumen LUKS

Ver Detalles del Volumen

sudo cryptsetup luksDump /dev/sda3

Esto muestra la versión LUKS, cifrado, hash, ranuras de claves y tamaño de cabecera. Útil para verificar parámetros de cifrado.

Prueba de Rendimiento del Cifrado

cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha256      1547453 iterations per second for 256-bit key
PBKDF2-sha512       987231 iterations per second for 256-bit key
Argon2id             8 iterations, 1048576 memory per thread for 256-bit key
#     Algorithm |       Key |      Encryption |      Decryption
        aes-xts        256b      3512.0 MiB/s      3498.7 MiB/s
        aes-xts        512b      2845.3 MiB/s      2830.1 MiB/s

Con aceleración de hardware AES-NI (presente en cualquier CPU x86 moderna), verás un rendimiento de 2-3 GB/s — el cifrado agrega una sobrecarga insignificante.

Respaldar la Cabecera LUKS

Si la cabecera LUKS se corrompe (sectores dañados, sobrescritura accidental), pierdes acceso a todo el volumen. Siempre respáldala:

sudo cryptsetup luksHeaderBackup /dev/sda3 --header-backup-file /root/sda3-luks-header.bak

Almacena esta copia de seguridad fuera del sistema — en una unidad USB, recurso compartido de red seguro o bóveda. Cualquiera con la copia de seguridad de la cabecera y una frase de contraseña válida puede descifrar el volumen.

Restáurala si es necesario:

sudo cryptsetup luksHeaderRestore /dev/sda3 --header-backup-file /root/sda3-luks-header.bak

Cerrar y Desmontar

Cuando hayas terminado, desmonta y cierra el volumen limpiamente:

sudo umount /mnt/encrypted
sudo cryptsetup close data_crypt

La partición ahora está bloqueada. Los datos en /dev/sda3 son inaccesibles hasta que la abras de nuevo con la frase de contraseña o archivo de clave correctos.

Solución de Problemas

“Device /dev/sda3 is in use” al intentar formatear: La partición está montada o retenida por otro proceso. Ejecuta lsof /dev/sda3 o fuser -mv /dev/sda3 para encontrar qué la está usando.

El arranque se cuelga esperando la frase de contraseña: Si agregaste un volumen LUKS a /etc/crypttab sin un archivo de clave y el volumen no es crítico, agrega nofail a las opciones: data_crypt UUID=... none luks,nofail. Esto permite que el arranque continúe después de un tiempo de espera.

“No key available with this passphrase”: Frase de contraseña incorrecta, o la ranura de clave fue eliminada. Prueba todas las frases de contraseña que hayas configurado. Si ninguna funciona, restaura desde una copia de seguridad de cabecera.

luksFormat lento en discos grandes: El formateo en sí es rápido (solo escribe la cabecera). Pero si quieres borrar de forma segura la partición primero, ejecuta sudo cryptsetup open --type plain /dev/sda3 wipe && sudo dd if=/dev/zero of=/dev/mapper/wipe bs=1M status=progress && sudo cryptsetup close wipe antes de formatear.

No se puede redimensionar la partición cifrada: Cierra el volumen primero, luego usa cryptsetup resize después de redimensionar la partición subyacente con parted o fdisk.

Resumen

  • LUKS2 es el estándar de Linux para cifrado de disco — usa cryptsetup luksFormat --type luks2 para cifrar cualquier partición
  • El cifrado es transparente: una vez abierto con cryptsetup open, todas las lecturas y escrituras se cifran/descifran automáticamente
  • LUKS soporta hasta 32 ranuras de claves — usa múltiples frases de contraseña y archivos de clave para flexibilidad y recuperación
  • Desbloqueo automático al arranque vía /etc/crypttab con un archivo de clave almacenado en una partición raíz cifrada
  • Siempre respalda la cabecera LUKS con luksHeaderBackup — la corrupción de la cabecera significa pérdida total de datos
  • La sobrecarga de rendimiento es insignificante en CPUs modernas con aceleración de hardware AES-NI
  • No puedes cifrar una partición in situ — siempre respalda los datos antes de ejecutar luksFormat

Automate SSL Certificates with Let’s Encrypt and Certbot | Configure UFW Firewall on Ubuntu Server | Restic Backups to Encrypted Cloud Storage