第五章:文件系统加密 101

FreeBSD运行加密磁盘上的数据。本章讨论所有磁盘加密方法的共同元素。

你需要磁盘加密吗?

磁盘加密会增加风险,可能导致数据丢失,并可能无法防御试图解决的问题。

聪明的攻击者不需要解密硬盘,而是等用户解密数据时从用户那里获取数据。

磁盘加密也是造成大量数据丢失的原因。简单的系统管理错误可能会破坏整个文件系统和数据,或者造成无法访问。

过海关时加密的磁盘可能遇到意外阻拦。

对于大多数人来说。磁盘加密提供的保护超过了风险。

但磁盘加密可以提供强大的学习体验。

FreeBSD磁盘加密方法

FreeBSD只要使用两种方法加密磁盘:GBDE和GELI。

GBDE(GEOM-Based Disk Encryption)基于GEOM,专为保护用户与隐藏数据同样重要的情况而设计。

它的密钥包括用户提供的密码和存储再磁盘上的密钥。如果任一密钥不可用,系统将无法解锁文件系统。GBDE会提示用户丢失了哪个密钥。

GELI比GBDE更灵活,功能更多,但它不会提示丢失了哪个密钥。

GELI允许加密根分区。

FreeBSD的加密文件系统不需要加密整个磁盘分区。

文件系统位于GEOM之上,GEOM可以是磁盘分区,也可以是文件备份的内存设备。

共同元素

所有磁盘加密方法都有一些共同点。

FreeBSD的所有加密文件系统都需要加载内核模块。

密码健全性

FreeBSD的文件系统加密代码并没有受到广泛的公众审查——相对于OpenPGP之类的公共加密算法。

这两种磁盘加密系统都可能存在密码缺陷,允许未经授权的用户破解密码。修复这些缺陷可能需要从备份中恢复数据(也就是说任何加密算法的升级,都可能会丢失被加密的数据)。

加密(encryption)性能

加密和解密数据都需要处理时间和内存。加密文件系统总是比未加密的文件系统要慢。

提高性能的最佳方法是只加密必须加密的内容。

加密(cryptographic)密钥

这两种磁盘加密方法都使用加密密钥来加密和解密文件系统。虽然使用的密钥类型不同,但每种密钥背后的原理都是相同的。

密钥是一块数据,用于将文件系统转换为加密状态或从加密状态转换。

密钥应该是非常随机的,由软件而不是人类生成。

此密钥可能位于文件中,如GELI,也可能存储在特殊块中,如GBDE。

大多数加密密钥要么是人类无法读取的二进制数据,要么是像在SSH和SSL密钥中看到的乱码文本。

如果丢失或销毁了加密文件系统的密钥,则无法再解密该文件系统。

一种常见的选择是将密钥保存在可移动驱动器上,例如U盘。可移动驱动器充当安全令牌。

建议不要把密钥保留在硬盘上。

对私钥进行备份,如果密钥存储在U盘上,应确保有第二个U盘做备。并定期测试这些备份。不要将备份保存到加密驱动器上。

不要重复使用加密密钥。每个加密的驱动器、分区或文件系统都应该有它自己的密钥。

切勿在不同机器之间共享加密密钥。

密码短语(Passphrases)

密码短语类似于密码,但更长。

一个正确的密码短语包括空格、单词、特殊字符、数字以及可以键入的任何其他内容。密码短语形成第二个加密密钥。

密码短语应该有几个单词长,便于记忆,别人不易猜到。包括特殊字符,来自专门的非计算词汇表的特殊单词,避免使用流行文化或个人流行语。

从技术上讲,密码短语可以是一个单词,但单字密码容易被破解。

随机化加密设备

创建文件系统只涉及超级块,这些超级块记录了索引节点所属的位置。这只是磁盘上块的一小部分。

加密设备上的文件系统以相同的方式工作。

若要强行解密硬盘,第一项工作是识别哪些块包含加密数据。

FreeBSD有一个随机设备/dev/random,使用dd命令向分区中注入一层欺骗性随机性。

以下示例对分区/dev/da0p1进行随机化:

以上实例指定了块大小为1m(bs=1m),但没有给出计数(count),所以dd会一直运行到分区结束。

覆盖磁盘所需的时间与磁盘速度成正比。用随机性填充这个1TB的分区大约需要8小时。

如果在创建加密设备之前忘记随机化分区,则始终可以在创建文件系统之前随机化加密设备。创建文件系统之后,添加这种随机性需要备份数据、应用随机化并恢复数据(大约就是重建?)。

在创建文件系统之前,应先对加密设备进行随机化。

文件系统和加密设备

GEOM允许以任何方式堆叠磁盘设备和文件系统。对于加密磁盘,最好在磁盘分区上放置一层加密,然后在加密层上放置一个文件系统。

保护与访问

加密磁盘仅保护冷磁盘或离线数据。必须将加密数据联机才能使用。如果对主目录(home directory)进行加密,则必须在登录过程中对其进行解密。

解密密钥的线索可能仍然存在于RAM中。DMA或FireWire等硬件接口可以直接访问内存。入侵者可以利用USB线路和某些设备搜索系统的“空闲”内存,有可能会找到密钥。

不使用时,应将机器冷关机,而不是休眠。休眠会将内存写入磁盘,并且不能保证会从内存中清除所有密码的痕迹。