基于透明加密的云存储文件系统(kefs)——技术文档
基于透明加密的云存储文件系统(KEFS)
技术文档
目录
1.系统概述 (2)
2.技术实现 (2)
2.1系统结构 (2)
2.2系统文件构架 (3)
2.3工作原理 (3)
2.4加密原理 (4)
2.5文件过滤驱动实现 (5)
2.5.1需要截获的IRP (5)
2.5.2获取文件全路径 (6)
2.5.3加/解密的判断 (6)
2.5.4驱动和用户层程序的通信 (6)
3.支持的操作系统 (7)
nxxjmpf@126
1.系统概述
KEFS系统是基于IFS文件过滤驱动开发的透明加密文件系统。基于此系统,进一步应用到本地存储和云存储,实现了本地存储和云存储的透明加密解密,保证数据安全性。
KEFS系统是基于目录的加密系统。任何在工作目录内的读写操作,都将自动进行解密和加密。
Windows 2003以后,自带了EFS文件加密系统,但是该系统仅支持NTFS文件系统,并且对于本地加密文件的共享很困难,此外,EFS 只是对本地文件的加密,不支持云存储。而KEFS解决了以上问题。2.技术实现
2.1系统结构
2.2系统文件构架
共享文件如何加密KEFS系统由三部分组成:sfilter.sys , , Sfilter.sys 文件过滤驱动:
负责截获系统IO操作,并做加密或解密等操作。 系统通信程序:
用户身份验证;给sfilter发密钥;和sfilter交换文件数据。 服务器程序:
和客户端KEFS通信。服务器上保存的是用户加密过的文件。
2.3工作原理
在Windows操作系统中,系统是以层次结构设计的。一般的文件操作(打开、读、写、关闭等)都是通过调用系统API来完成。对于某一个文件操作API,会将请求下发给文件驱动,再由文件驱动下发请求,当文件操作完成后,返回数据将先上传给文件驱动,然后文件驱动进一步上传给用户层,由此一个API操作完成。
由此,我们开发一个文件过滤驱动sfilter,这个驱动套在系统文件驱动层之上。这样,我们就可以截获到所有的通过系统文件驱动的信息(IRP)。
对于写操作,在sfilter中截获,并在sfilter中动态加密写的数据,然后扔给下层的系统文件驱动把密文写入本地磁盘,或者在sfilter加密后,把密文返回给我们的通信EXE,然后由通信EXE 发加密过的写的数据发给服务器,再由服务器端把密文写到服务器磁盘上。
对于读操作与写操作类似,我们在sfilter中截获到要读的数据(或者是本地磁盘上的,或者是从服务器得到的,但都是密文),然后在sfilter中动态解密后,再上发给用户层,从而完成解密操作。
此外,在sfilter中,要完成以上透明加密,我们要需要截获其他一些IRP并做处理,具体说明参加本文2.5
sfilter实现。2.4加密原理
2.5文件过滤驱动实现
2.5.1需要截获的IRP
IRP_MJ_CREATE
收到该IRP请求意味着用户层请求一个文件句柄。
IRP_MJ_CLEANUP
该IRP在关闭文件句柄的进程上下文中发送。因此,驱动器应该释放进程上下文中所指定的资源
IRP_MJ_CLOSE
该IRP请求意味着与目标卷相关的文件句柄已经关闭或释放。所有的外部I/O请求都已结束或取消。
IRP_MJ_DIRECTORY_CONTROL
该请求是由I/O管理器和其他操作系统组件(比如
kernel-mode驱动器)发送的。当用户层程序调用
ReadDirectoryChangesW、FindNextVolumeMountPoint或者内核层调用ZwQueryDirectoryFile时,会发送该请求。
IRP_MJ_SET_INFORMATION
该IRP是由I/O管理器和其他操作系统组件发送的。调用SetEndOfFile或ZwSetInformationFile时发送。
IRP_MJ_READ
该IRP是在有I/O读请求的时候会调用。
IRP_MJ_WRITE
该IRP是在有I/O写请求的时候会调用。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。