计算机已经成为现代人类生活、办公室和其他基本设备之一。我们将以文件的形式将重要信息存储在计算机中,因此我们需要加密和保护这些文件。目前有很多加密方法,但大多数都是用户密码加密,操作繁琐,加密效果不理想。本文介绍了两种不同于前者的透明加密方法:钩透明加密和过滤驱动透明加密,并比较了梁。
文件透明加密技术简介。
文件透明加密技术是近年来针对企业文件保密需求而诞生的一种文件加密技术,不同于常见的文件密码加密。所谓透明,是指用户不会注意到加密解密过程。当用户打开或编辑受保护的文件时,系统会自动对未加密的文件进行加密,并对已加密的文件进行解密。文件以密文的形式存储在硬盘上,在内存中是明文的。一旦使用环境发生变化,就无法打开,因为获得自动解密服务,从而保护文件内容。
透明加密解密技术是一种与操作系统紧密结合的技术。Windows允许程序设计人员在内核和用户级别操作文件。因此,加密过程可以在这两个层次上截获文件读写操作,并嵌入自己的加密算法进行加密解密。APIHOOK(通常称为钩子)技术通过应用级截获成为钩子透明加密。内核级别由文件过滤驱动,称为驱动加密。两者的加密级别如下图所示。
1钩透明加密技术。
早期透明加密的技术手段大多是通过API钩技术进行的,其工作模式是静态加密和重定向,基本思想是将钩程序拦截到受保护文件的开启操作,先将加密文件复制到临时目录中,然后告诉驱动程序隐藏文件,然后解密文件,将临时文件返回到打开文件的过程中,这样打开磁盘上的明文件,用户程序可以正常处理,这里的文件是整体复制和解密;当文件关闭时,钩子被拦截到后,加密明文的临时文件,然后复制并覆盖原文件。
简单地说,当打开文件时,将加密文件的副本复制到隐藏的位置,然后解密文件,打开文件,然后在保存时加密临时文件并覆盖原始文件。这种加密本质上是通过临时文件实现的,为了保证明密文件之间的一致性,必须在每个用户存储或系统自动存储,整个文件整体加密和复制到用户文件的原始存储位置,所以效率低,由于计算机上保存了完整的明文件,只要跟踪临时文件的位置可能泄露,此外,文件在打开和存储过程中需要复制多次,效率损失很大,,Hook API 的方式对于一些程序不能够完美的支持,兼容性有待考证。
由于文件映射的存在,在应用层进行动态加密比较困难,虽然原理上有一定的可行性,但是其加密效率、兼容性、可移植性、稳定性较之于内核层的过滤驱动加密要差很多,好处在于开发难度较小, 网络操作能力强。
2 过滤驱动透明加密技术
2.1 驱动技术简介
过滤驱动加密技术是基于Win2dows 的文件系统过滤驱动( IFS) 技术,工作在Windows 的内核层。它是目前炙手可热的一门技术,其特点是技术门槛较高,需要深入理解Win2dows 系统内核,开发过程中稍有不慎就会破坏系统内核,因此核心技术仅被少数几家实力雄厚的公司所掌握。
文件过滤驱动是把文件作为一种设备来处理的一种虚拟驱动,Windows NT 系统内核采用堆栈式可扩展驱动模型[1 ] ,原则上可以在任何一个层次上加载自己的过滤驱动,但是加载的层次不同,开发的难度和应用价值也不同,现在的技术主要还是加载在文件系统驱动的上层,这样就可以充分利用并扩充文件系统的现有功能,该技术在病毒实时监控与防护、数据备份与还原以及文件访问控制等领域都有着非常广泛的应用。
过滤驱动中几种非常重要的概念包括驱动对象、设备对象、设备堆栈、I/ O 堆栈,驱动对象标示驱动程序,设备对象记录加载的设备,一个驱动对象可以有多个设备对象构成设备对象链表,设备堆栈用于记录所有驱动程序的设备, I/ O 栈用来记录穿越设备堆栈时的操作属性, 操作的对象为IRP ( I/ O Request Pack2age) , IRP 包由系统的某个组件创建,类似于Windows应用程序的“消息”概念,要处理某种数据只需要把IRP 包传送到相应驱动的相应派遣函数中。
2.2 加密的基本思想
在Windows NT 内核操作系统中,应用程序的一次数据请求的过程如图2 所示[4 ] :只有在无缓存或者FAST I/ O 不可用的情况下才在硬盘上读取数据,因此只用拦截IRP —> Flags 为IRP- NOCACHE(表示I/O 请求从存储的媒介而不是高速缓存中读取数据) 、IRP- PAGING- IO(表示此时执行内存页的I/ O 操作)和IRP- SYNCHRONOUS- PAGING- IO(表示内存页需要同步更新,此标志也是由内存管理器使用) 的数据包,对于写数据的IRP 包,在其分发例程中嵌入加密算法完成加密动作,而对于读数据的IRP 包,在IRP包的完成例程中嵌入解密算法,对得到的数据进行解密处理。
2.3 写数据加密的实现
在用户写受保护的文件时,文件加解密客户端能透明地对文件写入的内容进行加密。加密文件判别模块判别出此文件为受保护文件后,将密钥传递给加解密过滤驱动,并由过滤驱动完成写操作。为了使过滤驱动能够加密对文件的写操作,需要拦截IRP- MJ -WRITE 和IRP- MJ - DEVICE- CONTROL 两种IRP。当应用层进程调用API :DeviceIOControl 时,向系统发出IRP- MJ - DEVICE- CONTROL ,过滤驱动可以通过处理此IRP 获得传递给驱动的加密密钥,进而在拦截IRP- MJ - WRITE 的例程中进行加密。
2.4 读数据解密的实现
在用户读受保护的文件时,文件加解密客户端能透明地对读出的原始内容进行解密。加密文件判别器判别出此文件为受保护文件后,将密钥传递给加解密过滤驱动,并由过滤驱动完成读操作。和写操作类似,需要拦截IRP- MJ - WRITE 和IRP- MJ - DEVICECONTROL两种IRP。IRP- MJ - DEVICE- CONTROL例程的用途和实现方式和加密时相同。过滤驱动拦截IRP- MJ - READ 的例程中进行加密。IRP- MJ - READ例程的实现需要利用完成例程,在完成例程中完成加解密过程。
二 两种加密技术比较
以上两种加密技术由于工作在不同的层面,从应用效果、开发难度上各有特点。表1 从各方面进行了简单比较。
三 小结
钩子透明加密和过滤驱动加密是目前两种主流的透明加密方法,二者的区别在于截获文件操作的位置不同,比较而言过滤驱动加密效果更好,但是实现的难度也相当的大,在安全领域具有很高的研究价值和实用价值。