TrueCrypt 使用经验[4]:关于隐藏卷的使用和注意事项

  前阵子比较忙,十一长假又有事情,导致10多天没发博文也没回复读者留言,害得不少热心读者以为俺被跨省了。今天赶紧发篇博文,向列位看官报个平安。   刚才扫了一眼这几天的留言,非常感激大伙儿对俺的关心!看来俺得多努力,以示回报。   关于 TrueCrypt 的高级话题,第4篇咱们来聊一下“隐藏卷”的技术细节和注意事项。   所谓的“隐藏卷”,就是在一个加密卷内部再创建一个加密卷。外层的那个加密卷是【明】的(也叫“宿主卷”、“外层卷”);内层的那个,是【暗】的(叫“隐藏卷”、“内层卷”)。这两个加密卷必须使用不同的认证因素(不同的口令或不同的 KeyFiles)。在物理上,你只能看到外层的加密文件或加密分区,内层的卷,是没有独立文件或独立分区的。   当你要打开加密卷的时候,如果输入的是外层的认证因素(口令、KeyFiles),那就打开外层的卷(这时候看不到内层的数据);反之,输入内层的认证因素,则打开内层的卷(这时候看不到外层的数据)。   隐藏卷的存储示意图如下(技术上就是利用外层卷的剩余空间来存储内层卷的数据):

不见图 请翻墙
(隐藏卷的存储示意图)

  隐藏卷最大的好处在于:可以做到【Plausible Deniability】。这个洋文找不到贴切的中文对应。有人翻译为:“冠冕堂皇地拒绝”,俺觉得不够贴切。为了便于大伙儿理解,稍微解释一下使用“Plausible Deniability”的场景。   首先大伙儿应该明白一点——TrueCrypt 的加密卷是非常牛逼滴(本系列前面几篇已经聊过了)。只要你设置的口令够复杂,尤其再配合 KeyFiles,TrueCrypt 的加密卷是无法破解滴!TrueCrypt 之强悍,连美国佬的 FBI 都没辙(前几年有活生生的案例)。

  但是别忘了安全界的一句老话——越是安全的系统,【人】越成为主要的弱点(如果你看过俺写的“社会工程学”系列博文,对这句话应该有体会)。

  虽然 TrueCrypt 加密盘很牛逼,但某些攻击者(比如天朝的公安)可以采用某些手段(比如威胁你家人,比如刑讯逼供)逼迫你交出加密盘的口令/KeyFiles。那么,该如何应对“胁迫”捏?这时候,TrueCrypt 的隐藏卷就派上用场啦。   当你一开始制作加密盘(加密卷)的时候,可以在加密卷中设置一个隐藏卷。按照通常的经验,你要把最敏感最重要的数据放在内层卷(隐藏卷),把相对不太重要的数据放在外层卷。一旦遭遇胁迫,你就装出一副很无奈的样子,很不情愿地把外层卷的口令告诉对方。这时候,外层卷虽然暴露了,但是内层的隐藏卷并没有暴露。这就是“Plausible Deniability”的使用场景。   这两个概念,可能某些同学会混淆,俺稍微澄清一下。   所谓的“嵌套卷”,就是把一个小的加密卷存放到另一个大的加密卷内部。打个比方,如同一个大的压缩文件中还包含一个小的压缩文件。   从表面上看,“嵌套卷”跟“隐藏卷”很相似;但其实捏,两者有【本质差异】。最关键的差别是—— 对于【嵌套卷】,只要能打开外层卷,就可以看到内层卷; 对于【隐藏卷】,即使能打开外层卷,也【无法】判断是否存在隐藏卷。   上述差异导致——

“嵌套卷”【无法】做到“Plausible Deniability”,而“隐藏卷”可以(这也是“隐藏卷”相比“嵌套卷”的最大优点)。

  设想一下,如果你遭到胁迫,攻击者知道你使用了 TrueCrypt 加密,并且逼迫你打开加密卷——

如果你用的是【嵌套卷】

打开外层卷之后,攻击者可能会找到存放在“外层卷”里面的“内层卷”。就可以继续胁迫你开启“内层卷”。

如果你用的是【隐藏卷】

打开外层卷之后,(除非你的设置有缺陷,否则)攻击者【无法判断】该加密卷内部是否存在隐藏卷(至于“如何避免配置的缺陷”,俺在后续章节会聊)   大致需要如下几个步骤:   先创建一个普通的加密卷(这个应该不用俺再教了吧?)这个加密卷是用来作为外层卷(也就是“幌子”)。   外层卷可以是物理加密盘(某个加密分区),也可以是虚拟加密盘(某个加密文件)。

  关于“物理加密盘”和“虚拟加密盘”的差异、优缺点,本系列前面的博文已经聊过,这里就不再浪费口水了。

  创建好外层卷之后,你需要在外层卷放置一些【相对不重要】的文件作为幌子以掩人耳目。   怎样才算是“相对不重要”捏?下面的“注意事项”章节会提到。   在刚才那个普通加密卷的基础上,再创建一个“隐藏加密卷”。这个隐藏加密卷,就隐藏在普通加密卷的空闲磁盘空间里面。   TrueCrypt 提供一个比较傻瓜化的向导,可以帮你一步步地在普通加密卷(外层卷)中创建一个隐藏加密卷(内层卷)。   这个步骤其实不难,大伙儿应该能搞定。这里就不放界面截图了。搞不定的同学,可以到俺博客留言。如果很多人搞不定,俺再补上界面截图。   有必要提醒一下:   “隐藏卷”和“外层卷”必须使用【不同的】认证因素。说具体点就是——要么“口令”不同,要么“KeyFiles”不同(两个都不同当然更好)。   如果某个加密卷包含有隐藏卷,那么该加密卷就会有【三种】不同的使用模式。   很多使用 TrueCrypt 的同学都没彻底搞明白隐藏卷的这三种操作模式。所以俺特地用一个章节的篇幅,来说明这三种模式的差异和应用场景。
  认证过程   打开加密卷的时候,【仅输入】内层卷的认证因素(口令、KeyFiles)。这时候 TrueCrypt 会自动帮你加载内层卷。

  说明

  这是最常用的模式。因为外层卷只是一个掩人耳目的幌子,显然,你日常的大部分操作都是在“内层的隐藏卷”中进行。
  认证过程   可以有两种认证方式:   1. 打开加密卷的时候,【仅输入】外层卷的认证因素(口令、KeyFiles),同时勾选“Read Only”选框。   使用这种方式,整个加密卷(包括内层和外层)都是只读模式,自然也就不会破坏内层卷的数据。但因为是只读模式,所以只能浏览外层卷的文件,无法进行修改(写操作)。   2. 打开加密卷的时候,【同时输入】外层卷和内层卷的认证因素(口令、KeyFiles)。   使用这种方式,你可以对外层卷进行写操作(比如:增加文件、删除文件、修改文件内容…)   因为你同时输入内外两层卷的认证因素,TrueCrypt 软件自然就知道这个加密卷是含有“隐藏卷”的。所以,在这种模式下,TrueCrypt 会暗中对隐藏卷所在的磁盘区域进行写保护。(这种写保护是在文件系统驱动的层面进行的,你使用的应用软件感觉不出来)。   假设说,你企图往外层卷写入大量的数据,并且写入的数据会覆盖到隐藏卷所在的磁盘区域,这时候 TrueCrypt 会屏蔽这些“磁盘写操作”,同时你会看到一个提示“写入失败”。

  说明

  一般情况下【无需】用这种模式。除非你想调整外层卷的数据,再使用这种模式。   可能有的同学会问:“外层卷的内容只是掩人耳目的幌子,难道需要经常调整吗?”关于这个问题,在后续的“注意事项”章节,俺会详细介绍——什么情况下需要调整外层卷的数据,以加强隐藏卷的隐蔽性。
  认证过程   打开加密卷的时候,光输入外层卷的认证因素(口令、KeyFiles)。   TrueCrypt 会自动帮你加载外层卷。这时候 TrueCrypt【不】对内层卷进行暗中保护。也就是说,【内层卷】的数据有可能被破坏。   为啥【内层卷】数据可能被破坏捏?   关键在于——如果你【不】给出隐藏卷的认证因素,连 TrueCrypt 自己也无法判断是否存在隐藏卷。

  再次提醒

  再罗嗦一下,处于这种模式下,TrueCrypt【不】对隐藏卷进行写保护。所以,这种操作模式是有风险滴——当你在操作外层卷的时候,可能会无意中破坏隐藏卷存储的数据。平常使用的时候,千万【别】用这种模式;只有当你遭到胁迫的时候,才使用这种模式。   套用一下信息安全的专业术语——当你使用这种模式,其实是通过牺牲“可用性”来换取“保密性”。对于大多数 TrueCrypt 用户而言,“保密性”显然比“可用性”重要得多。   本章节大伙儿要看仔细喽。即使是某些懂安全的网友,可能也会忽略下面提到的某些细节。   当你受到胁迫的时候,务必使用第三种模式——只输入外层卷的认证因素。如果这时候你因为慌乱,搞错了,输入了内层卷的认证因素(口令、KeyFiles),内层隐藏卷的数据自然就暴露了。   再强调一遍:受到胁迫的时候,【绝对不能】使用第一种模式和第二种模式,【必须使用】第三种模式。   一旦搞错,前功尽弃!   前面介绍了,隐藏卷是位于外层卷的空闲空间中。比方说,你的外层卷总共 10GB,已经用掉 8GB,空闲的只有 2GB。那么,你在这个外层卷里面创建隐藏卷,隐藏卷尺寸的【上限】就是 2GB(很多时候,上限远达不到 2GB,具体看外层卷的【文件系统类型】)。   如果你的外层加密卷很大,但是只使用了一丁点空间(比如 100GB 加密卷只用了 1GB),那么攻击者就会起疑心——怀疑这个加密卷包含有隐藏卷。所以,你需要适当平衡一下,在外层加密卷中放置足够多的“幌子文件”,占到一定比例的空间,才不至于引起怀疑。   前面俺提到,放置在外层卷的“幌子文件”,必须是【相对不重要】。所谓的【相对不重要】,很有讲究哦—— 这些“幌子文件”必须有一定的重要性,但是重要程度【远远不如】隐藏卷中的数据。   为啥俺特地强调这点捏?   如果你放在外层卷的“幌子”是一些完全不重要的文件,那就显得太假啦。一旦你遭到胁迫,交出外层卷的密码,攻击者打开外层卷之后,发现里面全是一些鸡毛蒜皮的东西,当然会起疑心——为啥你把鸡毛蒜皮的文件用 TrueCrypt 加密?   所以,放在外层加密卷的文件,必须有适当的重要性;但其重要性要【远低于】放在隐藏卷里面的重要性。   大部分人放在加密盘里面的数据,都是重要数据。重要数据,自然有备份的需要(以免硬盘坏,电脑被盗、等等)。   如果你要备份含有隐藏卷的加密盘,要记得如下两条安全措施——

措施1:在每次备份之前,先随意地修改外层卷的文件

措施2:每次备份之前,都先【重建】一个新的加密盘,然后分别 COPY 外层卷和内层卷的文件到新的加密盘对应的内外卷   上述这两条措施【二选一】。前者操作简单,但安全性不够强;后者操作麻烦,但安全性更好。   为啥要有这两条防范措施捏?主要是为了对付【差分攻击】(注:“差分攻击”是密码学的技术行话,“差分”指的是“差异分析”)   为了让大伙儿明白,说一个针对加密盘进行差分攻击的场景。这个例子有点复杂,不太懂技术的同学可能要多看几遍,多动动脑筋,才能整明白。

【差分攻击】的案例分析 假设你使用了基于文件的虚拟加密盘,并且在其中设置了隐藏卷。 按照惯例,你在外层卷中放置了一些无关痛痒的文件,把机密信息放到隐藏卷。 平时,你经常需要打开隐藏卷,修改里面的内容。 由于外层卷的文件只是掩人耳目的幌子,所以你一直【没】修改外层卷的文件内容。 为了防止硬盘故障,你定期把这个虚拟加密盘备份到家中的 U 盘上。 有一天,朝廷的六扇门找到你,并且发现你在使用 TrueCrypt 加密盘。于是六扇门的人逼迫你交出加密盘的口令。 于是捏,你就假装交出外层卷的口令(反正外层卷存放的东西不重要,无所谓)。 如果故事到此为止,貌似天衣无缝。 但是,因为你曾经备份过 U 盘,六扇门搜查你家,发现了你用来“备份加密盘的 U 盘”。 这时候,六扇门里面搞“信息取证”的技术人员就可以把两个加密盘(一个是 U 盘里面的,一个是你电脑上的)拿来做比对——也就是上述所说的“差异分析”。 前面俺聊过,隐藏卷实际上是存放在外层卷的【空闲磁盘空间】。 由于你始终没有修改过外层卷,这时候就露出【破绽】啦! 啥破绽捏?

你之前交出了外层卷口令,取证人员可以打开外层卷,读取外层卷那些“幌子文件”。然后,取证人员会发现:这两个加密盘,加密密钥是一样的,里面存放的文件也是一模一样的(因为外层卷你一直没改动过)。但是空闲区域的内容却有很大的不同。这显然是很不正常滴!(破绽就在于此)

有经验的取证人员,单凭这点就可以推断——这个加密盘的空闲区域有猫腻! 这时候,虽然取证人员还无法知道隐藏卷的内容(因为他们还没拿到“password 或 KeyFiles”),但他们已经可以断定:你使用了隐藏卷。

换句话说,你的隐藏卷已经被察觉了。接下来,六扇门的人就会开始胁迫你交出隐藏卷的“口令或 KeyFiles”。

  上述这个例子稍微有点复杂,不知你看懂了没有?不懂也没关系。反正你要记得前面提到的那两条防范措施。
  俗话说得好:使用隐藏卷,演技很关键。所以,最后再聊聊【演技】这个话题——当你受到胁迫,要求你交出加密盘的密码或KeyFiles,请注意你的演技。   坦白说,这方面俺也没啥多经验啦——毕竟没当过演员 :) 所以暂列两条,算是抛砖引玉。 1. 不能太轻易就交出(会显得太假) 2. 必须装出一副很不情愿、很无奈的神情   如果你演技不好,又不想被“胁迫”,咋办捏?还有一个绝招,就是前面博文介绍过的“KeyFiles 认证”。   这个绝招可以让世界上所有的酷刑逼供失效。但是有两个前提——

1. 你必须使用【随机生成】的 KeyFiles,并且用这些 KeyFiles 做加密盘的认证因素(如何随机生成 KeyFiles,俺之前介绍过

2. 你在被胁迫之前,必须【彻底销毁】 KeyFiles(包括 KeyFiles 的备份)   因为随机生成的 KeyFiles,其内容连你自己也不知道。一旦彻底销毁,连你自己都无法打开加密盘。酷刑逼供自然也就失效啦。

  后续更新

  本文发出后又过了6年(2019),俺专门写了一篇很详细的博文(如下)

如何用“磁盘加密”对抗警方的【取证软件】和【刑讯逼供】,兼谈数据删除技巧

回到本系列目录

俺博客上,和本文相关的帖子(需翻墙)

TrueCrypt——文件加密的法宝
扫盲 VeraCrypt——跨平台的 TrueCrypt 替代品
如何用“磁盘加密”对抗警方的【取证软件】和【刑讯逼供】,兼谈数据删除技巧
文件加密的扫盲介绍
扫盲文件完整性校验——关于散列值和数字签名