★引子
◇为啥到现在才介绍 TrueCrypt 的替代品
当年(2014)TrueCrypt 死亡的时候,俺发过一篇《分析一下 TrueCrypt 之死(自杀 or 他杀?),介绍一下应对措施》。当时俺提到:
因为 TC 的源代码是公开的,任何人都可以拿它的代码克隆出一个新的磁盘加密工具。所以官网变脸之后,已经陆续出现了几个克隆(代码 fork)。假以时日,或许其中的某个克隆会再次成为主流。如果真这样的话,TC 就涅磐重生了。从“TrueCrypt 死亡”到现在已经过了大约一年半,再加上 TrueCrypt 又曝了高危安全漏洞。所以俺估摸着:是时候写一篇【扫盲教程】来介绍 TrueCrypt 的替代品了。
提醒一下:如果你对安全性的要求比较高,短期内(至少1年之内)不要急着去用这些克隆的 TrueCrypt(这些克隆需要一定的时间才能成熟、稳定)。
◇先说说 TrueCrypt 的安全漏洞
这次的安全漏洞由 Google 的安全研究人员(James Forshaw)发现。共有2个漏洞(漏洞编号:CVE-2015-7358、CVE-2015-7359),影响的是 Windows 平台,Linux 和 Mac OS X【不受影响】。
(因为该漏洞只影响 Windows 平台,这说明该漏洞与“加密盘格式”【无关】)
对技术感兴趣的同学,可以到“这里”和“这里”看这2个漏洞的详细描述。
顺便表扬一下 Google 的安全研究团队,确实有两下子。之前大名鼎鼎的“Heartbleed 漏洞”也是 Google 安全研究团队曝光的。
俺选择 Blogspot 作为博客平台,就是考虑到 Google 在安全方面的实力;
与之对比,WordPress 虽然功能很牛,市场份额排名第一,但是经常曝出安全漏洞,不适合俺这种政治危险分子。
★关于 VeraCrypt
VeraCrypt 是从 TrueCrypt 派生出来的开源项目,成立于2013年6月。其官网在 https://www.veracrypt.fr/
它刚成立那会儿,TrueCrypt 尚未死亡,所以 VeraCrypt 没有吸引太多的注意力。TrueCrypt 死亡之后,VeraCrypt 的使用量开始多起来。
此次曝光了高危漏洞之后,VeraCrypt 很快就在8天之后(9月26日)发布了 1.15 版本,修复了该漏洞。此举令其曝光率大增。
俺之所以首先推荐 VeraCrypt,除了此次修复漏洞及时,还有一个原因——其它替代品要么质量不如 VeraCrypt 成熟,要么功能不如 VeraCrypt 完备。
比如另一个名气比较大的替代品是 CipherShed,目前还停留在“Pre-Alpha”阶段——也就是说,连“Beta 品质”都没有达到。
★如何获取 VeraCrypt?
建议直接从官网下载,【不要】从其它第三方的软件网站下载(大伙儿要吸取“XcodeGhost 事件”的教训)。
目前 VeraCrypt 支持三大桌面操作系统,具体如下:
Windows(WinXP 或之后的版本,包括新出的 Windows 10)
Linux(内核主版本号大于等于 2.6)
Mac OS X(版本号大于等于 10.6)
对于 Windows 用户,下载的 exe 安装包自带数字签名(如何校验数字签名,请看这篇博文)。另外,其官网还附上了不同平台安装包的“SHA 散列校验值”和“PGP 签名”。如果你下载的是 Linux 或 Mac OS X 的安装包,下载完之后,也请校验一下,以防万一。
★如何安装 VeraCrypt?
(考虑到大部分读者是 Windows 用户,为了节省口水,本文后续章节只聊 Windows 下的 VeraCrypt。使用其它平台的同学,请依样画葫芦)
安装前,先确保当前用户具有“管理员权限”。
双击下载好的安装包(就是那个 exe 文件),然后一路点 next 就可以了。
★VeraCrypt 功能概述
下面开始聊功能,这是本文的重点,看仔细喽。
前面说了,VeraCrypt 是从 TrueCrypt 衍生出来的。所以其功能与 TrueCrypt 非常类似。关于 TrueCrypt 的功能介绍,俺已经写过一系列的傻瓜教程,包括如下:
《TrueCrypt——文件加密的法宝》
《TrueCrypt 使用经验[1]:关于加密算法和加密盘的类型》
《TrueCrypt 使用经验[2]:关于加密盘的密码认证和 KeyFiles 认证》
《TrueCrypt 使用经验[3]:关于加密盘的破解和防范措施》
《TrueCrypt 使用经验[4]:关于隐藏卷的使用和注意事项》
(如果你之前【没有】使用过 TrueCrypt,强烈建议你先看完上述这几篇扫盲教程)
为了打字省力,那些与 TrueCrypt 类似的功能,俺就【不】介绍了。下面俺只聊 VeraCrypt 的【新增功能】。
★设置界面语言
考虑到某些网友是洋文菜鸟,先说一下如何配置界面的语言。
如果你打开 VeraCrypt 之后,界面是英文,先到主菜单中点击“Settings”,然后再点击“Language”菜单项,就会弹出一个选择语言的对话框,你把列表框的滚动条拉到底部,就会看到“简体中文”和“繁體中文”。具体截图如下:
选完中文之后,界面变为如下:
★支持的加密盘格式
VeraCrypt 支持两种加密盘的格式,其中一种就是原先 TrueCrypt 使用的格式,另一种是 VeraCrypt 自己新创的格式。因此,如果你手头有原先 TrueCrypt 创建的加密盘,也可以用 VeraCrypt 直接挂载(mount)。
这两种格式的【唯一差异】在于——VeraCrypt 的新格式支持 PIM 功能(关于此功能,待会儿介绍)。
为了防止混淆,再唠叨一下关于加密盘的类型(“类型”与“格式”是两个概念,别混淆了)。
TrueCrypt 支持两种类型的加密盘——物理加密盘(加密分区、全盘加密)和虚拟加密盘(卷文件);VeraCrypt 也支持这两种类型。
所以,排列组合之后,VeraCrypt 共支持如下4种:
旧格式(TrueCrypt 格式)的虚拟加密盘
旧格式(TrueCrypt 格式)的物理加密盘
新格式(VeraCrypt 格式)的虚拟加密盘
新格式(VeraCrypt 格式)的物理加密盘
当你使用旧格式(TrueCrypt 格式)的加密盘,其操作方式与原先的 TrueCrypt 基本一样。
当你使用新格式(VeraCrypt 格式)的加密盘,你可以配置 PIM 参数,也可以不配置(此时用的是默认值)。这个 PIM 参数有助于提升加密盘的安全性——主要是对抗“暴力破解”(本文后续章节会专门聊 PIM 功能)。
★支持的加密算法和散列算法
这方面,VeraCrypt 与 TrueCrypt 大同小异——加密算法一样,散列算法多了一个 SHA-256。
更详细的介绍,请大伙儿自行翻阅前些年的博文《TrueCrypt 使用经验[1]:关于加密算法和加密盘的类型》,俺就不浪费口水了。
★加密盘的认证方式
TrueCrypt 原先支持两种认证方式:“密码 & keyfiles”。这两种方式,VeraCrypt 也都支持。相关的介绍,请大伙儿自行翻阅前些年的博文《TrueCrypt 使用经验[2]:关于加密盘的密码认证和 KeyFiles 认证》,俺就不浪费口水了。
另外,VeraCrypt 还新增了一个 PIM 功能。从某种意义上讲,PIM 也可以算是一种认证方式(因为挂载加密盘到时候也需要它)。关于 PIM 功能,本文下面专门用一个章节来详述。
★创建加密盘
跟 TrueCrypt 类似,会出现一个“向导界面”,引导你一步步完成加密盘的创建。开头几步跟 TrueCrypt 类似,俺就不贴图了。
到最后一步,稍微有点不同,俺来聊一下。
以下是向导最后一步的界面,此时你选好文件系统格式之后,直接点击“格式化”按钮。
点击之后,你会发现进度条没有动静。因为 VeraCrypt 需要收集到足够多的随机信息,用来创建相关的加密密钥。
此时,你必须在当前这个窗口内,频繁并迅速地移动鼠标(随机移动)。大约四分之一柱香的功夫,就会出现进度条。
出现进度条,说明已经开始格式化。格式化完成后,会提示你。
★挂载加密盘
挂载加密盘的界面,跟 TrueCrypt 有点小区别——多了两个复选框。
其中一个复选框是“TrueCrypt Mode”——勾选它是为了挂载旧格式(TrueCrypt 格式)的加密盘。
另一个复选框是“Use PIM”——这个复选框的作用,留到后面的章节介绍。
提醒一下:
VeraCrypt 挂载【新格式】加密盘的时候,你会明显感觉很慢。主要是因为 VeraCrypt 强化了安全性(具体的技术细节后面会提及)。
★格式转换功能
VeraCrypt 不但可以打开旧格式(TrueCrypt 格式)的加密盘,而且可以把旧格式转化为新格式(VeraCrypt 格式)。
转换过程很简单——通过修改认证信息来进行。
也就是说:当你修改了某个旧格式加密盘的密码或者 keyfiles,修改成功之后,该加密盘就变为新格式了。
提醒:该转换是【不可逆】的。也就是说,你无法用 VeraCrypt 把新格式转为旧格式。
★PIM 功能
现在开始讲 PIM——这是 VeraCrypt 新增的功能,因此俺就多费点口水。
所谓的 PIM 是洋文“Personal Iterations Multiplier”的缩写。通俗地说就是:你可以自定义“加密盘的头部密钥生成时的迭代次数”。这句话比较绕口,要想解释清楚,需要聊相关的技术实现机制(如下)。
◇技术实现机制
(对技术细节【不】感兴趣的同学,就不用看俺的解释了。直接跳到下一节“VeraCrypt 相对 TrueCrypt 的改进”)
加密盘格式简介
不论是新格式还是老格式,加密盘的数据大致可以分为两部分:“头部”和“数据区”。
所谓的“数据区”,存放的就是加密盘中文件系统的数据(通俗地说,就是你放到加密盘中的文件和目录的信息)
所谓的“头部”(header),存放的是加密盘本身的一些信息。刚才提到的“数据区”,其加密的密钥叫“Master Key”(也叫“主密钥、数据区密钥”),这个“Master Key”就是存储在加密盘头部的。此外,像“加密盘格式的版本号”、“是否有隐藏卷”等信息,也是存储在头部的。
“Header Key”的生成机制
头部包含了很多加密盘的关键信息,自然也是要加密的。那么加密头部的密钥从哪里来捏?这个“Header Key”(也叫“首密钥、头部密钥”)是根据你输入的认证信息,来生成的(提醒一下,认证信息有2种:密码 和 keyfile)。
VeraCrypt 采用“PBKDF2 算法”来生成“Header Key”(该算法的具体描述参见“这里”)。
在生成“Header Key”的过程中,会采用你指定的散列算法进行 N 次迭代,以生成一个难以猜测的密钥。这个 N 就是前面所说的“迭代次数”。
每当用户要挂载某个加密盘,软件界面会提示用户输入“密码和 keyfile”。然后根据用户的输入,计算出“Header Key”,然后用这个密钥对加密的头部进行解密(解到内存中)。如果解密成功,就说明用户输入的是对的。反之,则提示用户输入错误。
为啥要“迭代 N 次”?
从上述可以看出:这个“迭代次数”越大,计算头部密钥的时间就越长,因此挂载加密盘的过程就越慢;表面上看,这是一个缺点。但其好处在于:如果某个攻击者想要采用暴力破解的方式对“头部”进行穷举解密,每次一次尝试也需要花很长时间(同样要迭代 N 次)。所以,当 N 足够大,暴力破解就变得【不可行】。
“Header Key”与“Master Key”分离的好处
从上述可以看出,加密盘中存在两种密钥:“Header Key & Master Key”。为啥要搞出两种密钥捏?其中一个好处是为了方便用户修改密码。当用户修改加密盘的密码或 keyfile,只需要“重新加密头部”,数据区不用改动(因为“Master Key”【没有】发生变化)。
对于那些超大的加密盘(TB 级),这个好处非常明显。
◇VeraCrypt 相对 TrueCrypt 的改进
如果你刚才没有看技术细节的解释,直接跳到这里,你只需记住如下结论:
PIM 功能就是用来配置加密盘的某个“迭代次数”的。“迭代次数”越大,暴力破解就越难;同时,挂载加密盘也越慢。
对于原先的 TrueCrypt,它的迭代次数是写死在程序代码中的。而且 TrueCrypt 使用的迭代次数偏小(这是 TrueCrypt 被批评的主要问题之一)。
到了开发 VeraCrypt 的时候,其开发团队把原先默认的迭代次数调大(大约增加了两到三个数量级)。迭代次数调大之后,就显著增加了“暴力破解”的难度。
此外,从 VeraCrypt 1.12 版本开始,在界面上提供了一个功能,允许用户自定义每个加密盘的“迭代次数”——这就是下面要讲的“PIM 的用户界面”。
◇用户界面
VeraCrypt 提供了相关的用户界面,让你可以自定义 PIM 数值的大小。前面说了,PIM 越大,暴力破解越难;但同时,挂载加密盘也越慢。由于不同的用户有不同的需求,所以,VeraCrypt 干脆提供一个界面让你自己设定 PIM 的大小。当然,如果你懒得设置,也可以直接用内置的默认值。
创建加密盘时
VeraCrypt 同样提供了“创建加密盘的向导”。该向导前面5步跟 TrueCrypt 是一样的,俺就略过不提。
下面是创建加密盘的向导界面第6步。如果你想使用 PIM 功能,需要勾选“Use PIM”这个复选框。
下面是创建加密盘的向导界面第7步
如果第6步勾选了“Use PIM”,下一步就会让你输入 PIM 数值。这个数值要牢记,其重要性等同于认证信息(密码 和 keyfile)。
(如果输入 0 或者不填写,则表示——使用默认的 PIM 数值)
如果你设置的密码过于简短,那么 VeraCrypt 会强制让你输入一个比较大的 PIM 数值(大于 485)。
挂载加密盘时
下面是挂载加密盘的界面。如果你创建加密盘的时候,指定了 PIM 数值,那么在挂载的时候,需要输入【相同的】PIM 数值。如果输入的数值与创建时指定的 PIM 数值不一致,则挂载失败。
再次罗嗦一下:一旦你在创建加密盘时设置了“PIM 数值”,【千万别忘了】——忘记它的后果就如同忘记密码!
◇“PIM 数值”与“迭代次数”的换算公式
(如果你不关心技术细节,这个换算公式你可以不用看)
根据 VeraCrypt 的文档,PIM 根据如下公式换算成迭代次数。
1. 对于“系统加密分区”:迭代次数 = PIM x 2048
2. 对于“虚拟加密盘”或者“非系统加密分区”:迭代次数 = 15000 + (PIM x 1000)
★扩容功能
另一个比较显著的新功能是“加密盘扩容”。原先的 TrueCrypt【没有】扩容功能——如果你的加密盘,空间不够了,你不得不重新创建一个更大的加密盘,然后把原先加密盘的文件拷贝到新加密盘(步骤繁琐)。
如今有了这个扩容功能,你可以直接扩大原有加密盘的容量。前提是:文件系统必须是 NTFS。
下面给出扩充操作的系列截图(共8张),描述文字都标注在截图中了。
★如何防范加密盘被破解?
下面这篇博文,其实已经包含在本文开头列出的 TrueCrypt 教程中。
TrueCrypt 使用经验[3]:关于加密盘的破解和防范措施
因为这篇的内容比较重要,俺再次唠叨一下:如果你对安全性的要求很高,一定要把上述这篇仔细看完。
★结尾
俺写这篇博文时,VeraCrypt 最新的是 1.16 版本。本文的截图就是根据这个版本制作的。
从截图中可以看出,某些界面还未彻底汉化。今后如果继续汉化,新版本的界面可能与本文的截图会略有不同。
另外,VeraCrypt 的开发比较活跃,今后多半还会增加新的功能。到时候俺会补充到这篇博文中。
大伙儿如果有啥疑问,欢迎到俺博客留言。
俺博客上,和本文相关的帖子(需翻墙):
《TrueCrypt——文件加密的法宝》
《TrueCrypt 使用经验[1]:关于加密算法和加密盘的类型》
《TrueCrypt 使用经验[2]:关于加密盘的密码认证和 KeyFiles 认证》
《TrueCrypt 使用经验[3]:关于加密盘的破解和防范措施》
《TrueCrypt 使用经验[4]:关于隐藏卷的使用和注意事项》
《分析一下 TrueCrypt 之死(自杀 or 他杀?)——兼谈应对措施》
《文件加密的扫盲介绍》
《文件备份技巧:组合“虚拟加密盘”与“网盘”》
《如何用“磁盘加密”对抗警方的【取证软件】和【刑讯逼供】,兼谈数据删除技巧》
《扫盲 dm-crypt——多功能 Linux 磁盘加密工具(兼容 TrueCrypt 和 VeraCrypt)》
《扫盲 Linux 逻辑卷管理(LVM)——兼谈 RAID 以及“磁盘加密工具的整合”》
版权声明
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者编程随想和本文原始网址:https://program-think.blogspot.com/2015/10/VeraCrypt.html