Saltar al contenido

LUKS: cifrado de disco en Linux, el equivalente a BitLocker

    LUKS:

    cifrado de disco en Linux, el equivalente a BitLocker

    Linux y sistemas  |  unfantasmaenelsistema.com

    En el artículo sobre BitLocker vimos cómo Windows cifra un disco entero para que, si te roban el portátil o acaba en un contenedor de reciclaje sin borrar, sus datos no sirvan de nada. Linux tiene su propia respuesta a ese mismo problema, y es anterior: se llama LUKS (Linux Unified Key Setup) y lleva siendo el estándar de facto desde 2004. No es una aplicación que instalas, sino un formato en disco y un subsistema del propio kernel.

    La idea de fondo es idéntica a la de BitLocker: el disco se cifra bloque a bloque con una clave maestra que nunca cambia, y esa clave maestra se guarda a su vez cifrada con tu frase de paso (o con una llave, o con el TPM). Cambiar la contraseña no obliga a recifrar 500 GB: solo se vuelve a envolver la clave maestra. Este artículo recorre cómo funciona LUKS por dentro, cómo se cifra desde un disco de datos hasta la raíz del sistema, y cómo se automatiza el arranque sin renunciar a la protección.

    Qué aprenderás en este artículo

    Qué son dm-crypt y el formato LUKS, y en qué se diferencian LUKS1 y LUKS2 · La cabecera LUKS y los key slots: por qué puedes tener varias frases de paso para el mismo disco · Los comandos de cryptsetup que de verdad se usan: luksFormat, luksOpen, luksAddKey, luksHeaderBackup · Por qué Argon2id como función de derivación hace que forzar tu frase de paso con GPU sea inviable · Cómo se cifra la raíz del sistema: initramfs, crypttab y el prompt de arranque · Desbloqueo automático con TPM2 (systemd-cryptenroll) o atado a la red (Clevis/Tang) · LUKS sobre LVM frente a LVM sobre LUKS, y cómo cifrar un disco que ya tiene datos · Ataques reales (evil maid, cold boot, cabecera perdida) y cómo se mitigan

    1. Las piezas: dm-crypt, cryptsetup y LUKS

    Conviene separar tres nombres que se mezclan. dm-crypt es el módulo del kernel Linux que hace el trabajo real: crea un dispositivo de bloques virtual que cifra y descifra al vuelo cada sector que se escribe o se lee del disco físico. cryptsetup es la herramienta de línea de comandos con la que hablas tú. Y LUKS es el formato estándar que cryptsetup escribe en el disco para guardar, de forma ordenada, todo lo que dm-crypt necesita: el algoritmo, la sal, los parámetros y la clave maestra envuelta.

    Podrías usar dm-crypt en «modo plain», sin LUKS, pasándole tú todos los parámetros a mano cada vez. Nadie lo hace salvo casos muy concretos: sin cabecera no hay forma de saber si una frase de paso es correcta (simplemente sale basura), no puedes tener varias frases, y un error en un parámetro hace los datos irrecuperables sin ningún aviso. LUKS existe precisamente para quitar esos pies.

    1.1 LUKS1 y LUKS2

    LUKS1LUKS2
    Año / estado2004, en mantenimiento2018, valor por defecto desde cryptsetup 2.1
    CabeceraTamaño fijo (~2 MB), formato binarioFormato JSON + área binaria, con copia de la cabecera redundante
    KDF por defectoPBKDF2Argon2id (resistente a GPU y a hardware dedicado)
    Key slots832 (según espacio de cabecera)
    Extras—Reencriptado online, autenticación de sector opcional, tokens (TPM2, FIDO2)

    Para un sistema nuevo, LUKS2 sin pensarlo. LUKS1 solo se sigue usando cuando el gestor de arranque necesita leer la partición cifrada directamente (por ejemplo GRUB desbloqueando `/boot` en algunas configuraciones antiguas), porque su soporte de LUKS2 y de Argon2 llegó tarde y con limitaciones.

    2. La cabecera LUKS y los key slots

    Todo lo que hace a un volumen LUKS descifrable vive en su cabecera, al principio de la partición. La cabecera contiene la clave maestra cifrada (en realidad, cifrada tantas veces como slots activos haya) y los metadatos. El resto de la partición es el área de datos, cifrada con la clave maestra en claro, que solo existe en la RAM mientras el volumen está abierto.

    Un key slot es una ranura que guarda una copia de la clave maestra envuelta con una frase de paso concreta. LUKS2 tiene hasta 32. Esto tiene consecuencias prácticas muy útiles:

    • Puedes darle a un disco una frase de paso tuya y otra de recuperación guardada en una caja fuerte, y ambas abren el mismo volumen
    • Cambiar de frase de paso es añadir un slot nuevo y borrar el viejo: los datos no se tocan
    • Un fichero de clave (`keyfile`) es solo otro slot: un archivo de bytes aleatorios que hace de «contraseña» para desbloqueos automáticos
    • Si borras todos los slots, o se corrompe la cabecera, la clave maestra se pierde y con ella todos los datos, aunque el cifrado siga intacto

    La cabecera es el punto único de fallo: haz copia

    Sin cabecera no hay clave maestra, y sin clave maestra los datos son ruido permanente — ni tú ni nadie los recupera · `cryptsetup luksHeaderBackup` guarda la cabecera en un fichero; guárdalo cifrado y fuera de la máquina (LUKS2 mantiene además una copia redundante interna, pero no sustituye al backup externo) · Si regeneras la cabecera o cambias la frase, invalida los backups antiguos: alguien con la cabecera vieja y la frase vieja podría abrir el disco

    # Ver el estado de la cabecera y que slots estan ocupados
    sudo cryptsetup luksDump /dev/sda2
     
    # Copia de seguridad de la cabecera (guardala en lugar seguro y cifrado)
    sudo cryptsetup luksHeaderBackup /dev/sda2 --header-backup-file sda2-luks-header.img
     
    # Restaurar la cabecera desde el backup
    sudo cryptsetup luksHeaderRestore /dev/sda2 --header-backup-file sda2-luks-header.img

    3. Argon2id: por qué tu frase de paso aguanta

    En el artículo sobre Hashcat y GPU cracking vimos que una tarjeta gráfica moderna prueba miles de millones de hashes rápidos por segundo. Si LUKS derivara la clave de tu frase con una función rápida, una frase corta caería en horas. Por eso LUKS usa una función de derivación de clave (KDF) deliberadamente cara.

    LUKS1 usaba PBKDF2, que solo se puede encarecer subiendo el número de iteraciones — y las GPU hacen iteraciones muy bien. LUKS2 usa Argon2id, diseñado tras el Password Hashing Competition para ser memory-hard: cada intento exige, por defecto, cientos de MB de RAM y varios hilos durante un tiempo medido. Una GPU tiene muchos núcleos pero poca memoria por núcleo, así que ese requisito de memoria hunde el paralelismo que hace peligroso a Hashcat. El ASIC dedicado, que arrasa con MD5, tampoco ayuda cuando el cuello de botella es el ancho de banda de memoria.

    # cryptsetup mide tu hardware y ajusta Argon2 para tardar ~2 segundos por intento
    # Puedes verlo y forzar parametros en el formateo:
    sudo cryptsetup luksFormat --type luks2 \
         --pbkdf argon2id \
         --pbkdf-memory 1048576 \      # 1 GiB de RAM por intento
         --pbkdf-parallel 4 \
         --iter-time 4000 \            # objetivo: 4 s por intento en esta maquina
         /dev/sda2
     
    # Ver los parametros KDF reales de un volumen ya creado:
    sudo cryptsetup luksDump /dev/sda2 | grep -A4 Argon2

    El cuello de botella real sigue siendo la frase

    Argon2id compra tiempo: convierte un ataque de segundos en uno de meses o siglos para una frase decente. No salva una frase de 6 caracteres ni una palabra de diccionario · Usa una frase larga (varias palabras sin relación, estilo diceware) o un gestor de contraseñas — lo vimos en el artículo de gestores de contraseñas · Si el disco viejo tenía PBKDF2, `cryptsetup convert` y `luksChangeKey –pbkdf argon2id` lo migran

    4. Cifrar un disco de datos, paso a paso

    El caso más simple: un disco secundario, entero para datos, sin sistema operativo. El flujo es formatear a LUKS, abrirlo (lo que crea un dispositivo en `/dev/mapper/`), poner encima un sistema de ficheros normal y montarlo.

    # 1. Formatear la particion como LUKS2 (BORRA lo que hubiera; pide confirmar y frase de paso)
    sudo cryptsetup luksFormat --type luks2 /dev/sdb1
     
    # 2. Abrir el volumen -> aparece /dev/mapper/datos
    sudo cryptsetup luksOpen /dev/sdb1 datos
     
    # 3. Sistema de ficheros dentro del volumen ya descifrado
    sudo mkfs.ext4 /dev/mapper/datos
    sudo mount /dev/mapper/datos /mnt/datos
     
    # ... uso normal ...
     
    # 4. Al terminar: desmontar y cerrar (la clave maestra sale de la RAM)
    sudo umount /mnt/datos
    sudo cryptsetup luksClose datos
     
    # Anadir una segunda frase de paso (por ejemplo, de recuperacion) a un slot libre
    sudo cryptsetup luksAddKey /dev/sdb1
     
    # Quitar una frase de paso concreta
    sudo cryptsetup luksRemoveKey /dev/sdb1

    4.1 Montaje automático con /etc/crypttab

    Para que un disco de datos se abra solo al arrancar, se declara en `/etc/crypttab` (qué volumen, de dónde sale la clave) y el punto de montaje va en `/etc/fstab` apuntando a `/dev/mapper/`. La clave suele ser un keyfile con permisos `0400` de root guardado en la raíz ya cifrada, para no teclear dos frases al arranque.

    # /etc/crypttab   ->   nombre        dispositivo (por UUID)                  clave           opciones
    datos   UUID=1a2b3c4d-....   /root/keys/datos.key   luks,discard
     
    # /etc/fstab
    /dev/mapper/datos   /srv/datos   ext4   defaults   0 2

    4.2 Cifrar un disco que YA tiene datos

    Desde cryptsetup 2.x se puede cifrar «in situ» un sistema de ficheros existente sin copiarlo a otro sitio, con `cryptsetup reencrypt –encrypt` (necesita un poco de espacio libre para desplazar los datos y hacer hueco a la cabecera). Es una operación larga y que debe poder reanudarse: un corte de luz a medias sin haber podido continuar deja el volumen inconsistente. Haz copia de seguridad completa antes, sin excepción.

    5. Cifrar la raíz del sistema

    Cifrar `/home` protege tus documentos, pero deja al descubierto binarios, configuración, logs y posibles secretos en `/etc` y `/var`. Cifrar la raíz entera es lo que de verdad equivale a BitLocker. El detalle es que el sistema tiene que arrancar desde algo cifrado, y ahí entra el initramfs.

    • `/boot` (kernel + initramfs) suele quedar sin cifrar, o en LUKS1 si lo desbloquea GRUB. Es la parte que el firmware necesita leer antes de que exista ningún sistema para descifrar
    • El initramfs es un mini-sistema en RAM que el kernel carga primero. Lleva `cryptsetup` y, al arrancar, es quien pide la frase de paso, abre la raíz LUKS y luego cede el control al sistema real
    • Ese es el prompt de arranque («Please enter passphrase for disk…»): lo dibuja el initramfs, no el sistema operativo
    • Todos los instaladores modernos (Ubuntu, Fedora, Debian, openSUSE) ofrecen esto como una casilla «cifrar el disco» — por dentro montan exactamente este esquema

    El eslabón de /boot y por qué importa Secure Boot

    Si `/boot` no está firmado ni verificado, alguien con acceso físico puede alterar el initramfs para que capture tu frase — es el ataque evil maid (sección 7) · Secure Boot + kernel e initramfs firmados + (idealmente) `/boot` también cifrado cierran esa puerta. Unified Kernel Images (UKI) empaquetan kernel+initramfs+firma en un solo binario para facilitarlo

    6. Desbloqueo automático: TPM2 y red

    Teclear la frase en cada arranque es tedioso en un portátil y directamente inviable en un servidor sin teclado. Hay dos formas estándar de que el disco se abra solo sin dejar la clave en claro en ningún fichero.

    6.1 Atado al TPM 2.0 (como hace BitLocker)

    El TPM es un chip que libera un secreto solo si el equipo arrancó en un estado concreto, medido en sus PCR (registros que resumen firmware, gestor de arranque, kernel…). `systemd-cryptenroll` mete un slot LUKS2 sellado contra esos PCR: si nadie ha manipulado el arranque, el TPM entrega la clave y el disco se abre sin preguntar; si algo cambió, no la entrega y cae de vuelta a la frase de paso.

    # Sellar un slot LUKS contra el TPM, atado a los PCR 7 (Secure Boot) y 0 (firmware)
    sudo systemd-cryptenroll --tpm2-device=auto \
         --tpm2-pcrs=0+7 /dev/sda2
     
    # Anadir ademas un PIN: el TPM exige un codigo corto por encima de la medida de arranque
    sudo systemd-cryptenroll --tpm2-device=auto --tpm2-with-pin=yes /dev/sda2
     
    # En /etc/crypttab, la opcion tpm2-device delega el desbloqueo en el chip
    root  UUID=...  none  luks,tpm2-device=auto

    TPM sin PIN protege del robo, no del acceso físico con arranque

    Solo-TPM: si roban el portátil apagado y lo encienden, arranca y descifra solo hasta la pantalla de login. Protege frente a sacar el disco y leerlo en otro equipo, no frente a un atacante que solo enciende el tuyo · TPM + PIN es el equilibrio recomendado para portátiles: cómodo y resiste el arranque no autorizado · Elige bien los PCR: PCR 7 se mantiene estable entre actualizaciones si Secure Boot está activo; sellar contra PCR muy volátiles hace que cada actualización de kernel te tire a la frase de recuperación

    6.2 Atado a la red: Clevis y Tang

    Para un parque de servidores en un CPD propio, Tang es un pequeño servicio en la red y Clevis el cliente en cada máquina. Mediante un intercambio criptográfico (nada de «guardar la contraseña en el servidor»), la máquina solo puede desbloquear su disco si está en la red donde vive el Tang. Si alguien se lleva el servidor físico fuera del CPD, no arranca. Es el esquema «network-bound disk encryption» (NBDE), y se puede combinar con TPM en una política «esto Y aquello».

    7. LUKS sobre LVM o LVM sobre LUKS

    Si además de cifrar quieres LVM (varios volúmenes lógicos, snapshots, redimensionar), el orden de las capas importa.

    EsquemaCómo esCuándo conviene
    LVM sobre LUKSUna sola partición LUKS y, dentro, un grupo LVM con todos los volúmenesPortátil o equipo único: un solo desbloqueo abre raíz, swap y home a la vez. El más común
    LUKS sobre LVMLVM primero y una capa LUKS por cada volumen lógicoServidores: cifrar unos volúmenes sí y otros no, o con claves distintas y políticas distintas

    El instalador de la mayoría de distribuciones monta «LVM sobre LUKS» cuando marcas cifrar el disco. Para la swap, cífrala siempre (guarda memoria en claro, incluida la posible frase): dentro del LVM cifrado ya lo está; si va suelta, `crypttab` admite una clave aleatoria en cada arranque (`/dev/urandom`), a costa de perder la hibernación.

    8. Qué NO protege LUKS, y ataques reales

    El cifrado de disco protege datos en reposo: el equipo apagado, el disco fuera de la máquina, el portátil robado sin encender. En cuanto el volumen está abierto, los datos están tan expuestos como en cualquier sistema sin cifrar. Los ataques conocidos explotan justo esa frontera.

    AtaqueEn qué consisteMitigación
    Evil maidAcceso físico breve al equipo apagado: se altera /boot o el initramfs para capturar la frase en el siguiente arranqueSecure Boot, initramfs/UKI firmados, /boot cifrado o en soporte extraíble, sellado TPM contra PCR
    Cold bootLa RAM retiene datos segundos tras apagar; enfriándola y volcándola se puede rescatar la clave maestraApagar del todo (no suspender) en zona de riesgo; cifrado de RAM del hardware; borrado de claves al suspender
    DMA / puertosUn dispositivo por Thunderbolt/PCIe con acceso directo a memoria lee la clave del equipo encendidoIOMMU activado, Thunderbolt en modo seguro o desactivado, no dejar el equipo encendido y desatendido
    Equipo encendido y desbloqueadoRobado con sesión abierta: LUKS ya no pinta nadaBloqueo de pantalla, suspensión que expulsa la clave, apagado real si vas a dejarlo
    Cabecera corrupta o slots borradosSin clave maestra recuperable, los datos se pierden aunque el cifrado esté intactoluksHeaderBackup guardado aparte; frase de recuperación en un slot separado
    Frase débilAtaque de diccionario offline contra la cabecera copiadaFrase larga tipo diceware o gestor; Argon2id sube el coste por intento (art. de Hashcat)

    Contexto legal y de uso

    Cifra equipos y discos que sean tuyos o para los que tengas autorización de tu organización. En entornos gestionados, coordina siempre con quien administre el parque: cifrar sin una vía de recuperación corporativa puede dejar datos de la empresa inaccesibles · Guarda la frase de recuperación y el backup de cabecera con el mismo cuidado que las llaves de casa: quien tenga ambos, tiene los datos · En algunas jurisdicciones se puede requerir judicialmente la entrega de claves; infórmate de tu marco legal si eso te afecta

    9. Checklist para un portátil Linux

    PasoEstado ideal
    Cifrado activado en la instalación (LVM sobre LUKS2)Raíz, home y swap dentro del volumen cifrado
    Frase de paso larga (diceware o gestor)Nada de palabras de diccionario ni patrones
    Slot de recuperación adicionalFrase distinta, guardada fuera del equipo
    Backup de la cabecera LUKScryptsetup luksHeaderBackup, cifrado y en otra ubicación
    Desbloqueo cómodoTPM2 + PIN vía systemd-cryptenroll, PCR 0+7
    Secure Boot activo, kernel/initramfs firmadosCierra el vector evil maid sobre /boot
    Suspensión que expulsa la clave / apagado en viajeReduce cold boot y robo con sesión abierta
    Prueba de recuperación hecha una vezRestaurar cabecera y abrir con la frase de recuperación, en frío

    Conclusión

    LUKS hace en Linux exactamente lo que BitLocker en Windows, con la misma arquitectura de clave maestra envuelta y las mismas fronteras: protege el disco en reposo y nada más. La diferencia está en la transparencia — cabecera documentada, `cryptsetup luksDump` te enseña cada parámetro, y puedes copiar la cabecera, migrar el KDF o añadir slots sin herramientas propietarias.

    Si te quedas con tres ideas: marca la casilla de cifrado al instalar y usa una frase de paso de verdad; haz copia de la cabecera y guarda una frase de recuperación aparte, porque la cabecera es el único punto de fallo total; y automatiza el arranque con TPM2 más PIN, que es cómodo sin regalar el disco a quien solo pulse el botón de encendido.

    Referencias

    man cryptsetup y man crypttab — La referencia canónica, en tu propia máquina · cryptsetup FAQ (gitlab.com/cryptsetup/cryptsetup) — Respuestas a casi todo, incluida recuperación · man systemd-cryptenroll — Enrolar TPM2, FIDO2 o llaves de recuperación en un slot LUKS2 · Clevis y Tang (github.com/latchset) — Desbloqueo atado a la red para servidores · Nuestros artículos de «BitLocker», «Hashcat y GPU cracking» y «gestores de contraseñas», para las piezas que se apoyan aquí

    unfantasmaenelsistema.com | Seguridad, sistemas y todo lo que no debería funcionar (pero funciona)

    Resumen de privacidad

    Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.