
En Linux (Fedora 28) tengo mi directorio de inicio LUKS cifrado, cuando uso Gnome Disk (captura de pantalla), puedo comparar por separado la partición LUKS subyacente (rectángulo azul superior) y la partición de inicio descifrada (rectángulo blanco inferior).
La partición LUKS proporciona un tiempo de acceso de 500 MB/s, pero el acceso descifrado proporciona 350 MB/s. Para ser claros, esta es la misma partición que un SSD de 500 GB.
¿Es justo concluir quecifrado¿Está ralentizando el acceso a los datos en un 30% (= 150/500)?
¿Está documentado este tipo de número o estoy haciendo algo mal? Esta es una desaceleración mucho mayor de la que esperaba.
EDITAR:Este es mi resultado 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:Cambié mi computadora y obtengo resultados completamente diferentes para el punto de referencia criptográfico, mucho más allá de lo que puede explicarse por un procesador más rápido. Entonces, creo que mi antiguo hardware no tenía el chip de cifrado 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
Respuesta1
El cifrado agrega una carga adicional a la CPU, ya que el sistema operativo debe descifrar cada bloque de disco al acceder. Los resultados de su prueba (descifrado de ~600 MB/s) son bastante promedio para el procesamiento AES genérico en un i7.
Para evitar este problema, las CPU modernas generalmente vienen con soporte AES basado en hardware integrado. Intel llama a esta característica "AES-NI" (que se muestra lscpu
como "aes") y permite alcanzar velocidades de 2 a 3 GB/s para el mismo Descifrado AES.
Primero ejecútelo lscpu
y verifique si menciona "aes" entre los indicadores de funciones. ElIntel ARCAlo muestra como presente en su modelo de CPU, pero puede estar deshabilitado mediante la configuración del firmware (BIOS). (El ARK tiene una nota al pie:"Algunos productos pueden admitir nuevas instrucciones AES con una actualización de la configuración del procesador... Comuníquese con el OEM para obtener el BIOS que incluye la última actualización de la configuración del procesador".)
Linux utiliza el módulo "aesni_intel" para habilitar la aceleración de hardware. Compruebe si está habilitado en su kernel ejecutando zgrep AES_NI_INTEL /proc/config.gz
. Si muestra " =y
", es parte de la imagen principal del kernel y debería estar disponible.
Si el resultado muestra " =m
", se compiló como un módulo; intente cargar el módulo manualmente ejecutando sudo modprobe -v aesni_intel
. Si el comando no puede encontrar el módulo, probablemente deba reiniciar. (Después de reiniciar, asegúrese de que uname -r
se muestre la misma versión del kernel que en ls /lib/modules
.)