TrueCrypt 使用经验[3]:关于加密盘的破解和防范措施

文章目录

★各种暴力破解(穷举)
★针对加密算法的攻击
★盗取内存中的密钥
★盗取密码和 KeyFiles
★总结

本来第三篇想写隐藏卷相关的经验。但是看到好几个读者在留言中提及加密盘的破解,所以俺先来说说和破解有关的话题以及防范措施。

★各种暴力破解(穷举)

◇针对密码/口令的穷举破解

关于这个话题,在前一篇博文已经介绍了穷举的原理和防范的措施。所以,今天就不再啰嗦了。

◇针对 KeyFiles 的穷举破解

这分两种情况:已知 KeyFiles 的范围、未知 KeyFiles 范围。

已知 KeyFiles 的范围
啥是“已知 KeyFiles 的范围”,举个例子:假设你把 KeyFiles 存储到 U盘。然后攻击者通过某种方式知道你的 KeyFiles 都在 U盘上,并且攻击者拿到了你的 U盘。这就属于“已知 KeyFiles 范围”的穷举破解。这种情况下,攻击者可以把 U盘 上的所有文件进行各种组合,对每一种组合进行尝试。
那么,这种场景下的攻击,是否能得手捏?取决于如下三点:
1. 你是单独使用 KeyFiles 认证,抑或是组合 KeyFiles 和密码的双因素认证
2. 该范围内的文件数有多少
3. 加密者选了多少个文件作为 KeyFiles

对第一点,如果你用了双重认证,光穷举 KeyFiles 是没用滴;至于后两点,是共同起作用滴。就拿刚才 U盘 的例子。如果 U盘 内的文件数很多并且加密者同时选择了好几个文件做 KeyFiles,那么暴力穷举的次数会成为天文数字。前一篇博文给出了具体的计算公式和例子,这里就不再浪费口水啦。
由此可见,“已知 KeyFiles 范围”的穷举破解,应用场合和有限,不会构成太大威胁。

未知 KeyFiles 的范围
这种情况下,暴力穷举 KeyFiles 是不可能滴。因为任何一个文件都可以拿来当 KeyFiles,世上有那么多文件,怎么可能穷举得完?
有些天真的同学会说,TrueCrypt 仅仅使用 KeyFiles 开头 1MB 的内容参与加密,那么,有没有可能穷举大小在一兆以内的所有文件捏?俺可以大致帮你算一下,大小在一兆以内的所有文件,总共有多少种可能(不喜欢数学的同学,请略过计算内容,直接看下一章节)。

大小是 1字节 的文件,所有的可能性是 2 的 8 次方(记作 2⁸,下同)。为啥是 2⁸ 捏?因为一个字节有 8 个比特,每个比特可以有 0 或1 两种可能。
以此类推,
大小是 2字节 的文件,所有的可能性是 2¹⁶ = 65536
大小是 3字节 的文件,所有的可能性是 2²⁴ = 16777216
大小是 4字节 的文件,所有的可能性是 2³² = 4294967296(约43亿)
大小是 5字节 的文件,所有的可能性是 2⁴⁰ = 1099511627776(约1万1千亿)
大小是 6字节 的文件,所有的可能性是 2⁴⁸ = 281474976710656(约281万亿)
……
上述计算可以看出,每增加一个字节,可能性的总数就增加256倍。仅仅才到 6字节,可能性就已经超过两百万亿。大小是 1MB 的文件,会有大约100万字节,你自己盘算一下吧,会有多少种可能性。
而且上述的计算,仅仅是针对单个 KeyFiles 的情况。如果用户同时使用多个 KeyFiles,嘿嘿……
所以捏,在未知范围的情况下穷举 KeyFiles,还不如直接去穷举密钥(下面就来介绍密钥的穷举)。

◇针对密钥的穷举破解

什么是密钥
密钥说白了就是一段数据,可以用来加密或者解密。TrueCrypt 使用的加密算法都是“对称加密算法”。这种算法的特点是:加密密钥和解密密钥是同一个。假设你用密钥 K 把一段明文 P 变成密文 C,那么你同样可以用 K 把 C 变为 P。
除了对称加密,还有一类加密叫做“非对称加密” — — 加密密钥和解密密钥是不同滴。因为跟本文无关,就不展开介绍了。

很多不懂技术的网友经常混淆密钥和密码,其实这两者是完全不同滴:
1. 密钥是直接参与加密运算的,而密码不是。
2. 密码的作用是保护密钥(下面会提到)

加密盘的密钥是怎么来滴?
简单地说,加密盘的密钥是根据你输入的口令和 KeyFiles,通过某种复杂的数学运算得到的(密码学术语叫“密钥生成函数”)。在密钥生成函数中,会用到哈希运算(这篇博文有 Hash 的扫盲)和多次迭代。其效果就是:只要你输入的口令或者 KeyFiles 有一丁点的差异(例如一个比特的差异),产生的密钥也完全不同。
顺便说一下,当你创建加密盘的时候,TrueCrypt 除了让你选择加密算法,还让你选择哈希算法。为啥要选哈希算法捏?其中一个用途就是参与“密钥生成函数”的运算。
刚才只是简单地说,如果要细说的话,TrueCrypt 的加密和解密过程还涉及头部密钥(Header Key)和主密钥(Master Key)。由于 TrueCrypt 采用的是 XTS 操作模式,所以头部密钥有一对,主密钥也有一对。如果选的是多重加密算法,主密钥就会有N对。这些都属于技术细节,普通网友不需要知道太多,俺就不深入聊了

穷举密钥的难度
虽说穷举密钥的难度比穷举 KeyFiles 的难度要小很多。但穷举密钥的可能性,依然是天文数字。
目前 TrueCrypt 内置的三种加密算法,都使用 256 比特的密钥(256 比特 = 32字节)。对于 256 比特的密钥,其所有的可能性是2的256次方。这是一个天文数字,要进行这么多次的穷举(每一次穷举都有一定的运算量),就算拿未来10年发明的超级计算机来运算,估计也没戏。

补充说明:别混淆不同加密类型的密钥长度
前2个月有个新闻,说 Google 开始把 HTTPS 证书的密钥升级到 2048位,因为 Google 担心 1024位的密钥不够安全。
估计某些不太懂的读者也看到了这个新闻,然后就会来质疑俺:256比特的密钥到底是否可靠?
请注意,当谈论 HTTPS 证书的密钥长度,指的是“非对称加密算法”(通常指 RSA 算法)的密钥长度。而 TrueCrypt 使用的是“对称加密算法”。“对称加密”和“非对称加密”是完全不同的两种东西,两者的密钥长度没有可比性。(这就如同“铅球的世界纪录”跟“标枪的世界纪录”没有可比性)

◇小结

前面说的这几种穷举破解,只有一种是可行的,那就是基于密码/口令的穷举。所以俺再啰嗦两句:
1. 加密盘的密码/口令一定要足够复杂(具体方法请看前一篇博文
2. 能用 KeyFiles 的地方,尽量用 KeyFiles 组合密码,构造双重认证

★针对加密算法的攻击

所谓“针对加密算法的攻击”,就是利用算法本身的漏洞。从而找到某种快速解密的方法。目前 TrueCrypt 使用的加密算法分别是:AES、Twofish、Serpent。它们会不会有漏洞捏?
本系列第一篇,俺特地花不少口水来介绍这三种加密算法。十多年前,美国国家标准局(NIST)公开招标21世纪的新一代加密算法标准(也就是 AES),这三个算法都是最后一批候选者,其中之一的 Rijndael 更是有幸成为 AES。
从那之后,世界上有非常多的密码专家对这些候选者(尤其是 Rijndael )进行了深入的研究。到目前为止,并没有发现明显的漏洞可以被利用。
退一百步讲,即使某个算法将来被发现有漏洞,只要你创建加密盘的时候,使用的是多重加密,问题就不大了。
目前 TrueCrypt 支持的多重加密有如下几种:
AES-Twofish
Serpent-AES
Twofish-Serpent
AES-Twofish-Serpent
Serpent-Twofish-AES

某些爱抬杠的读者会问,如果三个算法都被发现漏洞,咋办?俺觉得吧,这种概率非常非常非常小,完全不必为这种小概率的事情浪费心情。

★盗取内存中的密钥

(虽然前面说过了,俺还是要再啰嗦一句:密钥和密码是两回事
从严格意义上讲,这种方式属于“盗取”,而不是“破解”。之前好几个读者在留言中提到 TrueCrypt 的取证工具,号称能破解 TrueCrypt 加密盘。其实这些所谓的【破解】,都仅仅是【盗取】。而且捏,要想成功盗取密钥,需要好几个前提条件。

◇概述

TrueCrypt 为了确保安全性,是不会把加密盘的密钥存储到硬盘上的。但是为了进行实时的加密解密,密钥必然会放在内存中。所以,攻击者如果能拿到整个操作系统的内存,并对内存进行分析,就有可能(不是“一定”)找到密钥。
大伙儿请注意:
通过分析内存拿到密钥,有一个前提:必须是加密盘尚未卸载(umount)。当你把某个加密盘卸载(umount)的时候,TrueCrypt 就会把该加密盘在内存的密钥清空。换句话说,如果你所有的加密盘都已经正常卸载了,内存中就不含有 TrueCrypt 的密钥了。
但是“系统加密分区”是无法卸载的(上面跑着操作系统呢),所以,只要你加密了系统分区,就只能依靠正常关机来防止别人偷窥内存中的密钥。

那么,如何才能拿到操作系统的内存?攻击者可以来软的,也可以来硬的。来软的(软件方式)有3招:虚拟内存文件、休眠文件、内存转储文件;来硬的(硬件方式)有2招:冷启动攻击、DMA攻击。
下面俺逐一介绍这几种破解方式和防范措施。

除了这几种方式,其实也可以利用木马来盗取系统的内存。比如说,你的系统被植入一个很牛B的木马,理论上可以通过木马去 Dump 整个系统的内存。但是捏,既然攻击者已经植入了木马,就没必要去 Dump 内存来分析了 — — 这么干太费劲啦,简直是舍近求远。有了木马,攻击者直接就可以利用木马来偷窥你的密码和 KeyFiles。所以,木马的情况俺放到后面的“★盗取密码和 KeyFiles”章节再来介绍。

◇虚拟内存文件

原理介绍
稍微熟悉 Windows 的同学,都知道 Windows 有一个虚拟内存文件。而且可以通过设置,把这个虚拟内存文件同时放到几个不同的分区上。
假如你存放虚拟内存的那几个分区没有加密,假如攻击者能够拿到你的硬盘,假如攻击者接触到硬盘的时候你的加密盘还没有卸载。当这3个“假如”同时成立,攻击者通过分析虚拟内存文件,有可能(不是“一定”)拿到加密盘的密钥。

防范措施
1. 手动设置虚拟内存文件的存放位置,而不要让操作系统自动管理虚拟内存文件的存储位置。
2. 确保你存放虚拟内存文件的那些分区,都已经被加密了。

◇休眠文件

原理介绍
从 Windows 2000 开始,就提供了休眠功能。当操作系统休眠时,会把整个系统的内存写到系统分区根目录的某个文件。
假如你在打开加密盘的情况下休眠系统,假如你的系统分区没有加密,假如攻击者能够拿到你硬盘上的休眠文件。当这3个“假如”【同时成立】,那么攻击者通过分析休眠文件,有可能(不是“一定”)拿到加密盘的主密钥。

防范措施
防范措施很简单,下面两招二选一:
1. 不要使用休眠功能,每次都正常关机
2. 加密系统分区

◇内存转储文件

原理介绍
在很早以前(大概是 Windows NT 3.1),Windows 系统就提供了内存转储功能。当操作系统崩溃的时候(比如系统蓝屏),内存转储功能会把崩溃这一瞬间的内存转储到硬盘上。当初提供这个功能,主要是为了便于微软的程序员排查系统崩溃的故障(早些年,Windows 蓝屏几乎是家常便饭)。
但是攻击者可以利用 Windows 的这一机制,人为触发一个系统崩溃,然后就可以拿到整个内存的转储文件。
假如你开启了“完全内存转储”,假如在打开加密盘的情况下系统崩溃,假如你的系统分区没有加密,假如攻击者能够拿到你硬盘上的休眠文件。当这4个“假如”同时成立,那么攻击者通过分析转储文件,就能拿到加密盘的主密钥。

防范措施
Windows 的内存转储功能是可以手工禁用的。方法如下:

对于 Vista 之前的版本(Win2000、WinXP、Win2003)
以管理员身份登录到系统,在桌面上“我的电脑”点右键,快捷菜单上选“属性”。会弹出一个属性对话框,选“高级”标签页。下面有一个栏目是“启动和故障恢复”,点“设置”按钮。会弹出第二个对话框,下面有个“写入调试信息”的下拉框。把这个下拉框选择成“不转储”,然后点“确定”。

对于 Vista 之后的版本(Vista、Win7、Win8)
以管理员身份登录到系统,打开资源管理器,在“我的电脑”上点右键,快捷菜单上选“属性”。会弹出一个新窗口。在左侧栏选“高级系统设置”,会弹出一个对话框。后面的操作就跟 WinXP 一样了。

◇冷启动攻击(cold boot attack)

这个攻击手法比较高级,能够实现这种攻击手法的人,需要配有专门的设备。假如俺没记错的话,此招数应该是2005年之后才开始在安全界流传。如果是5年前写此文,可能就不会写这一章节了。因为那时候六扇门的取证部门,很多还没有这个技术实力。但是最近几年,已经开始陆续具备这种技术实力了。
不过捏,也别太担心。如果你只是普通的网民,估计你还享受不到这种级别的攻击 :)

原理介绍
很多人都以为,断电之后,内存中就不会有数据了。其实不然!从断电到内存中的数据完全消失,存在一个数据滞留的时间差。而且这个时间差是依赖于温度的。如果把温度降到一定程度,这个时间差可以超过10分钟(至于多低的温度可以达到多长的时间差,跟具体的内存条规格有关,也跟主板型号有关)。
10分钟的时间差,已经足够让攻击者完成如下一系列动作:
1. 硬关机(拔电源)
2. 插上电源,重新启动
3. 进入 BIOS 设置界面,设为 U盘启动
4. 插入一个专门的 U盘
5. 利用 U盘上特制的软件,把整个内存保存到 U盘上

关于“冷启动攻击”的更多介绍,可以看洋文维基百科(很详细哦),链接在“这里”。

防范措施
(只有对安全性要求很高的同学,才需要考虑“冷启动攻击”)
要防范冷启动攻击,其实也不难。当你要长时间离开自己的电脑时,不要使用“待机”或者“锁定”(当然更不能使用“休眠”),要正常关机。正常关机的时候,TrueCrypt 会正常退出。在 TrueCrypt 正常退出之前,它会先清空储存密钥的内存位置。

补充说明:
正常关机主要是为了清除“系统加密分区”的密钥。
对于非系统加密分区或者逻辑加密盘,只要把某个加密盘卸载(umount),TrueCrypt 就会把该加密盘在内存的密钥清空。但是”系统加密分区”是无法卸载的(上面跑着操作系统呢),所以只能依靠正常关机。

◇DMA攻击(DMA attack)

原理介绍
这种攻击方式比冷启动攻击更新颖,应该是最近2–3年才出现的。
熟悉硬件的同学应该听说过 FireWire 硬件接口(俗称“火线接口”,也叫“IEEE 1394 接口”)。这玩意儿支持 DMA 方式直接操作物理内存。所以攻击者如果能物理接触你的电脑,可以在你的电脑上插入一个 FireWire 接口的设备,然后利用 DMA 的方式直接读取整个系统的内存。这种方式不仅仅是理论上可行,实际上已经有人搞了现成的 DMA 攻击工具 — — Inception
更多相关介绍,可以看洋文维基百科,链接在“这里”。

防范措施
(只有对安全性要求很高的同学,才需要考虑“DMA 攻击”)
前面提到的“冷启动攻击”的防范措施,也可以用来防范 DMA 攻击。另外,可以通过禁用 1394 接口的 DMA 模式防范这种攻击。根据微软官方文档(链接在“这里”),所有版本的 Windows 默认都是禁用 1394 接口的 DMA 模式。所以这种攻击的风险不算太大。

★盗取密码和 KeyFiles

◇通过木马盗取

原理介绍
如果你的系统被攻击者植入了木马,那么攻击者就可以利用木马来偷窥你的口令输入和 KeyFiles 输入。一旦拿到加密盘的口令和 KeyFiles,攻击者就可以轻松打开加密盘。

防范措施
从上面的介绍可以看出:确保本机的安全是至关重要的!
关于如何防范骇客植入木马,又是一个很大的话题 — — 显然不可能在这里细聊。列位看官如果有兴趣,请看本博客的另一个系列《如何防止黑客入侵》。

◇通过替换 Boot Loader 盗取

原理介绍
对于系统盘加密或者全盘加密,TrueCrypt 会在硬盘的引导扇区(或主引导扇区)放一个定制的 Boot Loader。当你的系统启动时,会首先加载 TrueCrypt 的这个 Boot Loader,然后它会提示你输入密码。

如果攻击者可以物理接触到你的电脑,就有可能采用软件方式,用一个伪造的 Boot Loader 替换掉原来正宗的 Boot Loader。然后这个假的 Boot Loader 也会装模作样地提示你输入密码。再把你输入的密码转交给那个真的 Boot Loader,同时把密码保存在某个地方。
这样一来,攻击者就可以利用这个假的 Boot Loader,拿到你的密码。

防范措施1 — — BIOS 硬盘锁
对于笔记本电脑,如果 BIOS 支持的话,建议增加一个硬盘锁的口令。这样一来,即使攻击者拿到你的电脑,取出硬盘,也无法看到里面的内容。

提醒一下
不同品牌的笔记本,硬盘锁的机制是不同的。有的靠谱,有的不靠谱。一般规律是:越有实力的厂商,硬盘锁的安全性也越高。
其次要注意的是:如果你要防的是天朝的六扇门,最好不要用大陆品牌的笔记本。大陆品牌的笔记本,其硬盘锁可能会留有后门给公安和国安使用。

防范措施2 — — 使用 U盘 引导
这个招数比较适合于 Linux 之类的系统。你可以把整个系统安装到一个小小的 U盘上。然后把 U盘带在身边。每次开机就插入该 U盘来启动操作系统。
这种情况下,就不需要使用“加密系统分区”(因为系统分区已经在 U盘上了),自然也就不依赖硬盘的 Boot Loader。

◇其它盗取口令和 KeyFiles 的招数

上述介绍的,都是比较常见的,也比较容易实施的攻击手法。除了这几招之外,还有若干冷门的招数,也可以用来盗取密码或 KeyFiles。比如 基于硬件的“Key Logger”、比如 基于硬件的“边信道攻击”、等等。
这些招数比较罕见,而且需要有专门的硬件设备。如果你只是普通网民,那是没有资格享受到这种级别的攻击滴。通常只有商业间谍、军事间谍、政治间谍才会使用这类手段,用来对付重要人物。
而且考虑到篇幅已经比较长了,俺就不深入介绍这些冷门的手法了。

★总结

在 TrueCrypt 的产品手册中,作者已经明确指出:如果无法确保电脑的物理安全,那即使采用 TrueCrypt 也无法保证数据的保密性。在这种情况下泄密,不能算 TrueCrypt 的责任。
所以,确保物理安全是第一步。

其次,TrueCrypt 的手册还说了,如果你无法确保操作系统安全,那 TrueCrypt 也无法保护你的数据。比如前面提到的:植入木马可以偷窥你的口令。这种情况下是任何软件(包括杀毒软件)都无法彻底防范的。
所以,确保操作系统自身的安全是第二步。

天朝六扇门的人要想解开 TrueCrypt 加密盘,通常也是采用这两条路 — — 要么从物理安全入手,要么从操作系统安全入手。到目前为止,没有任何公开的资料能够给出方法,用来快速突破 TrueCrypt 本身的防线。暴力破解虽然可以突破 TrueCrypt 的防线,但非常非常非常“慢”。
目前那些号称能破解 TrueCrypt 的软件,基本上都是采用内存 Dump 的方式。这种方式的可用性比较差 — — 如果拿不到“系统内存”,这些破解软件完全没辙。
综上所述,只要你根据本系列介绍的经验,对 TrueCrypt 使用得当,TrueCrypt 加密盘的安全性是非常有保障的 — — 至少对普通网民已经是足够了。

回到本系列目录

俺博客上,和本文相关的帖子(需翻墙)
TrueCrypt — — 文件加密的法宝
扫盲 VeraCrypt — — 跨平台的 TrueCrypt 替代品
文件加密的扫盲介绍
扫盲文件完整性校验 — — 关于散列值和数字签名

版权声明
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者编程随想和本文原始地址:
https://program-think.blogspot.com/2013/08/truecrypt-3.html

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store