接着前一篇《关于加密算法和加密盘的类型》的话题,今天说说 TrueCrypt 的两种认证方式:老式的”口令认证”和新式的”KeyFiles 认证”。

★如何用好密码认证

  用过电脑的同学,肯定对密码(口令)的使用非常熟悉了。所以俺就不用再解释基本概念了,只是重点聊一下密码认证的潜在风险和防范措施。

◇对于加密盘,弱密码的危害更大

  关于”弱密码的危害”,想必很多同学都听说过。但是有个细节,可能很多人没有意识到。那就是:弱密码对磁盘加密的危害更加明显
  咱们拿”操作系统口令”和”加密盘口令”进行对比。
  如果某个操作系统做过安全加固,通常会在系统中设置”无效登录的上限”。只要攻击者尝试的无效口令超过这个上限,该用户就会被锁定。但是对于磁盘加密工具而言,无法像操作系统那样,限制无效口令的次数。因为针对加密盘的暴力破解,前提通常是:攻击者已经拿到存储介质(比如 硬盘、U盘、等)。在这种情况下,攻击者可以使用自己的工具进行密码尝试(不会有次数限制)。
  所以,你的加密盘一旦用了弱口令,就很容易遭到暴力破解。

◇攻击者如何暴力破解密码

  针对加密盘的暴力破解有很多种,本小节所说的是针对”用户密码”的暴力破解。

  对于短密码
  假如你的加密盘仅仅使用口令认证,而且你的口令比较短(比如说小于6个字符)。那么攻击者只要尝试所有的6字符组合,就必然可以试出你的口令。顺便说一下,很多网友用的口令只有小写字母和数字,那么6字符的口令,只有(26+10)的6次方。这个数并不算大,可以被穷举。

  对于特定形式的密码
  所谓的”特定形式密码”,比较典型的例子就是日期(尤其是生日)。这是很多菜鸟常用的坏习惯。
  很多不懂技术的同学会有一个错觉:误以为用日期做口令,好像长度还比较长(如:2000-01-01 有10个字符),似乎很保险。
  其实捏,用日期做口令是很危险的。因为常用的日期,大部分都分布在最近100年的范围内,也就是说,可能性小于 365*100;即使对每一个日期考虑不同的写法格式(比如 yyyymmdd、yyyy-mm-dd、mm/dd/yyyy、等等)顶多再乘以20倍,连一百万都不到。对于暴力穷举,这属于小儿科。

◇如何构造强密码

  要构造一个又好记又复杂的密码,简直称得上是一门艺术。这里面涉及很多技巧,并不是每个人都懂这些技巧。
  关于这方面的技巧,俺在2010年专门写过一篇《如何防止黑客入侵[3]:如何构造安全的口令/密码》。那篇旧文写得比较详细。你只要掌握其中的2到3种技巧,就可以构造出比较复杂又比较好记的密码。所以本文就不再啰嗦了,以免把篇幅拉得太长。

★KeyFiles 认证的优点

  说完密码认证,再来说说 KeyFiles 认证。相对于”口令认证”,这种方式比较新颖,俺多费点口水介绍。

◇大大降低暴力破解的风险

  前面提到:使用密码的认证方式,如果密码太简单或太短,就是容易遭暴力破解。而 KeyFiles 认证就避免了这个风险。

◇好记

  对于密码认证,为了对抗暴力破解,需要把密码设置得很复杂又很长。但是万一哪天你自己忘了,那就歇菜啦。
而使用 KeyFiles 进行认证,你只需要记住某个或某几个文件。相对而言,记忆的难度小多了。

◇可以同时设置多个

  针对同一个加密盘,只能设置一个密码,但是可以指定多个 KeyFile 文件。

  因为上述这些优点,俺强烈建议:能用 KeyFile 的场合,尽量用 KeyFiles。如果同时用 KeyFiles 和密码,当然更好。

★KeyFiles 认证的缺点

  凡事都有两面性。说完 KeyFiles 的优点,再来说说缺点。

◇有些场合没法用 KeyFiles

  (在前一篇博文俺有提到)当你用 TrueCrypt 加密系统分区的时候,只能用口令,没法用 KeyFile

◇偷窥的风险

  对于传统的密码方式,当你输入密码的时候,屏幕上显示的是星号(或圆点)。这种情况下,即使有人偷看你的屏幕,也只能知道密码的长度,而无法知道密码的内容。但如果使用 KeyFiles 方式,在打开加密盘的时候就需要指定某些 KeyFiles,万一有人偷看你的屏幕,就糟糕啦。
  (后面会介绍,如何降低偷窥的风险)

★关于 KeyFiles 的生成

  关于 KeyFiles 的使用,可以有两种方式:
1. 选择已有的文件作为 KeyFiles
2. 让 TrueCrypt 帮你生成 KeyFiles

  下面分别说说这两种搞法。

◇选择已有的文件当 KeyFiles

  理论上,任何一个文件都可以拿来当 KeyFile。但是从密码学角度而言,有的文件适合拿来做 KeyFile,有的不合适。
  要达到好的加密效果,KeyFile 至少满足如下特征:
1. 文件内容最好是杂乱无规律(套用信息学的术语,”熵”要尽量大)
2. 最好是二进制文件(一般来说,”二进制”格式的杂乱度比较大)
3. 文件至少超过 1KB(TrueCrypt 的用户手册要求至少 30 字节。但是考虑到你挑选的文件,”熵”未必足够大。所以俺个人建议至少 1KB 比较保险)

  虽然俺建议 KeyFile 至少超过 1KB,但并不是越大越好。因为 TrueCrypt 最多只提取 KeyFile 开头一兆字节(1MB)的内容进行处理。所以用太大的文件没意义(文件尺寸在几兆以内足矣)。
  综合考虑这几个因素,日常碰到的文件中,可以考虑用来做 KeyFile 的主要有:某些图片文件(比如 JPG、PNG、GIF、但不要用 BMP)、某些音乐文件(比如 MP3、WMA、但不要用 WAV)、各种压缩包(ZIP、7Z、RAR、TGZ、BZ2、等等)。
  上述这几类文件格式,其内容都是基于压缩的,所以”熵值”足够大,适合用于作 KeyFiles;俺特别注明 BMP 和 WAV 不适合作 KeyFile,因为这两种格式通常是不压缩滴。

◇让 TrueCrypt 生成 KeyFiles

  让 TrueCrypt 生成 KeyFiles,操作其实很简单——在 TrueCrypt 主菜单点 “Tools” 然后再点 “KeyFile Generator” 菜单项。下面是这种方法的优缺点分析。

  优点
  它生成的 KeyFiles 必定符合刚才所说的——具备足够好的加密效果。

  缺点1
  为了让”熵值”足够大,TrueCrypt 采用某种随机算法来生成 KeyFiles(对密码学感兴趣的同学可以参见 TrueCrypt 手册的”Random Number Generator”章节)。因为是随机生成的,所以这个 KeyFiles 几乎一定是全新的。
  这里的缺点在于,如果随机生成的 KeyFile 没做备份而且搞丢了,你就惨啦。口令忘了还可以使劲回忆,KeyFile 搞丢了基本上就没辙啦——加密盘就废了,再也打不开。

  缺点2
  TrueCrypt 生成的 KeyFile 都有个特点,文件大小固定是64字节。这就不利于隐蔽(关于 KeyFiles 的隐蔽性,下面会聊到)。

◇哪种方式比较好?

  对于普通的网友,使用方案1(现有文件作 KeyFiles)是比较合适滴。再次啰嗦一下,如果你使用现有文件,一定要按照前面说的经验,以确保你选择的 KeyFiles,其内容的”紊乱度”(熵值)足够大
  对于安全性有特殊需求的同学,可以考虑使用方案2(让 TrueCrypt 生成 KeyFiles)。这种方式有一些特殊的用处。比如在本文末尾有提到,还可以用来对付酷刑逼供哦。

★关于 KeyFiles 的存放

◇本机存储 VS 外部存储

  总的来说有两种方式存放 KeyFiles:
1. KeyFiles 跟加密盘在同一个电脑中
2. KeyFiles 跟加密盘不在同一个电脑中(比如放在外置的U盘)

  一般来说,第二种方式虽然稍微麻烦,但安全性更好——即使攻击者偷走你的电脑也拿不到 KeyFiles。
  如果你考虑用外置存储的方式放置 KeyFiles,手机是一个不错的选择。用手机存放 KeyFiles 有如下优点:
1. 手机总是随身携带
2. 如今大部分手机都支持 U盘模式

◇KeyFiles 的伪装和隐蔽

  前面说了,使用现有的文件当 KeyFiles,隐蔽性比较好。而且也说了,使用手机做外部存储比较好。
  下面就来说说,这种情况下,如何增加隐蔽性。

  以音乐文件为例
  很多人的手机上都会存放一些歌曲(比如MP3)。如果是智能手机,存储空间动不动就是几个 GB,可以轻松存放上千首(甚至上万首)歌曲。那么你可以从这些歌曲中挑选某几首,来作为你的 KeyFiles。挑选的歌曲最好是让你印象深刻的(可以是特别喜欢的,也可以是特别讨厌的)。这么干有如下几个优点:
1. 隐蔽性足够好(手机上存储音乐文件是很普通的,即使你被六扇门逮捕,朝廷走狗检查你的手机,也不会起疑心)
2. 印象深刻的歌曲,不容易记错。
3. 在成百上千首歌曲中挑选某几首歌曲做 KeyFiles,穷举的难度非常大(下面会提到)。

  虽然俺举的是音乐文件的例子,但在实际操作过程中,你可以自己变通一下——比如把音乐文件换成图片文件,效果也差不多。

◇KeyFiles 的个数

  前面说了,TrueCrypt 支持同一个加密盘用多个 KeyFiles。那么,KeyFiles 的个数设定为几个比较好捏?俺个人建议,设定为 5至10 个。
  增加 KeyFile 的个数,在某种情况下会加大攻击者的难度。还拿刚才那个例子来说事儿:
  假设你的手机上有一个音乐目录,里面有300首歌曲(这不算多),然后你任意挑选其中6个做加密盘的 KeyFiles。再假设攻击者(通过某种方式)知道你用这个目录里的音乐文件作 KeyFiles。那么攻击者就企图用穷举方式,尝遍该目录下所有文件的组合。那么他/她需要尝试多少次捏?
  因为攻击者并不知道你选择了几个文件,所以要先穷举1个文件的组合、然后是2个文件的组合、3个文件的组合……(直到穷举成功或放弃)
  如果俺没记错的话,计算排列组合总数,算式大概如下
300挑1的组合——这个不用算,就是300种
300挑2的组合——(300*299)/(2*1)
300挑3的组合——(300*299*298)/(3*2*1)
300挑4的组合——(300*299*298*297)/(4*3*2*1)
……
  从上面这个例子可以看出:当 KeyFiles 的数目略微增加,排列组合的总数会猛增到天文数字。但 KeyFiles 也不是越多越好——因为还要考虑自己遗忘或记错的风险。所以俺觉得,”5至10个”是一个平衡点。

★KeyFiles 的其它注意事项

◇要确保 KeyFile 的文件内容不变

  因为 TrueCrypt 是根据 KeyFile 的内容来生成认证信息。所以你一定要确保每一个 KeyFile 的文件内容不被修改。如果某个 KeyFile (开头1MB)的内容被改动过,下次你用这个文件登录,就会失败。
  (至于 KeyFile 的文件名和存放位置,可以随便改,没关系)

◇关于”默认KeyFiles”

  TrueCrypt 有一个功能叫”Default KeyFiles”。使用这个功能,你可以指定某些文件作为默认的 KeyFiles。指定了之后,你每次打开某个加密盘,都会自动使用这些 KeyFiles 啦。

  优点
1. 提供了便捷性(不用每次打开加密盘都选择 KeyFiles)
2. 防止偷窥

  缺点及解决方法
1. 灵活性不够(所有的加密盘都会依赖于默认的 KeyFiles)
2. 如果攻击者通过某种方式拿到你的 TrueCrypt 配置文件(位于 %APPDATA%TrueCrypt 目录下的 Configuration.xml),就会知道你的默认 KeyFiles 放在哪个目录

  要防止缺点1
  TrueCrypt 的配置文件是基于当前的操作系统用户。可以通过创建多个操作系统用户,来增加灵活性。

  要防止缺点2
  你可以在”默认KeyFiles”的基础上,再为某个加密盘额外指定额外的 KeyFiles。这样一来,即使攻击者知道你的默认 KeyFiles,也无法知道额外的 KeyFiles

★关于 KeyFiles 的高级用法

◇如何用 KeyFiles 应对酷刑逼供?

  本来这篇博文已经写完了。但是看到某读者在前一篇博文的留言,提到说:不管 TrueCrypt 的技术有多好,都无法对付酷刑逼供。所以俺再额外补充一个小节,说说”如何用 KeyFiles 应对酷刑逼供”。

  不管哪种酷刑逼供,要想得手都有一个前提条件——受刑的人确实知道某些信息。
  如果你的加密盘使用 KeyFiles 认证,并且这个 KeyFiles 是由 TrueCrypt 随机生成的。那么,只要你在被捕之前,能够来得及销毁 KeyFiles(包括备份),之后的酷刑逼供对你就没有用了。因为 TrueCrypt 随机生成的 KeyFiles,连你本人也不知道文件内容。这种情况下,酷刑逼供是没有用滴。
  这个招数的难点在于:如何能够及时销毁 KeyFiles?关于这方面的讨论,属于”社会工程学”领域,已经超出了本文范围。所以俺就不展开了。

回到本系列目录

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

本文由自动聚合程序取自网络,内容和观点不代表数字时代立场

墙外新闻实时更新 欢迎订阅数字时代