0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

磁盘eCryptfs加密测试用例

麦辣鸡腿堡 来源:OPPO内核工匠 作者:m0rgan 2023-11-29 11:27 次阅读

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
收藏 人收藏

    评论

    相关推荐

    基于base test如何来构造测试用

    在设计仿真用时,有限制条件的激励相比漫无目的的仿真更加有效的找出RTL的bug。因此,同一份测试方案,不同的sequence往往代表着不同的test_case。真正的测试用都是基于
    的头像 发表于 09-19 09:16 2367次阅读

    基于UML的生成场景测试用研究

    使用UML生成场景测试用,有利于测试者设计测试用。使用UML的类图、状态图和顺序图来说明DHCP实例的场景
    发表于 03-31 09:49 15次下载

    手机硬件测试用

    手机硬件测试用 1.RF 测试 2.BB测试 3.Audio 测试 4.EMC测试
    发表于 04-28 16:59 56次下载

    基于跨平台系统中测试用复用的解决方法

    在软件开发过程中,测试做为一种保障产品质量的有效手段,被越来越多的人所重视。测试通常需要依据若干已经设计好的测试用逐步展开,使用测试用
    发表于 11-14 15:55 10次下载
    基于跨平台系统中<b class='flag-5'>测试用</b><b class='flag-5'>例</b>复用的解决方法

    基于DSEA的弱变异测试用集生成方法

    为解决基于集合进化算法(SEA)的弱变异测试用集生成过程中个体规模固定和执行开销大的问题,提出一种基于动态集合进化算法( DSEA)的弱变异测试用集生成方法。以
    发表于 11-28 16:11 0次下载

    基于二分K-means的测试用集约简方法

    测试用集约简是软件测试中的重要研究问题之一,目的是以尽量少的测试用达到测试目标。为此,提出一
    发表于 03-12 15:06 0次下载
    基于二分K-means的<b class='flag-5'>测试用</b><b class='flag-5'>例</b>集约简方法

    数据测试:输入数据的设计方法和测试用设计方法

    测试用的设计是测试设计的重要内容,关于测试用的设计方法,当前不少出版的测试书和发表的
    的头像 发表于 06-29 10:22 2924次阅读

    详谈Web测试中的界面测试用设计

    详谈Web测试中的界面测试用设计
    的头像 发表于 06-29 10:48 2117次阅读

    测试用的管理 介绍测试用的几种管理方法

    摘要 随着软件系统规模的持续增大,业务复杂度的持续增加,软件测试的复杂度也随之越来越大。而软件测试工作复杂度的直接体现,就是测试用编写、维护、执行和管理,所以编写易读、易维护和易管理
    的头像 发表于 11-26 15:13 6688次阅读
    <b class='flag-5'>测试用</b><b class='flag-5'>例</b>的管理 介绍<b class='flag-5'>测试用</b><b class='flag-5'>例</b>的几种管理方法

    测试用质量的重要性

    在进行测试时,通常会花很多精力选择“正确”的测试工具。这其实只是为了实现次要目标。当然,一个适合开发环境、项目和流程的工具是重要的。然而,对于良好测试而言,最重要的是测试用
    的头像 发表于 09-03 15:13 855次阅读
    <b class='flag-5'>测试用</b><b class='flag-5'>例</b>质量的重要性

    篇 | 单元测试用复用到集成测试?Testlet Library来助力!(上)

    作者:fox小编:吃不饱作为一名测试工程师,在做MiL测试时,编写测试用的效率影响整个测试项目的进度,如何有效提升编写
    的头像 发表于 11-04 10:14 859次阅读
    用<b class='flag-5'>例</b>篇 | 单元<b class='flag-5'>测试用</b><b class='flag-5'>例</b>复用到集成<b class='flag-5'>测试</b>?Testlet Library来助力!(上)

    FDE磁盘加密技术是什么

    磁盘加密技术 如上节所述,Disk Encryption磁盘加密,目标是保护数据at Rest状态下的机密性,加密对象是整个
    的头像 发表于 11-29 10:54 1293次阅读
    FDE<b class='flag-5'>磁盘</b><b class='flag-5'>加密</b>技术是什么

    eCryptfs整体架构和核心加解密机制介绍

    ,使用passphrase模式(如上述测试用)时不需要。ecryptfs-utils可作为用户态辅助工具或C接口编程参考。 应用程序发起系统调用时先经过VFS,判断目录类型为eCryptfs
    的头像 发表于 11-29 11:43 878次阅读
    <b class='flag-5'>eCryptfs</b>整体架构和核心加解密机制介绍

    Linux内核安全eCryptfs密钥管理

    ecryptfs-utils源码,分别介绍这两个KEY的生成过程。 1、用户passphrase_passwd 到 FEKEK的转换 从C测试用中看到,opt参数只有key_sig信息,并不指定FEKEK。且
    的头像 发表于 11-29 11:46 727次阅读
    Linux内核安全<b class='flag-5'>eCryptfs</b>密钥管理

    端到端测试用怎么写

    编写端到端测试用是确保软件系统从头到尾能够正常工作的关键步骤。以下是一个详细的指南,介绍如何编写端到端测试用: 一、理解端到端测试 端到
    的头像 发表于 09-20 10:29 444次阅读