eCryptfs详解
本章节我们先用简单用例验证eCryptfs加密效果特点,使大家对方案有个整体感性认识,同时也会提供一个C版本用例作参考。其次对测试结果进行初步分析,接着详细分析eCryptfs方案架构原理和核心机制,最后对关键业务流程代码进行简单梳理。
测试环境使用Ubuntu20.04虚拟机,因Ubuntu系统默认打开eCryptfs内核配置(CONFIG_ECRYPT_FS=y),只需apt安装用户态工具ecryptfs-utils即可。
4.1、测试用例
下图是一个脚本基础测试用例。先创建test目录和文件hello,之后使用 mount -t ecryptfs方式对test目录进行加密,为避免命令行交互,将所有加密参数(passwd、cipher、key size等)通过命令行-o传递。加密后在test目录创建新文件hello_encrypted。最后umount取消目录加密。
从第一个测试用例可以观察到的现象/特性有:
1、执行mount,写入hello_encrypted文件内容后可以正确访问,但umount后则为密文。说明eCryptfs作为堆叠加密文件系统,是通过mount/unmount操作来开关使能的。功能打开时,用户读写操作是感知不到数据加解密过程的,即透明加密。
2、hello文件内容在mount前写入,在mount前后都能正确访问(用例只测了读操作,实际写也可以)。说明eCryptfs支持非加密文件和加密文件在一个目录内混合存储,并能正确访问(实际操作强烈不建议,见下个用例)。
3、对于加密文件hello_encrypted,明文状态下长度为16 Bytes,加密状态下为12KB,变化比较明显。
如果对上述测试用例稍加改动,调整mount -t ecryptfs参数,如改变passwd,取消no_sig_cache=y配置,打开文件名加密参数即ecryptfs_enable_filename_crypto=y,测试效果如下图:
从第二个改动后的用例可以观察到的现象/特性有 :
4、ecryptfs支持文件名加密。因为文件名加密密钥FNEK未在参数中指定,mount helper会提示/默认使用文件内容加密密钥(即图中fnek_sig和fs_sig相同,需说明的是加密密钥并非参数中的passwd,后续架构和密钥管理章节会说明)。
5、虽然ecryptfs_passthrough特性仍打开,即允许加密和非加密文件共存,但与上一个用例效果不同。启动文件名加密并mount后,未加密文件hello无法在test中显示,umount后又可正常访问。两个用例中passthrough特性在不同参数下表现不同,因此实际应用中,强烈不建议加密和非加密文件在一个目录混存。
另外补充一个现象/特性:
6、umount后,即加密的test目录是可以直接传输/拷贝到其他主机/网络进行存储备份的。其他用户使用时,只需用相同参数重新mount即可正确访问。
关于用例中mount -t ecryptfs命令的相关参数汇总如下,详情可参考man ecryptfs手册及ecryptfs-utils源码。部分参数和意义会在架构分析和密钥管理章节进一步说明。
需要说明的是,上述脚本用例的功能基本都可以用ecryptfs-utils提供接口API实现。下面是作者实现的一个C用例的部分代码参考。因为C程序需引用ecryptfs.h头文件并使用相关API函数,需要安装libecryptfs-dev软件包,并在编译时指定-lecryptfs链接对应库文件。
C用例中需要注意的是,mount操作前必须进行ecryptfs_add_passphrase_key_to_keyring,即将passphrase转换成对应的key(实际为FEKEK,见后续分析),并注册到内核keyring,同时返回一个key_sig给用户后续使用。
4.2、结果分析
从上节测试结果中,汇总相关测试项以及eCryptfs效果特性如下表,需要说明的有两点:
一是对test目录重复mount且每次使用不同密钥的效果。从下图用例看,对应passwd mount后生成的文件,只能在该mount context中正确访问。这个用例仅为简单说明,在参数变化情况下,例如文件名加密,情况可能更复杂和不确定,因此也不建议使用。
二是文件加密后大小变化问题,这个原因在于eCryptfs的方案本身设计。
文档《eCryptfs v0.1 Design Document》和2007年论文《eCryptfs: a Stacked Cryptographic
Filesystem》。从中可看出加密文件格式会多增加一个header信息(预留一个page)。对于文件内容则是按页分块加密。为了综合性能考虑,故使文件大小做到page对齐,最小12KB。
-
测试
+关注
关注
8文章
5275浏览量
126600 -
Linux
+关注
关注
87文章
11293浏览量
209340 -
磁盘
+关注
关注
1文章
375浏览量
25201
发布评论请先 登录
相关推荐
评论