为什么 Truecrypt 和 cryptsetup (LUKS) 基准测试的结果如此不同?

10 linux truecrypt disk-encryption luks benchmarking

我想加密硬盘的一部分。但在此之前,我想对可用的不同算法进行基准测试,想知道我是否应该选择aes-xts-256aes-xts-512

注意:我没有aes硬件加速。基准测试多次重复,没有太大变化。我想明确说明这些基准测试仅在我的计算机(Debian,core 2 duo)上有效。这不是一个完整的 LUKS-TrueCrypt 比较。

TL;DR:转到第 4 部分


1- 加密设置

所以我下载cryptsetup v1.6.0了使用新cryptsetup benchmark命令。

命令

$cryptsetup benchmark
Run Code Online (Sandbox Code Playgroud)

结果

 #  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
Run Code Online (Sandbox Code Playgroud)

想法

  • cbc模式下,serpent解密速度惊人!
  • xts模式中,serpent显然是最快的。
  • 密钥大小似乎对.serpent twofish
  • 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
Run Code Online (Sandbox Code Playgroud)

想法

这些结果更符合预期,但与cryptsetup的结果不太匹配。


3- 一般想法

  • cryptsetup提供了比TrueCrypt这种情况下更好的总体性能。这可以通过以下方式解释:
    • cryptsetup使用编译器优化例程在我的系统上编译,而TrueCrypt已经以通用方式编译;
    • AFAIKcryptsetup使用内核TrueCrypt空间加密模块,同时使用用户空间加密例程。
  • 然而,我无法解释为什么serpent-xts-512好像是去的方式cryptsetup,而aes-xts唯一的密码值得使用。

4- 问题

cryptsetupTrueCrypt在内存基准测试中给出完全不同的定性(相对密码速度)和定量(每个密码的实际速度)结果。

  • 这是你已经注意到的吗?
  • 我应该信任cryptsetup并使用serpent-xts-512密码来提高速度吗?

Bre*_*ugh 5

您没有 AES 硬件加速,而是在虚拟机中运行测试。您的测试结果不太可能反映真实世界的结果,因为加密/解密速度在很大程度上取决于当前的 CPU 和磁盘负载。最好的办法是创建两个独立的 Truecrypt 分区,并通过向/从每个分区复制一些大文件来执行手动基准测试。

LUKS 和 Truecrypt 的实现也略有不同,正如您所说,“这些基准测试仅在我的计算机上有效”。您需要使用实际文件传输在您的系统上实际测试两者以确定真正的性能。


至于区别,Truecrypt 使用FUSE来实现用户空间文件系统,而LUKS通常在实际内核中完成。出于这个原因,使用 LUKS/dm-crypt/cryptsetup 的 Linux 系统可能会比 Truecrypt 获得更好的吞吐量,尽管您选择哪个选项取决于您的加密要求(例如 Truecrypt 分区可以在操作之间传输)如果需要,系统)。