Table of Contents

Cifrado de disco por hardware en Linux usando sedutils (OPAL)

La tecnología “Self-Encrypting Drive” (SED) soportadas por algunos discos duros permite tener un cifrado mediante hardware. La ventaja es que es independiente del sistema operativo y que no repercute en el rendimiento del sistema ya que es el propio disco duro el que se encarga de devolver los datos en claro.

La desventaja es que el usuario no controla gran parte del proceso de cifrado y hay que fiarse del buen hacer del fabricante. Para que se entienda, el dispositivo realmente siempre está cifrado, al activar el cifrado lo que se hace es cifrar la llave que permite acceder a los datos del disco. El hardware criptográfico y la llave de cifrado están aislados del sistema, lo que hace que el proceso de cifrado sea en principio robusto frente a ataques o virus en el sistema. La autenticación con SSD cifrados ocurre antes del inicio. Todos los datos de espacio de usuario, incluido el sistema operativo, son completamente inaccesibles hasta que el usuario se autentique.

Los SSD cifrados modernos usan un algoritmo AES de 128 o 256 bits junto con dos llaves de cifrado simétricas (misma clave para cifrar y descifrar). La primera llave es la de cifrado, que se utiliza para encriptar todos los datos almacenados en el disco. Suponiendo que se usa cifrado AES-256 bit, la clave será un número de 256 bits generado aleatoriamente y almacenado en formato cifrado en un sección oculta de la unidad. La llave de cifrado nunca abandona el dispositivo y solo es conocida por el disco. Ni siquiera el fabricante de la unidad conoce el valor de la llave de cifrado.

La segunda llave es la de autorización, es establecida por el usuario y controla el acceso a la unidad. Si no se establece ninguna llave de autorización, por ejemplo, cuando la unidad se utiliza por primera vez, el disco se comportará como un disco normal no cifrado De hecho, los datos aún se cifran en este punto, pero sin una llave de autorización. La unidad se desbloquea y descifra automáticamente las solicitudes de lectura utilizando la clave de cifrado. Al igual que la llave de cifrado, la llave de autorización nunca se almacena sin cifrar.

Cuando se establece la clave de autorización en un disco compatible con OPAL 2.0, la clave de cifrado se cifra mediante la llave de autorización. Entonces, un hash de la llave de autorización se copia al disco y se configura el bloqueo el disco. Para que el disco se bloquee, es necesario que este pierda corriente, por lo tanto se obliga a un apagado del equipo ya que un reinicio mantendría desbloqueado el dispositivo.

En el arranque siguiente no se verá el registro MBR / GPT configurado en la instalación de nuestro sistema. En cambio se mostrará una pequeña imagen previa al arranque, lo que se denomina como “shadow MBR”. Este área de “preinicio” realiza la autenticación y es donde el usuario ingresa sus passphrase. La autenticación por debajo se realiza mediante una función de derivación de clave (con el hash guardado al activar el cifrado), generando en caso positivo una llave idéntica a la almacenada en disco.

Una vez autenticada, la clave de autorización se utiliza para descifrar la clave de cifrado y cargarla en el motor de procesamiento de cifrado (que es donde estaría siempre de no tener el cifrado activo). En este punto, el MBR real también se carga para que el sistema pueda arrancar y funcionar normalmente.

EL bloqueo (cifrado) / desbloqueo (descifrado) puede hacerse desde la terminal en GNU/Linux, tanto en local como desde un LiveCD/USB o directamente en el arranque si se usa un sistema operativo. La iniciativa Drive Trust Alliance es la encargada de ofrecer las herramientas (sedutil) y documentación para cifrar los discos.

Instalación de sedutils / Configuración del sistema

Descargar sedutils: https://github.com/Drive-Trust-Alliance/sedutil/releases

Compilar / instalar sedutils.

autoreconf -i
./configure
make
make install

Se debe añadir en el arranque al Kernel el parámetro “libata.allow_tpm=1”. Para ello editamos la configuración de grub en /etc/default/grub, generamos el fichero de configuración ppara el arranque y reiniciamos.

GRUB_CMDLINE_LINUX_DEFAULT="... libata.allow_tpm=1"
grub-mkconfig -o /boot/grub/grub.cfg

Comprobar después del reinicio si el valor de /sys/module/libata/parameters/allow_tpm es 1.

Cifrado del disco por hardware y uso de sedutils

Escanear por dispositivos compatibles (/dev/sdc).

sedutil-cli --scan
Scanning for Opal compliant disks
/dev/sda   No  ST32000528AS                             CC38    
/dev/sdb   No  WDC WD10EZEX-10BN5A0                     01.01A01
/dev/sdc    2  Samsung SSD 860 EVO PRO 500GB            RVT01B6Q  <--------
No more disks present ending scan

Crear BIOS: Permitirá desbloquear el disco al arrancar el dispositivo mediante UEFI o BIOS. Si se va a usar el disco para arrancar un sistema operativo, es necesario crear un fichero BIOS para instalar en el disco. Hay que fijarse en posibles mensajes de error que indiquen alguna dependencia.

mklinuxpba-efi   # Si se tiene el sistema con EFI (/boot/linuxpba-efi.diskimg).
mklinuxpba-bios  # Se si usa BIOS (Legacy) (/boot/linuxpba.diskimg)

Establecer una passphrase e instalar fichero BIOS

sedutil-cli --initialsetup <password> <drive>  

# Si no se va a usar el disco para arrancar el sistema operativo no hay que hacer nada más, el disco está listo para ser bloqueado.

# Instalar fichero BIOS creado anteriormente para desbloquear el disco en el arranque del sistema.
sedutil-cli --loadPBAimage <password> <BIOS> <drive>
sedutil-cli --setMBREnable on <password> <drive>

Activar el bloqueo.

sedutil-cli --enableLockingRange 0 <password> <drive>

Desbloquear un disco cifrado desde otro sistema / LiveCD.

sedutil-cli --setlockingrange 0 rw <password> <drive>
sedutil-cli --setmbrdone on <password> <drive>

Desbloquea el cifrado.

sedutil-cli --disableLockingRange 0 <password> <drive>
sedutil-cli --setMBREnable off <password> <drive>

Reactivar el bloque del disco.

sedutil-cli --enableLockingRange 0 <password> <drive>
sedutil-cli --setMBRDone on <password> <drive>
sedutil-cli --setMBREnable on <password> <drive>

Cambiar la passphrase.

sedutil-cli --setSIDPwd <password> <newpassword> <device>
sedutil-cli --setAdmin1Pwd <password> <newpassword> <device>

Valores de fábrica perdiendo todo los datos: El PSID estará escrito en el disco disco.

sedutil-cli -–yesIreallywanttoERASEALLmydatausingthePSID <PSID> /dev/sdX

Enlaces de interés.