Tentando entender a criptografia LUKS

8

Decidi criptografar minha partição raiz com LUKS + LVM.

Minha configuração do ThinkPad:

  • SSD Samsung 830 128GB
  • 750GB HDD
  • Core 2 Duo 2,5 GHz P9500
  • 8GB RAM

Mas quanto mais leio, menos entendo sobre esses dois assuntos a seguir:

1a. A cifra

Eu usaria o SHA1 em vez de 2/512 (como alguns sugerem), por causa dessa citação da cryptsetupFAQ:

5,20 LUKS está quebrado! Ele usa SHA-1!

Não não é. O SHA-1 é (academicamente) quebrado para encontrar colisões, mas não para usá-lo em uma função de derivação de chave. E essa vulnerabilidade de colisão é apenas para uso não iterado. E você precisa do valor de hash literalmente.

Isso significa basicamente que, se você já possui uma tecla de slot e configurou a contagem de iteração PBKDF2 para 1 (é> 10'000 normalmente), poderá (talvez) derivar uma frase secreta diferente que ofereça o mesmo slot- chave. Mas se você tiver a chave do slot, já poderá desbloqueá-lo e obter a chave mestra, quebrando tudo. Então, basicamente, essa vulnerabilidade do SHA-1 permite abrir um contêiner LUKS com muito esforço quando você já o tem aberto.

O verdadeiro problema aqui são pessoas que não entendem criptografia e afirmam que as coisas estão quebradas apenas porque é usado algum mecanismo que foi quebrado para um uso diferente específico. A maneira como o mecanismo é usado é muito importante. Um hash quebrado para um uso pode ser completamente seguro para outros usos e aqui está ele.

Que eu li como "não adianta usar nada além de SHA-1". Mas então algumas pessoas me dizem que não é exatamente assim. Então não sei mais o que pensar.

1b.

Além disso, não consegui encontrar nenhuma informação sobre se a cifra influencia o desempenho de leitura / gravação / busca do disco, uma vez que o disco é desbloqueado e o sistema está conectado.

Então, a complexidade da cifra afeta apenas o "desempenho" na entrada de senha, ou também durante o uso normal do sistema?

2. O algoritmo

Eu leio isso há alguns dias, mas quanto mais leio, mais confuso fico. Tudo o que li diz que o AES é o mais rápido e o Serpent é o mais lento. Mas não de acordo com o meu laptop:

$ cryptsetup benchmark
Tests are approximate using memory only (no storage IO).
PBKDF2-sha1       344926 iterations per second
PBKDF2-sha256     198593 iterations per second
PBKDF2-sha512     129007 iterations per second
PBKDF2-ripemd160  271933 iterations per second
PBKDF2-whirlpool  134295 iterations per second
#  Algorithm | Key |  Encryption |  Decryption
     aes-cbc   128b   149.8 MiB/s   147.9 MiB/s
 serpent-cbc   128b    51.0 MiB/s   196.4 MiB/s
 twofish-cbc   128b   127.6 MiB/s   152.5 MiB/s
     aes-cbc   256b   114.3 MiB/s   113.8 MiB/s
 serpent-cbc   256b    51.2 MiB/s   198.9 MiB/s
 twofish-cbc   256b   129.8 MiB/s   167.5 MiB/s
     aes-xts   256b   153.3 MiB/s   150.6 MiB/s
 serpent-xts   256b   176.4 MiB/s   184.1 MiB/s
 twofish-xts   256b   160.8 MiB/s   159.8 MiB/s
     aes-xts   512b   115.4 MiB/s   112.1 MiB/s
 serpent-xts   512b   178.6 MiB/s   184.2 MiB/s
 twofish-xts   512b   160.7 MiB/s   158.9 MiB/s

Portanto, parece que o Serpent não é apenas o mais rápido, mas, além disso, é o mais rápido com a chave mais complexa.

Não deveria ser o contrário? Estou lendo errado, ou algo assim?

lockheed
fonte
Então, por que não usar o SHA512 para obter mais segurança, se ele atingir 1 segundo em tempo real?
usar o seguinte comando

Respostas:

5

1a - isso realmente não importa muito. qualquer hash usado para a função de derivação de chave, o LUKS garante que será computacionalmente caro. Ele simplesmente fará um loop até 1 segundo em tempo real.

1b - o método de derivação de chaves não influencia o desempenho. a cifra em si faz. cryptsetup benchmarkmostra tanto.

2 - O AES é o mais rápido se sua CPU é moderna o suficiente para suportar as instruções da AES-NI (aceleração de hardware para AES). Se você for com serpent agora, poderá não conseguir utilizar o AES-NI do seu próximo laptop.

# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1      1165084 iterations per second
PBKDF2-sha256     781353 iterations per second
PBKDF2-sha512     588426 iterations per second
PBKDF2-ripemd160  726160 iterations per second
PBKDF2-whirlpool  261882 iterations per second
#  Algorithm | Key |  Encryption |  Decryption
     aes-cbc   128b   692.9 MiB/s  3091.3 MiB/s
 serpent-cbc   128b    94.6 MiB/s   308.6 MiB/s
 twofish-cbc   128b   195.2 MiB/s   378.7 MiB/s
     aes-cbc   256b   519.5 MiB/s  2374.0 MiB/s
 serpent-cbc   256b    96.5 MiB/s   311.3 MiB/s
 twofish-cbc   256b   197.9 MiB/s   378.0 MiB/s
     aes-xts   256b  2630.6 MiB/s  2714.8 MiB/s
 serpent-xts   256b   310.4 MiB/s   303.8 MiB/s
 twofish-xts   256b   367.4 MiB/s   376.6 MiB/s
     aes-xts   512b  2048.6 MiB/s  2076.1 MiB/s
 serpent-xts   512b   317.0 MiB/s   304.2 MiB/s
 twofish-xts   512b   368.7 MiB/s   377.0 MiB/s

Lembre-se de que esse benchmark não usa armazenamento, portanto, você deve verificar esses resultados com qualquer sistema de armazenamento e arquivos que realmente usará.

frostschutz
fonte
1
1. Obrigado por esclarecer. Para que eu possa usar o SHA512 sem nenhum efeito negativo no desempenho do disco. 2. Acho estranho que, de acordo com o site da Intel ( ark.intel.com/search/advanced/?s=t&AESTech=true ), os antigos Pentiums tivessem essa otimização, mas os C2Ds não. "Se você for com a serpente agora, talvez não consiga utilizar o AES-NI do seu próximo laptop." Pelo que entendi, você quis dizer que teria que re-criptografar o disco no AES. Direita? A referência me fala do desempenho da CPU. Meu SSD é em SATAII 3.0 Gbps (200-280MB / s), então eu acho que não vai fazer melhor do que serpente-XTS 512b
Lockheed