版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统中与文件和目录相关的子系统被称为文件系统。Windows FSD(文件系统驱动程序)体系结构Windows 2000/XP的FSD(File System Driver,文件系统驱动程序)分为本地FSD和远程FSD。本地FSD:允许用户访问本地计算机上的数据本地FSD负责向I/O管理器注册自己,当开始访问某个卷时,I/O管理器调用FSD来进行卷识别。完成卷识别后,本地FSD创建一个设备对象以表示所装载的文件系统。I/O管理器通过卷参数块(VPB)在存储管理器创建的卷设备对象和FSD创建的卷设备对象之间建立连接。此连接将I/O管理器的I/O请求转交给FSD设备对象。远程FSD:允许用户通
2、过网络访问远程计算机上的数据。由两部分组成:客户端FSD和服务器端FSD。客户端FSD首先接收来自应用程序的I/O请求,并转换为网络文件系统协议命令,然后通过网络发送给服务器端FSD。服务器端FSD监听网络命令,接收网络文件系统协议命令并转交给本地FSD去执行。FSD与文件系统操作Windows文件系统的有关操作都是通过FSD完成的:显示文件I/O:应用程序通过I/O接口函数如CreateFile,ReadFile,WriteFile等来访问文件。高速缓存延迟写:此线程定期对高速缓存中已被修改的页面进行写操作。高速缓存提前读:此线程负责提前读数据。内存脏页写:此线程定期清洗缓冲区。内存缺页处理
3、FAT32 Windows 2000/XP通过WinntSystem32DriversFastfat.sys提供FAT(File Allocation Table,文件分配表)文件系统驱动程序。FAT32文件分配表簇标识扩充为32位,主要应用于Windows 9x和Windows Me中。优点:1)具有强大的寻址能力,能比FAT16更有效的管理磁盘;2)根目录下的文件数目不受最多256的限制;3)引导记录扩展为包含重要数据结构的备份,因而分区不易受单点的错误影响;4)支持长文件名格式。缺点:同样不支持系统容错特性和内部安全特性。NTFS(New Technology File System)N
4、TFS优点支持文件系统数据的可恢复性、安全性、数据冗余和数据容错;具有其他高级特性:多数据流、完全支持Unicode、通用索引机制、动态坏簇重新映射(热修复)、完全支持POSIX(可移植操作系统接口)、支持文件数据的压缩、日志记录、支持用户磁盘限额、硬链接与软链接(硬链接允许从多个路径指向同一文件和目录,软链接允许重定向一个目录)、链接跟踪、加密、碎片整理等。1 NTFS可恢复性支持NTFS通过日志记录来实现文件系统的可恢复性。所有改变文件系统的子操作在磁盘上运行之前,先被记录在日志文件中。在恢复阶段,NTFS根据记录在日志文件中的文件操作信息,对那些部分完成的事务进行重做或撤销,以保证磁盘上
5、文件系统的一致性。这种技术称为“预写日志记录”。2 NTFS坏簇恢复支持Windows 2000/XP卷管理功能分别通过用于基本磁盘的FtDisk和用于动态磁盘的LDM(Logical Disk Manager)的卷管理工具来实现坏簇的修复。NTFS在运行时动态收集有关坏簇的资料,并存储在系统文件中,而在应用程序环境中不必知道坏簇的存在。当扇区发生错误时,容错驱动程序给NTFS发出该扇区是坏的的通知,NTFS将分配一个新簇来取代坏扇区中的簇,并将数据复制到新簇中,NTFS将标记该坏扇区并不再使用它。3 NTFS安全性支持NTFS把文件和目录看成对象和对象的集合,文件和目录对象都带有安全描述符,
6、并作为文件的一部分存储在磁盘上。进程在打开对象句柄前验证该进程是否具有足够的权限。NTFS支持加密文件系统(EFS),以阻止非授权用户访问加密文件。NTFS FSD(文件系统驱动程序)I/O管理器将I/O请求送交NTFS FSD执行。应用程序通过NTFS FSD创建和存取文件。步骤如下:首先检查使用权限,看是否合法用户的请求;然后I/O管理器将文件句柄转换为文件对象指针;最后NTFS通过文件对象指针来获得磁盘上的文件。NTFS磁盘结构1 卷NTFS是以卷为基础的。卷建立在磁盘分区之上。分区是磁盘的基本组成部分,是一个能够被格式化和单独使用的逻辑单元。当以NTFS格式来格式化磁盘分区时就创建了N
7、TFS卷。一个磁盘可以有多个卷,一个卷也可以由多个磁盘组成。Windows 2000/XP常使用FAT卷和NTFS卷。一个36GB硬盘的三种磁盘配置的实例如下:NTFS卷NTFS卷1NTFS卷2FAT卷NTFS卷C:(36GB)C:(18GB)D:(18GB)C:(12GB)D:(24GB)2 簇NTFS与FAT一样,使用簇作为磁盘空间分配和回收的基本单位。即一个文件占用若干个整簇,而最后一簇的剩余空间不再使用。在内部,NTFS仅引用簇,而不知道磁盘扇区的大小。这样使NTFS保持了与物理扇区大小的独立性,能够为不同大小的磁盘选择合适的簇。卷上簇的大小(称为簇因子)是用户使用Format命令或其
8、他格式化程序格式化卷时确定的,它随着卷的大小而不同,但都为物理扇区的整数倍。簇的定位可使用逻辑簇号(LCN)和虚拟簇号(VCN)LCN对卷中所有的簇从头到尾进行简单编号。簇因子乘以LCN可获得卷上的物理字节偏移量,从而得到物理磁盘地址。VCN对属于特定文件的簇从0到m编号,以便引用文件中的数据。VCN不要求在物理上连续,可以映射到卷上任何号码的LCN。3 主控文件表(MFT)在NTFS中,卷中存放的所有数据,包括用于定位和恢复文件的数据结构、引导程序数据和记录整个卷的分配状态的位图(NTFS元数据),都包含在一个称为主控文件表(MFT)的文件中。MFT是NTFS卷结构的核心,是NTFS最重要的
9、系统文件。MFT以文件记录数组实现,每个文件大小为1KB,卷上每个文件(包括MFT本身)都有一行MFT记录。4 文件引用号NTFS卷中的文件是通过称为“文件引用号”的64位值来标识的。文件引用号由文件号(低48位)和文件顺序号(高16位)组成。文件号对应文件在MFT中的位置顺序号随文件记录的重用而增加,从而使得NTFS能完成内部的一致性检查。5 文件记录NTFS不是将文件仅仅视为一个文本库或二进制数据,而是将文件作为许多属性/属性值的集合来处理。除数据属性外,其他文件属性包括文件名、文件时间标记、文件拥有者等。6 文件名NTFS和FAT路径中的每个文件名/目录名长度可达255个字节,可以包含U
10、nicode字符、多个句点和空格。MS-DOS不能正确识别Win32的文件名,因此NTFS自动生成8字符(加3字符扩展名)以内的MS-DOS文件名。POSIX子系统需要Windows NT支持的所有应用程序环境中最大的名字空间,因此,NTFS的名字空间等于POSIX的名字空间。POSIX子系统可以创建在Win32和MS-DOS中不可见的名称。7 常驻属性和非常驻属性若文件的属性值能直接存放在MFT中时,该属性称为常驻属性。小文件或小目录的所有属性均可在MFT中常驻。如果属性值直接存放在MFT中,则NTFS只需访问磁盘一次即可获得数据;而FAT文件系统必须先在FAT表中查找文件,再读出连续分配的
11、单元,才能找到文件数据。8 文件名索引在NTFS中,文件目录仅仅是文件名的一个索引。即为了便于快速访问而用一种特殊的方式组织起来的文件名的集合。要创建一个目录,NTFS应对目录中文件的文件名属性进行索引。9 数据压缩NTFS压缩功能可以对单个文件、整个目录或卷上的整个目录树进行压缩。NTFS压缩只能在用户数据上执行,而不能在文件系统元数据上执行。Win32中的GetVolumeInformation函数可以判断一个卷是否已被压缩; GetCompressedFileSize函数可得到一个文件的实际压缩大小;DeviceIoControl函数可检查或改变一个文件或目录的压缩设置。数据压缩可减少磁
12、盘使用空间,但每次解压缩需要大量数据运算。如果要拷贝一个压缩文件,过程是解压缩、拷贝、重新压缩拷贝的文件。蓝屏和损坏的根源:暴力清除加密文件缓存的缓存,在文件过滤器中截获非缓存的读取,由进程的不同来决定是否解密,从而实现不同的进程读取相同的加密文件,得到截然相反的明文和密文。国内透明加密市场的现状:现有的驱动透明加密普遍存在损坏文件、性能降低、兼容性差等诸多问题。乃至不少的厂商在宣传中都不再强调软件的功能和特色,只要突出稳定、不破坏文件就能获得不错的市场回报。 文件过滤驱动的工作原理在基于NT内核的Windows操作系统中,文件系统驱动程序是I/O子系统的一个组件,它为用户提供在磁盘等非易失性
13、存储介质上存取数据的服务。NT的I/O管理器支持分层驱动程序模型,每个IRP( I/O请求包)的处理分别经过各层驱动程序,直到某层驱动程序完成这个请求。因此第三方开发的驱动程序就有机会插入到这个层次结构中,截获和处理来自上层的操作请求,这种驱动程序称为过滤驱动程序。文件系统过滤驱动程序是针对文件系统而言的。I/O管理器根据用户的文件操作请求构造IRP发送到文件系统驱动程序,文件系统驱动程序把相应于文件系统的操作转换为相应于存储设备驱动程序的操作,并通过I/O管理器来调用存储设备驱动程序。文件系统过滤驱动程序可以在请求发送到目标设备前截取并处理它,从而实现控制文件系统操作的目的。加解密过程采用的
14、是DES算法。DES加密算法是分组加密算法,明文以64位单位分成块。64位数据在64位密钥的控制下,经过初始变换后,进行16轮加密迭代:64位数据被分成左右两半部分,每部分32位,密钥与右半部分相结合,然后再与左半部分相结合,结果作为新的右半部分;结合前的右半部分作为新的左半部分。这一系列步骤组成一轮。这种轮换要重复16次。最后一轮之后,再进行初始置换的逆置换,就得到了64位的密文。 解密是加密的逆过程 DES的加密过程可分为加密处理,加密变换和子密钥生成几个部分组成。 加密处理过程 初始变换。加密处理首先要对64位的明文按初始换位表IP进行变换。 加密处理。上述换位处理的输出,中间要经过16
15、轮加密变换。初始换位的64位的输出作为下一次的输入,将64位分为左、右两个32位,分别记为L0和R0,从L0、R0到L16、R16,共进行16轮加密变换。最后换位。进行16轮的加密变换之后,将L16和R16合成64位的数据, 再按最后换位表进行IP-1的换位,得到64位的密文。 加密变换过程 通过重复某些位将32位的右半部分按照扩展换位表扩展为48位,而56位的密钥先移位然后通过选择其中的某些位减少至48位,48位的右半部分通过异或操作和48位的密钥结合,并分成6位的8个分组,通过8个S-盒将这48位替代成新的32位数据,再将其置换一次。这些S-盒输入6位,输出4位。以此类推。 子密钥生成过程
16、 密钥通常表示为64位的自然数,首先通过压缩换位PC-1去掉每个字节的第8位,用作奇偶校验,因此,密钥去掉第8、16、2464位减至56位,所以实际密钥长度为56位,而每轮要生成48位的子密钥。 输入的64位密钥,首先通过压缩换位得到56位的密钥,每层分成两部分,上部分28位为C0,下部分为D0。C0和D0依次进行循环左移操作生成了C1和D1,将C1和D1合成56位,再通过压缩换位PC-2输出48位的子密钥K1,再将C1和D1进行循环左移和PC-2压缩换位,得到子密钥K2.以此类推,得到16个子密钥。加解密功能的实现在FileFiherDeviceIoControl()中,用户管理程序注入的U
17、SBKey中的加密密钥保存在加密密钥结构filter_key中,并根据输入缓冲区的大小判断密钥是否得到了更新,如果更新则将其分别保存。加密密钥的结构如下: struct filter_key UNICODE_STRING USBKey;/表示注入的加密密钥 UNICODE_STRING newUSBKey;/表示注入的新更新的加密密钥 UNICODE_STRING protectedkey;/表示保存在安全文件夹扩展属性中的加密密钥 UNICODE_STRING newprotectedkey;/表示安全文件夹扩展属性中新更新的加密密钥 ; 在读写卷的处理例程中将加密密钥取出来,然后与解密后的
18、存储在安全文件夹扩展属性中的加密密钥异或后生成加密算法的密钥K。采用改进的基于CBC的加密模式,文件被分成一个个64 bit的分组,设Pi是第i个分组的明文,Ci为第i个分组的密文,KI为第i个加密密钥口令K0=K,假定C0为一个预定的64 bit的固定值。对于第一个分组,加密密钥Kt为C0与K0的异或值,然后用IDEA算法加密明文分组P1与C0的异或值得到密文分组C1;第二分组的加密密钥K2为C1与K1的异或值,用IDEA算法加密明文分组P2与C1的异或值得到密文分组C2。按照这种方法依次对所有分组用IDEA算法加密。然后把这些加密后的分组传递给文件系统驱动程序,再通过移动存储介质驱动程序写
19、入安全文件夹。解密过程与之相反.加密算法需要保护的文件存入安全目录中,采用两种加密算法对文件进行加密。文件内容用对称加密算法加密,实行每个文件不同密钥方式,密钥随机生成;生成的密钥用非对称加密算法加密,使用用户公钥加密后保存到同一个目录中专用密钥文件里;用户私钥保存于U盘中。使用安全目录中文件时,插入密钥U盘,过滤驱动程序用私钥先解密加密密钥,得到文件密钥并自动进行加解密处理。用户取走私钥U盘,入侵者不能得到安全目录中明文数据。用户设置共享目录时,用共享者公钥加密指定共享文件的文件密钥,存入密钥文件中。共享用户访问共享文件时,过滤驱动程序把共享者加密密钥取出,与共享文件一起传给共享者。共享者得
20、到密文文件和密钥后,插入自己私钥U盘得到文件明文。密钥管理 为了兼顾安全性和效率,文件保护方案采用两种加密算法:对称加密算法和非对称加密算法。对称加密算法安全性相对较低,但加密速度较快;非对称加密算法安全性较高,但速度较慢。文件内容用对称算法加密。为了增强安全性,采用每个文件一密钥方式,文件密钥由算法随机生成,并通过增加密钥长度提高破解密钥的难度。文件密钥的安全至关重要,为了安全地保护文件密钥及方便地管理文件密钥,用非对称算法加密文件密钥。非对称算法需要一对密钥:公钥和私钥。用户公钥用来加密文件密钥,得到的加密密钥保存在与文件同一目录的密钥文件中;用户私钥经加密后保存于U盘中,以备解密加密密钥
21、之用。密钥文件存放加密密钥,一条加密密钥信息包括文件名、所有者、共享者、加密密钥等内容。密钥文件存放在安全目录中,每个目录(包括子目录)一个。通常情况下,密钥文件不能被创建、修改或删除。设置安全目录或创建安全目录子目录时自动生成密钥文件;解除或删除安全目录及其子目录时删除密钥文件;设置或解除共享目录、复制或移动文件到安全目录以及在安全目录中创建新文件时修改密钥文件。所有这些操作在过滤驱动程序中控制,并需要文件所有者插入私钥U盘才能完成。应用程序读文件时,过滤驱动程序截获密文后,从密钥文件中取出文件对应的加密密钥,从用户私钥U盘中读出并解密私钥,再用用户私钥解密加密密钥,得到文件密钥后解密密文并
22、传向上层应用程序。应用程序写文件时,过滤驱动程序截获明文后,从密钥文件取出加密密钥,从用户私钥U盘中读出并解密私钥,再用用户私钥解密加密密钥,得到文件密钥后加密明文并传向下层驱动;若是新建文件的写入,则首先生成文件密钥,用文件密钥加密明文的同时,利用用户公钥加密文件密钥并保存于密钥文件中。为提高效率,文件密钥可以缓存一段时间,具体时间由文件所有者设置。密钥存储 密钥的安全是整个系统的关键。在加密模块中,使用了3层密钥结构:USBKey中的加密密钥用来合成加解密文件时使用的密钥,即私人密钥;内核模式下非分页内存中的密钥用来加密需要保存在安全文件夹扩展属性中的加密密钥,即大群组的共享密钥;保存在安
23、全文件夹扩展属性中的加密密钥用来合成加解密文件时的密钥,即小群组的共享密钥。密钥大小均为128 bit。 文件的加解密密钥分为两部分:私人密钥由USBKey产生,并在初始化USBKey配置文件时保存在其文件中;小群组密钥采用IDEA加密算法加密后保存在安全文件夹的扩展属性中,大群组密钥保存在内核模式的非分页内存中。 密钥更新 因为密钥在整个系统中有着举足轻重的作用,因此当密钥不再使用或者被恶意者窃取后,应能及时地回收。由于其他两个密钥均为群组的共享密钥,所以通常对USBKey中的加密密钥进行更新,只需生成新的加密密钥,设置一个更新标志,用户管理程序检查更新标志,如果为1,就将新旧加密密钥都传递
24、给驱动程序,驱动程序先将新iHDn密密钥分别保存,再用旧的加密密钥解密所有文件,然后再用新的加密密钥加密就可以了。最后用户管理程序将USBKey中的新的加密密钥替代旧的加密密钥,并将新加密密钥字段彻底删除,同时将更新标志设为0。 透明加密技术 透明加密技术是与windows紧密结合的一种技术,它工作于windows的底层。通过监控应用程序对文件的操作,在打开文件时自动对密文进行解密,在写文件时自动将内存中的明文加密写入存储介质。从而保证存储介质上的文件始终处于加密状态。监控windows打开(读)、保存(写)可以在windows操作文件的几个层面上进行。现有的32位CPU定义了4种(03)特权
25、级别,或称环(ring)。其中0级为特权级,3级是最低级(用户级)。运行在0级的代码又称内核模式,3级的为用户模式。常用的应用程序都是运行在用户模式下,用户级程序无权直接访问内核级的对象,需要通过API函数来访问内核级的代码,从而达到最终操作存储在各种介质上文件的目的。 为了实现透明加密的目的,透明加密技术必须在程序读写文件时改变程序的读写方式。使密文在读入内存时程序能够识别,而在保存时又要将明文转换成密文。Window 允许编程者在内核级和用户级对文件的读写进行操作。内核级提供了虚拟驱动的方式,用户级提供Hook API的方式。因此,透明加密技术也分为API HOOK广度和VDM(Windo
26、ws Driver Model)内核设备驱动方式两种技术。API HOOK俗称钩子技术,VDM俗称驱动技术。驱动加密技术 驱动加密技术基于windows的文件系统(过滤)驱动(IFS)技术,工作在windows的内核层。我们在安装计算机硬件时,经常要安装其驱动,如打印机、U盘的驱动。文件系统驱动就是把文件作为一种设备来处理的一种虚拟驱动。当应用程序对某种后缀文件进行操作时,文件驱动会监控到程序的操作,并改变其操作方式,从而达到透明加密的效果。 驱动加密技术与应用程序无关,他工作于windows API函数的下层。当API函数对指定类型文件进行读操作时,系统自动将文件解密;当进入写操作时,自动将
27、明文进行加密。由于工作在受windows保护的内核层,运行速度更快,加解密操作更稳定。 但是,驱动加密要达到文件保密的目的,还必须与用户层的应用程序打交道。通知系统哪些程序是合法的程序,哪些程序是非法的程序。驱动透明加密工作在内核层。 数据文件受到威胁的分类:数据文件安全问题主要有:(1)数据文件被破坏;(2)数据文件被窃取。 数据文件被破坏是指存储在计算机上的数据文件不能正常使用,可能包括的情况有数据文件被删除、数据文件被篡改等,也可能包括计算机硬盘被破坏。这种情况下有可能是因为地震、洪水等自然灾害或者战争存储数据文件的计算机硬盘被彻底报废,也可能是人为原因的故意破坏。数据文件被破坏的情况可
28、以通过数据备份在一定程度上来解决,并且现在这种技术和产品都已经很成熟。通过把数据备份到其它存储介质、远程服务器等方式,即使数据遭到破坏,依然可以进行恢复,因此不对这个方面问题进行讨论。 数据文件被窃取是指存储在某个受控计算机的受控文件失控,主要可以分为硬件上直接盗窃磁盘和软件上通过复制数据文件来实现的。对于直接盗窃硬盘这种暴力的方式,主要需要加强对计算机安放环境的安全保卫。而对于软件层面的窃取行为,首先可以把它分为两类:外部入侵和内部人员泄密。外部入侵主要是指通过网络入侵到存储关键数据文件的计算机上,窃取数据文件;内部人员泄密是指能够通过合法途径访问到数据文件的人非法地把文件转移给其他没有权限
29、访问这些文件的人。防御外部入侵也是一门很复杂的技术,这个主要不在本文中研究,详细的内容可以参见一些关于入侵检测和入侵防御的资料。除了防止外部入侵以外,可以通过把数据文件加密的方法使得即使文件被窃取,破译密码后才能使用,这也能在很大程度上对外部入侵窃取文件的危害减轻。相对于外部的黑客入侵而言,内部人员泄密造成的后果更为严重,也更加不容易预防。因为内部人员知道哪些数据最为重要的,重要的数据在什么地方,并且在拥有足够权限的基础上可以通过合法的手段将数据窃取,而不被发觉。要防止这些潜在危险的存在,仅仅通过严格的权限控制或者人事管理是解决不了问题的,设计不出一套方案,能够在不确定每个人都是可靠的前提下,
30、保证数据文件的绝对安全。所以,需要选择数据文件加密的方法,即使数据文件被转移到失控,也能通过密码对文件产生一定程度的保护。 通过对数据文件受到的威胁分类可知,对存储在磁盘上的数据文件进行加密,可以对防止数据文件通过外部入侵和内部泄密上有一定的作用,也是所有方法中成本较低,安全性较高的方法。 文件加密目标:就是通过对存储在计算机硬盘上的数据文件进行加密,保证数据文件都是以密文的形式存储在硬盘上。即使文件被窃取,对加密文件的破解也能成为关键文件泄密的主要屏障。 这种加密是建立在不会消耗太多的用户体验和效率的基础上的,称为透明加解密。在用户体验方面,计算机的用户完全感受不到这种加密的存在,密文文件在
31、被加载到内存的过程中自动的解密,在从内存保存到硬盘的过程中自动被加密。这种设计让用户完全接触不到加解密的过程,一方面减轻了用户的负担,让用户不必参与到复杂的加解密的过程中;另一方面,减少用户的参与也减少了用户在参与过程中泄密的可能,让有泄密想法的用户根本插不上手。在效率方面,主要对效率影响的因素是加解密过程,不同的加解密算法将会有不同的强度,但是越强的算法通常时间、资源消耗越大,选择合适的算法进行加解密操作一方面不要牺牲太多的时间和资源,另一方面又具有较强的安全性也是本文需要考虑的问题。 要达到的目标是对所有离开受控计算机的文件都是加密文件。如果有人企图通过窃取计算机硬盘、通过网络窃取文件、通
32、过可移动设备窃取文件,即使成功,得到的也是加密的文件,虽然不能保证这些加密文件不被破解,但破解密码成本相对较高,可以有效的保护文件。在读写文件的透明加解密的操作,在复制文件的加解密的过程。保证存在硬盘的数据均为密文,从计算机考出的文件也是被加密的文件。这么操作的目的和意义就是把物理窃取、网络入侵、内部泄密的情况最终都归结到密码破解,即使得到受控数据文件的话也需要进行复杂的密码破译的工作。并且根据不同的文件受控级别,可以设置不同的密码强度。在没有办法保证数据文件绝对安全、不被窃取的情况下,实行密码保护也许是最优的选择了。 文件存取相关的原理可以描述如下:应用程序调用kernel32.dll 提供
33、的Windows API,kernel32.dll 中的Windows API调用kernel32.dll 中的 Native API,或者由应用程序直接调用ntdll.dll提供的Native API,发出一个请求操作。I/O 管理器接收到上层传来的I/O 请求,通过构造输入输出请求包IRP(I/O Request Package) 来描述这个请求,然后向下传递给文件系统驱动、存储设备驱动做后续处理,低层驱动处理完毕后把结果依次向上返回,最后经过I/O 管理器,把结果返回给API 函数的返回值。 文件透明加密技术是近些年针对企业文件保密需求应运而生的一种文件加密技术,区别于常见的文件 密码加
34、密。所谓透明,是指对用户而言加解密过程不会被觉察,当用户打开或编辑受保护文件时,系统将自 动对未加密的文件进行加密,对已加密的文件解密。 文件在硬盘上以密文形式存储,在内存中则为明文,一 旦改变使用环境,由于无法获得自动解密服务而无法打开,从而达到保护文件内容的目的。 透明加解密技术是与操作系统紧密结合的一种技术,wjndows允许程序设计人员在内核和用户两个级别操作文件,因此,加密进程就可以在这两个层次截获文件读写操作,嵌入自己的加密算法进行加解密,通常应用级别的截获采用API H0()K(俗称钩子)技术,称为钩子透明加密,内核级采用文件过滤驱动,称驱动加密。 过滤驱动加密技术是基于wind
35、ows的文件系统过滤驱动(IFN)技术,工作在Windows的内核层。它是 目前炙手可热的一门技术,其特点是技术门槛较高,需要深入理解windows系统内核,开发过程中稍有不慎就会破坏系统内核,因此核心技术仅被少数几家实力雄厚的公司所掌握。文件过滤驱动是把文件作为一种设备来处理的一种虚拟驱动,Windows N F系统内核采用堆栈式可扩展驱动模型,原则上可以在任何一个层次上加载自己的过滤驱动,但是加载的层次不同,开发的难度和应用价值也不同,现在的技术主要还是加载在文件系统驱动的上层,这样就可以充分利用并扩充文件系统的现有功能,该技术在病毒实时监控与防护、数据备份与还原以及文件访问控制等领域 都
36、有着非常广泛的应用。 过滤驱动中几种非常重要的概念包括驱动对象、设备对象、设备堆栈、I0堆栈,驱动对象标示驱动程序,设备对象记录加载的设备,一个驱动对象可以有多个设备对象构成设备对象链表,设备堆栈用于记录所有驱动程序的设备,IO栈用来记录穿越设备堆栈时的操作属性,操作的对象为IRP(IO Request Package),IRP包由系统的某个组件创建,类似于Windows 应用程序的“消息”概念,要处理某种数据只需要把IRP包传送到相应驱动的相应派遣函数中。 加密的基本思想:在Windows NT内核操作系统中,应用程序的一次数据请求的过程:只有在无缓存或者FAST IO不可用的情况下才在硬盘
37、上读取数据,因此只用拦截IRP_H>F1agS为IRPNOCA 砸(表示IO请求从存储的媒介而不是高速缓存中读取数据)、 IRPPAGINGIO(表示此时执行内存页的IO操作)和IRPSYNCHRONOUSPAGING10(表示内存页 需要同步更新,此标志也是由内存管理器使用)的数据包,对于写数据的IRP包,在其分发例程中嵌入加密算法完成加密动作,而对于读数据的IRP包,在IRP包的完成例程中嵌入解密算法,对得到的数据进行解密处理。 在文件系统驱动层进行加密处理,就是驱动层的透明加解密技术。在正常的Windows NT系统上多出了一个加密单元,这个加密单元主要处理文件系统的一些操作,进行
38、加解密。微软的 NTFS的EFS 就是一个这样的系统,因为文件系统拥有以文件或目录的粒度访问文件的能力,所以加密文件系统能够灵活的控制加密的范围,根据特定的文件类型判断是否进行加密和解密。但是微软的这个系统只能在NTFS文件系统基础上的,不支持FAT和NTFS的较低版本,不具有系统通用性。并且 EFS 是微软自己的产品,而对于第三方来说,在很多驱动程序没有文档化的情况下,开发这样的一个透明加解密的难度可想而知。并且驱动层程序的设计本身就很复杂,所以在本文中,并没有采用这种透明加解密的方法。 写数据加密的实现:在用户写受保护的文件时,文件加解密客户端能透明地对文件写入的内容进行加密。加密文件判别
39、模 块判别出此文件为受保护文件后,将密钥传递给加解密过滤驱动,并由过滤驱动完成写操作。为了使过滤驱动能够加密对文件的写操作,需要拦截IRPMJWRITE和IRPMJDEVICECONTROL两种IRP。当应用层进程调用API:DeviceIntrol时,向系统发出IRPMJDEVICECONTROL,过滤驱动可以通过处理此IRP获得传递给驱动的加密密钥,进而在拦截IRPMJWRITE的例程中进行加密。 下面将分别介绍这两个例程的实现。 (1)处理IRPMJDEVICECONTROL例程。 首先获得应用层程序在1RP中携带的输人数据其操作代码,如果携带了传递密钥的操作代码,例程将存储密钥,并直接
40、完成此IRP,否则将IRP交给底层驱动处理。 伪代码如下: NTSrATUS EneryptDeviceControl(IN PDEVICEOBJECT De, viceObiectIN PIRP Irp) PVOID inputBufer; ULONG inputBufferLength; Irp一>loStatusSmtus=STATUSSUCCESS; Irp一>loStamsInformation=O: icntrolCode=irpStack一>ParametersDevicelc2ontro1IoControlCode; inputBufer=Irp一>As
41、sociaredlrpSystemBufer; inputBuferLength=irpStack一>ParametersDeviceloContro1InputBufferLength; if(icControlCode=INPUTKEY) SetKey(inputBuffer);将输入的加密密钥保存起来 IoCompleteRequest(Irp,IONOINCREMENT);完成此IRP Return STATUSSUCCESS: 接下来将1RP继续下发传递给下层的驱动处理 (2)处理IRPMJWRITE例程。 需要区分IRI 携带数据的两种方式,由MDL结构指定或直接包含数据的指
42、针。 其实现的伪代码如下: NTSTATUS EncryptWrite(IN PDEVI("一OBJECF)e ce( ect,lNPIRPIrp) 完成初始化的工作 PIOSTACKLOCATION irpsp=loGetCurrentIrl5tackLocation (Irp); switch(irpsp一>MinorFunction) case IRPMNN0RMAI: ifIrp一>MdlAddmss!=NULL) 4断写的数据是否是在MDL结构中 产生一个新的MDL结构,将其指向一个加密后的数据库,并将Irp一>MdlAddress指针指向新的MDL结构
43、else buffer=Irp一>UserBuffer; Encrypt(buffer,GetKey();力密所写的数据 i 供它的必要操作 读数据解密的实现 :在用户读受保护的文件时,文件加解密客户端能透明地对读出的原始内容进行解密。加密文件判别器判别出此文件为受保护文件后,将密钥传递给加解密过滤驱动,并由过滤驱动完成读操作,和写操作类似,需要拦截IRPMJWRITE和IRP一一DEVIC,E CONTROL两种IRP。IRPMJDEVICECONTROl 例程的用途和实现方式和加密时相同。过滤驱动拦截 IRPMJREAD的例程中进行加密。IRPIvtJREAD 例程的实现需要利用完成
44、例程,在完成例程中完成加解密过程。 下面将介绍这个例程的实现。 NTSrATUS EncryptWrite(IN PDEVICEOBJECT DeviceOt,iec。 IN PIRPIrp) 初始化操作 KdnitializeEvent(&waitEvent,Notifica,ionEvent,FALSE); loCopyCurrentIrpStackk ati_ToNext(1rp); loSetCompletionRoutine(hP,EncryptReadCompletion, &waitEvem,TRUE,TRUE,TRUE);设置完成例程 status=loCallDriver(devExt一>AttachedToDeviceObject,Irp); if(STATUSPENDI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学信息技术第二册下册 第21课 走进PowerPoint 1教案 苏科版
- 2026金融投资行业市场深度分析及高风险管控领域与行业发展趋势评估报告
- 某纺织厂质量检验操作办法
- 人教版小学一年级道德与法治上册分层方案
- 不锈钢给水管道安装施工方案
- 数据机房日常运维管理手册
- 人教PEP小学三年级英语上册全册教学课件
- 2026金融投资咨询行业市场现状供需分析及投资评估规划分析研究分析
- 某食品集团公司设备制度
- 新教材高中物理 第4章 电磁振荡与电磁波 4 电磁波谱教学设计 新人教版选择性必修第二册
- 拆除临时用电施工方案
- 《铁路调车工作》课件
- 小班语言活动秋天的颜色
- 履带吊安拆装方案-天宫庄园站
- 事业编聘用合同
- 认知中心建设方案
- 世界盐产业地理分布与区域特点
- 残联招聘笔试试题(答案)
- 第一章食品罐藏工艺1
- GB/T 37573-2019露天煤矿边坡稳定性年度评价技术规范
- GB/T 20017-2005金属和其他无机覆盖层单位面积质量的测定重量法和化学分析法评述
评论
0/150
提交评论