三、 透明加密产品原理和分类
1. 透明加密原理
目前国内市场上的企业级文档加密软件客户端仅支持微软的windows操作系统,应用范围以局域网应用为主。
微软Windows采用事件驱动的机制,通过消息的传递来实现对应用的管理。其中监控windows打开(读)、保存(写)可以在windows操作文件的多个层面上进行。例如:32位CPU定义了4种(0~3)特权级别,或称环(ring),如图1所示。其中0级为特权级,3级是最低级(用户级)。运行在0级的代码又称内核模式,3级的为用户模式。常用的应用程序都是运行在用户模式下,用户级程序无权直接访问内核级的对象,需要通过API函数来访问内核级的代码,从而达到最终操作存储在各种介质上文件的目的。为了实现透明加密的目的,透明加密技术必须在程序读写文件时改变程序的读写方式。使密文在读入内存时先转换成为明文,以便应用程序能够识别;在保存时又要将明文转换成密文,以达到保密的效果。
图1
Window允许编程人员在内核级和用户级对文件的读写进行管理,内核级采用虚拟驱动的方式,用户级采用Hook API(俗称钩子技术)的方式。因此,透明加密产品更具其采用的核心技术包括API Hook和VDM(Windows Driver Model)内核设备驱动挂载方式(俗称驱动技术)。透明加密软件通过监视涉密应用的磁盘读写,对文档进行动态的加密和解密,由于这些操作都在后台自动完成,除了速度可能降低外,用户在使用方式上与平时没有差异。
编程上可以在两个技术层面对对文件的操作进行控制,内核层和应用层,内核层采用文件驱动的方式,应用层采用Hook API(俗称钩子技术)的方式。因此,透明加密产品更具其采用的核心技术包括API Hook和VDM(Windows Driver Model)内核设备驱动挂载方式(俗称驱动技术)。透明加密软件通过监视涉密进程的磁盘读写,对保密文档进行动态的加密和解密,由于这些操作都在后台自动完成,除了速度可能降低外,用户在使用方式上与平时没有差异。
有关驱动模式和钩子模式加密方式的差异请参考《透明加密技术浅析》一文,作者陈漠,地址:http://www.e-works.net.cn/Articles/511/Article38799.htm来源:e-works制造业信息化门户网。
2. 两类技术流派
如前文所述,从底层技术来看,透明加密产品可分为采用钩子模式和采用驱动模式的两种流派,两种加密技术由于工作在不同的层面,从应用效果、开发难度上各有特点。
采用钩子模式开发相对容易,但由于控制的层面较高,很多底层的操作难以控制,和各种应用程序之间的兼容性需要特殊处理。所以相对容易受到应用版本的限制,一旦应用修改了读写方法,(如:流行的Autocad等软件就有很多版本)加密软件必须跟着修改。
采用驱动模式是从更为底层的层面进行控制,可以获得更高的安全性和效率,但是技术难度很大。底层的操作需要顾及系统的各个层面之间的协调处理,由于驱动中程序的健壮性更多由程序本身决定,难以依赖操作系统对错误进行处理,如果这个驱动存在缺陷或者被某些程序异常终止(例如出现未预料的错误),在系统底层无任何保护措施的环境下,最直接的后果就是系统蓝屏崩溃。
四、 透明加密产品的关键指标
透明加密产品和企业常用的其他应用有很大不同,一般评价可采用以下要素,各要素的重要度从高到低排列如下:
1. 可靠性和稳定性
可靠性就是要保证:无论在任何情况下,被加密的文件不能被损坏。企业选用加密软件的基础。在日常应用中本来就存在不稳定因素,可能造成计算机文档的损坏,例如:掉电、误删除等,透明加密软件产品如果程序写得不够好,考虑得不够周全,会加大操作系统原有故障产生的概率。
加密软件管理的应用种类和文档类别对于可靠性也有较大影响,企业使用加密软件管理应用文档的种类越少,对于操作系统而言影响就越小,而且应用的可靠性也会提高,笔者曾经听到过两个对比的案例:某企业仅仅用加密软件来管理图纸,安装后基本上没有什么问题,应用效果很好;而另外一家企业要求把所有文档管理起来,结果遇到很多问题,效果并不理想。
原因有两个方面:一方面是加密产品本身还在不断成熟中;另一方面是应用种类多了,对于文件读写的处理方式更加复杂,出现兼容性问题的概率大大增加。
所谓兼容性是指:安装了加密软件后,客户端不能动辄出现蓝屏、崩溃、重新启动等不稳定的症状。不稳定的情况在目前阶段恐怕无法完全避免,但不能影响到正常使用。如:某版本的加密软件,用户按照某个固定的顺序执行一个应用操作后,系统肯定会重新启动,在找到问题之前,用户可通过建立规范等管理手段,要求员工不要按照这个流程来操作。
判断加密产品可靠性和稳定性的方法:搭建足够复杂的测试环境,模拟企业应用实际操作,通过极限测试和压力测试来判断。
2. 效率
采用透明加密软件后,用户在进行实际操作的时候,在打开和关闭文件、存盘、复杂计算等操作时,速度不能受到太大影响。因为加密软件直接接管了客户端的文件读写,其执行效率直接影响用户的实际工作效率,例如:编辑一个文档,如果本来保存需要5秒,现在安装了加密软件后,保存文档需要5分钟,恐怕所有用户都不会使用。使用加密软件必然存在效率的损耗,要看效率损耗有多少。这一点和杀毒软件类似。判断加密产品效率的方法是:模拟企业应用实际操作,用最大、最复杂的文件作为测试对象,通过比较采用加密产品前后执行存盘等操作的时间差异来判断效率的损耗。
3. 安全性
这里谈到的安全性主要针对透明加密对象,主要体现在以下几个方面:
一方面加密的文件本身要保证安全,文件的明文不能被复制。不少加密产品不但对内存中的文档进行了保护,同时通过封锁出口等其他的方法防止重要文档的泄密。
windows操作系统有很多种应用之间交换数据的方法,安全性的另一方面体现在对这些数据交换方法的控制,包括:如何控制剪贴板复制和粘贴、程序之间的拖拽、通过OLE交换数据等,其核心又包括两部分内容,一是涉密的应用与非涉密应用之间的数据交换应当只进不出,如:如果word文档如果被加密,则其中的内容不能被粘贴到非涉密的qq中,或者粘贴到qq中的文本应当是乱码;二是加密软件之间的还应当能通过系统提供的数据交换方法进行正常的数据交换,如:word和excel都是加密的,从word可以正常粘贴数据到excel中。
安全性的第三方面体现在文件打开后要防止屏幕的拷贝,但是这种控制力度是有限的,一方面截屏的方法很多,除了屏幕拷贝键Print Screen以外,还有很多中屏幕拷贝软件,如:Hprsnap等,甚至有方法直接截取显卡的显示内存中的内容将其还原为图片,还有一种最为简单的方法是无法用软件来预防的:用手机或者数码相继直接拍照。所以说这种方法一般很难保证全部控制,只能点到即止,而且过于严密的控制会影响到用户的正常使用,这种情况加密产品应当避免。
安全性的第四个方面体现在透明加密产品的解密机上,所谓解密机就是一把万能钥匙,得到授权的使用者可以用来批量还原被加密的文件,假设A、B两家企业采用了同一个透明加密产品,则既要保证在任何情况下,A用户加密的文档能够被自己还原,又要保证A用户的万能钥匙无法解开B用户的加密文件。
4. 方便性
方便性主要体现在两个方面:一方面是对于系统维护人员而言,加密产品在部署、配置、升级、维护等管理方面的是否简单便捷;另一方面是对于用户来说,加密和解密在操作上是否简单,是否真正实现了对用户透明。
5. 防卸载
目前针对透明加密软件存在较多诟病的地方在于其防卸载能力方面,少数员工未经许可,私自终止透明加密客户端的运行成为企业关注的问题。其实,从透明加密产品的研发思路来看,透明加密产品在防止卸载方面要求过高必要性不大,因为透明加密在用户需要保密的区域(比如:某个部门或者整个企业)和应用(比如:CAD图纸)整个范围内,所有相关类别的文档自生成之日起,在计算机中就以加密方式存在的,如果用户私自卸载了客户端,至少他无法打开其他被加密的文档。