- SINTAXIS
- DESCRIPCIÓN
- ACCIONES BÁSICAS
- MODO SIMPLE
- EXTENSIÓN LUKS
- EXTENSIÓN LOOP-AES
- EXTENSIÓN TCRYPT (COMPATIBLE CON TRUECRYPT Y VERACRYPT)
- EXTENSIÓN BITLK (COMPATIBLE CON BITLOCKER DE WINDOWS)
- EXTENSIÓN FVAULT2 (COMPATIBLE CON APPLE MACOS FILEVAULT2)
- EXTENSIÓN SED (UNIDAD DE AUTO-CIFRADO) OPAL
- ACCIONES VARIAS
- ¿MODO SIMPLE O LUKS?
- ADVERTENCIAS
- EJEMPLOS
- CÓDIGOS DE RETORNO
- NOTAS
- Proceso de contraseña para el modo PLAIN
- Proceso de frase de contraseña para LUKS
- Comportamiento incoherente para contraseñas/claves no válidas
- Cifrados, modos, funciones hash y tamaños de clave admitidos
- Notas sobre las contraseñas
- Notas sobre los generadores de números aleatorios
- Cifrado de disco autenticado (EXPERIMENTAL)
- Notas sobre el uso del dispositivo de bucle
- Bloqueo de la cabecera LUKS2 en disco
- Especificación del formato LUKS en disco
- AUTORES
- INFORMES DE ERRORES
- VÉASE TAMBIÉN
- 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-
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)
CLOSE
close <nombre>
Elimina el mapeo existente
STATUS
status <nombre>
Informa del estado del mapeo
RESIZE
resize <nombre>
Cambia el tamaño de un mapeo activo
REFRESH
refresh <nombre>
Actualiza los parámetros del mapeo activo
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)
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
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
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
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
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
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)
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/].