Listar métodos de criptografia disponíveis para LUKS

10

Eu estava procurando por uma maneira válida e atualizada de criptografar discos rígidos. Depois de algumas pesquisas, encontrei o LUKS e decidi tentar. Então, procurei alguns exemplos de como criptografar corretamente um disco rígido com ele, como este:

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

A parte --cipher e --hash foi a mais interessante para mim, então tentei me informar sobre as diferentes cifras e hashes que são especificamente utilizáveis ​​pelo LUKS. Não consegui encontrar nenhuma informação útil além de abrir um arquivo que mostra os formulários de criptografia disponíveis em uma formatação amigável ao computador para o Linux atualmente usado. Mas, como me disseram, provavelmente esse arquivo está faltando em toda a extensão de todas as formas de criptografia, além de ser muito difícil de ler para alguém que não lida com ele diariamente, de qualquer maneira.

Minha pergunta: existe uma lista completa de cifras / hashes para criptografia LUKS?

Um que simplesmente me mostra o que posso escolher ... e talvez faça uma breve descrição sobre quais são exatamente as diferenças entre essas diferentes maneiras.

Akito
fonte
1
Estou votando para encerrar esta questão como fora de tópico, porque se trata de usar e configurar o LUKS e o kernel do Linux, não a criptografia que essas ferramentas usam. Estaria no tópico sobre Unix e Linux . Sinalizei esta pergunta para migração. Não repassar a menos que ela seja fechada sem a migração.
Gilles 'SO- stop be evil'
Escolhi especificamente a área de criptografia, porque minha pergunta é direcionada a cifras e hashes. Eu peguei o "tour" nessa área e ele literalmente o encontra no slot "Perguntas que você deve fazer:". Procure, se quiser.
Akito 29/03
É por isso que eu não colocar a questão em Unix e Linux, porque seria off-topic lá ....
Akito
fornece uma breve descrição sobre quais são exatamente as diferenças entre essas maneiras diferentes. Essa é a única parte da sua pergunta que está no tópico. Qual é a principal diferença entre AES e Twofish? Bem, o AES usa uma rede de permutação de substituição, enquanto o Twofish usa uma rede Feistel. Com base nessas informações, você deve selecionar claramente o AES porque, em princípio, não há nada errado com a rede Feistel.
DepressedDaniel

Respostas:

7

Isso depende basicamente do seu kernel, então " See / proc / crypto " deve ser "a resposta". A página do manual cryptsetup diz isso:

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.

No entanto, o meu /proc/cryptonão menciona nenhuma serpente ou xts (aes), então, em vez disso, recomendo ver quais cryptsetup benchmarkrelatórios (e também mostrariam velocidades (ram)). Por exemplo:

$ 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

Os hashes são as primeiras linhas (sha1, sha256, sha512, ripemd160, whirlpool). As cifras estão sob o cabeçalho do algoritmo.

Examinar quais são os padrões dá uma boa idéia do que é considerado "muito bom" também:

$ 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

E usar um tamanho de chave mais alto (com --key-size) só deve ser mais forte, se um pouco mais 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
fonte
2
É exatamente disso que eu reclamei ... / proc / crypto é altamente ilegível e, portanto, inútil. Algumas cifras estão duas vezes na lista e não sei por quê.
Akito
Ah, eu não tinha certeza, não estava em questão, mas isso é definitivamente uma preocupação, mesmo uma pesquisa na web sobre / proc / crypto não revela nenhum guia óbvio. Estou percebendo algumas diferenças e acho que o cryptsetup usa apenas cifras de bloco, para criptografar blocos de disco, portanto os do tipo 'type: blkcipher' parecem lógicos. Mas eu também estou percebendo o meu não menciona qualquer serpente, ou XTS-AES ... mas eu tenho outra idéia que poderia ser melhor, eu vou editá-lo para a resposta
Xen2050
2

em referência ao trabalho do usuário notdavidcronenberg: A única resposta encontrada foi no documento LUKS On-Disk Format Specification (PDF).

Nomes de cifras válidos

Modos de codificação válidos

  • ecb A saída de cifra é usada diretamente.
  • cbc-plainA cifra é operada no modo CBC. O encadeamento da CBC é cortado em todos os setores e reinicializado com o número do setor como vetor inicial (convertido em 32 bits e em little endian). Este modo é especificado em [Fru05b], capítulo 4.
  • cbc-essiv:{hash}A cifra é operada no modo ESSIV usando hash para gerar a chave IV para a chave original. Por exemplo, ao usar sha256 como hash, a especificação do modo de cifra é "cbcessiv: sha256". ESSIV é especificado em [Fru05b], capítulo 4.
  • xts-plain64 plain64 é uma versão de 64 bits do vetor inicial simples

Especificações de hash válidas

opinion_no9
fonte
a lista não está completa superuser.com/a/1450671/446140
intika 19/02