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


10

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

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

TL; DR:转到第4部分


1-加密设置

因此,我下载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更新


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-一般思想

  • cryptsetup提供了比TrueCrypt这种情况更好的综合性能。可以通过以下方式对此进行解释:
    • cryptsetup已在我的系统上使用编译器优化例程TrueCrypt进行了编译,同时已经以通用方式进行了编译;
    • AFAIK cryptsetup使用内核TrueCrypt空间加密模块,而使用用户空间加密例程。
  • 但是,我无法解释为什么serpent-xts-512似乎是唯一值得使用的密码cryptsetupaes-xts要使用的方法。

4-问题

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

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

Answers:


5

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

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


至于差异,Truecrypt使用FUSE来实现用户空间文件系统,而LUKS通常在实际内核中完成。因此,使用Linux的LUKS / dm-crypt / cryptsetup而非Truecrypt可能会获得更好的吞吐量,尽管您选择哪种选项取决于加密的要求(例如,Truecrypt分区可以在运行之间进行转移。系统(如果需要)。


奇怪:我直接在系统中尝试过,基本上一切都serpent变了,除了变慢了很多。这样就解决了蛇的问题。Twofish仍比更快aescryptsetup 和更慢的TrueCrypt。而且我根本没有aes硬件加速...这不是VM的事情……

我更新了结果。

@Gael cryptsetup将在TrueCrypt给定的加密算法TrueCrypt下运行,因为它在FUSE(用户空间文件系统)下运行,而cryptsetup使用LUKS(这是一个内核模块)。我提到虚拟机就像在主机操作系统下运行任何其他程序(甚至是后台任务)一样,都会影响基准测试的结果。
突破

1

Linux内核具有SSE2和AVX优化的Serpent模块,以加速可并行化的工作负载(例如CBC解密和XTS enc&dec)。

加载了这些模块的Serpent在CBC解密和XTS中的性能应与软件AES和Twofish接近相同的水平(快慢取决于您的确切CPU型号)。


0

另请注意,在某些VM中,由来宾内核运行的SSE2代码比在主机内核上运行慢得多。我在Oracle VirtualBox上经历过这一点。因此,Serpent在VM上的结果可能不一定与实际主机上的预期性能相关。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.