Guía de Usuario de Cifrado de Disco

Mat McCabe, Mauricio Tavares, The Fedora Docs team Version F37 Last review: 2023-01-05

¿Qué es el cifrado de dispositivos de bloque?

El cifrado de dispositivos de bloque cifra/descifra los datos de forma transparente a medida que se escriben/leen desde dispositivos de bloque, el dispositivo de bloque subyacente solo ve datos cifrados.

Para montar dispositivos de bloque cifrados el administrador del sistema (o el usuario, dependiendo del contexto) debe proporcionar una frase de paso para activar la clave de descifrado.

El cifrado proporciona seguridad adicional más allá de la existente en los mecanismos de seguridad del sistema operativo ya que protege los contenidos del dispositivo incluso si se ha eliminado físicamente del sistema. Algunos sistemas requieren que la clave de cifrado sea la misma para el descifrado y otros sistemas requieren una clave específica de cifrado y una segunda clave específica para habilitar el descifrado.

Cifrado de dispositivos de bloque usando dm-crypt/LUKS

LUKS (Linux Unified Key Setup) (Configuración de Clave Unificada de Linux) es una especificación para el cifrado de dispositivos de bloque. Establece un formato en disco para los datos, así como una política de administración de frases de paso/clave.

LUKS utiliza el subsistema asignador de dispositivos del kernel por medio del módulo dm-crypt. Esta disposición proporciona un mapeo de bajo nivel que maneja el cifrado y descifrado de los datos del dispositivo. Las operaciones a nivel de usuario, como la creación y el acceso a los dispositivos cifrados, se cumplen a través de la utilidad cryptsetup.

Visión general de LUKS

  • Qué hace LUKS:

    • LUKS cifra dispositivos de bloque completos

      • LUKS, por lo tanto, es ideal para proteger los contenidos de dispositivos móviles como:

        • Medios de almacenamiento extraíbles

        • Unidades de disco para portátiles

    • El contenido subyacente del dispositivo de bloques es arbitrario.

      • Esto lo hace útil para el cifrado de dispositivos de intercambio.

      • Esto también puede ser útil con ciertas bases de datos que utilizan dispositivos de bloques especialmente formateados para el almacenamiento de datos.

    • LUKS utiliza el subsistema de asignador de dispositivos del kernel.

      • Es el mismo subsistema utilizado por LVM, de modo que está bien probado.

    • LUKS proporciona fortalecimiento de frases de paso.

      • Esto protege contra ataques de diccionario.

    • Los dispositivos LUKS contienen múltiples ranuras para claves.

      • Esto permite a los usuarios añadir respaldo para las claves/contraseñas.

  • Qué no hace LUKS:

    • LUKS no es adecuado para aplicaciones que requieren que muchos (más de ocho) usuarios tengan claves de acceso distintas para el mismo dispositivo.

    • LUKS no es adecuado para aplicaciones que requieren cifrado a nivel del archivo.

¿Cómo accederé a los dispositivos cifrados después de la instalación¿ (Inicio del Sistema)

Durante el inicio del sistema se le presentará una solicitud de contraseña. Después de que se haya proporcionado la contraseña correcta el sistema continuará arrancando normalmente. Si usted utiliza diferentes contraseñas para múltiples dispositivos cifrados puede necesitar introducir más de una contraseña durante el inicio.

Considere la utilización de la misma contraseña para todos los dispositivos de bloque cifrados dentro de un sistema dado. Esto simplificará el inicio del sistema y usted tendrá menos contraseñas que recordar. ¡Solo asegúrese de elegir una buena contraseña!

Elegir una buena contraseña

Mientras que dm-crypt/LUKS admite tanto claves como contraseñas, el instalador anaconda solo admite el uso de contraseñas para la creación y acceso de los dispositivos de bloque cifrados durante la instalación.

LUKS proporciona fortalecimiento de contraseña, pero aún así es una buena idea elegir una buena frase de contraseña (que significa "difícil de adivinar"). Tenga en cuenta el uso del término "frase de contraseña", como oposición al término "palabra de contraseña". Esto es intencionado. Proporcionar una frase que contenga múltiples palabras para incrementar la seguridad de sus datos es importante.

Crear Dispositivos de Bloques Cifrados en Anaconda

Usted puede crear dispositivos cifrados durante la instalación del sistema. Esto le permite configurar fácilmente un sistema con particiones cifradas.

Para habilitar el cifrado de dispositivo de bloques, marque la caja de confirmación "Encrypt System" (Sistema Cifrado) cuando seleccione particionado automático o la caja de confirmación "Encrypt" (Cifrada) cuando cree una partición individual, matriz software RAID o volumen lógico. Después de que termine el particionado, se le pedirá la frase de paso de cifrado. Esta frase de paso será la requerida para acceder a los dispositivos cifrados. Si usted tiene dispositivos LUKS existentes anteriormente y proporciona las frases de paso correctas para ellos pronto en el proceso de instalación la entrada de diálogo frase de paso también contendrá una caja de confirmación. Confirmando esta caja indica que a usted le gustaría que la nueva frase de paso sea añadida a una ranura disponible en cada uno de los dispositivos de bloques cifrados preexistentes.

Confirmar la caja "Encrypt System" en la pantalla de "Particionado Automático" y después elegir "Create custom layout" (Crear Diseño Personalizado) no hace que ningún dispositivo de bloque se cifre automáticamente.
Usted puede usar kickstart para establecer una frase de paso separada para cada nuevo dispositivo de bloque cifrado.

¿Qué Clase de Dispositivos de Bloque Pueden Ser Cifrados?

La mayoría de los tipos de dispositivos de bloque pueden ser cifrados usando LUKS. Desde anaconda usted puede cifrar particiones, volúmenes lógicos LVM y matrices de software RAID.

Limitaciones del Soporte de Cifrado de Dispositivos de Bloques de Anaconda

  • Filling the Device with Random Data Before Encrypting

    Llenar un dispositivo con datos aleatorios antes de cifrar mejora la fortaleza del cifrado. Sin embargo, puede llevar mucho tiempo llenar el dispositivo con datos aleatorios. Es por estos requisitos de tiempo por lo que anaconda no ofrece esta opción. Este paso puede ser llevado a cabo manualmente, usando un script kickstart %pre. Las instrucciones se pueden encontrar aquí.

  • Using a Key Comprised of Randomly Generated Data to Access Encrypted Devices

    Además de las frases de paso, se puede acceder a los dispositivos LUKS con una clave compuesta de datos generados aleatoriamente. Configurar una o más claves para acceder a los dispositivos cifrados se puede hacer en sistema instalado o a través del uso de un script kickstart %post. Las instrucciones se pueden encontrar aquí.

Crear Dispositivos de Bloques Cifrados sobre el Sistema Instalado Después de la Instalación

Los dispositivos de bloques cifrados pueden ser creados y configurados después de la instalación.

Crear los dispositivos de bloques

Cree los dispositivos de bloques que desee para cifrar usando parted, pvcreate, lvcreate y mdadm.

Opcional: Llene el dispositivo con datos aleatorios

Llenar el <device> (por ejemplo: /dev/sda3) con datos aleatorios antes del cifrado incrementa en gran medida la fortaleza del cifrado. La desventaja es que puede llevar mucho tiempo.

Los comandos siguientes destruirán cualquier dato existente en el dispositivo.
  • A continuación la mejor manera, que proporciona datos de aleatorios de alta calidad pero que toma mucho tiempo (varios minutos por gigabyte en la mayoría de los sistemas)

    dd if=/dev/urandom of=<device>
  • The Fastest way, which provides lower quality random data

    badblocks -c 10240 -s -w -t random -v <device>

Formatee el dispositivos como un dispositivo cifrado dm-crypt/LUKS

Los comandos siguientes destruirán cualquier dato existente en el dispositivo.
cryptsetup luksFormat <device>
Para más información, lea la página de manual cryptsetup(8).

Después de proporcionar la frase de paso dos veces el dispositivo será formateado para su uso. Para verificar, utilice el siguiente comando:

cryptsetup isLuks <device> && echo Success

Para ver un resumen de la información de cifrado para el dispositivo, utilice el siguiente comando:

cryptsetup luksDump <device>

Cree una asignación para permitir el acceso al contenido descifrado del dispositivo

Para accede a los contenidos descifrados del dispositivo, se debe establecer una asignación utilizando el device-mapper del kernel.

Es útil elegir un nombre significativo para esta asignación. LUKS proporciona un UUID (Universally Unique Identifier) (Identificador Universalmente Único) para cada dispositivo. Esto, a diferencia del nombre del dispositivo (por ejemplo: /dev/sda3), garantiza que permanecerá constante siempre que la cabecera LUKS permanezca intacta. Para encontrar el UUID del dispositivo LUKS, ejecute el siguiente comando:

cryptsetup luksUUID /dev/sda3

Un ejemplo de un nombre de asignación fiable, informativo y único sería luks-<uuid>, donde <uuid> se reemplaza con el UUID del dispositivo LUKS (por ejemplo: luks-50ec957a-5b5a-47ee-85e6-f8085bbc97a8). Esta convención de nomenclatura puede parecer difícil de manejar, pero no es necesario escribirla con frecuencia.

cryptsetup luksOpen <device> <name>

Ahora debería haber un nodo de dispositivo, /dev/mapper/<name>, que representa el dispositivo descifrado. Este dispositivo de bloque puede ser leído y escrito como cualquier otro dispositivo de bloque no cifrado.

Para ver alguna información sobre el dispositivo asignado, use el siguiente comando:

dmsetup info <name>
Para más información, lea la página de manual dmsetup(8).

Cree sistemas de archivos en el dispositivo mapeado o continúe construyendo estructuras de almacenamiento complejas usando el dispositivo mapeado

Use el nodo del dispositivo mapeado (/dev/mapper/<name>) como cualquier otro dispositivo de bloque. Para crear una sistema de archivo ext2 sobre el dispositivo mapeado, use el siguiente comando:

mke2fs /dev/mapper/<name>

Para montar este sistema de archivos sobre /mnt/test, use el siguiente comando:

El directorio /mnt/test debe existir antes de ejecutar este comando.
mount /dev/mapper/<name> /mnt/test

Añadir la información de mapeo a /etc/crypttab

Con el objetivo de que el sistema configure un mapeo para este dispositivo, debe estar presente una entrada en el archivo /etc/crypttab. Si el archivo no existe, créelo y cambie el propietario y el grupo a root (root:root) y cambie el modo a 0744. Añada una línea al archivo con el siguiente formato:

<name>  <device>  none

El campo <device> debería ser puesto en la forma "UUID=<luks_uuid>", donde <luks_uuid> es la LUKS uuid dada por el comando cryptsetup luksUUID <device>. Esto asegura que el dispositivo correcto será identificado y usado incluso si el nodo del dispositivo (por ejemplo: /dev/sda5) cambia.

Para detalles sobre el formato del archivo /etc/crypttab, lea la página de manual crypttab(5).

Añadir una entrada a /etc/fstab

Añada una entrada al archivo /etc/fstab. Esto es solo necesario si desea establecer una asociación persistente entre el dispositivo y un punto de montaje. Utilice el dispositivo descifrado, /dev/mapper/<name> en el archivo`/etc/fstab`.

En muchos casos es deseable listar los dispositivos en /etc/fstab por UUID o por etiqueta del sistema de archivos. El principal propósito de esto es proporcionar un identificador constante en el caso de que el nombre del dispositivo (por ejemplo: /dev/sda4) cambie. Los nombres de dispositivos LUKS en la forma de /dev/mapper/luks-<luks_uuid> se basan solo en el UUID del dispositivo LUKS y, por lo tanto, está garantizado que se mantengan constantes. Este hecho los hace aconsejables para su uso en /etc/fstab.

Para detalles sobre el formato del archivo /etc/fstab file, lea la página de manual fstab(5).

Tareas Comunes Posteriores a la Instalación

Copia de seguridad de encabezados LUKS

Si los sectores que contienen los encabezados LUKS se dañan – por error del usuario o fallo hardware – todos los datos en el dispositivo de bloques cifrado se pierden. Hacer copia de seguridad de los encabezados puede ayudar a recuperar los datos en dichos casos.

Para hacer copia de seguridad de los encabezados LUKS, use el siguiente comando:

cryptsetup luksHeaderBackup --header-backup-file <file> <device>

Para restaurar los encabezados LUKS, use el siguiente comando:

¡El comando siguiente puede destruir datos, si se aplican encabezados equivocados o se selecciona el dispositivo equivocado! Asegúrese de hacer copia de seguridad de los encabezados del dispositivo de recuperación primero.
cryptsetup luksHeaderRestore --header-backup-file <file> <device>

Establecer una clave generada aleatoriamente como manera adicional de acceder a un dispositivo de bloque cifrado

  1. Generar una clave + This will generate a 256-bit key in the file $HOME/keyfile.

    dd if=/dev/urandom of=$HOME/keyfile bs=32 count=1
    chmod 600 $HOME/keyfile
  2. Añada la clave a una ranura de clave disponible en el dispositivo cifrado

    cryptsetup luksAddKey <device> ~/keyfile
  3. Añada la nueva frase de paso a un dispositivo existente

    cryptsetup luksAddKey <device>

    + After being prompted for any one of the existing passprases for authentication, you will be prompted to enter the new passphrase.

Eliminar una frase de paso o clave de un dispositivo

cryptsetup luksRemoveKey <device>

Se le solicitará la frase de paso que desea eliminar y después cualquiera de las frase de paso restantes para autenticación.