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

用户名

我想加密硬盘的一部分。但在此之前,我想对可用的不同算法进行基准测试,想知道是否应该选择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进行了编译,同时已经以通用方式进行了编译;
    • AFAIKcryptsetup使用内核TrueCrypt空间加密模块,而使用用户空间加密例程。
  • 但是,我无法解释为什么serpent-xts-512似乎是唯一值得使用的密码cryptsetupaes-xts要使用的方法。

4-问题

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

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

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

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


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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么同一个磁盘读取测试结果如此不同

来自分类Dev

PCA:为什么我从princomp()和prcomp()得到的结果如此不同?

来自分类Dev

为什么R hist和ggplot直方图输出如此不同?

来自分类Dev

为什么R hist和ggplot直方图输出如此不同?

来自分类Dev

为什么zip和rm命令之间的通配符*如此不同?

来自分类Dev

为什么代表1.0和2.0的位串如此不同?

来自分类Dev

为什么auc与sklearn和R的逻辑回归如此不同

来自分类Dev

为什么流(通过LAN)的速度和质量如此不同?

来自分类Dev

具有dm完整性的Cryptsetup-奇怪的基准测试结果

来自分类Dev

为什么for和while循环的结果不同?

来自分类Dev

为什么cpu和gpu的结果不同?

来自分类Dev

为什么TDD测试方法如此静态?

来自分类Dev

cryptsetup是单个或多个队列的基准测试

来自分类Dev

JMH多个基准测试孤立运行结果不同

来自分类Dev

基准测试结果奇怪

来自分类Dev

访问基准测试结果

来自分类Dev

为什么Unix和Windows之间的Python子进程Popen如此不同?

来自分类Dev

为什么驱动程序类(“ static void main”)和类定义如此不同?

来自分类Dev

为什么代表1.0和2.0的位字符串如此不同?

来自分类Dev

为什么计划时间和执行时间与Postgres如此不同?

来自分类Dev

为什么可变和不可变集中的类型推断的行为如此不同?

来自分类Dev

为什么Unix和Windows之间的Python子进程Popen如此不同?

来自分类Dev

为什么 multiprocessing.Pool 和 multiprocessing.Process 在 Linux 中的表现如此不同

来自分类Dev

Android:为什么在Nexus One和Galaxy Nexus上进行简单的布局测试会得出不同的结果?

来自分类Dev

为什么这个Clojure微型基准测试这么慢?

来自分类Dev

为什么mean()和mean(aggregate())返回不同的结果?

来自分类Dev

为什么Java和Go的gzip会得到不同的结果?

来自分类Dev

为什么checkPermission和has_permission返回不同的结果?

来自分类Dev

为什么.setUTCFullYear()和.setUTCMonth()返回不同的结果

Related 相关文章

  1. 1

    为什么同一个磁盘读取测试结果如此不同

  2. 2

    PCA:为什么我从princomp()和prcomp()得到的结果如此不同?

  3. 3

    为什么R hist和ggplot直方图输出如此不同?

  4. 4

    为什么R hist和ggplot直方图输出如此不同?

  5. 5

    为什么zip和rm命令之间的通配符*如此不同?

  6. 6

    为什么代表1.0和2.0的位串如此不同?

  7. 7

    为什么auc与sklearn和R的逻辑回归如此不同

  8. 8

    为什么流(通过LAN)的速度和质量如此不同?

  9. 9

    具有dm完整性的Cryptsetup-奇怪的基准测试结果

  10. 10

    为什么for和while循环的结果不同?

  11. 11

    为什么cpu和gpu的结果不同?

  12. 12

    为什么TDD测试方法如此静态?

  13. 13

    cryptsetup是单个或多个队列的基准测试

  14. 14

    JMH多个基准测试孤立运行结果不同

  15. 15

    基准测试结果奇怪

  16. 16

    访问基准测试结果

  17. 17

    为什么Unix和Windows之间的Python子进程Popen如此不同?

  18. 18

    为什么驱动程序类(“ static void main”)和类定义如此不同?

  19. 19

    为什么代表1.0和2.0的位字符串如此不同?

  20. 20

    为什么计划时间和执行时间与Postgres如此不同?

  21. 21

    为什么可变和不可变集中的类型推断的行为如此不同?

  22. 22

    为什么Unix和Windows之间的Python子进程Popen如此不同?

  23. 23

    为什么 multiprocessing.Pool 和 multiprocessing.Process 在 Linux 中的表现如此不同

  24. 24

    Android:为什么在Nexus One和Galaxy Nexus上进行简单的布局测试会得出不同的结果?

  25. 25

    为什么这个Clojure微型基准测试这么慢?

  26. 26

    为什么mean()和mean(aggregate())返回不同的结果?

  27. 27

    为什么Java和Go的gzip会得到不同的结果?

  28. 28

    为什么checkPermission和has_permission返回不同的结果?

  29. 29

    为什么.setUTCFullYear()和.setUTCMonth()返回不同的结果

热门标签

归档