La configuración de clave unificada de Linux ( LUKS ) es una especificación de cifrado de disco creada por Clemens Fruhwirth en 2004 y originalmente destinada a Linux .
LUKS implementa un formato en disco estándar independiente de la plataforma para su uso en varias herramientas. Esto facilita la compatibilidad y la interoperabilidad entre diferentes programas y sistemas operativos, y garantiza que todos implementen la gestión de contraseñas de forma segura y documentada. [1]
LUKS se utiliza para cifrar un dispositivo de bloque . El contenido del dispositivo cifrado es arbitrario y, por lo tanto, se puede cifrar cualquier sistema de archivos, incluidas las particiones de intercambio . [2] Hay un encabezado sin cifrar al comienzo 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 clave. [3] [4]
La presencia de este encabezado es una diferencia importante entre LUKS y dm-crypt , ya que el encabezado permite utilizar múltiples frases de contraseña diferentes, con la capacidad de cambiarlas y eliminarlas. Si el encabezado se pierde o está dañado, el dispositivo ya no podrá descifrarse. [5]
El cifrado se realiza con un enfoque multicapa. Primero, el dispositivo de bloque se cifra mediante 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 bloque. Las ranuras de claves pueden contener información para verificar frases de contraseña de usuario u otros tipos de claves.
Hay dos versiones de LUKS: LUKS2 presenta resistencia a la corrupción de encabezados y utiliza la función de derivación de claves Argon2 de forma predeterminada, mientras que LUKS1 usa PBKDF2 . [9] La conversión entre ambas versiones de LUKS es posible en determinadas situaciones, pero es posible que algunas funciones no estén disponibles con LUKS1, como Argon2. [3] LUKS2 utiliza JSON como formato de metadatos. [3] [10]
Los algoritmos criptográficos disponibles dependen del soporte individual del kernel del host. Libgcrypt se puede utilizar como backend para hash, que admite todos sus algoritmos. [11] Depende del 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]
La gestión de volúmenes lógicos se puede utilizar junto con LUKS. [14]
Un uso común de LUKS es proporcionar cifrado completo del disco , lo que implica cifrar la partición raíz de la instalación de un sistema operativo, lo que protege los archivos del sistema operativo de ser manipulados o leídos por partes no autorizadas . [14]
En un sistema Linux, la partición de inicio ( /boot
) puede estar cifrada si el gestor de arranque admite LUKS (por ejemplo, GRUB ). Esto se lleva a cabo para evitar la manipulación del kernel de Linux . Sin embargo, el cargador de arranque de primera etapa o una partición del sistema EFI no se pueden cifrar (consulte Cifrado de disco completo#El problema de la clave de inicio ). [14]
En sistemas Linux móviles, postmarketOS ha desarrollado osk-sdl para permitir desbloquear un sistema de disco completo cifrado mediante una pantalla táctil.
Para sistemas que ejecutan systemd , el systemd-homed
componente se puede utilizar para cifrar directorios personales individuales . [17]
La implementación de referencia para LUKS opera en Linux y se basa en una versión mejorada de cryptsetup , que utiliza dm-crypt como motor de cifrado de disco. En Microsoft Windows , los discos cifrados con LUKS se pueden utilizar a través del subsistema de Windows para Linux . [18] (Anteriormente, esto era posible con LibreCrypt, [19] que actualmente tiene agujeros de seguridad fundamentales, [20] [21] y que sucedió a FreeOTFE , anteriormente DoxBox).
DragonFly BSD es compatible con LUKS. [22]
Varias distribuciones de Linux permiten cifrar el dispositivo raíz durante la instalación del sistema operativo. Estos instaladores incluyen Calamares , [23] Ubiquity , [24] Debian-Installer , [25] y más.
Los encabezados LUKS son compatibles con versiones anteriores; Las versiones más nuevas de LUKS pueden leer encabezados de versiones anteriores. [26]
Los dispositivos LUKS2 comienzan con un encabezado binario destinado a permitir el reconocimiento y la detección rápida por parte de blkid , que también contiene información como sumas de verificación . Todas las cadenas utilizadas en un encabezado LUKS2 son cadenas terminadas en nulo . Directamente después del encabezado binario viene el área JSON, que contiene los objetos config
(configuración), keyslots
, digests
( segments
describe áreas cifradas en el disco) y tokens
contiene metadatos adicionales. [10]
El formato binario para luks2
las ranuras de claves normales es en su mayoría similar a su predecesor, con la adición de diferentes algoritmos por ranura de claves. Existe otro tipo de clave para permitir la redundancia en caso de que se interrumpa un proceso de recifrado. [10]
Cryptsetup es la implementación de referencia de la interfaz LUKS.
Para cifrar un dispositivo con la ruta /dev/sda1
:
# cryptsetup luksFormat /dev/sda1
Para desbloquear un dispositivo cifrado, ¿dónde name
está el nombre del dispositivo asignado ?
# cryptsetup abre /dev/sda1 nombre
Se puede volver a cifrar un contenedor LUKS con la cryptsetup
propia herramienta o con una herramienta heredada llamada cryptsetup-reencrypt
. Estas herramientas también se pueden utilizar para agregar cifrado a un sistema de archivos no cifrado existente o eliminar el cifrado de un dispositivo de bloque. [11] [27]
Ambos métodos tienen una sintaxis similar:
# cryptsetup vuelve a cifrar /dev/sda1
# cryptsetup-reencrypt /dev/sda1
{{cite journal}}
: Citar diario requiere |journal=
( ayuda )