web-dev-qa-db-ja.com

Truecryptとcryptsetup(LUKS)のベンチマークの結果が非常に異なるのはなぜですか?

HDDの一部を暗号化したい。しかしその前に、aes-xts-256aes-xts-512のどちらを選択すべきか疑問に思って、利用可能なさまざまなアルゴリズムのベンチマークを行いたいと思いました。

注:ハードウェアアクセラレーションはaesありません。ベンチマークは、大きな変更なしに複数回繰り返されました。これらのベンチマークは私のコンピューター(Debian、コア2デュオ)でのみ有効であることを明確に述べたいと思います。これは、LUKSとTrueCryptの完全な比較を目的としたものではありません。

TL; DR:パート4に進む


1- Cryptsetup

そこで、新しい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が明らかに最速です。
  • キーサイズはほとんど目立った影響を与えていないようです serpenttwofish
  • aesは、キーサイズが大きくなるとうまく動作しません。

VMからの更新


2-TrueCrypt

aesが最速であることが知られているので(ハードウェアアクセラレーションがなくても)、私は本当に驚きました。そこで、TrueCryptをダウンロードして、これらの結果を再確認しました。 TrueCryptはデフォルトでxtsモードを使用するため、ベンチマークでも使用すると思います。

方法

  1. ツール>ベンチマーク
  2. 任意のバッファサイズを選択します(ここでは、5MB)
  3. 「ベンチマーク」をクリックします

結果

 #  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の結果とはよく一致しません。


3-一般的な考え

  • この場合、cryptsetupTrueCryptよりも優れた一般的なパフォーマンスを提供しました。これは次のように説明できます:
    • cryptsetupはコンパイラ最適化ルーチンを使用して私のシステムでコンパイルされましたが、TrueCryptはすでに一般的な方法でコンパイルされています。
    • AFAIK cryptsetupはカーネルスペース暗号モジュールを使用し、TrueCryptはユーザースペース暗号ルーチンを使用します。
  • ただし、serpent-xts-512cryptsetupを使用する方法であるのに対し、aes-xtsが使用する価値のある唯一の暗号である理由を説明することはできません。

4-質問

cryptsetupTrueCryptは、完全に異なる定性的(相対的な暗号速度)と定量的(各暗号の実際の速度)の結果をRAM内ベンチマークに提供します。

  • それはあなたがすでに気づいたことですか?
  • 速度のためにcryptsetupを信頼し、serpent-xts-512暗号を使用する必要がありますか?
10
user183734

AESハードウェアアクセラレーションがなく、仮想マシンでテストを実行していました。暗号化/復号化の速度は現在のCPUとディスクの負荷に大きく依存するため、テスト結果が実際の結果を反映する可能性はほとんどありません。最善の策は、2つの独立したTruecryptパーティションを作成し、各パーティションとの間でいくつかの大きなファイルをコピーして手動ベンチマークを実行することです。

LUKSとTruecryptの実装もわずかに異なり、あなたが言ったように、「これらのベンチマークは私のコンピューターでのみ有効です」。実際のパフォーマンスを判断するには、実際のファイル転送を使用してシステムで両方を実際にテストする必要があります。


違いについては、Truecryptは Fuse を使用してユーザースペースファイルシステムを実装しますが、 [〜#〜] luks [〜#〜] は通常実際のカーネルで実行されます。このため、TruecryptではなくLUKS/dm-crypt/cryptsetupを使用すると、Linuxシステムでスループットが向上する可能性がありますが、選択するオプションは暗号化の要件によって異なります(たとえば、Truecryptパーティションはオペレーティング間で転送できます)。必要に応じてシステム)。

5
Breakthrough

LinuxカーネルにはSSE2およびAVXに最適化されたSerpentモジュールがあり、並列化可能なワークロード(CBC復号化やXTS enc&decなど)を高速化します。

これらのモジュールがロードされたCBC復号化およびXTSでのSerpentのパフォーマンスは、ソフトウェアAESおよびTwofishとほぼ同じレベルである必要があります(正確なCPUモデルに応じてわずかに速くまたは遅くなります)。

1
user215314

また、一部のVMでゲストカーネルによって実行されるSSE2コードは、ホストカーネルよりもはるかに遅いことに注意してください。私はこれをOracleVirtualBoxで経験しました。したがって、VMでのSerpentの結果は、実際のホストで期待されるパフォーマンスと必ずしも相関しない場合があります。

0
user215314