HDDの一部を暗号化したい。しかしその前に、aes-xts-256
とaes-xts-512
のどちらを選択すべきか疑問に思って、利用可能なさまざまなアルゴリズムのベンチマークを行いたいと思いました。
注:ハードウェアアクセラレーションはaes
ありません。ベンチマークは、大きな変更なしに複数回繰り返されました。これらのベンチマークは私のコンピューター(Debian、コア2デュオ)でのみ有効であることを明確に述べたいと思います。これは、LUKSとTrueCryptの完全な比較を目的としたものではありません。
TL; DR:パート4に進む
そこで、新しいcryptsetup v1.6.0
コマンドを使用するためにcryptsetup benchmark
をダウンロードしました。
$cryptsetup benchmark
# Algorithm | Key | Encryption | Decryption
aes-cbc 128b 128,2 MiB/s 157,2 MiB/s
serpent-cbc 128b 49,6 MiB/s 57,7 MiB/s
twofish-cbc 128b 138,0 MiB/s 183,8 MiB/s
aes-cbc 256b 97,5 MiB/s 121,9 MiB/s
serpent-cbc 256b 51,8 MiB/s 57,7 MiB/s
twofish-cbc 256b 139,0 MiB/s 183,8 MiB/s
aes-xts 256b 156,4 MiB/s 157,8 MiB/s
serpent-xts 256b 55,7 MiB/s 58,7 MiB/s
twofish-xts 256b 161,5 MiB/s 165,9 MiB/s
aes-xts 512b 120,5 MiB/s 120,9 MiB/s
serpent-xts 512b 55,7 MiB/s 58,5 MiB/s
twofish-xts 512b 161,5 MiB/s 165,3 MiB/s
cbc
モードでは、serpent
は驚くほど高速に復号化できます!xts
モードでは、serpent
が明らかに最速です。serpent
twofish
。aes
は、キーサイズが大きくなるとうまく動作しません。VMからの更新
aes
が最速であることが知られているので(ハードウェアアクセラレーションがなくても)、私は本当に驚きました。そこで、TrueCrypt
をダウンロードして、これらの結果を再確認しました。 TrueCrypt
はデフォルトでxts
モードを使用するため、ベンチマークでも使用すると思います。
- ツール>ベンチマーク
- 任意のバッファサイズを選択します(ここでは、5MB)
- 「ベンチマーク」をクリックします
# Algorithm | Encryption | Decryption
AES 106 MB/s 107 MB/s
Twofish 78 MB/s 76 MB/s
Serpent 41 MB/s 42 MB/s
これらの結果は、予想される結果とはるかに一致しますが、cryptsetup
の結果とはよく一致しません。
cryptsetup
はTrueCrypt
よりも優れた一般的なパフォーマンスを提供しました。これは次のように説明できます:cryptsetup
はコンパイラ最適化ルーチンを使用して私のシステムでコンパイルされましたが、TrueCrypt
はすでに一般的な方法でコンパイルされています。cryptsetup
はカーネルスペース暗号モジュールを使用し、TrueCrypt
はユーザースペース暗号ルーチンを使用します。serpent-xts-512
がcryptsetup
を使用する方法であるのに対し、aes-xts
が使用する価値のある唯一の暗号である理由を説明することはできません。cryptsetup
とTrueCrypt
は、完全に異なる定性的(相対的な暗号速度)と定量的(各暗号の実際の速度)の結果をRAM内ベンチマークに提供します。
cryptsetup
を信頼し、serpent-xts-512
暗号を使用する必要がありますか?AESハードウェアアクセラレーションがなく、仮想マシンでテストを実行していました。暗号化/復号化の速度は現在のCPUとディスクの負荷に大きく依存するため、テスト結果が実際の結果を反映する可能性はほとんどありません。最善の策は、2つの独立したTruecryptパーティションを作成し、各パーティションとの間でいくつかの大きなファイルをコピーして手動ベンチマークを実行することです。
LUKSとTruecryptの実装もわずかに異なり、あなたが言ったように、「これらのベンチマークは私のコンピューターでのみ有効です」。実際のパフォーマンスを判断するには、実際のファイル転送を使用してシステムで両方を実際にテストする必要があります。
違いについては、Truecryptは Fuse を使用してユーザースペースファイルシステムを実装しますが、 [〜#〜] luks [〜#〜] は通常実際のカーネルで実行されます。このため、TruecryptではなくLUKS/dm-crypt/cryptsetupを使用すると、Linuxシステムでスループットが向上する可能性がありますが、選択するオプションは暗号化の要件によって異なります(たとえば、Truecryptパーティションはオペレーティング間で転送できます)。必要に応じてシステム)。
LinuxカーネルにはSSE2およびAVXに最適化されたSerpentモジュールがあり、並列化可能なワークロード(CBC復号化やXTS enc&decなど)を高速化します。
これらのモジュールがロードされたCBC復号化およびXTSでのSerpentのパフォーマンスは、ソフトウェアAESおよびTwofishとほぼ同じレベルである必要があります(正確なCPUモデルに応じてわずかに速くまたは遅くなります)。
また、一部のVMでゲストカーネルによって実行されるSSE2コードは、ホストカーネルよりもはるかに遅いことに注意してください。私はこれをOracleVirtualBoxで経験しました。したがって、VMでのSerpentの結果は、実際のホストで期待されるパフォーマンスと必ずしも相関しない場合があります。