Enumerar los métodos de cifrado disponibles para LUKS

10

Estaba buscando una forma válida y aún actualizada de cifrar discos duros. Después de algunas investigaciones me encontré con LUKS y decidí darle una oportunidad. Así que busqué algunos ejemplos de cómo cifrar correctamente un HDD con él, como este:

cryptsetup --verbose --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 5000 --use-random luksFormat /dev/sda3

La parte --cipher y --hash fue muy interesante para mí, así que traté de informarme sobre los diferentes cifrados y hashes que son específicamente utilizables para LUKS. No pude encontrar ninguna información útil además de abrir un archivo que muestra los formularios de cifrado disponibles en un formato amigable para la máquina para el Linux utilizado actualmente. Pero como me dijeron, incluso este archivo probablemente no tiene el alcance completo de todas las formas de cifrado, además de ser muy difícil de leer para alguien que no lo trata a diario, de todos modos.

Mi pregunta: ¿hay una lista completa de cifrados / hashes para el cifrado LUKS?

Uno que simplemente me muestra lo que puedo elegir ... y tal vez da una breve descripción de cuáles son exactamente las diferencias entre esas diferentes formas.

Akito
fuente
1
Estoy votando para cerrar esta pregunta como fuera de tema porque se trata de usar y configurar LUKS y el kernel de Linux, no sobre la criptografía que usan estas herramientas. Sería sobre el tema en Unix y Linux . Marqué esta pregunta para la migración, no vuelva a publicarla a menos que se cierre sin migración.
Gilles 'SO- deja de ser malvado'
Elegí específicamente el área de Criptografía, porque mi pregunta está dirigida a cifrados y valores hash. Hice el "recorrido" por esta área y literalmente lo tiene en la ranura "Preguntas que debe hacer:". Búscalo, si quieres.
Akito
Es por eso que no puse la pregunta en Unix y Linux porque estaría fuera de tema allí ...
Akito
da una breve descripción de cuáles son exactamente las diferencias entre esas diferentes formas. Esta es la única parte de su pregunta que trata sobre el tema. ¿Cuál es la principal diferencia entre AES y Twofish? Bueno, AES usa una red de permutación de sustitución, mientras que Twofish usa una red Feistel. Según esta información, debe seleccionar claramente AES porque, en principio, no hay nada de malo en una red Feistel.
Deprimido Daniel

Respuestas:

7

Eso depende básicamente de su núcleo, por lo que se supone que " Ver / proc / crypto " es "la respuesta". La página del manual cryptsetup dice esto:

NOTES ON SUPPORTED CIPHERS, MODES, HASHES AND KEY SIZES

   The available combinations of ciphers, modes, hashes and key  sizes  depend
   on  kernel  support.  See /proc/crypto for a list of available options. You
   might need to load additional kernel crypto modules in order  to  get  more
   options.

   For  the  --hash option, if the crypto backend is libgcrypt, then all algo‐
   rithms supported by the gcrypt library are  available.   For  other  crypto
   backends some algorithms may be missing.

Sin embargo, mi /proc/cryptono menciona ninguna serpiente o xts (aes), por lo que recomendaría ver qué cryptsetup benchmarkinformes (y también mostraría velocidades (ram)). Por ejemplo:

$ cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1       292752 iterations per second
PBKDF2-sha256     221362 iterations per second
PBKDF2-sha512     142010 iterations per second
PBKDF2-ripemd160  277124 iterations per second
PBKDF2-whirlpool  155727 iterations per second
#  Algorithm | Key |  Encryption |  Decryption
     aes-cbc   128b   164.7 MiB/s   164.5 MiB/s
 serpent-cbc   128b   119.5 MiB/s   205.0 MiB/s
 twofish-cbc   128b   163.5 MiB/s   208.6 MiB/s
     aes-cbc   256b   148.4 MiB/s   147.9 MiB/s
 serpent-cbc   256b   128.1 MiB/s   205.3 MiB/s
 twofish-cbc   256b   202.3 MiB/s   213.1 MiB/s
     aes-xts   256b   165.4 MiB/s   145.3 MiB/s
 serpent-xts   256b   150.0 MiB/s   194.5 MiB/s
 twofish-xts   256b   206.4 MiB/s   206.9 MiB/s
     aes-xts   512b   149.4 MiB/s   147.5 MiB/s
 serpent-xts   512b   181.7 MiB/s   195.0 MiB/s
 twofish-xts   512b   207.1 MiB/s   208.6 MiB/s

Los hashes son las primeras líneas (sha1, sha256, sha512, ripemd160, whirlpool). Los cifrados están debajo del encabezado Algorithm.

Observar cuáles son los valores predeterminados también da una buena idea de lo que se considera "bastante bueno":

$ cryptsetup --help|tail -n 8
Default compiled-in key and passphrase parameters:
    Maximum keyfile size: 8192kB, Maximum interactive passphrase length 512 (characters)
Default PBKDF2 iteration time for LUKS: 1000 (ms)

Default compiled-in device cipher parameters:
    loop-AES: aes, Key 256 bits
    plain: aes-cbc-essiv:sha256, Key: 256 bits, Password hashing: ripemd160
    LUKS1: aes-xts-plain64, Key: 256 bits, LUKS header hashing: sha1, RNG: /dev/urandom

Y usar un tamaño de clave más alto (con --key-size) solo debería ser más fuerte, aunque un poco más lento.

   --key-size, -s <bits>
          Sets  key  size in bits. The argument has to be a multiple of 8.
          The possible key-sizes are limited by the cipher and mode used.

          See /proc/crypto for more information.  Note  that  key-size  in
          /proc/crypto is stated in bytes.
Xen2050
fuente
2
Eso es exactamente de lo que me quejé ... / proc / crypto es altamente ilegible y, por lo tanto, inútil. Algunas cifras están incluso dos veces en la lista y no sé por qué.
Akito
Ah, no estaba seguro, no estaba en la pregunta, pero definitivamente es una preocupación, incluso una búsqueda en la web sobre / proc / crypto no revela ninguna guía obvia. Estoy notando algunas diferencias, y creo que cryptsetup usa solo cifrados de bloque, para cifrar bloques de disco, por lo que los 'type: blkcipher' parecen lógicos. Pero también me doy cuenta de que el mío no menciona ninguna serpiente, o xts-aes ... pero tengo otra idea que podría ser mejor, la
editaré
2

en referencia al trabajo del usuario notdavidcronenberg: La única respuesta que encontré está en el documento LUKS On-Disk Format Specification (PDF).

Nombres de cifrado válidos

Modos de cifrado válidos

  • ecb La salida de cifrado se usa directamente.
  • cbc-plainEl cifrado se opera en modo CBC. El encadenamiento CBC se corta en cada sector y se reinicializa con el número de sector como vector inicial (convertido a 32 bits y little endian). Este modo se especifica en [Fru05b], Capítulo 4.
  • cbc-essiv:{hash}El cifrado se opera en modo ESSIV utilizando hash para generar la clave IV para la clave original. Por ejemplo, cuando se usa sha256 como hash, la especificación del modo de cifrado es "cbcessiv: sha256". ESSIV se especifica en [Fru05b], Capítulo 4.
  • xts-plain64 plain64 es la versión de 64 bits del vector inicial simple

Especificaciones válidas de hash

opinion_no9
fuente
la lista no es completa superuser.com/a/1450671/446140
intika