Por que os resultados dos testes comparativos de Truecrypt e cryptsetup (LUKS) são tão diferentes?

10

Quero criptografar uma parte do meu disco rígido. Mas antes disso eu queria comparar os diferentes algoritmos disponíveis, imaginando se eu deveria escolher aes-xts-256ou aes-xts-512.

Nota: Não tenho aesaceleração de hardware. Os benchmarks foram repetidos várias vezes sem muita alteração. Eu gostaria de afirmar claramente que essas referências são válidas apenas no meu computador (Debian, core 2 duo). Isso não pretende ser uma comparação completa do LUKS-TrueCrypt.

TL; DR: vá para a parte 4


1- Cryptsetup

Então eu baixei cryptsetup v1.6.0para fazer uso do novo cryptsetup benchmarkcomando.

Comando

$cryptsetup benchmark

Resultados

 #  Algorithm | Key | Encryption |  Decryption
     aes-cbc   128b   128,2 MiB/s   157,2 MiB/s
 serpent-cbc   128b    49,6 MiB/s    57,7 MiB/s
 twofish-cbc   128b   138,0 MiB/s   183,8 MiB/s
     aes-cbc   256b    97,5 MiB/s   121,9 MiB/s
 serpent-cbc   256b    51,8 MiB/s    57,7 MiB/s
 twofish-cbc   256b   139,0 MiB/s   183,8 MiB/s
     aes-xts   256b   156,4 MiB/s   157,8 MiB/s
 serpent-xts   256b    55,7 MiB/s    58,7 MiB/s
 twofish-xts   256b   161,5 MiB/s   165,9 MiB/s
     aes-xts   512b   120,5 MiB/s   120,9 MiB/s
 serpent-xts   512b    55,7 MiB/s    58,5 MiB/s
 twofish-xts   512b   161,5 MiB/s   165,3 MiB/s

Pensamentos

  • No cbcmodo, serpenté surpreendentemente rápido na descriptografia!
  • No xtsmodo, serpenté claramente o mais rápido.
  • O tamanho da chave parece não ter quase nenhum efeito perceptível .serpent twofish
  • aes não se comporta bem quando o tamanho da chave é aumentado.

Atualizações fora da VM


2- TrueCrypt

Fiquei realmente surpreso, como aesé conhecido por ser o mais rápido (mesmo sem aceleração de hardware). Então eu baixei TrueCryptpara verificar esses resultados. TrueCryptusa o xtsmodo por padrão, então suponho que ele também seja usado em seus benchmarks.

Método

  1. Ferramentas> Referência
  2. Escolha qualquer tamanho de buffer (aqui, 5 MB)
  3. Clique em "Benchmark"

Resultados

 #  Algorithm | Encryption |  Decryption
         AES     106 MB/s      107 MB/s
     Twofish      78 MB/s       76 MB/s
     Serpent      41 MB/s       42 MB/s

Pensamentos

Esses resultados correspondem muito mais ao esperado, mas não combinam bem com cryptsetupos resultados.


3- Pensamentos gerais

  • cryptsetupproporcionou melhor desempenho geral do que TrueCryptneste caso. Isso pode ser explicado da seguinte maneira:
    • cryptsetupfoi compilado no meu sistema com rotinas de otimização do compilador enquanto TrueCryptjá foi compilado de maneira genérica;
    • O AFAIK cryptsetupusa módulos de criptografia do kernelspace enquanto TrueCryptusa rotinas de criptografia do espaço do usuário.
  • No entanto, não posso explicar por que serpent-xts-512parece ser o caminho a seguir, cryptsetupenquanto aes-xtsa única cifra vale a pena usar.

4- Pergunta

cryptsetupe TrueCryptfornecer resultados qualitativos (velocidade relativa de cifra) e quantitativos completamente diferentes (velocidade real de cada cifra) em valores de referência na RAM.

  • Isso é algo que você já notou?
  • Devo confiar cryptsetupe usar a serpent-xts-512cifra para velocidade?

fonte

Respostas:

5

Você não tem aceleração de hardware AES e estava executando os testes em uma máquina virtual. É improvável que os resultados dos seus testes reflitam os resultados do mundo real, pois as velocidades de criptografia / descriptografia dependem muito das cargas atuais de CPU e disco. Sua melhor aposta é criar duas partições Truecrypt independentes e executar benchmarks manuais, copiando alguns arquivos grandes para / de cada partição.

LUKS e Truecrypt também têm implementações ligeiramente diferentes e, como você disse, "essas referências são válidas apenas no meu computador". Você realmente precisa testar ambos no seu sistema com transferências de arquivos reais para determinar o verdadeiro desempenho.


Quanto às diferenças, o Truecrypt usa o FUSE para implementar um sistema de arquivos no espaço do usuário, enquanto o LUKS geralmente é feito no kernel real. Por esse motivo, é provável que você obtenha melhor rendimento em um sistema Linux usando LUKS / dm-crypt / cryptsetup em oposição ao Truecrypt, embora a opção escolhida dependa dos requisitos de sua criptografia (por exemplo, partições Truecrypt podem ser transferidas entre operações sistemas, se necessário).

Avanço
fonte
Estranho: tentei diretamente no meu sistema e basicamente tudo excede o serpentque ficou muito mais lento. Então o problema com a serpente está resolvido. Twofishainda é mais rápido do que aesdentro cryptsetup e mais lento TrueCrypt. E eu não tenho aesa aceleração de hardware em tudo ... isto não é uma coisa VM ...
Eu atualizei os resultados.
O @Gael cryptsetupserá mais rápido do que TrueCryptos mesmos algoritmos de criptografia, pois TrueCrypté executado em FUSE(sistema de arquivos no espaço do usuário), enquanto cryptsetupusa LUKS, que é um módulo do kernel. Mencionei a máquina virtual como se você estivesse executando outros programas no sistema operacional host (mesmo tarefas em segundo plano), isso afetaria os resultados dos seus benchmarks.
Breakthrough
1

O kernel do Linux possui módulos Serpent otimizados para SSE2 e AVX para acelerar cargas de trabalho paralelizáveis ​​(como descriptografia CBC e XTS enc & dec).

O desempenho do Serpent na descriptografia CBC e no XTS com o (s) módulo (s) carregado (s) deve estar quase no mesmo nível do software AES e Twofish (um pouco mais rápido ou mais lento, dependendo do modelo exato da CPU).

user215314
fonte
0

Observe também que o código SSE2 executado pelo kernel convidado em algumas VMs é muito mais lento que no kernel host. Eu experimentei isso com o Oracle VirtualBox. Portanto, os resultados para o Serpent on VM podem não estar necessariamente relacionados ao desempenho esperado no host real.

user215314
fonte