基于文件系统过滤驱动的Windows文件加密技术研究Word格式文档下载.docx
《基于文件系统过滤驱动的Windows文件加密技术研究Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于文件系统过滤驱动的Windows文件加密技术研究Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
FSD与文件系统操作
Windows文件系统的有关操作都是通过FSD完成的:
——显示文件I/O:
应用程序通过I/O接口函数如CreateFile,ReadFile,WriteFile等来访问文件。
——高速缓存延迟写:
此线程定期对高速缓存中已被修改的页面进行写操作。
——高速缓存提前读:
此线程负责提前读数据。
——内存脏页写:
此线程定期清洗缓冲区。
——内存缺页处理
FAT32
Windows2000/XP通过\Winnt\System32\Drivers\Fastfat.sys提供FAT(FileAllocationTable,文件分配表)文件系统驱动程序。
FAT32——文件分配表簇标识扩充为32位,主要应用于Windows9x和WindowsMe中。
优点:
1)具有强大的寻址能力,能比FAT16更有效的管理磁盘;
2)根目录下的文件数目不受最多256的限制;
3)引导记录扩展为包含重要数据结构的备份,因而分区不易受单点的错误影响;
4)支持长文件名格式。
缺点:
同样不支持系统容错特性和内部安全特性。
NTFS(NewTechnologyFileSystem)
NTFS优点
——支持文件系统数据的可恢复性、安全性、数据冗余和数据容错;
——具有其他高级特性:
多数据流、完全支持Unicode、通用索引机制、动态坏簇重新映射(热修复)、完全支持POSIX(可移植操作系统接口)、支持文件数据的压缩、日志记录、支持用户磁盘限额、硬链接与软链接(硬链接允许从多个路径指向同一文件和目录,软链接允许重定向一个目录)、链接跟踪、加密、碎片整理等。
1.NTFS可恢复性支持
NTFS通过日志记录来实现文件系统的可恢复性。
所有改变文件系统的子操作在磁盘上运行之前,先被记录在日志文件中。
在恢复阶段,NTFS根据记录在日志文件中的文件操作信息,对那些部分完成的事务进行重做或撤销,以保证磁盘上文件系统的一致性。
这种技术称为“预写日志记录”。
2.NTFS坏簇恢复支持
Windows2000/XP卷管理功能分别通过用于基本磁盘的FtDisk和用于动态磁盘的LDM(LogicalDiskManager)的卷管理工具来实现坏簇的修复。
NTFS在运行时动态收集有关坏簇的资料,并存储在系统文件中,而在应用程序环境中不必知道坏簇的存在。
当扇区发生错误时,容错驱动程序给NTFS发出该扇区是坏的的通知,NTFS将分配一个新簇来取代坏扇区中的簇,并将数据复制到新簇中,NTFS将标记该坏扇区并不再使用它。
3.NTFS安全性支持
NTFS把文件和目录看成对象和对象的集合,文件和目录对象都带有安全描述符,并作为文件的一部分存储在磁盘上。
进程在打开对象句柄前验证该进程是否具有足够的权限。
NTFS支持加密文件系统(EFS),以阻止非授权用户访问加密文件。
NTFSFSD(文件系统驱动程序)
——I/O管理器将I/O请求送交NTFSFSD执行。
——应用程序通过NTFSFSD创建和存取文件。
步骤如下:
首先检查使用权限,看是否合法用户的请求;
然后I/O管理器将文件句柄转换为文件对象指针;
最后NTFS通过文件对象指针来获得磁盘上的文件。
NTFS磁盘结构
1.卷
NTFS是以卷为基础的。
卷建立在磁盘分区之上。
分区是磁盘的基本组成部分,是一个能够被格式化和单独使用的逻辑单元。
当以NTFS格式来格式化磁盘分区时就创建了NTFS卷。
一个磁盘可以有多个卷,一个卷也可以由多个磁盘组成。
Windows2000/XP常使用FAT卷和NTFS卷。
一个36GB硬盘的三种磁盘配置的实例如下:
2.簇
NTFS与FAT一样,使用簇作为磁盘空间分配和回收的基本单位。
即一个文件占用若干个整簇,而最后一簇的剩余空间不再使用。
在内部,NTFS仅引用簇,而不知道磁盘扇区的大小。
这样使NTFS保持了与物理扇区大小的独立性,能够为不同大小的磁盘选择合适的簇。
卷上簇的大小(称为簇因子)是用户使用Format命令或其他格式化程序格式化卷时确定的,它随着卷的大小而不同,但都为物理扇区的整数倍。
簇的定位可使用逻辑簇号(LCN)和虚拟簇号(VCN)
——LCN对卷中所有的簇从头到尾进行简单编号。
簇因子乘以LCN可获得卷上的物理字节偏移量,从而得到物理磁盘地址。
——VCN对属于特定文件的簇从0到m编号,以便引用文件中的数据。
VCN不要求在物理上连续,可以映射到卷上任何号码的LCN。
3.主控文件表(MFT)
在NTFS中,卷中存放的所有数据,包括用于定位和恢复文件的数据结构、引导程序数据和记录整个卷的分配状态的位图(NTFS元数据),都包含在一个称为主控文件表(MFT)的文件中。
MFT是NTFS卷结构的核心,是NTFS最重要的系统文件。
MFT以文件记录数组实现,每个文件大小为1KB,卷上每个文件(包括MFT本身)都有一行MFT记录。
4.文件引用号
NTFS卷中的文件是通过称为“文件引用号”的64位值来标识的。
文件引用号由文件号(低48位)和文件顺序号(高16位)组成。
——文件号对应文件在MFT中的位置
——顺序号随文件记录的重用而增加,从而使得NTFS能完成内部的一致性检查。
5.文件记录
NTFS不是将文件仅仅视为一个文本库或二进制数据,而是将文件作为许多属性/属性值的集合来处理。
除数据属性外,其他文件属性包括文件名、文件时间标记、文件拥有者等。
6.文件名
NTFS和FAT路径中的每个文件名/目录名长度可达255个字节,可以包含Unicode字符、多个句点和空格。
MS-DOS不能正确识别Win32的文件名,因此NTFS自动生成8字符(加3字符扩展名)以内的MS-DOS文件名。
POSIX子系统需要WindowsNT支持的所有应用程序环境中最大的名字空间,因此,NTFS的名字空间等于POSIX的名字空间。
POSIX子系统可以创建在Win32和MS-DOS中不可见的名称。
7.常驻属性和非常驻属性
若文件的属性值能直接存放在MFT中时,该属性称为常驻属性。
小文件或小目录的所有属性均可在MFT中常驻。
如果属性值直接存放在MFT中,则NTFS只需访问磁盘一次即可获得数据;
而FAT文件系统必须先在FAT表中查找文件,再读出连续分配的单元,才能找到文件数据。
8.文件名索引
在NTFS中,文件目录仅仅是文件名的一个索引。
即为了便于快速访问而用一种特殊的方式组织起来的文件名的集合。
要创建一个目录,NTFS应对目录中文件的文件名属性进行索引。
9.数据压缩
NTFS压缩功能可以对单个文件、整个目录或卷上的整个目录树进行压缩。
NTFS压缩只能在用户数据上执行,而不能在文件系统元数据上执行。
Win32中的GetVolumeInformation函数可以判断一个卷是否已被压缩;
GetCompressedFileSize函数可得到一个文件的实际压缩大小;
DeviceIoControl函数可检查或改变一个文件或目录的压缩设置。
数据压缩可减少磁盘使用空间,但每次解压缩需要大量数据运算。
如果要拷贝一个压缩文件,过程是解压缩、拷贝、重新压缩拷贝的文件。
蓝屏和损坏的根源:
暴力清除加密文件缓存的缓存,在文件过滤器中截获非缓存的读取,由进程的不同来决定是否解密,从而实现不同的进程读取相同的加密文件,得到截然相反的明文和密文。
国内透明加密市场的现状:
现有的驱动透明加密普遍存在损坏文件、性能降低、兼容性差等诸多问题。
乃至不少的厂商在宣传中都不再强调软件的功能和特色,只要突出稳定、不破坏文件就能获得不错的市场回报。
文件过滤驱动的工作原理
在基于NT内核的Windows操作系统中,文件系统驱动程序是I/O子系统的一个组件,它为用户提供在磁盘等非易失性存储介质上存取数据的服务。
NT的I/O管理器支持分层驱动程序模型,每个IRP(I/O请求包)的处理分别经过各层驱动程序,直到某层驱动程序完成这个请求。
因此第三方开发的驱动程序就有机会插入到这个层次结构中,截获和处理来自上层的操作请求,这种驱动程序称为过滤驱动程序。
文件系统过滤驱动程序是针对文件系统而言的。
I/O管理器根据用户的文件操作请求构造IRP发送到文件系统驱动程序,文件系统驱动程序把相应于文件系统的操作转换为相应于存储设备驱动程序的操作,并通过I/O管理器来调用存储设备驱动程序。
文件系统过滤驱动程序可以在请求发送到目标设备前截取并处理它,从而实现控制文件系统操作的目的。
加解密过程
采用的是DES算法。
DES加密算法是分组加密算法,明文以64位单位分成块。
64位数据在64位密钥的控制下,经过初始变换后,进行16轮加密迭代:
64位数据被分成左右两半部分,每部分32位,密钥与右半部分相结合,然后再与左半部分相结合,结果作为新的右半部分;
结合前的右半部分作为新的左半部分。
这一系列步骤组成一轮。
这种轮换要重复16次。
最后一轮之后,再进行初始置换的逆置换,就得到了64位的密文。
解密是加密的逆过程DES的加密过程可分为加密处理,加密变换和子密钥生成几个部分组成。
①加密处理过程初始变换。
加密处理首先要对64位的明文按初始换位表IP进行变换。
加密处理。
上述换位处理的输出,中间要经过16轮加密变换。
初始换位的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位。
以此类推。
③子密钥生成过程密钥通常表示为64位的自然数,首先通过压缩换位PC-1去掉每个字节的第8位,用作奇偶校验,因此,密钥去掉第8、16、24„„64位减至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()中,用户管理程序