基于Windows内核过滤驱动的透明加密文件系统的设计
2016-01-21付存君
付存君
(重庆师范大学 涉外商贸学院,重庆 401520)
基于Windows内核过滤驱动的透明加密文件系统的设计
付存君
(重庆师范大学 涉外商贸学院,重庆 401520)
摘要:为解决日益突出的信息安全问题,设计并实现了一种文件过滤驱动技术文件透明加密系统。以Windows操作系统为平台,以Windows内核文件过滤驱动为核心技术手段,密切结合Windows内核工作原理,实现文件的透明加密。旨在设计透明加密文件系统并且致力于实际平台的研究与开发。通过实验测试,加密效果良好。
关键词:透明加密;过滤驱动;文件系统
作者简介:付存君(1987-),男,重庆巴南人,硕士,助教,研究方向:人工智能。
中图分类号:TP393.08
文献标识码:识码:A
文章编号:编号:1008-6390(2015)03-0171-03
所谓的透明加密技术,主要是指在操作系统的文件系统上加以工作的一个软件,它能够向操作系统提供透明的、实时的、动态的数据加密。
网络入侵的不断深入,使得人们对安全技术的要求不断提高。传统的定制钩子程序加密文件在很大程度上不能满足用户的需求。因此,基于内核的过滤驱动加密系统成为研究热点,本研究采用win7平台,定制windows内核级的过滤驱动透明加密文件系统,以期提高系统安全性。
一、设备驱动程序简介和基本结构
驱动程序的开发和一般的应用程序开发有很大的不同。一般在开发时采用的工具Windows DDK(Device Develop Kit),驱动程序通常不会打印出字符,这需要使用特殊的调试工具,DbgView和WinDbg是调试驱动程序的极方便的工具。
驱动程序运行一般都是在内核的模式,有大量例程构成,一个被动的组件。操作系统可以调用其中提供的例程。当用户模式的程序向操作系统发出一个请求之后,windows系统能够接受该请求,然后将请求从用户模式发送到内核模式的程序。此时可以调用相关的驱动程序例程提供服务。
设备驱动程序的基本结构见图1。
图1 设备驱动程序的基本结构
二、用户加密模块的研究
(一)加密简介
加密模块的性能影响着透明加密文件系统的安全性,如何制定用户加密策略、选择加密算法以及密钥管理很大程度影响加密系统的安全性和整体性。加密算法分为对称加密算法和非对称加密算法两大类,对称加密算法主要有数据加密标准,高级加密标准,其优点是加密信息速度快,缺点是容易被破解。目前较为安全的算法是AES-256,即密钥为256位的高级加密标准。非对称加密算法使用最广的是RSA算法,其优点是安全性高不易被破解,在设计系统时,需要考虑各种加密算法的优缺点和系统的需要,选择改进的RSA加密算法。
(二)改进的RSA加密算法
加解密速度慢是RSA算法显著的缺陷。设m为明文m=(m1,m2,…,mk),相应c为密文c=(c1,c2,…,ck),则按照RSA算法,有
① 加密运算
ci=miemodn,i=1,2,…,k
②解密运算
mi=cidmodn,i=1,2,…,k
由上可得,加、解密都需要执行k次幂剩余运算。
为了提高运算速度,也就是要尽可能地减少幂剩余运算的次数,可以用加法剩余运算。
改进的RSA 算法如下:
①加密运算
cj=mj+mj-1(modn),j=k,k-1,…,2
c1=m1e(modn)
②解密运算
m1=c1d(modn)
mj=cj-mj-1 (modn),j=2,3,…,k
三、过滤驱动的透明加密文件系统实现
(一)内核层与应用层交互的设计与实现
过滤驱动程序工作在内核状态,然而应用程序工作在用户态,因此,实现过滤驱动的透明加密文件系统的部分功能需要在两者之间进行交互。其中主要包含两个问题,一是用户层和内核层之间的通信交互,二是用户层和内核层之间共享数据。
1.内核层与应用层通信的设计与实现
设计的过滤驱动程序主要是对文件进行加密和解密。为了方便用户使用,需要有图形化的应用程序。这就造成了应用层和内核之间进行通信的问题。在两者之间进行通信时,可以使用读、写函数。Windows提供的DDK有为内核和应用层通信提供API,从而能较为方便的进行二者通信,应用程序可以发送DeviceIoControl的请求,这种请求是应用层和驱动程序交互的必要手段。
通过应用层实现对驱动层的通信流程见图2。
2.内核层与应用层之间数据共享的设计与实现
系统设计过程中的加密算法实现在USBKey中,在加解密过程中,为了达到调用USBKey内部的加解密机制,需要调用USBkey提供的相关接口。可是USBKey具有的接口都只是供应用层调用的,而且加解密的时机和具体等待解密的数据需要由内核驱动得到,因此,在应用层和内核层之间就需要一个数据共享良好的机制。一般采用在内核中申请一块内存区域作为共享空间,实现应用层和内核层之间的数据共享通道。
图2 应用层向驱动层通信流程图
实现方式见图3。
图3 通过共享内区实现数据在解密流程中的传递
上述实现方式是可以作为对应用层加密上的回调,在此过程中没有采用真正的回调机制,因此被调用者和调用者之间有必要建立同步机制。该机制的建立是可以通过创建应用层和驱动程序都能调用的事件对象来实现(见图4)。
(二)代码实现
得到被操作的文件名字,打印相关操作信息,然后下发IRP到底层驱动。在下发IRP到底层驱动处理前,本层驱动必须负责设置下层IO堆栈的内容。这样下一层驱动调用IoGetCurrentIrpStackLocation()时能得到相应的数据。设置下层IO堆栈的内容,一般用两个函数来实现:IoCopyCurrentIrpStackLocationToNext(Irp)
图4 通过事件对象实现应用层与内核层流程图
此函数一般用在本驱动设置了完成例程时调用,把本层IO _STACK_LOCATION 中的参数copy到下层,但与完成例程相关的参数信息例外。因为本驱动设置的完成例程只对本层驱动有效。IoSkipCurrentIrpStackLocationToNext(Irp)此函数的作用是直接把本层驱动IO堆栈的内容设置为下层驱动IO堆栈指针的指向。因两层驱动IO堆栈的内容完全一致,省却copy过程。而在Filemon的处理中,它用了一个特别的办法,没有调用此两个函数,FilemonHookRoutine函数体里面有三句代码:
PIO_STACK_LOCATIONcurrentIrpStack = IoGetCurrentIrpStackLocation(Irp);
PIO_STACK_LOCATIONnextIrpStack = IoGetNextIrpStackLocation(Irp);
*nextIrpStack = *currentIrpStack;//此步设置了下层驱动的IO_STACK_LOCATION
直接设置了下层驱动IO堆栈的值。
在FilemonHookRoutine函数里,用一个宏实现了复杂的获得拦截到的被操作文件的名字。
(三)功能测试
基于windows系统的透明加密文件系统通过调试运行,已经成功加载到win7上。可以对图片、txt、doc等文件进行透明加密。通过使用WinHex软件查看相同文件加密前数据以及加密后数据并进行对比,加密图片效果如图5所示,加密word文档效果如图6所示。
图5(a) 加密前图片
图5(b) 加密后图片
图6(a) 加密前明文
图6(b) 加密后密文
四、结语
研究了在win7系统平台的过滤驱动的透明加密文件系统,以Windows内核文件过滤驱动为核心技术手段,密切结合Windows内核工作原理,实现了应用层和内核层之间的通信,实现文件的透明加密。实验证明,这一系统加密效果良好,具有实用价值。
参考文献:
[1]邹家银,李培峰.透明加解密系统原理与实现分析[J].计算机与现代化,2012(03):85-88.
[2]高汉军,寇鹏,王丽娜,等.面向虚拟化平台的透明加密系统设计与实现[J].武汉大学学报:理学版,2010(2):223-226.
[3]龙腾飞,李忠福,李艳芳,等.基于文件过滤驱动的透明加密技术[J].保密科学技术,2013(10):31-34.
[4]王全民,何明,苗雨.基于微过滤驱动的文件透明加解密系统的研究与实现[J].计算机安全,2014(3):28-32.
[5]郝荣彬.基于角色和透明加解密技术的文件访问控制[J].电脑知识与技术,2013(28):6259-6261.
[6]金彪,熊金波,姚志强,等.基于身份的受控文档透明加解密方案[J].计算机应用,2013(11):3235-3238.
[7]李梅.两种算法的理论分析[J].重庆工商大学学报:自然科学版,2014(5):81-83.
[责任编辑王南山]