我想加密硬盘的一部分。但在此之前,我想对可用的不同算法进行基准测试,想知道我是否应该选择aes-xts-256
或aes-xts-512
。
注意:我没有aes
硬件加速。基准测试重复多次,没有太大变化。我想明确说明,这些基准测试仅在我的电脑(Debian,core 2 duo)上有效。这并不是完整的 LUKS-TrueCrypt 比较。
总结:转至第 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
模式,所以我假设它也在基准测试中使用该模式。
方法
- 工具 > 基准
- 选择任意缓冲区大小(此处为 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
的结果不太匹配。
3- 总体思路
cryptsetup
提供了比本例更好的总体性能TrueCrypt
。这可以解释如下:cryptsetup
在我的系统上是用编译器优化程序编译的,而TrueCrypt
之前已经以通用方式进行了编译;- 据我所知,
cryptsetup
使用内核空间加密模块,同时TrueCrypt
使用用户空间加密例程。
- 但是,我无法解释为什么这
serpent-xts-512
似乎是唯一值得使用的密码cryptsetup
。aes-xts
4-问题
cryptsetup
并TrueCrypt
在 RAM 基准测试中给出完全不同的定性(相对密码速度)和定量(每个密码的实际速度)结果。
- 你已经注意到这一点了吗?
- 我是否应该信任
cryptsetup
并使用serpent-xts-512
密码来提高速度?
答案1
您没有 AES 硬件加速,并且正在虚拟机中运行测试。您的测试结果不太可能反映真实世界的结果,因为加密/解密速度在很大程度上取决于当前的 CPU 和磁盘负载。最好的办法是创建两个独立的 Truecrypt 分区,并通过将一些大文件复制到每个分区/从每个分区复制一些大文件来执行手动基准测试。
LUKS 和 Truecrypt 的实现也略有不同,正如您所说,“这些基准测试仅在我的电脑上有效”。您需要在您的系统上通过实际文件传输对两者进行实际测试,以确定真正的性能。
至于区别,Truecrypt 使用保险丝实现用户空间文件系统,而卢克斯通常在实际内核中完成。因此,在 Linux 系统中使用 LUKS/dm-crypt/cryptsetup 可能会比使用 Truecrypt 获得更好的吞吐量,尽管您选择哪个选项取决于您的加密要求(例如,如果需要,Truecrypt 分区可以在操作系统之间传输)。
答案2
Linux 内核具有 SSE2 和 AVX 优化的 Serpent 模块,以加速可并行工作负载(例如 CBC 解密和 XTS 编码和解码)。
加载这些模块后,Serpent 在 CBC 解密和 XTS 中的性能应该与软件 AES 和 Twofish 处于接近相同的水平(稍快或稍慢取决于您的具体 CPU 型号)。
答案3
还请注意,在某些虚拟机中,客户内核运行的 SSE2 代码比主机内核运行的慢得多。我在使用 Oracle VirtualBox 时就遇到过这种情况。因此,虚拟机上 Serpent 的结果可能不一定与实际主机上的预期性能相关。