Velocidad de acceso a datos en la partición cifrada LUKS

Velocidad de acceso a datos en la partición cifrada LUKS

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.

discos de captura de pantalla


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 lscpucomo "aes") y permite alcanzar velocidades de 2 a 3 GB/s para el mismo Descifrado AES.

Primero ejecútelo lscpuy 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 -rse muestre la misma versión del kernel que en ls /lib/modules.)

información relacionada