我正在研究这个学术项目,其中一部分是对存储在磁盘上的所选Ext4文件应用透明加密(AES-CTR)(我已经可以使用新的ioctl等将它们标记为加密)。 / p>
为了做到这一点,我需要找到在数据上调用算法的最佳位置,同时从设备读取或写入数据。由于文件系统提供了大量的功能(如日志,内联,o-direct,范围),我现在很难找到合适的解决方案 - 我需要对原始数据进行操作,因为它存储在数据块。
我心里想的很少,一个是从sys_read(...)
和sys_write(...)
,更准确地ext4_file_write(...)
和generic_file_aio_read(...)
挂钩到调用路径的某个地方 - 但那不会'使用mmap
,可能不是可行的方法。另一种方法是在将内存页写入磁盘时通过ext4_writepages(...)
和ext4_readpages(...)
(以及它的回调,因为它是异步)来完成它。
因为它不是生产版本,只是一个概念证明 - 我可以关闭一些Ext4功能以简化任务。在使用算法时,我需要能够访问inode的xargs(存储密钥id),并且还要知道块编号,以便生成[en / de] cryption中使用的初始向量。您对此问题有任何想法和/或建议吗?
答案 0 :(得分:3)
为此设计解决方案有很多替代方案。
一种方法是使用Wrapfs(可堆叠文件系统),它将帮助您拦截从VFS到底层物理文件系统的调用。您可以选择在调用基础文件系统调用之前或之后添加挂钩。
这样做的好处是。 1.您的代码可以无缝地与任何物理文件系统一起使用。 2.您无需更改/修改原始文件系统代码。 你将拥有完全不同的模块。
所以调用层次结构看起来像, 应用< => VFS< => Wrapfs< =>物理FS(ext3 / ext4 / etc)
答案 1 :(得分:0)
FUSE(Filesystems in userspace)是一个很好的选择,因为它在用户空间中比在内核空间中更容易实现。您可以选择多种语言。这种方法会容易得多。