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

描述

整体架构

eCryptfs整体架构如下图,主要是内核模块eCryptfs以及用户态进程ecryptfsd。ecryptfsd进程只在使用key type为openssl模式时需要,使用passphrase模式(如上述测试用例)时不需要。ecryptfs-utils可作为用户态辅助工具或C接口编程参考。

应用程序发起系统调用时先经过VFS,判断目录类型为eCryptfs时调用eCryptfs模块的注册函数。之后eCryptfs根据mountsession中保存的key signature参数从keyring中找到对应密钥(FEKEK),再调用crypto模块API完成文件加解密。

模式

模式

eCryptfs核心加解密机制如下图,主要特点归纳如下:

1、FEK(File Encryption Key)唯一,即每个文件的加密密钥均不同,是随文件创建时生成的一个随机数。

2、每个文件的FEK经过FEKEK(File Encryption Key Encryption Key)加密保护,加密后FEK称为EFEK(Encrypted File Encryption Key),并保存在eCryptfs加密文件的header信息中(如前述page 0区域)。

3、passphrase模式下,FEKEK是基于用户passphrase_passwd派生而来,派生方式是hash计算(参考代码分析章节)。

4、文件内容按照page大小(Data Extent)进行块加密。

核心过程可简单描述为:

1、新文件加密时,生成随机数FEK,对文件内容进行分块加密并存储。根据用户传递的key_sig参数从keyring找到对应的FEKEK,用FEKEK加密FEK,生成EFEK并保存在文件header中。

2、解密时,同样根绝key_sig找到FEKEK,用FEKEK解密EFEK后得到FEK,再用FEK解密文件内容。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分