信息系统安全实验(八):使用eCryptfs加密文件系统

时间:2024-05-20 15:53:48

这是信息系统安全实验系列的第八篇~

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对这些数据块加密。

       其次,添加头部信息。把文件大小、eCryptfs标记、标志、RFC2440Tag3和Tag11包存为一页,添加到数据块的头部。其中Tag3和Tag11分别是**信息及其标识信息,包括加密的文件加***(EFEK)、加密算法等等。加密的文件加***(EFEK)的生成过程如下:用户提供的口令在撒盐后经过多次MD5运算形成文件加***的加***(FEKEK,也称为认证令牌),把FEKEK挂在**环上。密码运算API用FEKEK对FEK进行加密,形成加密的文件加***(EFEK)。

       最后,存储加密后的文件。

(2)eCryptfs支持哪些加密方式?每种加密方式的加密块大小及使用**长度是多少?

       eCryptfs支持如下的加密方式:

                                                                    表1(eCryptfs支持的加密方式)

加密方式

加密块大小

最小**长度

最大**长度

aes

16

16

32

blowfish

8

16

56

des3_ede

8

24

24

twofish

16

16

32

cast6

16

16

32

cast5

8

5

16

(3)eCryptfs功能验证

①    安装eCryptfs

       使用apt-get命令即可安装,如下图所示:

信息系统安全实验(八):使用eCryptfs加密文件系统

                                                        图1(安装eCryptfs)

②    查看eCryptfs使用命令

       使用man命令即可查看,如下图所示:

信息系统安全实验(八):使用eCryptfs加密文件系统

                                               图2(查看eCryptfs使用命令)

③    创建目录

       在主文件夹下新建两个文件夹 realdir、mounteddir,使用 realdir作为文件真实目录,用 mounteddir作为挂载目录,如下图所示:

信息系统安全实验(八):使用eCryptfs加密文件系统

          图3-1(输入命令创建目录)

信息系统安全实验(八):使用eCryptfs加密文件系统

                                                       图3-2(查看创建的目录)

④    挂载

       输入mount命令,在passphrase后输入密码123456;在select cipher后按回车,默认为[aes]加密方式;在select key bytes后按回车,默认加密位数为16位;在enable plaintext passthrough(y/n)后输入n,以确保不会误将秘密写入未经加密文件;在enable filename encryption (y/n)后输入n,在没有解密的情况下也可以列出文件夹内部的文件名。如下图所示:

信息系统安全实验(八):使用eCryptfs加密文件系统

                                                  图4(选择挂载选项)

       出现输入有误的警告后,在Would you like to proceed with the mount (yes/no)后输入yes,完成加密;在Would you like to append sig [799d2f922c0f1f26] to [/root/.ecryptfs/sig-cache.txt] in order to avoid this warning in the future (yes/no)后输入yes,把密码标识保存到/root/.ecryptfs/sig-cache.txt中。如下图所示:

信息系统安全实验(八):使用eCryptfs加密文件系统

                                                      图5(完成挂载)

       挂载完毕后,使用mount命令检查挂载是否成功,如下图所示:

信息系统安全实验(八):使用eCryptfs加密文件系统

                                                           图6(挂载成功)

       由上图可知,挂载成功。

⑤    测试一

       在mounteddir目录中,创建文件file1,随意输入内容。如下图所示:

信息系统安全实验(八):使用eCryptfs加密文件系统

                                                         图7(文件file1内容)

       使用cat realdir/file1查看文件,结果如下图所示:

信息系统安全实验(八):使用eCryptfs加密文件系统

                                             图8(通过realdir查看文件)

       使用cat mounteddir/file1查看文件,结果如下图所示:

信息系统安全实验(八):使用eCryptfs加密文件系统

              图9(通过mounteddir查看文件)

       由图8和图9可以发现,通过realdir查看文件将不会被解密,所以得到乱码;通过mounteddir查看文件将被解密,得到原内容

 

       【分析】因为之前realdir和mounteddir之间的挂载关系,所以通过mounteddir执行写操作时,会把文件加密后存储;通过mounteddir执行读操作时,会把文件解密后再显示在屏幕上;通过realdir执行读操作时,不会解密文件,所以会把加密后的文件显示在屏幕上,即显示为乱码。

⑥    测试二

       在realdir目录中,创建文件file2,随意输入内容。如下图所示:

信息系统安全实验(八):使用eCryptfs加密文件系统

                                                           图10(文件file2内容)

       使用cat realdir/file2查看文件,结果如下图所示:

信息系统安全实验(八):使用eCryptfs加密文件系统

            图11(通过realdir查看文件)

       使用cat mounteddir/file2查看文件,结果如下图所示:

信息系统安全实验(八):使用eCryptfs加密文件系统

            图12(通过mounteddir查看文件)

       由图11和图12可以发现,通过realdir查看文件将被解密,得到原内容;通过mounteddir查看文件将出现输出错误

 

       【分析】通过realdir执行写操作时,并不会加密文件,所以存储在realdir目录下的file2是以明文存储的,通过realdir执行读操作时,会把file2的内容显示出来。但通过mounteddir执行读操作时,会对文件进行解密,但因为之前并没有加密的过程,所以文件的头部信息是缺失的,使得解密失败,从而出现输出错误。

⑦    取消挂载

       输入umount命令取消挂载,如下图所示:

信息系统安全实验(八):使用eCryptfs加密文件系统

                                    图13(取消挂载)

       使用mount命令查看挂载是否取消成功,如下图所示:

信息系统安全实验(八):使用eCryptfs加密文件系统

                                                  图14(查看挂载是否取消成功)

       由上图与图6对比可知,取消挂载成功。

 

*参考资料

https://linux.cn/article-4470-1.html

https://blog.****.net/github_34308866/article/details/51564823

http://www.docin.com/p-1728120876.html