为了提供更好的加密性能,目前谷歌工程师正在为 Linux 文件系统加密管理工具 fscrypt 添加内联加密支持。而与之相关的开发包括在 Linux 5.8 的块设备队列管理 blk-mq 中引入内联加密。
fscrypt 是用于 Linux 文件系统加密管理的高级工具,它管理元数据、密钥生成、密钥封装与 PAM 集成,并提供用于创建和修改加密目录的统一界面。fscrypt 的内核部分已集成到诸如 ext4 的文件系统中。
blk-mq 则是 Linux 的块设备层多队列机制,它将 Linux 内核存储栈中请求层的单队列改成多队列,理论上提升性能。
如果接下来 blk-mq 支持内联加密,那么它能够在存储栈中向下传递加密上下文,目前 Linux 内核源码 commit中解释:我们必须通过某种方式让存储设备驱动程序知道它应该用于加密/解密请求的加密上下文。而上层(例如文件系统/fscrypt)知道情况并且管理加密上下文。这样,当上层提交 BIO 到块层,这个 BIO 最终到达的设备驱动程序支持内联加密,那么设备驱动程序则已经表明了 BIO 的加密上下文。
代码上具体改动是将 struct bio_crypt_ctx 添加到 struct bio 中,用来表示加密上下文,同时引入各种用于操作 bio_crypt_ctx 并使 bio/request 合并函数逻辑知晓 bio_crypt_ctx。