网络信息化的飞速发展加快了信息的共享和交流,人们对安全方面的要求也越来越高,信息安全也越来越重要。加密作为提高信息安全的一种手段,被政府、企业和个人广泛的采用。美国联邦调查局和中国国家信息安全评测认证中心的调查结果均显示,政府和企业因信息被窃取所造成的损失超过病毒破坏和黑客攻击所造成的损失,超过70%以上的安全威胁来自泄密和内部人员犯罪。

如何更有效地防范有目的的信息窃取,全方位地对信息进行安全保护则是各个企业和单位所面临的非常重要的问题,非主动加密技术是一种加解密不由信息使用者决定,在系统底层自动实现对信息加密解密的技术,它对于信息使用者来说是透明的。Windows NT内核的操作系统虽然也提供加密方法如NTFS的EFS(Encrypted File System,加密文件系统),但是却无法有效地避免内部人员泄密,还必须专门对文件系统进行驱动开发。本文首先说明了非主动加密系统模型,接着介绍了WindowsI/0管理器以及驱动开发的方法原理,最后给出文件加密解密核心模块的设计。

一、Windows I/O管理器与驱动开发

Windows NT内核是基于对象的,驱动程序和内核例程使用的许多数据结构都有公共的特征,这些特征由对象管理器集中管理,整个I/O系统是由“包”驱动的,大多数I/O请求用I/O请求包IRP表示,它从一个I/O系统组件移动到另一个I/O系统组件,I/O管理器创建代表每个I/O操作的IRP,传递IRP给正确的驱动程序,并且当此I/O操作完成后处理这个数据包;相反,驱动程序接受IRP,执行IRP指定的操作并且在完成操作后把IRP返回I/O管理器,或为下一步的处理而通过I/O管理器把它送到另一个驱动程序。I/O管理器和设备驱动程序使用IRP来管理I/O操作,首先,某个内核部件创建一个IRP,该IRP可以让设备执行一个操作,向驱动程序发送一个命令或者响应驱动程序询问某些信息的请求;然后I/O管理器把这个IRP发送到驱动程序的输出例程上,一般来说,每个驱动程序例程仅执行IRP指定的一部分工作,然后返回I/O管理器;最后,某个驱动程序完成该IRP,I/O管理器删除该IRP并向原始请求者报告结束状态。每个影响到设备的操作都使用IRP,通常IRP先被送到设备堆栈的最上层驱动程序,然后逐渐过滤到下面的驱动程序,每一层驱动程序都可以决定如何处理IRP,有时,驱动程序仅仅是向管理器定义了有序的工作框架,在该框架里,I/O请求被提交给设备驱动程序。

Windows NT驱动程序支持分层的设计模型,驱动程序的分层是根据设备对象堆栈来完成的,处于堆栈最底层的设备对象称为物理设备对象,简称为PDO( Physical Device Object),与其对应的驱动程序称为总线驱动程序。在设备对象堆栈的中间某处有一个对象称为功能设备对象,简称FDO( Functional De-vice Object),其对应的驱动程序称为功能驱动程序。在FDO的上面和下面还会有一些过滤器设备对象。位于FDO上面的过下层传递该IRP。有时,驱动程序直接处理完该IRP,不再向下传递。有时,驱动程序既处理了IRP,又把IRP传递下去。这取决于设备以及IRP所携带的内容。处于功能驱动程序之上的过滤器驱动程序称为上层过滤器,其对应的驱动程序称为上层过滤器驱动程序;位于FDO下面(但仍在PDO之上)的过滤器设备对象称为下层过滤器,其对应的驱动程序称为下层过滤器驱动程序。

二、非主动加密系统模型

技术人员在进入相应的应用软件时,必须通过服务器的实时权限控制系统进行身份认证,取得相应的操作权限。在通过应用软件进行设计或者文档的建立、保存后,系统捕获到该操作,自动在后台进行加密处理,将明文转换为密文存盘,当取得相应的权限而需要打开文件时,自动进行解密,将明文信息传递给应用程序。在这个过程中加密和解密对用户是透明的,保存在磁盘的文件都是密文,如图1所示。

非主动加密技术

在加密算法上,我们采用对称密钥算法,这是一种加密和解密都使用相同密钥的加密算法,不同的密钥可以产生不同的加密结果,速度相对比较快,适合大文件和数据的加密解密。系统的密钥放在服务器上,当技术人员登陆文件通过身份认证时,服务器会根据不同的人员和对应的IP给出密钥(当技术人员需要移动电脑改变IP进入文件时,必须进行单独说明,否则打开的是密文),ID与IP不匹配不予放行,ID与IP不匹配但又是合法用户时,须向管理员单独说明,否则按非法用户处理。

服务器的全维审查跟踪还对技术人员复制文件、E - Mail等进行跟踪,对未授权的复制和邮件等非法操作进行限制和拦截。用户的密钥实行服务器内部局域网统一管理,离开内部网络无法对非法所得的密文进行解密,短期内也无法对脱离系统管理的磁盘文件解密。技术人员需要和外部人员通过内部局域网LAN实现,内部管理如图2所示。

非主动加密技术

在非主动加密中,加密算法采用对称密码算法中的DES(Data Encryption Standard),DES密码算法是一种分组密码算法,在数据加密领域广泛地被采用,它经受住了长期的各种密码分析攻击,仍保持较好的安全性。它使用56位密钥将64位明文转换为64位的密文,密钥长度为64位,其中有8位是奇偶校验位。在DES算法中,只使用了标准的算术和逻辑运算,其加密和解密速度都很快。

三、透明加密模块的设计

非主动加密技术系统开发主要分两个部分,一部分是用户态的开发,这部分开发相对比较容易,主要是操作界面的设计,此外还包括实时权限控制、身份认证、全维审查跟踪,工具采用VC++6.0;另一部分是非主动加密部分,为系统核心态开发,属于文件系统过滤驱动开发,采用DDK编程实现。全系统的关键和重点是核心态的开发,它直接影响到系统的可靠性、安全性和健壮性,是整个系统性能的关键。

下面就给出一个在Windows下具体实现非主动加解密的过程。

非主动加密文件系统过滤驱动属于上层过滤器,如图3所示。

非主动加密技术

与其它驱动程序一样,过滤器驱动也包括Driv-erEntry例程。在DriverEntry里,首先调用函数ZwCreateFile打开卷根目录,调用ObReferenceOb-jectByHandle获得文件句柄,查找它引用的文件对象, ntStatus = ObReferenceObjectByHandle ( ntFileHan-dle, FILE READ DATA, NULL, KemeIMode,8zfileObject, NULL);用fileSysDevice=IoGetRelatedDe-,riceObject( fileObject);取得与之相关的设备对象,调用IoCreateDevice函数创建一个附属于文件系统钩子设备对象,指定过滤驱动程序。调用topAttachDe-rrice=IoAttachDeviceToDeviceStack( hookDevice, fileSys-Device);附属到该设备,最后开始接收已挂钩的对象的IRP。这样,经过驱动程序发送到HAL的所有请求都会经过过滤器,实现加密解密是在过滤器中通过拦截主功能码IRP.MJ—READ和IRP—MJ—WRITE来实现的,当加密时,首先保存系统MDL地址,建立内存入口指针,在非分页内存中分配一段与待写数据大小相同的内存,CompletionCtx=ExAIIo-
cateFromNPagedLookasideList(&gReadWriteCompletionCtxLookAsideList); MyBuffer=ExAllocatePooIWithTag( NonPagedPooI,hpSp 一>Parameters. Write. Length,SFLT—POOL TAG);建立这段内存描述符MDL,更新IRP结构中的Irp一>MdLAddress,使其指向新建立的MDL,

Irp一>MdlAddress=IoAllocateMdl( MyBuffer, Irp-Sp 一>Parameters. Write. Length, FALSE, TRUE,NULL);

拷贝数据

RtICopyMemory(MyBtfffer, OldBuffer, Length);

调用加密程序

Encrypt(IrpSp一>FileObject, MyBLd'fer, Length, Irp-Sp一>Parameters. Write. ByteOffset);

设置完成例程

IoSetCompletionRoutine(hp, WriteCompletionRoutine,CompletionCtx, TRUE, TRUE, TRUE);

释放分配的内存

ExFreeToNPagedLookasideList(&gReadWrite Com-pletionCtxLookAsideList, CompletionCtx);

解密过程与此类似。此外,还需调用RtlInitUni-codeString设置设备名,调用IoCreateDevice函数创建用于GUI通信的设备,调用IoCreateSymbolicLink创建符号连接,以使设备对象能被Win32应用程序访问。

小知识之Windows NTMicrosoft Windows NT(New Technology)是Microsoft在1993年推出的面向工作站、网络服务器和大型计算机的网络操作系统,也可做PC操作系统。