Скорость доступа к данным в зашифрованном разделе LUKS

Скорость доступа к данным в зашифрованном разделе LUKS

В Linux (Fedora 28) мой домашний каталог зашифрован LUKS, при использовании Gnome Disk (скриншот) я могу отдельно протестировать базовый раздел LUKS (верхний синий прямоугольник) и расшифрованный домашний раздел (нижний белый прямоугольник).

Раздел LUKS дает время доступа 500 МБ/с, но расшифрованный доступ дает 350 МБ/с. Для ясности, это тот же раздел, SSD на 500 ГБ.

Справедливо ли заключить, чтошифрованиезамедляет доступ к данным на 30% (= 150/500)?

Это тип числа задокументирован или я делаю что-то неправильно. Это гораздо большее замедление, чем я ожидал.

скриншотдиски


РЕДАКТИРОВАТЬ:Это мой вывод для

$ 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

ИЗМЕНЕНИЕ 2020:Я сменил компьютер и получаю совершенно другие результаты для криптографического бенчмарка, намного превосходящие то, что можно объяснить более быстрым процессором. Так что, я думаю, что на моем старом оборудовании не было специального чипа шифрования:

$ 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

решение1

Шифрование добавляет дополнительную нагрузку на ЦП, поскольку каждый блок диска должен быть расшифрован ОС при доступе. Результаты вашего теста (расшифровка ~600 МБ/с) довольно средние для общей обработки AES на i7.

Чтобы избежать этой проблемы, современные процессоры обычно поставляются со встроенной аппаратной поддержкой AES. Intel называет эту функцию «AES-NI» (в коде обозначено lscpuкак «aes»), и она позволяет достигать скорости 2–3 ГБ/с для того же самого дешифрования AES.

Сначала запустите lscpuи проверьте, упоминается ли «aes» среди флагов функций.Интел АРКпоказывает, что он присутствует в вашей модели ЦП, но он может быть отключен настройками прошивки (BIOS). (В ARK есть сноска:«Некоторые продукты могут поддерживать новые инструкции AES с обновлением конфигурации процессора… Обратитесь к OEM-производителю за BIOS, включающим последнее обновление конфигурации процессора».)

Linux использует модуль "aesni_intel" для включения аппаратного ускорения. Проверьте, включен ли он в вашем ядре, запустив zgrep AES_NI_INTEL /proc/config.gz. Если он показывает " =y", он является частью основного образа ядра и должен быть доступен.

Если вывод показывает " =m", он был скомпилирован как модуль – попробуйте загрузить модуль вручную, запустив sudo modprobe -v aesni_intel. Если команда не может найти модуль, вам, вероятно, придется перезагрузиться. (После перезагрузки убедитесь, что uname -rотображается та же версия ядра, что и в ls /lib/modules.)

Связанный контент