文件透明加解密的实现层次

本文介绍了文件透明加解密技术的三种实现方法:磁盘过滤驱动、卷过滤驱动及文件系统过滤驱动,并分析了各自的优缺点。磁盘过滤驱动简单高效但全盘加密;卷过滤驱动针对分区加密,加载时需密码验证;文件系统过滤驱动更为灵活,可对特定目录进行加密。
摘要由CSDN通过智能技术生成

作者:王永龙

http://www.wangyonglong.com/2012/11/%E6%96%87%E4%BB%B6%E9%80%8F%E6%98%8E%E5%8A%A0%E8%A7%A3%E5%AF%86%E7%9A%84%E5%AE%9E%E7%8E%B0%E5%B1%82%E6%AC%A1/

文件透明加解密是最近几年发展出来的一种文件加解密技术。所谓透明,是指在加解密的时候,用户是完全感觉不到的,作为用户,打开文件,关闭文件,读写文件都跟正常的无异,但实际上系统在底层处理的时候,已经做了加解密的处理,在用户读取文件时,系统将文件解密后放入内存中供用户使用,用户文件保存时,系统将文件加密并最终写入磁盘。以windows系统为例,所有这些操作都是在windows的内核层完成,也就是所说的ring 0层完成。

由于windows系统的内核属于类微内核,不同模块之间具有层次性,因此在实现文件透明加解密的时候,有几种不同的实现方法。在windows内核中,除了系统调度等实现以外,重要的一个大的部分是驱动。windows的驱动是分层的,所以在层与层之间,可以加入我们自己的过滤驱动以达到文件透明加解密的目的。

一个文件最终总是存储在磁盘上的,磁盘负责二进制的数据流的读写,然后再磁盘上,有卷的概念,也就是俗称的分区,在每一个卷上面,还有文件系统的存在。因此对应于文件加密,我们自己设计的过滤驱动可以分为磁盘过滤驱动、卷过滤驱动、文件系统过滤驱动三个层次。都是通过对磁盘驱动过滤、卷驱动过滤和文件系统过滤实现的。这三种驱动在windows系统里面,磁盘为最底层,其次是卷,最上层是文件系统。

1、磁盘过滤驱动。是对应于整个磁盘来说的加密,主要是在数据流读写的过程中完成加解密的过程,这种方法简单粗暴,但速度快,效率高,缺点是全盘加密,对于客户来说,实际上是复杂了。磁盘整体加密之后,如果是系统盘,那么则要在磁盘读取系统加载信息之前就要进行解密处理,这块儿也是比较复杂的地方之一。如果密码丢失那么磁盘相当于完全数据的丢失了。磁盘过滤加密驱动适合保护移动磁盘,电脑硬盘在丢失的情况下的保护。磁盘加载成功后,磁盘上的文件不能防止第三方的程序的读取,也就无法保护该数据通过木马等程序泄露出去。

2、卷过滤驱动。是对一个分区的加密,这种驱动是通过卷驱动的过滤实现的。比如著名的开源加密软件truecrypt其中一个重要的功能就是创建一个卷并加密之。卷加密的处理比磁盘简单一些,而且对于用户来说,需要加密的文件只要放在该分区就实现了加密存储,系统在加载该卷时,需要输入密码才能正常加载,达到透明使用的目的。卷加密也是适合加密分区,同样的缺点跟1是一样的。就是文件虽然在磁盘本质上是加过密的,但是一旦加载了卷以后,文件在应用层都是透明的,此时拷贝传输等都可以将文件泄露出去,这种方式适合保护移动硬盘或者硬盘在不加载加密卷的情况下的数据保护(比如丢失了笔记本电脑等状况)。

3、文件系统过滤驱动。这是最复杂的一种加解密驱动。但是最为灵活,如果实现的完善和巧妙的话,用户可以指定对某一个目录进行加密,这种方式比较灵活,但实现文件系统过滤驱动仍然是最为费神的透明加解密方式。从速度上来说,这种方式虽然灵活,但会牺牲一些速度。如果对于目录进行加解密,那么过滤驱动就要针对目录进行过滤,增加分析判断的处理。文件系统的透明加解密能够处理更加复杂的情况,适合目录加密、文件加密,防止文件拷贝等方式泄露文件等。

综合分析,在实现层次上,文件系统过滤驱动比较灵活,客户的接受程度高,但实现代价最高,也最复杂,而且速度上不占优势。卷驱动适合对于电脑系统有一定了解的用户使用,这种方式效率得到保证,而且可以实现文件方式的磁盘(file disk),可以灵活的在磁盘卷类型或者文件卷类型上进行选择。而且可以自由的选择是否加载加密卷还是不加载、可以自由选择何时加载或卸载。最需要谨慎处理的是磁盘加密方式,如果使用不当,该磁盘相当于格式化了。对于不需要那种严格的数据安全的用户来说,不建议使用。值得推荐的是软件是truecrypt,它实现了磁盘过滤驱动和卷过滤驱动两种方式。还支持创建加载卷文件的方式来使用。

补充说明:

以上还未谈到文件透明加密后的使用情况。就加密效果而言,truecrypt的卷加密和win7提供的bitlocker的效果是一样的,在加载了加密卷之后,卷(分区)上的文件在用户层便是跟没有加密的是一样的了,因为这俩者实现加密的方法都是采用卷驱动的过滤加密,这是一个相当的底层加密方法。假如对文件系统层进行过滤加密,假设在文件系统层之上进行过滤的话,有可能达到一种效果,便是本地打开文件,则解密之,如果是拷贝或者网络传输的话,可能对方收到的文件就是加密的了,这种方法,可以有效的防止本地文件的泄密。也就是说员工即使拷贝了工作电脑上的文件带走或者通过网络发送给其他人员,那么最终的结果就是该文件无法在非工作机器上打开,这样能有效的防止文件泄密,又不会妨碍员工使用U盘或者上网。


现在很多做透明加解密的初学者都比较困惑,不知从何下手,我也是如此,从什么都不会开始,慢慢肯文件系统内幕,到OSR上面请教,四个月的时间还是收获颇丰。其实真正研究以后会发现,很多都是体力活,要不断的去跟踪文件的操作流程。在这里发一个基于minifilter的透明加解密的驱动源码仅供大家参考,其中也实现了对文件标识的处理,文件标识放在文件尾部。算是抛砖引玉吧。坦白的说,这个代码并不稳定(偶尔与norton杀毒软件会有冲突),但是我觉得整个流程是正确的,可能有些细节还没有考虑清楚,我觉得对初学者还是有一定帮助吧,当然大虾们可以跳过,呵呵。另外,有关加解密算法的代码由于不是我写的,也不好公开,所以我把相关代码用“\\\”给注释掉了(但没有去掉),请大家见谅,不过不会对整个流程产生影响。大家可以重点看一下各个派遣函数的实现。 欢迎大家拍砖,觉得有点意思就顶一下啊,在看代码的过程中如果有什么好的建议,也希望能告诉我。 最后非常感谢XiangXiangRen,zzbwang,neak47等网友在这段时间内对我的帮助。XiangXiangRen的书以及zzbwang的帖子对我完成这项工作有很大的帮助和参考价值,在此谨与大家分享。 编译环境:WDK6001.18002 XP x86 PS: 您可以将附件中的代码进行修改和转发,但转发时请注明出处。 http://bbs.driverdevelop.com/htm_data/39/1001/119736.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值