Manuales para la línea de comandos

Man » Manual de cryptsetup en línea - documentación detallada en línea para la página de manual de cryptsetup

🌍
cryptsetup - utilidad para configurar y administrar dispositivos de almacenamiento cifrados

SINTAXIS

cryptsetup <acción> [<opciones>] <argumentos de la acción>

DESCRIPCIÓN

Cryptsetup es una utilidad para configurar y administrar el cifrado de disco completo en dispositivos de almacenamiento. Puede cifrar dispositivos de bloque (como discos duros o particiones) y contenedores (imágenes de disco almacenadas como archivos).

Cuando se desbloquea un volumen cifrado, cryptsetup crea un nuevo mapeo de dispositivos al que las aplicaciones pueden acceder como cualquier dispositivo de almacenamiento regular. El trabajo real de cifrado y descifrado se realiza de forma transparente mediante el controlador dm-crypt del kernel.

Cryptsetup funciona con dos tipos principales de volúmenes: volúmenes cifrados simples y volúmenes LUKS (Linux Unified Key Setup). Los volúmenes simples proporcionan cifrado básico, mientras que los volúmenes LUKS incluyen una cabecera de metadatos que habilita funciones avanzadas como múltiples ranuras de clave y administración de claves. Además, LUKS se puede utilizar para administrar el cifrado basado en hardware en unidades de almacenamiento compatibles con OPAL.

Cryptsetup también proporciona soporte limitado para volúmenes creados por otros sistemas de cifrado, incluidos loop-AES, TrueCrypt, VeraCrypt, BitLocker y FileVault2.

Para obtener más información sobre una acción específica de cryptsetup, consulte cryptsetup-(8), donde es el nombre de la acción de cryptsetup.

Los dispositivos cryptsetup se pueden activar durante el inicio a través de crypttab(5), que forma parte de systemd(1) u otros scripts de inicio del sistema.

ACCIONES BÁSICAS

Las siguientes son acciones válidas para todos los tipos de dispositivos admitidos.

OPEN

open <dispositivo> <nombre> --type <tipo_de_dispositivo>

Abre (crea un mapeo con) respaldado por el dispositivo . Consulte cryptsetup-open(8).

CLOSE

close <nombre>

Elimina el mapeo existente y borra la clave de la memoria del kernel. Consulte cryptsetup-close(8).

STATUS

status <nombre>

Informa del estado del mapeo . Consulte cryptsetup-status(8).

RESIZE

resize <nombre>

Cambia el tamaño de un mapeo activo . Consulte cryptsetup-resize(8).

REFRESH

refresh <nombre>

Actualiza los parámetros del mapeo activo . Consulte cryptsetup-refresh(8).

REENCRYPT

reencrypt <dispositivo> o --active-name <nombre> [<nuevo_nombre>]

Ejecuta el re-cifrado del dispositivo LUKS. Consulte cryptsetup-reencrypt(8).

MODO SIMPLE

dm-crypt simple cifra el dispositivo sector por sector con una única función hash no salada de la frase de contraseña. No se realizan comprobaciones y no se utiliza ningún metadato. No hay ninguna operación de formato. Cuando el dispositivo sin procesar se mapea (se abre), se pueden utilizar las operaciones de dispositivo habituales en el dispositivo mapeado. Los dispositivos mapeados suelen residir en /dev/mapper/.


Las siguientes son acciones válidas para el tipo de dispositivo plano:

ABRIR

open --type plain <dispositivo> <nombre>
create <nombre> <dispositivo> (sintaxis OBSOLETA)

Abre (crea un mapeo con) respaldado por el dispositivo . Consulte cryptsetup-open(8).

EXTENSIÓN LUKS

LUKS, el Conjunto de Claves Unificado de Linux, es un estándar para el cifrado de discos. Agrega un
encabezado estandarizado al comienzo del dispositivo, un área de ranuras de clave inmediatamente después del encabezado y el área de datos principal detrás de eso. El conjunto se llama 'contenedor LUKS'. El dispositivo en el que reside un contenedor LUKS se llama 'dispositivo LUKS'. Para la mayoría de los propósitos, ambos términos se pueden usar indistintamente.

LUKS puede administrar varias frases de contraseña que se pueden revocar o cambiar individualmente. Cada frase de contraseña utiliza una ranura de clave individual que contiene una clave de volumen para el cifrado de datos. Las ranuras de clave se pueden borrar de forma segura de los medios persistentes debido al uso de bandas anti-forenses. Las frases de contraseña están protegidas contra ataques de fuerza bruta mediante la Función de derivación de clave basada en contraseñas (PBKDF). Una frase de contraseña almacenada en un archivo se llama archivo de clave. La única diferencia entre una frase de contraseña y un archivo de clave es que un archivo de clave puede contener datos binarios. Ambos se procesan de la misma manera.

LUKS versión 1 (o LUKS1) es el formato de metadatos original, mientras que LUKS2 es una nueva versión que
permite extensiones adicionales como diferentes algoritmos PBKDF o cifrado autenticado. Puede formatear el dispositivo con una versión LUKS específica con --type luks1 o --type luks2 en el
comando luksFormat. Normalmente, no necesita especificar ninguna versión, ya que se reconoce automáticamente. El formato predeterminado es LUKS2.

El parámetro también se puede especificar mediante una UUID de LUKS en el formato UUID=.

El encabezado LUKS se puede separar de los datos (almacenarse por separado). Para especificar un encabezado separado, el parámetro --header se puede usar en todos los comandos LUKS y siempre tiene prioridad sobre el parámetro posicional .

Las siguientes son acciones LUKS válidas:

FORMATO

luksFormat <dispositivo> [<archivo de clave>]

Inicializa una partición LUKS y establece la frase de contraseña inicial (para la ranura de clave 0). Consulte cryptsetup-luksFormat(8).

ABRIR

open --type luks <dispositivo> <nombre>
luksOpen <dispositivo> <nombre> (sintaxis antigua)

Abre el dispositivo LUKS y configura un mapeo después de la verificación exitosa de la frase de contraseña proporcionada. Consulte cryptsetup-open(8).

SUSPENDER

luksSuspend <nombre>

Suspende un dispositivo activo (todas las operaciones de E/S se bloquearán y los accesos al dispositivo esperarán indefinidamente) y borra la clave de cifrado de la memoria del kernel. Consulte cryptsetup-luksSuspend(8).

REANUDAR

luksResume <nombre>

Reanuda un dispositivo suspendido y restaura la clave de cifrado. Consulte cryptsetup-luksResume(8).

AGREGAR CLAVE

luksAddKey <dispositivo> [<archivo de clave con la nueva clave>]

Añade una nueva frase de contraseña utilizando una frase de contraseña existente. Consulte cryptsetup-luksAddKey(8).

ELIMINAR CLAVE

luksRemoveKey <dispositivo> [<archivo de clave con la frase de contraseña que se va a eliminar>]

Elimina la frase de contraseña suministrada del dispositivo LUKS. Consulte cryptsetup-luksRemoveKey(8).

CAMBIAR CLAVE

luksChangeKey <dispositivo> [<nuevo archivo de clave>]

Cambia una frase de contraseña existente. Consulte cryptsetup-luksChangeKey(8).

CONVERTIR CLAVE

luksConvertKey <dispositivo>

Convierte una ranura de clave LUKS2 existente a nuevos parámetros PBKDF. Consulte cryptsetup-luksConvertKey(8).

BORRAR RANURA

luksKillSlot <dispositivo> <número>

Borra la ranura de clave con el número del dispositivo LUKS. Consulte cryptsetup-luksKillSlot(8).

BORRAR

erase <dispositivo>
luksErase <dispositivo> (sintaxis antigua)

Borra todas las ranuras de clave y hace que el contenedor LUKS sea permanentemente inaccesible. Consulte cryptsetup-erase(8).

UUID

luksUUID <dispositivo>

Imprime o establece el UUID de un dispositivo LUKS. Consulte cryptsetup-luksUUID(8).

¿ES LUKS?

isLuks <dispositivo>

Devuelve verdadero si es un dispositivo LUKS, falso en caso contrario. Consulte cryptsetup-isLuks(8).

VOLCAR

luksDump <dispositivo>

Vuelca la información del encabezado de un dispositivo LUKS. Consulte cryptsetup-luksDump(8).

COPIA DE SEGURIDAD DEL ENCABEZADO

luksHeaderBackup <dispositivo> --header-backup-file <archivo>

Almacena una copia de seguridad binaria del encabezado LUKS y el área de las ranuras de clave. Consulte cryptsetup-luksHeaderBackup(8).

RESTAURAR ENCABEZADO

luksHeaderRestore <dispositivo> --header-backup-file <archivo>

Restaura una copia de seguridad binaria del encabezado LUKS y el área de las ranuras de clave desde el archivo especificado. Consulte cryptsetup-luksHeaderRestore(8).

TOKEN

token <add|remove|import|export> <dispositivo>

Manipula los objetos de token utilizados para obtener frases de contraseña. Consulte cryptsetup-token(8).

CONVERTIR

convert <dispositivo> --type <formato>

Convierte el dispositivo entre los formatos LUKS1 y LUKS2 (si es posible). Consulte cryptsetup-convert(8).

CONFIGURACIÓN

config <dispositivo>

Establece opciones de configuración permanentes (almacena en el encabezado LUKS). Consulte cryptsetup-config(8).

EXTENSIÓN LOOP-AES

Cryptsetup admite el mapeo de una partición cifrada con loop-AES utilizando un modo de compatibilidad.

ABRIR

open --type loopaes <dispositivo> <nombre> --key-file <archivo de clave>
loopaesOpen <dispositivo> <nombre> --key-file <archivo de clave> (sintaxis antigua)

Abre el dispositivo loop-AES y configura un mapeo . Consulte cryptsetup-open(8).

Consulte también la sección 7 de las preguntas frecuentes y loop-AES [http://loop-aes.sourceforge.net] para obtener más información sobre loop-AES.

EXTENSIÓN TCRYPT (COMPATIBLE CON TRUECRYPT Y VERACRYPT)

Cryptsetup admite el mapeo de particiones cifradas de TrueCrypt, tcplay o VeraCrypt utilizando una API de criptografía del espacio de usuario de Linux nativa. El formato del encabezado y los cambios en el encabezado TCRYPT no son compatibles; cryptsetup nunca cambia el encabezado TCRYPT en el dispositivo.

La extensión TCRYPT requiere que la API de criptografía del espacio de usuario del kernel esté disponible. Si está configurando el kernel usted mismo, habilite "Interfaz del espacio de usuario para algoritmos de cifrado de clave simétrica" en la sección "API de criptografía" (opción .config CRYPTO_USER_API_SKCIPHER).

Debido a que el encabezado TCRYPT está cifrado, siempre debe proporcionar una frase de contraseña y archivos de clave válidos.


Cryptsetup debería reconocer todas las variantes de encabezado, excepto las cadenas de cifrado heredadas que utilizan el modo de cifrado LRW con un bloque de cifrado de 64 bits (específicamente, Blowfish en modo LRW no se reconoce; esta es una limitación de la API criptográfica del kernel).

VeraCrypt es una extensión de TrueCrypt con un número de iteraciones aumentado, por lo que la apertura puede llevar bastante tiempo.

Para abrir un dispositivo VeraCrypt con un valor personalizado del Multiplicador de Iteraciones Personales (PIM), utilice la opción --veracrypt-pim PIM para especificar directamente el PIM en la línea de comandos o utilice --veracrypt-query-pim para que se le solicite el PIM.

El valor de PIM afecta al número de iteraciones aplicadas durante la derivación de claves. Consulte PIM [https://veracrypt.io/en/Personal%20Iterations%20Multiplier%20(PIM).html] para obtener más información.

Si necesita desactivar el soporte para dispositivos VeraCrypt, utilice la opción --disable-veracrypt.

La activación con tcryptOpen solo es compatible con las cadenas de cifrado que utilizan los modos de cifrado LRW o XTS.

El comando tcryptDump debería funcionar para todos los dispositivos TCRYPT reconocidos y no requiere privilegios de superusuario.

Para mapear el dispositivo del sistema (el dispositivo con el cargador de arranque donde reside todo el sistema cifrado), utilice la opción --tcrypt-system. Consulte la información específica en cryptsetup-tcryptOpen(8) --tcrypt-system, ya que el mapeo de un dispositivo cifrado del sistema es complicado.

Para utilizar un encabezado oculto (y mapear el dispositivo oculto, si está disponible), utilice la opción --tcrypt-hidden.

Para utilizar explícitamente el encabezado de respaldo (secundario), utilice la opción --tcrypt-backup.

No hay protección para un volumen oculto si el volumen externo está montado. La razón es que si hubiera alguna protección, requeriría algunos metadatos que describieran lo que se debe proteger en el volumen externo, y el volumen oculto se volvería detectable.

ABRIR

open --type tcrypt <dispositivo> <nombre>
tcryptOpen_ <dispositivo> <nombre> (sintaxis antigua)

Abre el dispositivo TCRYPT (compatible con TrueCrypt) y configura un mapeo . Consulte cryptsetup-open(8).

VOLCAR

tcryptDump <dispositivo>

Volca la información del encabezado de un dispositivo TCRYPT. Consulte cryptsetup-tcryptDump(8).

Consulte también las páginas de TrueCrypt [https://en.wikipedia.org/wiki/TrueCrypt] y VeraCrypt [https://en.wikipedia.org/wiki/VeraCrypt] para obtener más información.

Tenga en cuenta que cryptsetup no utiliza el código de TrueCrypt o VeraCrypt; informe de todos los problemas relacionados con esta extensión de compatibilidad al proyecto cryptsetup.

EXTENSIÓN BITLK (COMPATIBLE CON BITLOCKER DE WINDOWS)

Cryptsetup admite el mapeo de particiones cifradas con BitLocker y BitLocker to Go utilizando una API criptográfica nativa del kernel de Linux. No se admite el formato del encabezado y los cambios del encabezado BITLK; cryptsetup nunca modifica el encabezado BITLK en el dispositivo.

La extensión BITLK requiere que la API criptográfica del espacio de usuario del kernel esté disponible (para obtener más detalles, consulte la sección TCRYPT).

Cryptsetup debería reconocer todas las variantes de encabezado BITLK, excepto el encabezado heredado utilizado en los sistemas Windows Vista y los dispositivos BitLocker parcialmente descifrados. La activación de los dispositivos heredados cifrados en modo CBC requiere al menos la versión 5.3 del kernel de Linux, y para los dispositivos que utilizan el difusor Elephant, la versión 5.6.


El comando bitlkDump debe funcionar para todos los dispositivos BITLK reconocidos y no requiere privilegios de superusuario.

Para desbloquear con el comando open, se debe proporcionar una contraseña, una frase de recuperación o una clave de inicio.

Además, se admite el desbloqueo mediante la tecla de volumen. Debe proporcionar la clave de volumen completa de BitLocker (FVEK) utilizando la opción --volume-key-file. La clave debe estar descifrada y sin el encabezado (solo 128/256/512 bits de datos de clave, dependiendo del cifrado y el modo utilizados).

Otros métodos de desbloqueo (TPM, SmartCard) no son compatibles.

OPEN

open --type bitlk <dispositivo> <nombre>
bitlkOpen <dispositivo> <nombre> (sintaxis antigua)

Abre el dispositivo BITLK (compatible con BitLocker) <dispositivo> y establece un mapeo <nombre>. Consulte cryptsetup-open(8).

DUMP

bitlkDump <dispositivo>

Vuelca la información del encabezado de un dispositivo BITLK. Consulte cryptsetup-bitlkDump(8).

Tenga en cuenta que cryptsetup no utiliza ningún código de Windows BitLocker; informe de todos los problemas relacionados con esta extensión de compatibilidad al proyecto cryptsetup.

EXTENSIÓN FVAULT2 (COMPATIBLE CON APPLE MACOS FILEVAULT2)

Cryptsetup admite el mapeo de FileVault2 (cifrado de disco completo de FileVault2) de Apple para el sistema operativo macOS utilizando una API de criptografía nativa del kernel de Linux.

Cryptsetup solo admite FileVault2 basado en Core Storage y el sistema de archivos HFS+ (introducido en macOS X 10.7 Lion). NO admite la nueva versión de FileVault basada en el sistema de archivos APFS utilizado en las versiones recientes de macOS.

El formato del encabezado y los cambios en el encabezado de FVAULT2 no son compatibles; cryptsetup nunca modifica el encabezado de FVAULT2 en el dispositivo.

La extensión FVAULT2 requiere que la API de criptografía del espacio de usuario del kernel esté disponible (para obtener más detalles, consulte la sección TCRYPT) y un controlador de kernel para el sistema de archivos HFS+ (hfsplus).

Cryptsetup debería reconocer la configuración básica para unidades portátiles.

El comando fvault2Dump debe funcionar para todos los dispositivos FVAULT2 reconocidos y no requiere privilegios de superusuario.

Para desbloquear con el comando open, se debe proporcionar una contraseña. No se admiten otros métodos de desbloqueo.

OPEN

open --type fvault2 <dispositivo> <nombre>
fvault2Open <dispositivo> <nombre> (sintaxis antigua)

Abre el dispositivo FVAULT2 (compatible con FileVault2) <dispositivo> (normalmente la segunda partición del dispositivo) y establece un mapeo <nombre>. Consulte cryptsetup-open(8).

EXTENSIÓN SED (UNIDAD DE AUTO-CIFRADO) OPAL

Cryptsetup admite el uso de cifrado de hardware nativo en unidades que proporcionan una interfaz OPAL, tanto anidadas con dm-crypt como de forma independiente. Las frases de contraseña, los tokens y los metadatos se almacenan utilizando el formato de encabezado LUKS2 y, por lo tanto, son compatibles con cualquier software o sistema que utilice LUKS2 (por ejemplo, tokens).

El soporte de OPAL requiere al menos la versión 6.4 del kernel. El cambio de tamaño de los dispositivos no es compatible.

Se puede especificar --hw-opal para OPAL + dm-crypt, y se puede especificar --hw-opal-only para utilizar solo OPAL, sin una capa dm-crypt.


Abrir, cerrar y registrar tokens funciona de la misma manera que con LUKS2 y dm-crypt. Los nuevos parámetros solo son necesarios al formatear; los metadatos de LUKS2 garantizarán que se realice la configuración correcta al abrir o cerrar.

Si no se especifica una etiqueta de subsistema, se establecerá automáticamente en HW-OPAL para que sea inmediatamente evidente cuando un dispositivo utiliza OPAL.

FORMATO

luksFormat --type luks2 --hw-opal <dispositivo> [<archivo de clave>]

Además, especifique --hw-opal-only en lugar de --hw-opal para evitar la capa dm-crypt. Aparte de la contraseña habitual, se deberá especificar una contraseña de administrador al formatear la primera partición de la unidad y se deberá volver a proporcionar al formatear cualquier otra partición hasta que se realice un restablecimiento de fábrica.

BORRAR

erase <dispositivo>

Borra de forma segura una partición o dispositivo. Requiere una contraseña de administrador. Además, especifique --hw-opal-factory-reset para un restablecimiento de fábrica COMPLETO de la unidad, utilizando el PSID de la unidad (normalmente impreso en la etiqueta) en lugar de la contraseña de administrador.

El PSID debe ingresarse sin guiones, espacios ni guiones bajos.

ADVERTENCIA: Un restablecimiento de fábrica provocará la pérdida de TODOS los datos del dispositivo, independientemente de la
partición en la que se ejecute, si la hay, e independientemente de cualquier copia de seguridad del encabezado LUKS2.

ACCIONES VARIAS

REPARAR

repair <dispositivo>

Intenta reparar los metadatos del dispositivo si es posible. Actualmente solo es compatible con el tipo de dispositivo LUKS. Consulte cryptsetup-repair(8).

PUNTO DE REFERENCIA

benchmark <opciones>

Puntos de referencia, cifrados y KDF (función de derivación de clave). Consulte cryptsetup-benchmark(8).

¿MODO SIMPLE O LUKS?

A menos que comprenda bien el trasfondo criptográfico, utilice LUKS. Con el modo simple, existen varios posibles errores del usuario que disminuyen drásticamente la seguridad. Si bien LUKS no puede corregirlos todos, puede mitigar el impacto de muchos de ellos.

ADVERTENCIAS

Mucha información útil sobre los riesgos de utilizar almacenamiento cifrado, sobre cómo solucionar problemas y sobre los aspectos de seguridad se puede encontrar en las preguntas frecuentes de Cryptsetup. Léalo. No obstante, algunos riesgos merecen
ser mencionados aquí.

Copia de seguridad: los medios de almacenamiento fallan. El cifrado no tiene ninguna influencia en ello. La copia de seguridad es obligatoria para los datos cifrados, si los datos tienen algún valor. Consulte las preguntas frecuentes de Cryptsetup para obtener asesoramiento sobre cómo realizar una copia de seguridad de un volumen cifrado.

Codificación de caracteres: si introduce una frase de contraseña con símbolos especiales, la frase de contraseña puede cambiar
dependiendo de la codificación de caracteres. La configuración del teclado también se puede cambiar, lo que puede dificultar o imposibilitar la entrada a ciegas. Por ejemplo, cambiar de alguna variante ASCII de 8 bits a UTF-8 puede generar una codificación binaria diferente y, por lo tanto, una frase de contraseña diferente que vea cryptsetup, incluso si lo que ve en el terminal es exactamente lo mismo. Por lo tanto, se recomienda encarecidamente seleccionar
los caracteres de la frase de contraseña solo de ASCII de 7 bits, ya que la codificación de ASCII de 7 bits se mantiene igual para
todas las variantes ASCII y UTF-8.

Encabezado LUKS: si el encabezado de un volumen LUKS se daña, todos los datos se pierden permanentemente a menos que tenga una copia de seguridad del encabezado. Si se daña una ranura de claves, solo se puede restaurar a partir de una copia de seguridad del encabezado o si otra ranura de claves activa con una frase de contraseña conocida no está dañada. Este riesgo es el resultado de
un compromiso entre seguridad y protección, ya que LUKS está diseñado para borrar e invalidar de forma rápida y segura simplemente sobrescribiendo el encabezado y el área de la ranura de claves.

Particiones previamente utilizadas: Si una partición se utilizó previamente, es muy recomendable borrar las firmas del sistema de archivos, los datos, etc., antes de crear un contenedor LUKS o dm-crypt sin cifrar. Para eliminar rápidamente las firmas del sistema de archivos, use wipefs(8) con la opción --all. Tenga en cuenta que no elimina los datos; solo invalida las firmas de formato conocidas. Para un borrado completo, sobrescriba toda la partición antes de crear un contenedor. Si no sabe cómo hacerlo, la sección de preguntas frecuentes de cryptsetup describe varias opciones.

EJEMPLOS

Ejemplo 1: Cree un contenedor LUKS 2 en el dispositivo de bloque /dev/sdX. sudo cryptsetup --type luks2 luksFormat /dev/sdX

Ejemplo 2: Agregue una contraseña adicional a la ranura de clave 5. sudo cryptsetup luksAddKey --key-slot 5 /dev/sdX

Ejemplo 3: Cree una copia de seguridad del encabezado LUKS y guárdela en un archivo. sudo cryptsetup luksHeaderBackup /dev/sdX --header-backup-file /var/tmp/NameOfBackupFile

Ejemplo 4: Abra el contenedor LUKS en /dev/sdX y asígnelo a sdX_crypt. sudo cryptsetup open /dev/sdX sdX_crypt

ADVERTENCIA: El comando en el ejemplo 5 borrará todas las ranuras de clave.

No podrá usar su contenedor LUKS después a menos que tenga una copia de seguridad para restaurar.

Ejemplo 5: Borre todas las ranuras de clave en /dev/sdX. sudo cryptsetup erase /dev/sdX

Ejemplo 6: Restaure el encabezado LUKS desde un archivo de copia de seguridad. sudo cryptsetup luksHeaderRestore /dev/sdX --header-backup-file /var/tmp/NameOfBackupFile

CÓDIGOS DE RETORNO

Cryptsetup devuelve 0 en caso de éxito y un valor distinto de cero en caso de error.

Los códigos de error son: 1 parámetros incorrectos, 2 sin permiso (contraseña incorrecta), 3 falta de memoria, 4 dispositivo incorrecto especificado, 5 el dispositivo ya existe o está ocupado.

NOTAS

Proceso de contraseña para el modo PLAIN

Tenga en cuenta que no se realiza ningún hash iterado o sal en el modo normal. Si se realiza un hash, es un hash directo único. Esto significa que las contraseñas de baja entropía son fáciles de atacar en el modo normal.

Desde un terminal: La contraseña se lee hasta el primer salto de línea, es decir, '\n'. La entrada sin el carácter de salto de línea se procesa con el hash predeterminado o el hash especificado con --hash. El resultado del hash se truncará al tamaño de clave del cifrado utilizado o al tamaño especificado con -s.

Desde stdin: La lectura continuará hasta un salto de línea (o hasta que se alcance el tamaño máximo de entrada), con el salto de línea final eliminado. El tamaño máximo de entrada se define mediante el mismo valor predeterminado compilado como el tamaño máximo del archivo de clave y se puede sobrescribir mediante la opción --keyfile-size.

Los datos leídos se hashearán con el hash predeterminado o el hash especificado con --hash. El resultado del hash se truncará al tamaño de clave del cifrado utilizado o al tamaño especificado con -s.


Tenga en cuenta que si se utiliza --key-file=- para leer la clave desde la entrada estándar, no se eliminarán los caracteres de nueva línea finales de la entrada.

Si se utiliza "plain" como argumento para --hash, los datos de entrada no se cifrarán. En su lugar, se rellenarán con ceros (si son más cortos que el tamaño de la clave) o se truncarán (si son más largos que el tamaño de la clave) y se utilizarán directamente como clave binaria. Esto es útil para especificar directamente una clave binaria. No se mostrará ninguna advertencia si la cantidad de datos leídos desde la entrada estándar es menor que el tamaño de la clave.

Desde un archivo de clave: se truncará al tamaño de clave del cifrado utilizado o al tamaño especificado por -s y se utilizará directamente como clave binaria.

El argumento --hash se está ignorando. La opción --hash solo se puede utilizar para la entrada de la entrada estándar en modo "plain".

Si el archivo de clave es más corto que la clave, cryptsetup finalizará con un error. El tamaño máximo de entrada se define mediante el mismo valor predeterminado compilado que el tamaño máximo del archivo de clave y se puede sobrescribir utilizando la opción --keyfile-size.

Proceso de frase de contraseña para LUKS

Desde una terminal: la frase de contraseña se lee hasta el primer carácter de nueva línea y luego se procesa mediante PBKDF2 sin el carácter de nueva línea.

Desde la entrada estándar: LUKS leerá frases de contraseña desde la entrada estándar hasta el primer carácter de nueva línea o la longitud máxima del archivo de clave compilada. Si se proporciona --keyfile-size, se ignorará.

Desde un archivo de clave: se lee todo el archivo de clave hasta el tamaño máximo compilado. Los caracteres de nueva línea no terminan la entrada. La opción --keyfile-size se puede utilizar para limitar lo que se lee.

LUKS utiliza una función de derivación de clave basada en contraseña (PBKDF) para proteger contra ataques de fuerza bruta y para brindar cierta protección a las frases de contraseña de baja entropía (consulte las preguntas frecuentes de cryptsetup). LUKS1 solo admite el algoritmo PBKDF2, mientras que LUKS2 también admite Argon2, que consume mucha memoria. Los PBKDF se configuran con costos: cuánto tiempo debe ejecutarse la iteración (costo de CPU o recuento de iteraciones), cuánta memoria se utiliza (costo de memoria) y cuántos procesos paralelos se utilizan (costo paralelo). PBKDF2 solo admite el recuento de iteraciones. Cryptsetup utiliza la evaluación comparativa de PBKDF para calcular los costos óptimos en función de la computadora en la que se está inicializando la nueva frase de contraseña. Si es necesario, estos costos también se pueden sobrescribir. Tenga en cuenta que existen algunos límites codificados, para obtener más detalles, consulte la sección COSTOS MÍNIMOS Y MÁXIMOS DE PBKDF en la descripción de la opción --pbkdf.

Cada vez que se agrega una frase de contraseña a un encabezado LUKS (luksAddKey, luksFormat), el usuario puede especificar cuánto tiempo debe tardar el procesamiento de la frase de contraseña. El tiempo se utiliza para determinar el recuento de iteraciones de PBKDF2, y los tiempos más largos ofrecerán una mejor protección para las frases de contraseña de baja entropía, pero el comando luksOpen tardará más en completarse. Para las frases de contraseña que tienen una entropía mayor que la longitud de clave utilizada, los tiempos de iteración más altos no aumentarán la seguridad.

La configuración predeterminada de uno o dos segundos es suficiente para la mayoría de los casos prácticos. La única excepción es una frase de contraseña de baja entropía utilizada en un dispositivo con una CPU lenta, ya que esto dará como resultado un recuento de iteraciones bajo. En un dispositivo lento, puede ser aconsejable aumentar el tiempo de iteración utilizando la opción --iter-time para obtener un recuento de iteraciones más alto. Esto sí ralentiza todas las operaciones luksOpen posteriores.


Comportamiento incoherente para contraseñas/claves no válidas

LUKS verifica si una contraseña es válida cuando se descifra una ranura de clave.

El comportamiento de dm-crypt sin LUKS es diferente. Siempre desbloqueará el dispositivo con la contraseña proporcionada. Si la contraseña proporcionada es incorrecta, el dispositivo asignado por dm-crypt sin LUKS utilizará la clave de cifrado incorrecta y los datos serán ilegibles.

Cifrados, modos, funciones hash y tamaños de clave admitidos

Las combinaciones disponibles de cifrados, modos, funciones hash y tamaños de clave dependen del soporte del kernel. Consulte /proc/crypto para obtener una lista de las opciones disponibles. Es posible que deba cargar módulos de cifrado del kernel adicionales para obtener más opciones.

Cryptsetup procesa muchas operaciones fuera del kernel, por lo que la biblioteca criptográfica configurada también debe admitir los algoritmos seleccionados. Es posible que falten algunos algoritmos, ya que cryptsetup se puede compilar con varias bibliotecas criptográficas.

Notas sobre las contraseñas

Las matemáticas no se pueden sobornar. Asegúrese de mantener sus contraseñas seguras. Existen algunos trucos útiles para construir una alternativa cuando, de repente, su cerebro se niega a cooperar. Estas alternativas necesitan LUKS, ya que solo es posible tener varias contraseñas con LUKS. Aún así, si su modelo de amenaza no lo impide, almacenar su contraseña en un sobre sellado en algún lugar puede ser una buena idea.

Notas sobre los generadores de números aleatorios

Los generadores de números aleatorios (RNG) utilizados en cryptsetup son siempre los RNG del kernel sin modificaciones ni adiciones al flujo de datos producido.

Existen dos tipos de aleatoriedad que cryptsetup/LUKS necesita. Un tipo se utiliza para las sales, el divisor AF y para borrar las ranuras de clave eliminadas. El segundo tipo se utiliza para la clave del volumen.

Con los kernels recientes (kernel de Linux 5.6), no es necesario que se preocupe por seleccionar un RNG (/dev/random o /dev/urandom). En una situación de baja entropía (sistema embebido), la inicialización del RNG del kernel puede tardar mucho tiempo, pero esto ocurre antes de que se pueda iniciar cryptsetup. Utilice cryptsetup --help para mostrar el generador de números aleatorios predeterminado compilado. Consulte urandom(4) para obtener más información.

Cifrado de disco autenticado (EXPERIMENTAL)

Los modos normales de cifrado de disco conservan la longitud (el sector de texto sin formato tiene el mismo tamaño que un sector cifrado) y solo pueden proporcionar protección de confidencialidad, no protección de integridad de datos criptográficamente sólida.

Los modos autenticados requieren espacio adicional por sector para la etiqueta de autenticación y utilizan algoritmos de cifrado autenticado con datos adicionales (AEAD).

Si configura un dispositivo LUKS2 con protección de integridad de datos, habrá un dispositivo dm-integrity subyacente, que proporciona espacio de metadatos adicional por sector y protección del diario de datos para garantizar la atomicidad de las actualizaciones de datos y metadatos. Debido a que debe haber espacio adicional para los metadatos y el diario, el espacio disponible para el dispositivo será menor que para los modos que conservan la longitud.


El dispositivo dm-crypt reside entonces sobre un dispositivo dm-integrity. Toda la activación y desactivación de esta pila de dispositivos se realiza mediante cryptsetup; no hay diferencia al usar luksOpen para dispositivos protegidos por integridad. Si desea formatear un dispositivo LUKS2 con protección de integridad de datos, utilice la opción --integrity (consulte cryptsetup-luksFormat(8)).

Aunque el kernel de Linux 5.7 agregó compatibilidad con TRIM para dispositivos dm-integrity independientes, cryptsetup(8) no puede ofrecer compatibilidad con comandos de descarte (TRIM) en modo de cifrado autenticado, porque el módulo de kernel dm-crypt subyacente no admite esta funcionalidad cuando dm-integrity se utiliza como asignador de espacio de etiquetas de autenticación (consulte --allow-discards en cryptsetup-open(8)).

Algunos modos de integridad requieren dos claves independientes (una clave para el cifrado y otra para la autenticación). Ambas claves se almacenan en una sola ranura de clave LUKS.

El soporte para los modos autenticados es experimental, y solo algunos modos están disponibles ahora. Tenga en cuenta que muy pocos algoritmos de cifrado autenticado son adecuados para el cifrado de disco. Tampoco puede utilizar CRC32 u otras sumas de comprobación no criptográficas (aparte del modo de integridad especial "none"). Si, por alguna razón, desea tener control de integridad sin utilizar el modo de autenticación, deberá configurar dm-integrity por separado, independientemente de LUKS2.

Notas sobre el uso del dispositivo de bucle

Normalmente, cryptsetup se utiliza directamente en un dispositivo de bloque (partición de disco o volumen LVM). Sin embargo, si el argumento del dispositivo es un archivo, cryptsetup intenta asignar un dispositivo de bucle y mapearlo en este archivo. Por supuesto, siempre puede mapear un archivo a un dispositivo de bucle manualmente. Consulte las preguntas frecuentes de cryptsetup para obtener un ejemplo.

Cuando el mapeo de dispositivos está activo, puede ver el archivo de respaldo del bucle en la salida del comando status. Consulte también losetup(8).

Bloqueo de la cabecera LUKS2 en disco

Los metadatos LUKS2 en disco se actualizan en varios pasos, y para lograr una actualización atómica adecuada, existe un mecanismo de bloqueo. Para una imagen en un archivo, el código utiliza la llamada al sistema flock(2). Para un dispositivo de bloque, el bloqueo se realiza en un archivo especial almacenado en un directorio de bloqueo (por defecto /run/cryptsetup). El directorio de bloqueo debe ser creado con el contexto de seguridad adecuado por la distribución durante la fase de inicio. Solo LUKS2 utiliza bloqueos; otros formatos no utilizan este mecanismo.

Especificación del formato LUKS en disco

Para la especificación de metadatos LUKS en disco, consulte LUKS1 [https://gitlab.com/cryptsetup/cryptsetup/wikis/Specification] y LUKS2 [https://gitlab.com/cryptsetup/LUKS2-docs].

AUTORES

Cryptsetup fue escrito originalmente por Jana Saout <_>. Las extensiones LUKS y la página man original fueron escritas por Clemens Fruhwirth <_>. Extensiones de la página man por Milan Broz <_>. Reescribir y extender la página man por Arno Wagner <_>.


INFORMES DE ERRORES

Informe los errores en la lista de correo de cryptsetup <_> o en la sección de proyectos de Issues [https://gitlab.com/cryptsetup/cryptsetup/-/issues/new].

Adjunte la salida del comando fallido con la opción --debug.

VÉASE TAMBIÉN

Preguntas frecuentes de Cryptsetup [https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions]

cryptsetup(8), integritysetup(8) y veritysetup(8)

CRYPTSETUP

Parte del proyecto cryptsetup [https://gitlab.com/cryptsetup/cryptsetup/].