这是信息系统安全实验系列的第八篇~
1. 实验目的
(1)掌握eCryptfs的执行过程和设计原理;
(2)学会安装eCryptfs,掌握使用eCryptfs加密文件系统。
2. 实验环境
安装Ubuntu14.04的虚拟机,eCryptfs等软件。
3. 背景知识
eCryptfs简介
eCryptfs 是在 Linux 内核 2.6.19 版本中引入的一个功能强大的企业级加密文件系统,堆叠在其它文件系统之上(如 Ext2, Ext3, ReiserFS, JFS 等),为应用程序提供透明、动态、高效和安全的加密功能。
本质上,eCryptfs插在 VFS(虚拟文件系统层)和 下层物理文件系统之间,充当一个“过滤器”的角色。用户应用程序对加密文件的写请求,经系统调用层到达 VFS 层,VFS 转给 eCryptfs 文件系统组件处理,处理完毕后,再转给下层物理文件系统;读请求(包括打开文件)流程则相反。
eCryptfs使用了两种方法来加密单个文件:
(1)eCryptfs 先使用一种对称密钥加密算法来加密文件的内容,密钥 FEK(File Encryption Key)随机产生。
(2)显然 FEK 不能以明文的形式存放,因此 eCryptfs 使用用户提供的口令(Passphrase)、公开密钥算法(如 RSA 算法)或 TPM(Trusted Platform Module)的公钥来加密保护刚才提及的 FEK。如果使用用户口令,则口令先被散列函数处理,然后再使用一种对称密钥算法加密 FEK。口令/公钥称为 FEFEK(File Encryption Key Encryption Key),加密后的 FEK 则称为 EFEK(Encrypted File Encryption Key)。由于允许多个授权用户访问同一个加密文件,因此 EFEK 可能有多份。
这种综合的方式既保证了加密解密文件数据的速度,又极大地提高了安全性。虽然文件名没有数据那么重要,但是入侵者可以通过文件名获得有用的信息或者确定攻击目标,因此,最新版的 eCryptfs 支持文件名的加密。
4. 实验过程记录
(1)eCryptfs进行读/写操作时的工作流程
① 读操作
若执行读操作的文件的路径经过了加密挂载点,则需要对文件进行解密。
首先,读头部信息,即数据块的第一页。从头部信息中解析出加密算法、标志、密钥信息等等。其中最关键的是要把加密的文件加密密钥(EFEK)解密为文件加密密钥(FEK)。为此,查看密钥环上是否有需要的认证令牌,如果有,则用认证令牌FEKEK对EFEK进行解密得到FEK;如果没有,则需要用户提供解密口令,利用该口令算出(撒盐+多次MD5运算)文件加密密钥的加密密钥(FEKEK,也称为认证令牌),将得到的FEKEK与头部信息中的FEKEK标识符进行比对,比对正确则用FEKEK对EFEK进行解密,得到FEK。
其次,解密文件。用FEK对文件数据块进行解密。
② 写操作
若执行写操作的文件的路径经过了加密挂载点,则需要对文件进行加密。
首先,加密数据块。系统生成一串随机数作为文件加密密钥(FEK),再把文件数据划分成数据块(页),用FEK对这些数据块加密。
其次,添加头部信