
В 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
.)