
Linux (Fedora 28) では、ホーム ディレクトリを LUKS で暗号化しており、Gnome Disk (スクリーンショット) を使用すると、基礎となる LUKS パーティション (上部の青い四角形) と復号化されたホーム パーティション (下部の白い四角形) を個別にベンチマークできます。
LUKS パーティションのアクセス時間は 500MB/秒ですが、復号化されたアクセスでは 350MB/秒になります。明確に言うと、これは 500GB SSD の同じパーティションです。
次のように結論付けるのは妥当だろうか暗号化データアクセスが 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年編集:コンピュータを変更したら、crypto ベンチマークの結果がまったく変わりました。これは、プロセッサの高速化だけでは説明できないほどです。つまり、古いハードウェアには専用の暗号化チップが搭載されていなかったのだと思います。
$ 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
暗号化により、各ディスク ブロックはアクセス時に OS によって復号化される必要があるため、CPU 負荷がさらに増加します。テスト結果 (約 600 MB/秒の復号化) は、i7 での一般的な AES 処理としては平均的なものです。
この問題を回避するために、最近の CPU には通常、ハードウェア ベースの AES サポートが組み込まれています。Intel はこの機能を「AES-NI」(図ではlscpu
「aes」と表示) と呼んでおり、これにより同じ AES 復号化で 2~3 GB/秒の速度を実現できます。
まず実行してlscpu
、機能フラグの中に「aes」が含まれているかどうかを確認します。インテルARKCPU モデルには存在すると表示されますが、ファームウェア (BIOS) 設定によって無効になっている可能性があります。(ARK には脚注があります:「一部の製品は、プロセッサ構成の更新により AES New Instructions をサポートできます。最新のプロセッサ構成の更新を含む BIOS については、OEM にお問い合わせください。」)
Linux は、ハードウェア アクセラレーションを有効にするために「aesni_intel」モジュールを使用します。 を実行して、カーネルで有効になっているかどうかを確認しますzgrep AES_NI_INTEL /proc/config.gz
。「 」と表示される場合は=y
、メイン カーネル イメージの一部であり、使用できるはずです。
出力に " =m
" と表示される場合は、モジュールとしてコンパイルされています。 を実行して、モジュールを手動でロードしてみてください。 コマンドがモジュールを見つけられない場合は、再起動する必要がある可能性があります。 (再起動後、と同じカーネル バージョンが表示されていることをsudo modprobe -v aesni_intel
確認してください。)uname -r
ls /lib/modules