全站搜索
基于文件系统过滤驱动器的加密软件设计
作者:管理员    发布于:2015-09-10 08:38:33    文字:【】【】【

  86:A 0概述随着计算机的日益普及,人们已经习惯于将各种文档资料保存在电脑中,随之也产生了信息安全问题,即如何保护文件的私密性。目前保护文件的方法主要有两种:一种是文件加密,如我们常用的WourdExcel文档,都可采用文件加密,文件加密比较安全,但在每次打开文件时都需要输入密码,不是非常方便;另一种加密方法是访问控制方法,这种方法不改变文件的存储内容,只是限定了存取控制的权限,如在微软的NTFS文件系统里,可以对特定的目录设定用户权限和访问密码,密码输入正确就可任意存取文件,比较方便,但安全性较差。

  本文介绍的基于文件系统过滤驱动器的加密方法则与上述方法不同,它既具有访问控制的方便性,又具有文件加密的安全性。它不但支持硬盘文件加密,也支持光盘、软盘、移动存储器的文件加密,适用性较广。

  1文件系统和过滤驱动器模型WindowsNT/2000的内核模式驱动程序采用分层结构,分别为文件系统驱动程序、中间驱动程序和设备驱动程序。

  文件系统驱动程序(FSD)负责维护文件系统需要的各种磁盘结构如FAT32NTFS、CDFS等,需依靠中间层和设备驱动程序去完成工作。中间层驱动程序包括磁盘镜像驱动器、过滤驱动器(FILTER)等,这些驱动程序接受顶层驱动程序的请求,处理或下发给设备驱动程序。设备驱动程序包括磁盘驱动程序等,设备驱动程序和硬件抽象层(HAL)结合紧密,实男,教授博士生导师,主要研究方向:计算机控制、智能自动化、CMS现对硬件的直接存取。

  文件系统控制流图当一个用户进程进行文件操作时,例如读文件操作,用户进程调用子系统库Kemel32dll中的功能函数,ReadFile接着调用系统库Ntdlidll中的NReadFifeNReadFile通过一个陷入指令(NT2EH)将处理器模式提升至ring0IO管理器检查数据存取的合法性后,构造主功能为RPMJREAD的IO请求包(IRP)并送到文件系统驱动程序的入口点,文件系统等各层驱动程序传递并处理IRP后将结果通过IO管理器返回用户进程。文件系统驱动程序与一般驱动程序有所不同,它与操作系统的内核联系更紧密,特别是内存管理器和高速缓存(Cache)管理器,使得系统对磁盘的访问更有效率在读写磁盘的时候,WindowsNT /2000的内存管理器会保存近的存储记录,当用户发出文件操作请求时,IO管理器会检查所访问的数据是否保存在内存中,若内存中有所需数据,则构造FastIO请求包,从Cache管理器中存取数据。

  计算机应用为典型的文件操作的控制流图。

  过滤驱动器是一种特殊的中间层驱动程序。它位于某个驱动程序之上,截获发送给低层的设备请求,对上层和下层的驱动程序来说,过滤驱动器是透明的。过滤驱动器与一般分层驱动程序的主要差别是,过滤驱动器的Device对象没有名字,过滤驱动器通过将没有名字的Device对象挂接到由某个低层驱动程序创建的Device对象来工作。过滤驱动器也可以有多层,新的过滤驱动器总是在已存在的过滤驱动器之上。

  2基于过滤驱动器的加密程序设计基于过滤驱动器的加密软件包括应用程序和过滤驱动器程序,应用程序提供用户界面,完成对指定文件的加密、输入用户密码、传递密钥给过滤驱动器等功能。过滤驱动器则根据接受到的密钥对指定文件进行解密,过滤驱动器的解密对用户是透明的,而且只要一次输入密码就可以连续使用。

  下面对过滤驱动器的设计要点作简单介绍。

  1)如何设置IRP拦截例程应在DriverEntiy初始化例程中设置RP拦截例程,如下代码所示:煽狙煽其中,FileDispatch接管了所有发送给低层的IX)请求,过滤器无须处理全部的IX)请求,不需要处理的IO请求可直接传递到低层驱动程序。

  2)如何处理拦截的数据当发生读文件操作时,由于I)管理器会根据数据是否被Cache而发出不同的I)请求包,使用不同输入缓冲区地址。数据可能从磁盘上获取,也可能从Cache管理器获取。而只有从磁盘上获取的数据才是未解密的数据。此外,过滤驱动器需要借助低层驱动程序才能取得磁盘数据,所以在截获IRPMJREAD功能时,应设置IOCmpletim例程。当低层驱动程序完成读操作后,会回调此IOCompletion例程,这时可进行解码操作,如以下代码所示:煽狙煽3)过滤驱动器如何与应用程序的通讯序的通讯一般可通过Devi:eIoControl实现。但由前所述,过滤驱动器拦截了所有的IO请求,且一般要传递到低层驱动程序。因此,与一般设备驱动程序不同,过滤驱动器必须区分哪些IX)请求只需要过滤驱动器单独处理。解决方法是在DriveiEntry中用IoCreateDevice创建一个设备对象,并在该设备扩展DeviceExtension中定义此设备类型。在IRP拦截例程FileDispatch中,通过检查设备的类型判断是文件系统的IRP还是应用程序的IRP 4)过滤驱动器如何获取文件信息过滤驱动器在处理IRP时,必须知道与当前数据相关的磁盘文件信息,如文件名、数据在文件中的偏移量等,这样才能决定数据是否需要处理和如何处理。一种解决途径是,在过滤驱动器处理IRP的派发例程中构造一个主功能码为IRPMJQUERYNFORMATI)N的IA)请求。主要步骤是:构造一个IRP包,创建初始化一个同步用户事件,并将用户事件保loSeC(mpletionRoutine函数设置完成例程,调用IoCallDriver将新的RP包传送给低层驱动程序,然后调用KtWaitFoSingleObject等待用户事件的发生;当低层驱动程序请求后,回调完成例程;在回调完成例程中,用KeSetEvent设置一个用户事件,使KeWaitFojSgleObject受触发返回。这样就完成了一次文件信息查询。为提高查询效率,可以缓存近的磁盘文件信息,这样不必每次都构造IO请求。

  要实现基于过滤驱动器的文件加密,还涉及许多细节,由于篇幅有限,本文不可能一一介绍,但只要了解文件系统的工作原理和过滤驱动器的编程要点,剩下的问题是比较容易解决的。

  3结语基于过滤驱动器的文件加密方法涉及系统内核,程序设计和调试都比较繁琐,但这种加密方法的优点也是其他方法所不具备的,特别是对操作系统和用户应用程序来说是解密过程是完全透明的,使用十分方便。后要说明的是,过滤驱动器的技术还可以应用到其他软件产品的开发,如防病毒软件、磁盘镜像软件等,本文所讨论的内容都有一定的意义。

访问统计
51客服