ITEN计算机信息反泄密研究机构,ITEN研究所-专业计算机信息安全机构

knowledge
技术知识

应用层驱动层加密之比较

    在看到这个标题的时候,可能坐在电脑前面的你笑了,这还有什么可讨论的,驱动层加密肯定比应用层加密好。当然这可能是人云亦云,也或者你见过的都是廉价的解决方案。我将从扩展性、安全性、稳定性、兼容性和速度5个方面来进行比较,当然这里的应用层加密技术仅针对本公司的PHOENIX透明加密内核。另外我相信看这篇文件的人大多应该不是这方面的核心技术人员,所以我尽可能的用容易理解的语句来描述我的想法。

    首先讲一下扩展性,在早期的时候,我想应该是05~06年时,也就是我们公司刚成立不久。那时候的透明加密仅能针对AutoCAD/MS Office等少数软件。所采用的工作原理也是针对此类软件做定向的开发。当然,这时候要添加新的软件是极其困难的,你必须从头开发,维护也很困难,软件做了版本升级也必须做同步的升级。而采用驱动层加密的方式,因为其挂接了WINDOWS的文件系统,所以他根本不会关心上层是哪个什么软件,只需要按照相应的配置处理就行了。理论上他可以支持所有windows系统下的程序。扩展性大大提高。但是,我要说,采用定向开发的厂商很少,现在要么升级了要么淘汰了。实际上任何一个WINDOWS平台下的软件都是通过调用WINDOWS提供的API来完成工作的,所以在应用层下同样能够完成对windows文件系统的接管,就象PHOENIX透明加密内核所做的一样。理论上他一样能够完成对所有windows平台下软件的支持。安腾软件开发的凤凰卫士就支持自定义,用户可以根据自身情况将一些软件自行添加(当然守望者屏蔽了此功能)。

    第二个要讲的安全性,这里面存在着最大的争议。我经常接到一些咨询,当我告诉他说我们的软件是基于应用层的时候,他会说,“啊,那你的软件一定不安全”。对于这样的理解我通常是不做解释的,因为的确是比较难理解,需要一定的技术知识。

    我们的宗旨:集聚专业人才,开发领先科技,形成高效公司,为计算机网络安全事业做出贡献。

    在这里我不想讨论多么高深的技术,而是尽可能简单的,以一些大家都认同的定理来解释这个问题。第一,对于加密来说,其要求是尽可能早加密尽可能晚解密。第二,环节越多出错误的可能越多。

    下图是PHOENIX透明加密内核工作时的情况,可以看到,他在必须要为明文的情况下才转为明文。

    下图则为驱动层的方案,可以看到,其通过驱动时,已经转为明文了。

    此时如果在挂接一个过滤驱动,那么OK,将能够直接得到明文。对于一个透明加密系统而言,其核心是对生成的文件进行实时加密。这部分的实现可以在驱动层也可以在应用层。另外为了防止被破解,还需要对诸如剪贴板、OLE插入、抓屏等等行为进行限制处理。而这一部分,则只能在应用层进行。那么,这样看起来,问题就变得简单了,驱动层的透明加密其在驱动层Ring0和应用层Ring3两部分都有可能存在漏洞,都需要做防护。而应用层的方案则只需要处理Ring3下面的漏洞。就象一根自来水管,经过的环节越多,漏水的机会也就越大。

    第三个要讲的稳定性,当然你一定对这一块很重视,但是我要说,你可能还不够那么重视。因为在真正的实际使用过程中,这才是最重要的,失去了稳定性,神马都是浮云。没有用户想装上透明加密软件后,三天两头会死机蓝屏,或者更糟糕的是突然某一天当你打开电脑,你发现昨天写了很久的文件却无法打开。

    从技术原理上讲,应用层的方案(包括PHOENIX)都是通过对WINDOWS SDK的挂接处理,这里面包括文件系统的核心接口,包括外围的辅助接口如剪贴板、OLE、抓屏、进程创建等等。但这些接口均为WINDOWS 公开的技术,在其每个版本中均有相类似的实现。所以不论如何,只要你做得不差,稳定性都能得到保证。回过来再来看一下驱动层的方案,因为微软在开发Windows时,并没有考虑过这种类型的透明加密应用(自己防止自己做的文件被自己窃取)。所以这方面的实现就五花八门了,从早期的用数据库来记录文件状态,到后来的清缓存,再到双缓存,最后到现在比较流行的LayerFSD。方案一个比一个复杂,也能解决很多之前方案的问题。但是这种底层的开发终究要面对很多不确定性,因为你没有官方的资料可能参考,无法得到一个确切肯定的基点。你经常不得不通过动态跟踪去了解WINDOWS是怎么运行的,然后在此基础上用巧妙的办法去实现你想要的目的。但是,这种方式是脆弱的,如果用来写一个不计后果的病毒那是可以的。但对于商业应用来说,这是不可取的。同时,这种方法比较容易碰到Windows的Bug,之前06~07年时候我们做驱动开发的时候就深受其害。也许你的代码现在运行的很好,但是微软在某个补丁中修改了他的处理方式,那么大麻烦来了。而由于技术上的一些区别,想要在应用层上制造一个死机蓝屏,简直比在驱动层下避免蓝屏还要困难。

    第四个要讲的兼容性,他与稳定性经常相伴相生,象一队孪生兄弟。很多时候,为了稳定些,会放弃一定的兼容性。或者为了得到更大的兼容,但却要面临可能更多的稳定性风险。对于开发者总之要在这方面做出一定的取舍。

    我们首先来看文件过滤驱动,对于Windows系统来说,一般会有多个文件过滤驱动,如杀毒软件等,如果你用分布式文件系统,那么有DFS,如果你不幸中了木马病毒,他也可能会装有过滤驱动,如果你用了EFS,那么也一样会产生影响。为了这些,你可能要做出一些变态的修改,或者你干脆就说不支持与这些共存。总之,可以影响到透明加密驱动正常工作的因素实在太多了,并且随着时间推移会不停演变。而采用应用层方案,这么多复杂的东西全部由系统去完成了。你不再需要去关心这些。只需要专注于自己的问题即可。从PHOENIX透明加密内核几年的使用经历来看,的确没有什么能干扰到他。

    最后要讲一下速度,这其实是最没有可讲的,在现今CPU性能严重过剩的情况下,速度上的差距都微乎其微。对于文件驱动来说,只要不是经常去清空缓存,性能基本上和不装加密软件是一样的。而对于应用层的方案来说,只要不是文件重定向的伪加密,性能同样也不是问题。PHOENIX透明加密内核是真加密,我们曾经测试过一个100M的PPT,在加密环境和非加密环境下分别打开5次,完全无法测出差距。

    写到最后,看到美国鬼子评价中国人的一句话,大意是说中国人普通缺乏鉴证和独立思考的能力。愤怒之余净下心来回味,悲哀的是大多数时候我们的确如此。