Cómo usar un archivo como clave de dispositivo Luks

Cómo usar un archivo como clave de dispositivo Luks

Luks es el acrónimo de la configuración de la tecla de Linux Unified: es la implementación de cifrado más utilizada utilizada en los sistemas Linux y se puede configurar como una alternativa a la configuración simple de DM-Crypt Plain. En comparación con este último, proporciona algunas características adicionales como el hash y el salto de contraseña y la capacidad de almacenar múltiples contraseñas en el llamado encabezado de Luks. En este tutorial, supongo que el lector tiene una cierta familiaridad con Luks; Si desea saber más sobre este tema, puede consultar nuestra guía básica sobre cómo cifrar particiones de Linux con luks. La forma más común de proteger un dispositivo Luks es usar una frase de pases, sin embargo, también es posible usar un archivo como clave; En este tutorial veremos cómo hacer esto. Vamos!

En este tutorial aprenderás:

  • Cómo crear un archivo con datos aleatorios para usar como clave de dispositivo LUKS
  • Cómo agregar una llave a un dispositivo Luks
  • Cómo descifrar automáticamente un dispositivo Luks al arranque usando un archivo como clave
Cómo usar un archivo como clave de dispositivo Luks

Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Cualquier distribución de Linux
Software criptetup
Otro Permisos de raíz para acceder a dispositivos de bloque cifrados
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
$-Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Creando un contenedor de Luks



En aras de este tutorial, crearemos un contenedor de Luks en un archivo lleno de ceros que generaremos usando DD. Para crear el archivo que podemos ejecutar:

$ sudo dd if =/dev/cero of =/luks-continer.IMG BS = 1M Count = 300 

En el ejemplo anterior usamos el /dev/cero archivo como el dd fuente de entrada de comando (/dev/cero es un archivo "especial": cada vez que leemos de él, devuelve 0s) y /Luks-Container.img como destino y argumento del DD de operando. Instruimos DD a leer y escribir 300 bloques de 1 MIB de tamaño utilizando respectivamente el bs y contar operandos. Para usar el archivo como un contenedor de Luks, debemos prepararlo usando criptetup; Podemos correr:

$ sudo cryptsetup luksformat --type = luks1 --hash = sha512 --key-size = 512--cipher = aes -xts-plain64 /luks-contener.img 

El luksformat Sub comandante de CryptSetup se usa para inicializar un contenedor de Luks y establecer la frase de contraseña inicial. Una vez que ejecutemos el comando anterior, se le advertirá que la operación es destructiva, ya que sobrescribirá todos los datos existentes. Se nos pedirá que confirmar que queremos realizar la operación; nosotros escribimos (mayúsculas) y presione ENTER para confirmar:

ADVERTENCIA! ======== esto sobrescribirá los datos en /luks-continer.img irrevocablemente. Está seguro? (Escriba 'sí' en mayúsculas): sí 

En este punto, se nos pedirá que proporcionemos y confirmemos una frase de contraseña que se utilizará como la primera de las ocho claves del dispositivo posibles:

Ingrese la frase de pases para /luks-continer.IMG: verificar la frase de pass: 


Nuestro contenedor de Luks ahora está listo. Podemos usar el Luksdump subcomando de criptetup para volcar encabezamiento información:

$ sudo cryptsetup Luksdump /Luks-Container.IMG LUKS Información del encabezado para /luks-continer.VERSIÓN IMG: 1 Nombre de cifrado: AES Modo de cifrado: XTS-Plain64 Hash Spec: SHA512 Offset de carga útil: 4096 MK Bits: 512 MK Digest: 91 DA 2E 2E 7F EA AE A1 F7 81 55 CC B7 27 FD B1 AB F4 65 F1 MK Sal: F1 03 65 E2 F1 D7 4E 77 99 48 E8 57 75 65 DD 73 A3 EB A4 24 BE 36 9E 84 F7 84 C5 D3 94 2E D8 52 MK ITERACIONES: 79054 UUID: EA23C244-2DC5-402E-B23E-D9DA3219FF8A Ranura 0: iteraciones habilitadas: 1108430 Sal: 69 99 95 88 6e 2f E8 B9 D8 9C 91 36 B6 A2 55 C1 35 27 C7 Da 5d 9a 9e F9 8C EC 70 68 DB 41 53 4B Material clave Afjetivo: 8 Fraguas: 4000: 4000: 4000 Ranura de clave 1: Ranura de clave deshabilitada 2: Ranura de tecla deshabilitada 3: Ranura de tecla deshabilitada 4: Ranura de tecla deshabilitada 5: Ranura de tecla deshabilitada 6: Ranura de tecla deshabilitada 7: Deshabilitado 

En la salida anterior podemos ver que se informan varias información: el Nombre de cifrado y Modo de cifrado utilizado para el dispositivo, por ejemplo. Lo que realmente nos interesa en este caso, sin embargo, es el Espacios clave sección. Como puede ver, en este caso solo se usa la primera tecla de teclas: almacena la frase de pases que proporcionamos cuando formateamos el dispositivo. En este caso, hay un total de 8 espacios; 7 están disponibles para almacenar claves adicionales. Usaremos uno de ellos para almacenar el archivo que usaremos para desbloquear el dispositivo Luks.

Creación de un archivo de datos aleatorios para usar como clave

Cualquier archivo existente se puede usar como clave de dispositivo LUKS, sin embargo, puede ser más seguro crear un archivo específicamente para el propósito, fuera de datos aleatorios. Para crear el archivo, una vez más, recurriremos a la venerable dd comando, esta vez usando /dev/urandom Como fuente de datos:

$ sudo dd if =/dev/urandom of =/contenedor-key bs = 512 count = 8 8+0 registros en 8+0 registros de 4096 bytes (4.1 kb, 4.0 kib) copiado, 0.000631541 S, 6.5 MB/s 


El /dev/urandom El archivo funciona de manera similar a /dev/cero pero devuelve datos aleatorios cada vez que se lee. Esta vez leemos 8 bloques de 512 bytes, creando un archivo "lleno" con 4096 bytes de datos aleatorios.

Agregar el archivo de llave al dispositivo Luks

Una vez que se crea el archivo, podemos agregarlo al encabezado de Luks y usarlo como clave. El criptetup submand que permitamos realizar esta tarea es Luksaddkey.

El primer argumento que toma es el dispositivo Luks para el que debe usarse la clave; el segundo, opcional, es el camino de un archivo de clave para ser utilizado como clave. Si se omite, se le solicita al usuario que proporcione una frase de pases. Entre las opciones aceptadas por el comando, hay --ranura: Con él, podemos especificar qué ranura de clave debe usarse para almacenar la clave. En este caso, omitiremos la opción, por lo que se utilizará la primera ranura disponible (en este caso, la ranura número 1).

Para agregar el archivo como la tecla Luks, ejecutamos:

$ sudo cryptsetup Luksaddkey /Luks-Container.img /contenedor 

Se nos pedirá que proporcionemos una frase de pases ya existente para el contenedor; Después de hacerlo, se agregará la nueva clave. Después de que el comando anterior se ejecute correctamente, si nos ejecutamos Luksdump Nuevamente, podemos observar una nueva ranura ahora está en uso:

[…] Ranura clave 0: iteraciones habilitadas: 1108430 Sal: 69 99 95 88 6e 2f E8 B9 D8 9C 91 36 B6 A2 55 C1 35 27 C7 Da 5d 9a 9e F9 8C EC 70 68 DB 41 53 Material clave 4B Apagado: 8 FRENAS DE AF: 4000 Ranura clave 1: iteraciones habilitadas: 921420 Sal: 62 54 F1 61 C4 D3 8D 87 A6 45 3E F4 E8 66 B3 95 E0 5D 5D 78 18 6A E3 F0 AE 43 6D E2 24 14 BC 97 Oplicado por material clave: 512 FRIPES DE AF: 4000 Ranura de llave 2: Ranura de llave deshabilitada 3: Ranura de llave deshabilitada 4: Ranura de llave deshabilitada 5: Ranura de llave deshabilitada 6: Ranura de llave deshabilitada 7: Desactivado […] 

Abrir el contenedor de Luks

Para verificar que la clave está funcionando, ahora podemos intentar abrir el contenedor de Luks utilizándolo. Para este propósito usamos el Luksopen Sub comando de CryptSetup: Toma dos argumentos obligatorios:

  1. El dispositivo Luks
  2. El nombre de usar para mapear el dispositivo una vez que se abre.

¿Cómo podemos especificar que queremos usar un archivo para abrir el dispositivo?? Fácil! Usamos el
--archivo de clave opción y pasar la ruta al archivo clave como argumento. En nuestro
Caso, para abrir el dispositivo, el comando completo para ejecutar es:

$ sudo cryptsetup Luksopen /Luks-Container.IMG LUKS-Container-Crypt --Key-File =/Container-Key 


Si todo va como se esperaba, deberíamos encontrar una entrada para el contenedor abierto debajo del /dev/mapper Directorio, en este caso: /dev/mapper/luks-continer-crypt.

Por cierto, ahora podemos tratar el contenedor tal como lo haríamos con cualquier dispositivo de bloque: tal vez podamos crear un sistema de archivos y montarlo:

sudo mkfs.ext4/dev/mapper/luks-Container-Crypt && sudo monte/dev/mapper/luks-Container-Crypt/Media 

Abra un contenedor de Luks automáticamente en el arranque

Una vez que aprendimos a usar un archivo como una clave de contenedor de Luks, podemos hacer para que un dispositivo Luks se abra automáticamente en el arranque, sin interacción del usuario. Se dice por sí mismo que esta es una configuración que plantea riesgos de seguridad, por lo que debe usarse con mucho cuidado! Al menos en lugares inseguros, el archivo utilizado para desbloquear el dispositivo solo debe ser accesible solo por el usuario de la raíz, y debe estar almacenado en un sistema de archivos cifrado, de lo contrario el cifrado se vuelve inútil (es el equivalente a usar un bloqueo de grasa grande para proteger un puerta pero dejando la llave donde cualquiera puede llegar a la vez).

Para hacer para que un contenedor de Luks se desbloquee automáticamente al arranque, debemos especificar la información necesaria dentro del /etc/crypttab archivo. Este archivo se usa para describir dispositivos de bloque cifrados que se configuran durante el arranque del sistema. La sintaxis que se utilizará en el archivo es bastante fácil de entender; En cada línea agregamos, necesitamos especificar, en orden:

  1. El nombre a usar para la asignación del dispositivo (en el ejemplo anterior que utilizamos Luks-Container-Crypt)
  2. El dispositivo aloja el contenedor de Luks que debe abrirse
  3. La contraseña del dispositivo (opcional)
  4. Las opciones para usar (opcional)

En este caso ingresaríamos a esta línea:

Luks-Container-Crypt /Luks-Container.IMG /Container-Key Luks 

En el siguiente arranque, el dispositivo se desbloqueará automáticamente!

Conclusiones

En este tutorial aprendimos cómo podemos usar un archivo como clave para desbloquear un contenedor de Luks. Aunque se puede usar cualquier archivo para este propósito, vimos cómo usar DD para crear un archivo de datos aleatorios, y vimos cómo agregarlo a una de las 8 ranuras de encabezado de Luks disponibles utilizando el Luksaddkey dominio. Finalmente, vimos cómo es posible desbloquear automáticamente el contenedor de Luks en el arranque utilizando un archivo de teclas, proporcionando la información necesaria dentro del /etc/crypttab archivo, y vimos por qué esto puede representar un posible riesgo de seguridad.

Tutoriales de Linux relacionados:

  • Cosas para instalar en Ubuntu 20.04
  • Cómo hash contraseñas en Linux
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Mejor lector de PDF para Linux
  • Cómo usar luks con un encabezado separado
  • ¿Puede Linux obtener virus?? Explorando la vulnerabilidad de Linux ..
  • Cifrado de disco completo con Veracrypt en Ubuntu Linux
  • Descarga de Linux
  • Cosas que hacer después de instalar Ubuntu 22.04 Jellyfish de Jammy ..