★如何选择"加密算法"?

先大致介绍一下 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 相关的组合。

有的同学会担心,单重加密是不是不够强?俺的观点是:尽量不要把敏感文件放到系统分区。这种情况下,系统分区没啥要害,单重加密通常是够用的。

★如何选择"散列算法"?

"散列算法"又称为"哈希算法"(洋文叫 Hash)。不了解的同学,可以先看俺写的《扫盲文件完整性校验——关于散列值和数字签名》。这篇博文中大致解释了散列算法的概念。

用 TrueCrypt 创建加密盘,除了要选择加密算法的组合,还需要选择散列算法。TrueCrypt 需要使用散列算法来进行"伪随机数生成",然后再利用"伪随机数"来产生加密卷的主密钥。

TrueCrypt 支持如下三种散列算法:

RIPEMD-160

顾名思义,算列值是160比特(20字节)

SHA-512

顾名思义,算列值是512比特(64字节)

Whirlpool

算列值是512比特(64字节)

通常而言,散列值的长度越大,"人为碰撞"和"随机碰撞"的概率就越小。所以俺一般选后两种。另外提醒一下:如果使用 TrueCrypt 加密系统分区,只能选 RIPEMD-160 这个散列算法。

★磁盘加密的操作模式

(本小节涉及较多密码学的知识,不太懂技术的网友请自行跳过,以免浪费时间和心情)

上周那篇《文件备份技巧:组合"虚拟加密盘"和"网盘"》提到了:利用某些网盘客户端提供的"字节级差异同步"来优化加密盘的上传速度。

之后某网友在博客留言中提出质疑。他/她认为:加密盘中即使只修改了某个小文件,因为加密算法的特点,会导致加密卷文件中有大量的数据被修改。

这位网友思考问题比较深入,但对"块加密算法"只知其一,不知其二。下面俺稍微解释一下 TrueCrypt 采用的 XTS 操作模式。

"块加密算法"因为每次加密的明文是固定大小的(也就是"块尺寸"),所以在实际使用场合中,需要结合具体的操作模式。所谓的操作模式,就是把明文通过某种方式分割成若干块,然后采用某种机制分别加密每一块。

最常听说的操作模式有 ECB、CBC、PCBC、CFB、等等(维基百科的"这里"有这些操作模式的原理介绍)。

ECB 最简单,就是用密钥分别对 N 块明文进行加密,得到 N 块密文。此模式的最大缺陷在于:如果两块明文的内容完全一样,得到的那两块密文也会完全一样。所以 ECB 模式会遭遇"差分攻击"(通过差异化分析进行破解的尝试)。

后来 IBM 公司在70年代发明了 CBC——这个模式可以避免 ECB 的缺点。CBC 的原理也比较简单:先加密第一块明文,得到第一块的密文;然后在加密第二块明文的时候,把第一块密文作为输入参与运算;然后把第二块的密文作为第三块加密的输入;以此类推......

CBC 的好处在于,即使相邻两块明文的内容完全一样,加密得到的密文差异也极大。所以 CBC 可以对抗"差分攻击"。但是 CBC 没法用于磁盘加密。因为 CBC 模式在加密/解密某个数据块的时候,要连环依赖于其它数据块的加密/解密。如果磁盘加密工具使用 CBC 模式,性能会非常非常差(原因很显然,自己想)。

为了解决磁盘加密的需求,前几年又发明了新的模式——XEX 和 XTS(这两者差不多,XTS 是 XEX 的改良版)。使用 XTS 进行加密/解密,不同的数据块是完全独立的(解决了磁盘读写的性能问题);另外,这玩意儿本身没有明显弱点。所以,当今大部分磁盘加密工具(包括 TrueCrypt)都采用 XTS 模式。对 XTS 有兴趣的同学,可以到IEEE 官网看相关的论文,也可以看 TrueCrypt 手册的"Description of XTS mode"章节。俺这里就不细说了。

★物理加密盘 VS 虚拟加密盘

在《文件备份技巧:组合"虚拟加密盘"和"网盘"》中已经介绍过这两者常见的优缺点对比。今天除了说一下常见的优缺点对比,再稍微说一下不太常见的优缺点对比。

(物理加密盘其实又分为两种:加密普通分区和加密系统分区。加密系统分区比较特殊,会在后续的博文中专门介绍)

◇"虚拟加密盘"的优点(同时也是"物理加密盘"的缺点)

优点1

首要的优点就是便于备份。因为"虚拟加密盘"说白了就是一个大文件,你只要把这个大文件 copy 到其它地方,就相当于完成了虚拟盘的备份。

而"物理加密盘"要备份,就相对麻烦一些。你需要使用专门的磁盘备份工具(比如 Ghost)。

优点2

虚拟加密盘可以嵌套任意多层(在一个虚拟盘内部再创建另一个虚拟盘)。

而物理加密盘不支持多重嵌套。("外层卷"和"隐藏卷"不算嵌套。下一篇会单独介绍"隐藏卷"的经验)

嵌套多层的好处在于,大大增加攻击者的破解难度。而且在一开始,攻击者根本无法知道你设置了多少层嵌套。(这个优点不明显。大部分网友应该用不到。但少数对安全性要求很高的网友,可能需要此优点)

◇"物理加密盘"的优点(同时也是"虚拟加密盘"的缺点)

优点1

因为你没法把整个操作系统的系统分区放到一个虚拟加密盘中。所以,对系统分区只能采用"物理加密盘"的方式,无法采用"虚拟加密盘"的方式。

支持加密系统分区,这是"物理加密盘"主要的优点之一。当你把系统分区也加密了,就可以把信息泄漏的程度降到最低。

优点2

其实"物理加密盘"还有一个额外的好处,但大多数人碰不到这种情形。

当你因为干了某些事情而被警察盯上,警察可能会收缴你的电脑并拿回去做"取证分析"(如今公安部的省市级机构,都有"信息取证"的技术人员)。假如你用的是"虚拟加密盘",那么你的电脑中就会有一些大文件(加密盘的卷文件)。如果当警察盘问你,这些个大文件是干嘛用滴?你很难解释,也很难抵赖。反之,如果你用的是"物理加密盘",当对应的分区没有被挂载时,分区中的数据是杂乱无章的,就像是随机数据。那么你就可以辩解说,这个分区是刚分好的,尚未格式化。(这种辩解可以骗过外行,但骗不过内行)

◇怎样结合两者的优点?

这其实很容易想到的——就是把虚拟加密盘放到物理加密盘内部。当然,如果放到物理加密盘的隐藏卷部分,效果就更好了。(因为篇幅的关系,"隐藏卷"的经验放到下一篇,这里就不展开讨论了)

把虚拟加密盘放到物理加密盘内部,你的操作系统中就不会有可疑的大文件,而且不影响虚拟加密盘的备份。真可谓一举多得,当然也有缺点——主要的缺点就是性能会下降。好在如今的电脑,CPU 已经很强劲了,动不动就是双核四线程。所以这点性能下降还是可以承受的。

★全盘加密 VS 逐个分区加密

使用物理加密盘可以有两种搞法:其一,全盘加密;其二,逐个分区加密。

对这两种方案,俺个人建议采用后者——逐个分区加密。把整个硬盘做一次性的全盘加密,虽然操作起来稍微简单一些,但是存在如下一些隐患。

◇隐患1——强度不够

大多数电脑都是单硬盘,也就是说系统分区也在该硬盘上。所以,对单硬盘PC的"全盘加密"也就是"加密系统分区"。而 TrueCrypt 在加密系统分区的时候,仅支持口令认证,不支持 KeyFiles 认证。这就导致加密强度大打折扣——因为 KeyFiles 难以用暴力穷举,而口令更容易被暴力穷举。

◇隐患2——灵活性不够

如今的硬盘都很大,里面通常会有不止一个分区。不同分区存放的数据往往也不同。有的分区存放的数据重要,有的不重要。

如果你对整个硬盘进行一次性加密,就面临一个两难——如何选择加密算法?加密算法太强,性能会很差;加密算法不够强,安全性又不够。

而如果采用不同分区逐个加密的方案,就可以避免上述难点。你可以对特别敏感的分区采用更强的加密算法(但也更慢),对不太重要的分区采用弱一些(但也快一些)的加密算法。

◇隐患3——兼容性不够

假如你的硬盘安装了多个不同的操作系统(多引导)。这种情况下使用全盘加密可能会出现一些冲突,导致某些系统无法启动(Linux 和 Windows 混装的环境尤其明显)。

TrueCrypt 使用经验[1]:关于加密算法和加密盘的类型相关推荐

  1. 全面解析存储加密盘(SED)技术

    在上一篇文章"数据泄露事件背后,众多的企业级加密技术,谁能堪负重任"中,给大家分享了主流的企业数据加密技术,重点分析了基于应用透明加密(主要用于NAS和Object加密),今天接着 ...

  2. 个人隐私保护5:和 金士顿 DataTraveler Locker+加密盘优势比较

    个人隐私保护5:真正进入加密U盘实战 实现目标: 1.真正实现加解密,原则上不可被破解 (金士顿 DataTraveler Locker+ 已实现) 2.无需安装应用程序 ,即插即用(金士顿 Data ...

  3. (原创)CnCrypt 加密U盘,将U盘分为普通盘和加密盘,单文件便携版

    CnCrypt加密U盘是一款免费的文件加密软件,支持winxp-win10之间所有系统,您可以通过 CnCrypt加密U盘在普通上开辟出一个私密空间,用来存放文件.视频等各种格式的数据资料.像家里的保 ...

  4. 对称加密算法 - Java加密与安全

    对称加密算法什么是对称加密算法呢?1. 对称加密算法就是加密和解密使用同一个密钥,例如我们使用WinRAR,对文件进行打包的时候,我们可以设置一个秘密,在解压的时候需要使用同一个密码,才能够正确的解压 ...

  5. java md5加密长度_java中使用MD5加密算法进行加密

    java中使用MD5加密算法进行加密以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在各种应用系统的开发中 经常需要存储 ...

  6. php openssl支持的加密算法和加密模式及加密解密示范实例

    <style> textarea{width:88%;height:188px;} </style><?php // 定义要加密的数据 $data = '我是中文@Thi ...

  7. 对称加密算法(AES加密)以及对称算法与非对称算法的对比

    概述 对称加密算法就是传统的用一个密码进行加密和解密.例如,我们常用的WinZIP 和WinRAR对压缩包的加密和解密,就是使用对称加密算法:         从程序的角度着,所谓加密,就是这样一个函 ...

  8. rsa加密原理数学证明_非对称加密算法——RSA加密原理及数学推导

    说明:原创不易,著作权仅归作者本人所有,转载请注明出处. 建议:建议阅读时间15min+.证明过程可能看着枯燥,需要动手. 一.  RSA是什么? 看到标题的第一瞬间,先想一下,RSA是什么呢?百度百 ...

  9. 口令加密算法 - Java加密与安全

    口令加密我们在前面介绍了对称加密算法,他们的key其实一个byte数组,例如AES256算法,他的key实际上是一个32位的数组 我们普通的加入软件有所不同,我们在使用WinRAR这样的软件的时候,通 ...

  10. 各种Java加密算法-非对称加密

    RSA      这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解和操作,也很流行.算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和 ...

最新文章

  1. ICON: 从单张图片重建穿衣服人体模型
  2. Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
  3. 讯飞tts语音引擎9.0_使用科大讯飞语音转文字的服务进行电话录音分析
  4. java 多个 panel_java – 在JFrame中组织多个JPanel的好方法是...
  5. shell编程之进阶篇一表达式
  6. php 读写远程文件内容,php获取远程文件内容的函数
  7. Ceph 笔记(二)
  8. 在互联网寒冬季节,他竟然是这样进了百度!值得学习 -- 来自最前沿的实战经验!...
  9. Android Studio实现计算器功能
  10. windows系统笔记本连接外部显示器进行分屏
  11. uniapp上拉加载
  12. CC2650 入手资料总结(转)
  13. 8.5 专业的“对口” ——《逆袭大学》连载
  14. 帝国cms 多值字段在投稿表单中的样式设置
  15. MATLB|基于粒子群算法的能源管理系统EMS(考虑光伏、储能 、柴油机系统)
  16. 2014年7月份第3周51Aspx源码发布详情
  17. 【李佳辉_周报_2022.10.9】
  18. 前往华虹下载POS机应用,回来又上传安装卡应用
  19. Self referencing loop detected with type的原因以及解决办法
  20. Android蓝牙协议介绍

热门文章

  1. ntfs文件系统服务器版,详解NTFS文件系统+NTFS 文件系统解析
  2. M1增速还能指出A股底部吗?
  3. matlab模拟化学反应,Matlab环境下化学反应动力学的MonteCarlo模拟
  4. 最近游戏更新 未整理 无图片 续2
  5. DeepFool对抗算法_学习笔记
  6. 吹气球 Burst Balloons
  7. 图解精益敏捷的逻辑与实证:设计您自己的工作方式
  8. Python爬虫入门教程第七讲: 蜂鸟网图片爬取之二
  9. 国产系统中标麒麟安装教程
  10. 三栏式布局详解(代码+图解)