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。
什么是电视制式/待机能耗
英特尔多款九代酷睿H系列处理器泄露
基于区块链数字令牌技术的石油生产CryptoEnergy项目介绍
噪声传感器对比工业车间噪声谁将更胜一筹
如何减少示波器测量的死区时间
磁盘eCryptfs加密测试用例
关于模拟开关相关基础知识的介绍
新品速递 | 才茂“火柴盒”DTU(CM510-81T)惊喜上线
特斯拉将为更多车型换成磷酸铁锂电池
大幅面扫描仪技术术语:能源之星/Energy Star
华为:为这个时代构建新一代全闪存系统
对AI来说,为什么麻将比围棋、德州扑克更难?
液晶面板,液晶面板工作原理是什么?
京东618手机竞速第2天:Apple跃居头名夺双榜第一
爱特梅尔针对AVR推出电容式触摸感应开发工具套件
电机径向通风和轴向通风优缺点
厉害了!苹果iPhone8或增加AR技术
功能:浮点度数转换成浮点弧度数
气压传感器工作原理
东京以行动网络遥控无人机验证无人机协助救援的功效