
No Linux (Fedora 28), tenho meu diretório inicial LUKS criptografado. Ao usar o Gnome Disk (captura de tela), posso comparar separadamente a partição LUKS subjacente (retângulo azul superior) e a partição inicial descriptografada (retângulo branco inferior).
A partição LUKS oferece um tempo de acesso de 500 MB/s, mas o acesso descriptografado fornece 350 MB/s. Para ficar claro, esta é a mesma partição de um SSD de 500 GB.
É justo concluir quecriptografiaestá diminuindo o acesso aos dados em 30% (= 150/500)?
Esse tipo de número está documentado ou estou fazendo algo errado. Isso é muito mais desaceleração do que eu esperava.
EDITAR:Esta é a minha saída para
$ cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1 384375 iterations per second for 256-bit key
PBKDF2-sha256 494611 iterations per second for 256-bit key
PBKDF2-sha512 323634 iterations per second for 256-bit key
PBKDF2-ripemd160 293225 iterations per second for 256-bit key
PBKDF2-whirlpool 185917 iterations per second for 256-bit key
argon2i 4 iterations, 748334 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
argon2id 4 iterations, 745443 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
# Algorithm | Key | Encryption | Decryption
aes-cbc 128b 195.0 MiB/s 664.0 MiB/s
serpent-cbc 128b 28.8 MiB/s 94.7 MiB/s
twofish-cbc 128b 58.8 MiB/s 111.6 MiB/s
aes-cbc 256b 146.5 MiB/s 507.3 MiB/s
serpent-cbc 256b 33.3 MiB/s 110.2 MiB/s
twofish-cbc 256b 59.3 MiB/s 123.6 MiB/s
aes-xts 256b 433.7 MiB/s 416.8 MiB/s
serpent-xts 256b 101.0 MiB/s 94.7 MiB/s
twofish-xts 256b 111.8 MiB/s 110.3 MiB/s
aes-xts 512b 349.5 MiB/s 356.6 MiB/s
serpent-xts 512b 101.6 MiB/s 96.0 MiB/s
twofish-xts 512b 111.2 MiB/s 108.1 MiB/s
$ lscpu | grep aes
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge
mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall
nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology
nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est
tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer
aes xsave avx f16c rdrand lahf_lm cpuid_fault epb pti ssbd ibrs ibpb stibp
tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms xsaveopt dtherm
ida arat pln pts flush_l1d
EDITAR 2020:Troquei de computador e obtive resultados completamente diferentes para o benchmark criptográfico, muito além do que pode ser explicado por um processador mais rápido. Então, acho que meu hardware antigo não tinha o chip de criptografia dedicado:
$ cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1 1756408 iterations per second for 256-bit key
PBKDF2-sha256 2264742 iterations per second for 256-bit key
PBKDF2-sha512 1653905 iterations per second for 256-bit key
PBKDF2-ripemd160 949797 iterations per second for 256-bit key
PBKDF2-whirlpool 711381 iterations per second for 256-bit key
argon2i 8 iterations, 1048576 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
argon2id 8 iterations, 1048576 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
# Algorithm | Key | Encryption | Decryption
aes-cbc 128b 1256.4 MiB/s 3669.2 MiB/s
serpent-cbc 128b 101.6 MiB/s 771.8 MiB/s
twofish-cbc 128b 230.0 MiB/s 418.4 MiB/s
aes-cbc 256b 947.9 MiB/s 2961.6 MiB/s
serpent-cbc 256b 105.1 MiB/s 785.0 MiB/s
twofish-cbc 256b 235.7 MiB/s 424.5 MiB/s
aes-xts 256b 2209.9 MiB/s 2218.9 MiB/s
serpent-xts 256b 762.0 MiB/s 776.6 MiB/s
twofish-xts 256b 415.7 MiB/s 384.0 MiB/s
aes-xts 512b 1701.8 MiB/s 1677.2 MiB/s
serpent-xts 512b 713.7 MiB/s 769.6 MiB/s
twofish-xts 512b 407.9 MiB/s 414.2 MiB/s
Responder1
A criptografia adiciona carga extra à CPU, pois cada bloco de disco precisa ser descriptografado pelo sistema operacional no acesso. Os resultados do seu teste (descriptografia de aproximadamente 600 MB/s) são razoavelmente médios para processamento AES genérico em um i7.
Para evitar esse problema, as CPUs modernas geralmente vêm com suporte AES baseado em hardware integrado. A Intel chama esse recurso de "AES-NI" (mostrado lscpu
como "aes") e permite atingir taxas de 2–3 GB/s para o mesmo Descriptografia AES.
Primeiro execute lscpu
e verifique se ele menciona "aes" entre os sinalizadores de recursos. OARCA Intelmostra-o como presente no modelo da sua CPU, mas pode ser desabilitado pelas configurações do firmware (BIOS). (O ARK tem uma nota de rodapé:"Alguns produtos podem suportar novas instruções AES com uma atualização de configuração do processador... Entre em contato com o OEM para obter o BIOS que inclui a atualização de configuração do processador mais recente.")
O Linux usa o módulo “aesni_intel” para habilitar a aceleração de hardware. Verifique se ele está habilitado em seu kernel executando zgrep AES_NI_INTEL /proc/config.gz
. Se aparecer " =y
", faz parte da imagem principal do kernel e deve estar disponível.
Se a saída mostrar " =m
", ele foi compilado como um módulo – tente carregar o módulo manualmente executando sudo modprobe -v aesni_intel
. Se o comando não conseguir encontrar o módulo, provavelmente será necessário reinicializar. (Após a reinicialização, certifique-se uname -r
de mostrar a mesma versão do kernel que em ls /lib/modules
.)