El Linux Unified Key Setup ( LUKS ) es una especificación de cifrado de disco creada por Clemens Fruhwirth en 2004 y originalmente destinada a Linux .
LUKS implementa un formato estándar en disco independiente de la plataforma para su uso en diversas herramientas. Esto facilita la compatibilidad e interoperabilidad entre diferentes programas y sistemas operativos, y garantiza que todos ellos implementen la gestión de contraseñas de forma segura y documentada. [ 1 ]
Descripción
LUKS se utiliza para cifrar un dispositivo de bloques . El contenido del dispositivo cifrado es arbitrario, por lo que se puede cifrar cualquier sistema de archivos, incluidas las particiones de intercambio . [ 2 ] Hay una cabecera sin cifrar al principio de un volumen cifrado, que permite almacenar hasta 8 (LUKS1) o 32 (LUKS2) claves de cifrado junto con parámetros de cifrado como el tipo de cifrado y el tamaño de la clave. [ 3 ] [ 4 ]
La presencia de esta cabecera es una diferencia importante entre LUKS y dm-crypt , ya que permite el uso de múltiples contraseñas diferentes, con la posibilidad de cambiarlas y eliminarlas. Si la cabecera se pierde o se corrompe, el dispositivo dejará de ser descifrable. [ 5 ]
El cifrado se realiza mediante un enfoque multicapa. Primero, el dispositivo de bloques se cifra utilizando una clave maestra. Esta clave maestra se cifra con cada clave de usuario activa . [ 6 ] Las claves de usuario se derivan de frases de contraseña, claves de seguridad FIDO2 , TPM o tarjetas inteligentes . [ 7 ] [ 8 ] El enfoque multicapa permite a los usuarios cambiar su frase de contraseña sin volver a cifrar todo el dispositivo de bloques. Las ranuras de clave pueden contener información para verificar las frases de contraseña de los usuarios u otros tipos de claves.
Existen dos versiones de LUKS: LUKS2, que ofrece resistencia a la corrupción de encabezados y utiliza la función de derivación de claves Argon2 por defecto, y LUKS1, que utiliza PBKDF2 . [ 9 ] La conversión entre ambas versiones de LUKS es posible en ciertas situaciones, pero algunas características, como Argon2, podrían no estar disponibles en LUKS1. [ 3 ] LUKS2 utiliza JSON como formato de metadatos. [ 3 ] [ 10 ]
Los algoritmos criptográficos disponibles dependen del soporte del kernel del sistema anfitrión. Libgcrypt puede usarse como backend para el hash, que admite todos sus algoritmos. [ 11 ] Corresponde al proveedor del sistema operativo elegir el algoritmo predeterminado. [ 12 ] LUKS1 utiliza una técnica antiforense llamada AFsplitter , que permite el borrado y la protección seguros de los datos. [ 13 ]
LUKS con LVM
La gestión de volúmenes lógicos se puede utilizar junto con LUKS. [ 14 ]
- LVM en LUKS
- Cuando se utiliza LVM en un contenedor LUKS desbloqueado, todas las particiones subyacentes (que son volúmenes lógicos LVM) se pueden cifrar con una sola clave. Esto es similar a dividir un contenedor LUKS en varias particiones. La estructura LVM no es visible hasta que se descifra el disco. [ 15 ]
- LUKS en LVM
- Cuando se utiliza LUKS para cifrar volúmenes lógicos LVM, un volumen cifrado puede abarcar varios dispositivos. El grupo de volúmenes LVM subyacente es visible sin descifrar los volúmenes cifrados. [ 16 ]
Cifrado de disco completo

Un uso común de LUKS es proporcionar cifrado de disco completo , lo que implica cifrar la partición raíz de una instalación del sistema operativo, lo que protege los archivos del sistema operativo de ser manipulados o leídos por terceros no autorizados . [ 14 ]
En un sistema Linux, la partición de arranque ( /boot) puede cifrarse si el propio gestor de arranque admite LUKS (por ejemplo, GRUB ). Esto se hace para evitar la manipulación del núcleo de Linux . Sin embargo, el gestor de arranque de primera etapa o una partición del sistema EFI no se pueden cifrar (véase Cifrado de disco completo#El problema de la clave de arranque ). [ 14 ]
En sistemas Linux móviles, postmarketOS ha desarrollado osk-sdl para permitir desbloquear un sistema con disco completamente cifrado mediante una pantalla táctil.
Para sistemas que ejecutan systemd , el systemd-homedcomponente se puede utilizar para cifrar directorios de inicio individuales . [ 17 ]
Soporte del sistema operativo
La implementación de referencia de LUKS funciona en Linux y se basa en una versión mejorada de cryptsetup , utilizando dm-crypt como backend de cifrado de disco. En Microsoft Windows , los discos cifrados con LUKS se pueden usar a través del Subsistema de Windows para Linux . [ 18 ] (Anteriormente, esto era posible con LibreCrypt , [ 19 ] que actualmente tiene importantes vulnerabilidades de seguridad, [ 20 ] [ 21 ] y que sucedió a FreeOTFE , antes conocido como DoxBox).
DragonFly BSD admite LUKS. [ 22 ]
En macOS, anylinuxfs proporciona acceso a discos con formato LUKS, así como a otros formatos. [ 23 ]
Soporte del instalador
Varias distribuciones de Linux permiten cifrar el dispositivo raíz durante la instalación del sistema operativo. Estos instaladores incluyen Calamares , [ 24 ] Ubiquity , [ 25 ] Debian-Installer , [ 26 ] y otros.
Formato en disco
Los encabezados LUKS son compatibles con versiones anteriores; las versiones más recientes de LUKS pueden leer los encabezados de versiones anteriores. [ 27 ]
LUKS1
LUKS2
El encabezado LUKS2 tiene un área binaria y un área JSON , un segundo área binaria y JSON, y un área de ranuras de clave. Las áreas binaria y JSON se repiten dos veces con pequeñas variaciones. [ 10 ]
Área binaria
El tamaño de las áreas binarias es siempre de 4 kiB. El tamaño del área binaria más el área JSON puede ser una potencia de dos bytes entre 16 kiB y 4 MiB, lo que hace que el tamaño de las áreas JSON esté entre 12 kiB y 4092 kiB cada una.
Área JSON
El objeto de metadatos JSON base de LUKS2 tiene 5 claves: config , keyslots , digests , segments y tokens . [ 10 ]
El archivo de configuración contiene ajustes generales e información del encabezado LUKS, así como opciones de montaje persistente.
Los segmentos describen áreas del disco que contienen datos y que pueden descifrarse. También describen el algoritmo con el que se cifra un segmento.
Los resúmenes describen qué ranuras de clave contienen claves cifradas capaces de descifrar qué segmentos . Contienen un hash de la clave descifrada de la ranura , que funciona como suma de verificación y para comprobar la exactitud de la contraseña.
Las ranuras para claves contienen claves cifradas. El método de cifrado varía; se puede utilizar una combinación de contraseñas, archivos de claves, claves de hardware y otros métodos para descifrar las claves maestras contenidas.
El objeto tokens puede contener información adicional para sistemas externos que se integran con LUKS.
Los segmentos de datos de usuario se cifran con una clave maestra grande y un algoritmo de cifrado eficiente. La clave maestra se puede cifrar posteriormente con un algoritmo más costoso y claves proporcionadas por el usuario potencialmente más débiles. Estas claves maestras cifradas se almacenan en ranuras de clave . Esto ralentiza los intentos de fuerza bruta para adivinar la contraseña y también permite cambiar los métodos de descifrado y las contraseñas sin tener que volver a cifrar toda la sección de datos, simplemente reescribiendo la misma clave maestra cifrada de forma diferente en las ranuras de clave . [ 10 ]
Un área JSON típica de LUKS2, con sangría y saltos de línea añadidos:
{ "keyslots" : { "0" : { "type" : "luks2" , "key_size" : 64 , "af" : { "type" : "luks1" , "stripes" : 4000 , "hash" : "sha256" }, "area" : { "type" : "raw" , "offset" : "32768" , "size" : "258048" , "encryption" : "aes-xts-plain64" , "key_size" : 64 }, "kdf" : { "type" : "argon2id" , "time" : 4 , "memory" : 1048576 , "cpus" : 4 , "salt" : "YOvmrBmgFT7Ehm7ANZrn0quep1fUFisNCv4e+X8+CLk=" } } }, "tokens" : {}, "segments" : { "0" : { "type" : "crypt" , "offset" : "16777216" , "size" : "dynamic" , "iv_tweak" : "0" , "encryption" : "aes-xts-plain64" , "sector_size" : 512 } }, "digests" : { "0" : { "type" : "pbkdf2" , "keyslots" : [ "0" ], "segments" : [ "0" ], "hash" : "sha256" , "iterations" : 105703 , "salt" : "hrSZ0Sh6t3EVAyeH7XLSH1dEQrRmJwimbjHx85PLS/k=" , "digest" :"tXiDNw8fanGe8QcXewvtzF3AOTOqaIXBmhAGa8Kb42w=" } }, "config" : { "json_size" : "12288" , "keyslots_size" : "16744448" , "flags" : [ "allow-discards" ] } }Área de ranuras para llaves
Las ranuras de clave ocupan la región del dispositivo después de las dos áreas binarias y JSON. En el caso típico que se muestra arriba, esto comienza en 32 kiB y llega hasta 4 MiB o 16 MiB. Aquí usaremos 16 MiB como ejemplo.
Normalmente, un dispositivo se cubre con un único segmento , con un desplazamiento de 16 MiB y un tamaño dinámico. Durante el recifrado o en configuraciones inusuales, puede haber varios segmentos que, en conjunto, deben cubrir todo el dispositivo sin interrupciones ni superposiciones.
Cada segmento debe tener un único resumen asociado, que a su vez debe tener una o más ranuras de clave asociadas . Las ranuras de clave también pueden no estar asociadas a ningún resumen y utilizarse para otros fines.
Las ranuras de clave se asignan al área de ranuras de clave; en el ejemplo anterior, a un área única de 252 kiB que comienza justo después del encabezado, en 32 kiB. Esta área está ofuscada con franjas antiforenses del mismo modo que en LUKS1.
El algoritmo predeterminado para los resúmenes , pbkdf2, así como el tipo de franjas antiforenses "luks1", son idénticos a LUKS1. La derivación de claves por defecto utiliza algoritmos más robustos no compatibles con LUKS1, pero puede configurarse al algoritmo pbkdf2, que sí es compatible. [ 10 ]
Ejemplos
Cryptsetup es la implementación de referencia del frontend de LUKS.
Para cifrar un dispositivo con la ruta /dev/sda1:
# cryptsetup luksFormat /dev/sda1 Para desbloquear un dispositivo cifrado, ¿dónde nameestá el nombre del dispositivo mapeado ?
# cryptsetup abre /dev/sda1 nombre Reencriptación
El recifrado de un contenedor LUKS puede realizarse con la cryptsetuppropia herramienta o con una herramienta heredada llamada cryptsetup-reencrypt. Estas herramientas también pueden utilizarse para añadir cifrado a un sistema de archivos existente sin cifrar o para eliminar el cifrado de un dispositivo de bloques. [ 11 ] [ 28 ]
Ambos métodos tienen una sintaxis similar:
# cryptsetup reencrypt /dev/sda1 # cryptsetup-reencrypt /dev/sda1 Véase también
Referencias
- ↑ Fruhwirth, Clemens (2018-01-20). "Especificación del formato LUKS en disco, versión 1.2.3" (PDF) . Consultado el 23 de septiembre de 2021 .
- ↑ "Cifrado de unidades mediante LUKS" . Documentación de Fedora . Consultado el 6 de mayo de 2022 .
- 1 2 3 "Capítulo 12. Cifrado de dispositivos de bloques mediante LUKS" . Portal de clientes de Red Hat .
- ↑ "Cómo cifrar un disco duro (partición) usando LUKS en Linux" . 27 de febrero de 2019.
- ↑ "Cómo cifrar tus datos con dm-crypt" . Linode . 22 de noviembre de 2022.
- ↑ Bossi, Simone; Visconti, Andrea (2015). "Lo que los usuarios deben saber sobre el cifrado de disco completo basado en LUKS" (PDF) .
{{cite journal}}: Para citar una revista se requiere|journal=( ayuda ) - ↑ "systemd-cryptenroll - ArchWiki" . wiki.archlinux.org . Consultado el 22/11/2023 .
- ↑ "Cómo cifrar un contenedor LUKS usando una tarjeta inteligente o un token" . 20 de abril de 2014.
- ↑ "Cómo funciona LUKS con el cifrado de disco completo en Linux" . 25 de septiembre de 2021.
- 1 2 3 4 5 6 "on-disk-format-luks2.pdf" (PDF) . 7 de marzo de 2024.
- 1 2 – Manual de administración de Linux y comandos privilegiados
- ↑ "Rompiendo el cifrado LUKS" . eForensics . 21 de agosto de 2020. Archivado del original el 26 de octubre de 2021.
- ↑ "AFsplitter" .
- 1 2 3 "dm-crypt/Encriptación de un sistema completo" . Consultado el 6 de mayo de 2022 .
- ↑ "Arquitectura con LVM en LUKS" .
- ↑ "LUKS en LVM: volúmenes lógicos cifrados y copias de seguridad seguras" . 12 de septiembre de 2014.
- ↑ "Directorios de inicio" . systemd .
- ↑ "Mantenimiento del núcleo de Linux del subsistema de Windows para Linux (WSL) 2" . Blogs para desarrolladores de Microsoft . 16 de abril de 2021.
- ↑ «LibreCrypt» . GitHub . 27 de julio de 2022.
- ↑ "Fallo en el controlador permite la escalada de privilegios. Se solicitan comentarios · Problema n.° 38 · tdk/LibreCrypt" . GitHub . 30 de septiembre de 2015.
- ↑ "El controlador permite escribir en dispositivos arbitrarios · Problema n.° 39 · tdk/LibreCrypt" . GitHub . 7 de octubre de 2015.
- ↑ "Lista de características principales de DragonFly" . Consultado el 6 de mayo de 2022 .
- ↑ "anylinuxfs GitHub" . Consultado el 12 de julio de 2026 .
- ↑ Michael Larabel (8 de mayo de 2016). "El instalador de Calamares añade compatibilidad con el cifrado LUKS" . Phoronix .
- ↑ "Cómo cifrar tu disco duro en Ubuntu" . Make Tech Easier . 13 de enero de 2017.
- ↑ "PartmanCrypto" . Wiki de Debian . Consultado el 6 de mayo de 2022 .
- 1 2 "Especificación del formato en disco LUKS" (PDF) .
- ↑ "CRYPTSETUP-REENCRYPT(8) Página de manual" . man7.org .
Enlaces externos
- Sitio web oficial
- Preguntas frecuentes (FAQ)
- LibreCrypt: Implementación para Windows
- Especificación LUKS1
- Especificación LUKS2
- Software criptográfico
- Cifrado de disco
- Software de seguridad para Linux