先大致介绍一下 TrueCrypt 支持的加密算法和散列算法。然后再聊不同场合该如何选择。
一.TrueCrypt 支持哪些加密算法?
TrueCrypt 支持的加密算法有三种:AES、Twofish、Serpent。
AES是英文"Advanced Encryption Standard"的缩写。该算法原名是"Rijndael",发布于2001年。2002年被美国官方确定为新的加密标准,用来替代之前的 DES(Data Encryption Standard)。当年美国政府采用公开征集的方式,参与海选的加密算法不少。进入最后一轮的算法只有5个,分别是:MARS、RC6、Rijndael、Serpent、Twofish(按字母序排列)
最终是 Rijndael 入选,所以如今经常提到的 AES 指的就是 Rijndael 算法。
◇这三个算法的特点
规格
当年美国政府招标 AES 算法,有提出先决条件(限定加密算法的规格):
1. 必须是"块加密"(又称"分组密码",洋文叫 Block Cipher)
2. 块长度必须是128位(128 比特 = 16字节)
3. 密钥长度至少支持 128/192/256 位
4. 加密强度比 Triple-DES 高,并且速度比 Triple-DES 快
因为存在这些竞标的约束,所以这三个算法都是块加密,也都支持 256位 的密钥长度(对同一个算法,密钥长度越大,加密强度越高)。
可靠性
在竞标 AES 的竞赛中,虽然 Twofish 和 Serpent 没有最终入选,但都是最后一轮的候选者。所以这三个算法至少在密码学层面,不会有明显的弱点。大伙儿可以放心地使用这三个算法。
强度
虽然这三个算法的规格差不多,但是在加密强度方面还是有差别的。下面是当年5个候选算法关于"安全因子"(Safety Factor)的对照表。限于篇幅,俺就不解释"安全因子"的含义了。你只需明白,安全因子越大,加密强度越高(越难破解)。
算法 | 安全因子 |
---|---|
MARS | 1.90 |
RC6 | 1.18 |
Rijndael | 1.56 |
Serpent | 3.56 |
Twofish | 2.67 |
通过"安全因子"可知三者的加密强度是:Serpent > Twofish > Rijndael(AES)
某些爱刨根问底的同学会纳闷了:既然 Rijndael 的安全因子不是最好,为啥会中标?为啥不选强度最高的 Serpent?
因为美国国家标准局(NIST)在评估候选密码的时候,不是光看加密强度,还要考虑:性能、算法的复杂性,算法的扩展性,等等因素。Rijndael 虽然强度不是最高,但算法的灵活性较好,而且比其它几个算法简单(越简单的算法,潜在的弱点就容易被发现)。
二.加密算法的选择
TrueCrypt 不光支持上述三个算法的"单重加密",还支持多个算法组合成"双重加密"甚至"三重加密"。总共支持如下几种排列组合:
AES
Serpent
Twofish
AES-Twofish
Serpent-AES
Twofish-Serpent
AES-Twofish-Serpent
Serpent-Twofish-AES
显然,"三重加密"的强度最高,但是性能也最差。反之亦然。面对这么多选择,你需要考虑的就是:如何平衡"安全性"和"性能"。
"安全性"方面,刚刚已经介绍过了。至于"性能",TrueCrypt 提供了一个 Benchmark 界面(在 TrueCrypt 主菜单点 "Tools" 然后再点 "Benchmark" 菜单项)。你可以在这个界面上测试不同组合的加密算法,其加密/解密的速度。请注意:在不同电脑测试,得到的排序结果是不同的。比方说有的 CPU 内置了 AES 指令,那么 AES 的速度就非常有优势(提升4至8倍)。想知道自己的电脑 CPU 是否支持 AES 指令,先打开 TrueCrypt 主界面,在主菜单点"Setting",再点"Performance"就能看到。
下面举几个例子,说说如何平衡"安全性"和"性能"。(举例中提到的"加密盘",泛指"物理加密盘"和"虚拟加密盘")
举例1
如果你要制作的加密盘是用来备份个人的隐私或敏感文件,并且这个加密盘平时不使用,仅仅用作"灾难恢复"。那你完全可以选择强度最高的"三重加密"。
举例2
如果你的加密盘是用来存放一些日常使用的文档类资料(比如电子书)。在这种情况下,磁盘"读操作"的频度远远高于"写操作"的频度。那么你就需要挑选"解密速度"快的组合。(磁盘读操作对应"解密",磁盘写操作对应"加密")
举例3
如果你使用 TrueCrypt 来加密系统分区,并且你的虚拟内存文件也在该分区。那么就要兼顾"读写两方面"的性能。这时候俺建议采用 AES 单重加密。如果你的 CPU 内置 AES 指令,更加要选 AES 相关的组合。
有的同学会担心,单重加密是不是不够强?俺的观点是:尽量不要把敏感文件放到系统分区。这种情况下,系统分区没啥要害,单重加密通常是够用的。