Cifrado de disco completo con cryptsetup/LUKS

Esta guía muestra cómo configurar volúmenes encriptados por LUKS, para autenticar en el arranque con Nitrokey Pro o Nitrokey Storage.

Para proporcionar algunos antecedentes, cryptsetup-initramfs ahora tiene soporte para el uso de tarjetas inteligentes OpenPGP como la Nitrokey Pro y Nitrokey Storage para desbloquear volúmenes encriptados por LUKS. Una vez que termine la configuración, sólo tendrá que insertar su Nitrokey en el arranque e introducir su PIN de usuario, en lugar de escribir su frase de contraseña de cifrado de disco regular.

Estas instrucciones han sido probadas en Ubuntu 20.04 y Debian 10.

Advertencia

La siguiente guía puede potencialmente bloquear su ordenador. Debes ser consciente de estos riesgos, y te recomendamos que utilices el script que aparece a continuación en un ordenador secundario, o después de una copia de seguridad completa, ya que podrías perder tus datos.

Requisitos

  • Un ordenador Ubuntu o Debian con al menos un volumen cifrado con LUKS.

Consulte la sección siguiente para determinar qué método es compatible con esta guía.

  • Un Nitrokey Pro 2 o Nitrokey Storage 2 inicializado con llaves.

Problemas conocidos

Hasta ahora, el script sólo funciona con volúmenes particionados manualmente, que se componen de una partición /boot sin cifrar, y una partición raíz cifrada /.

Por favor, no seleccione el cifrado automático de disco completo que proporciona el sistema operativo que está utilizando para esta guía. Te enfrentarás a errores recurrentes cuando el particionado se haga de forma automática, utilizando la interfaz de instalación en Ubuntu y Debian.

Instrucciones

  1. Instalar dependencias

    $ sudo apt install scdaemon opensc gnupg2
    
  2. Crear el directorio smartcard-luks

    $ mkdir smartcard-luks && cd smartcard-luks
    
  3. Descargar el script de smartcard-luks

    $ wget https://raw.githubusercontent.com/daringer/smartcard-key-luks/main/smartcard-key-luks
    $ sudo chmod +x smartcard-key-luks
    
  4. Exportar la clave pública

    Para exportar su clave pública desde el llavero de GnuPG:

    $ gpg2 --armor --export KeyID > pubkey.asc
    

    Si ya has subido una clave pública a un servidor de claves (o la tienes almacenada en algún otro lugar), debes recuperarla de la forma que te resulte más cómoda y proceder al paso 5.

  5. Determine y verifique el nombre correcto del dispositivo LUKS para su partición raíz:

    $ cat /etc/crypttab
    # if there is only one entry, you want the 1st column of this entry
    

    Consejo

    Normalmente debería ser algo como nvme0n1p3_crypt (para NitroPC) o sda3_crypt (para NitroPads). Puede y debe comprobar que el UUID referido dentro de /etc/crypttab es la partición designada comprobando el enlace simbólico dentro de /dev/disks/by-uuid/.

  6. Ejecuta el script con el nombre del dispositivo luks (por ejemplo, nvme0n1p3_crypt) y pubkey.asc como argumentos.

    $ sudo ./smartcard-key-luks nvme0n1p3_crypt pubkey.asc
    

Una vez que se ejecuta el script con la clave pública OpenPGP como argumento, automáticamente configura un nuevo secreto LUKS, lo encripta contra esa clave pública, y configura crypttab, LUKS, initramfs, y GRUB.

Primero se le pedirá el User PIN

img1

Una vez desbloqueada la Nitrokey, se le pedirá su OLD passphrase. Es la frase de contraseña que introdujiste para encriptar tu volumen en la instalación.

img2

Nota

Esta es una alternativa en caso de que pierdas tu Nitrokey, o si no está disponible. Hasta el momento, no se ha probado, y los usuarios deben ser conscientes del riesgo de quedar bloqueados de su ordenador, si el método alternativo no funciona.

Una vez que introduzcas la frase de contraseña, el script termina la configuración en aproximadamente un minuto. No interrumpas el script, o podrías quedarte sin acceso a tu ordenador después de reiniciarlo.

img3

¡Hecho!

En este momento debes reiniciar, y deberías poder usar tu Nitrokey para desbloquear tu unidad encriptada.

Uso

Después de reiniciar, se le pedirá su PIN de usuario

img5

Introduzca su PIN de usuario para desbloquear la unidad

img6

Otros consejos

Cambiar la frase de acceso

Una vez que esta configuración está hecha, no debe utilizar la utilidad (gnome) discos para cambiar la frase de contraseña (de reserva). La forma correcta de hacerlo es llamar directamente a cryptsetup así:

$ sudo cryptsetup luksChangeKey /dev/nvme0n1p3

Siendo nvme0n1p3 la partición para la que configuraste las claves.

Utilizar varias teclas

Es fácil utilizar múltiples claves de seguridad (hardware) para que cada una de ellas pueda desbloquear la unidad LUKS de forma independiente. Solo tienes que exportar varias claves públicas y también pasar varias claves al script de configuración de la siguiente manera:

$ sudo ./smartcard-key-luks nvme0n1p3_crypt pubkey-1.asc pubkey-2.asc

Establecer el nombre del titular de la tarjeta

Durante la introducción del PIN en el arranque para descifrar la partición raíz de LUKS se presenta al usuario un tarjetero, para configurarlo utilice $ gpg --edit-card y dentro del prompt escriba admin y name para establecer el titular de la tarjeta OpenPGP (Nitrokey Storage 2 o Nitrokey Pro 2).

Sustituir/borrar llaves

No es posible añadir/eliminar claves directamente. Por lo tanto, es necesario borrar/eliminar la configuración antigua y volver a ejecutar la configuración con la(s) llave(s) designada(s):

Elimine el archivo de claves (ruta, si utilizó el script anterior) de luks-device (nvme0n1p3):

$ sudo cryptsetup luksRemoveKey /dev/nvme0n1p3 /etc/cryptsetup-initramfs/cryptkey.gpg

Eliminar el propio archivo de claves:

$ sudo rm /etc/cryptsetup-initramfs/cryptkey.gpg

Vuelva a ejecutar la configuración anterior.

Desbloqueo de LUKS2 con certificado X509

SystemD soporta el desbloqueo de una partición LUKS2 usando un certificado X509, encuentra una gran entrada de blog sobre cómo realizar esto en el Blog personal de Vladimir Timofeenko