主动加密是基于
实时加解密技术的一种加密信息自我保护手段。
实时加解密引擎在工作中提供实时加解密服务的同时监控全部密文数据的流向,当密文转化为其它数据形式,与另外的非涉密数据结合生成新的数据、或者其它非涉密数据引用了部分密文时能够自动加密这些与之发生关系的数据。
概念
所谓涉密,指接触了机密的数据。机密的
数据是由数据的拥有者事先定义的,如工程图纸、程序源代码、客户资料、机密文档等。
在保密技术专业中,定义成机密的数据是应该以加密形式存在的。这里不讨论完全基于
访问控制形式保护数据的方案,基于访问控制的保护与真正的保密是完全不同的两个领域,保密必须解决安全环境失效的情况下的数据不泄密,
访问控制是不考虑安全环境失效的情况的。
原理
接触传染性
涉密的界定一般采取“过保护”方式。也就是说,一个对象在与
机密数据接触后,如果没有办法证明它没有涉密,总是认为它是涉密的。通俗一点讲,就是“宁可枉杀一千,不可放过一个”。举一个简单的例子来理解涉密的概念:非典时期,凡与非典病人接触过的人都先隔离起来观察,如果把非典病人看作机密数据,那么与非典病人接触过的人就是涉密。因为当时没有办法证明这些接触过的人有没有被感染
非典病毒。当然,隔离观察一段时间后没有出现感染非典症状的人证明其没有感染非典,可以解除隔离。与机密数据接触的数据如果后来与涉密前一样没有发生改变,也可以认为其没有从机密数据中获取机密,也可以解除涉密状态。至于涉密后数据发生改变的,如果无法证明其改变的部分与机密数据无关,这个数据必须强制加密。因此,接触传染性是主动加密的典型特征。
在计算机操作中,接触传染性有多种表现形式,我们举例说明这个有趣有现象:
现有一个普通文档A(不加密)和一个机密文档B(已加密)
(1)用Word同时打开了文档A和文档B,从文档B中复制部分内容到文档A,然后
保存文档A,这时文档A被强制加密。
这个现象很好理解,因为文档B是机密数据,其部分机密数据转移到文档A了,所以文档A保存后被加密。
(2)用Word同时打开了文档A和文档B,修改并
保存文档A,这时文档A被强制加密。
这个现象比较费解,因为文档A看上去没有引用文档B的任何数据。因为文档A和文档B被同一个Word打开着,计算机没有办法证明文档A的修改部分与文档B无关(我们不能以人工方式去判定),所以修改后文档A被加密了。
(3)同时打开文档A和文档B,从文档A中复制数据到文档B,
保存文档B并退出Word,文档A和文档B的加密状态不变。
这个现象也好理解,文档A没有变化,当然不会被加密,文档B原来是加密的,所以保存后仍然是加密的,至于引用了非加密的文档A的内容不会改变文档B的机密属性。
(4)用Word打开文档B,新建一个文本文件C,用Windows
记事本打开,用Windows剪贴板从文档B中复制一段文字粘贴到文本C中并保存。
结果:文件C被加密。
(5)用Excel打开一个非加密的
电子表格文件D,用Word打开文档B,选中文档B中的一段文字,用鼠标拖动到EXCEL中,关闭Word。再保存EXCEL文件为
电子表格D。
新生继承性
新生继承性也是主动加密的典型特征。任何对象在涉密后其新建的文件都会被加密,这一点应该很好理解。类似于生物学上的遗传特性。主动加密的新生继承性与基于加密文件夹的加密属性继承有所不同,加密文件夹的加密属性继承是静态位置的加密属性继承,不能阻止保存数据的人主动涉密。而主动加密的新生继承性是强制性的,只要应用程序已经涉密,这个应用程序的输出数据总是密文形式,所以无论把数据保存到什么地方,数据总是加密形式。
主动加密在防泄密解决方案中的重要意义
防泄密不仅仅是防止外来人员的窃取,更多的是防止内部人员的主动泄密。而保密系统的难点就在于即要保证内部人员能够正常使用机密数据,又要防止这些机密数据传出本单位。在主动
加密技术出现之前,机密信息“监守自盗”没有技术上的解决办法,只能依赖于行政手段和规章制度来保障。主动
加密技术加上
实时加解密术,可以保障单位内部正常使用机密数据的同时防止任何形式的对外泄密,不管这种泄密是内部人员有意为之或无意所为。由于主动加密的接触传染性和新生继承性,机密数据无论被带到什么地方,都是密文形态的,而密文一旦离开其宿主单位,因为缺少了解密所需的
密钥,无法还原其记录的内容,从数学原理上保证其原始信息是安全的。因此,主动
加密技术是防泄密技术的核心技术。
防泄密系统的成败往往取决于其主动
加密技术。
技术实现
主动
加密技术从原理上来说只要能够准确监控机密数据的流向就可以实现,从有
防泄密系统开始就出现了不同的技术流派。主动
加密技术一般都是基于操作系统后台实现的,所以从前台的用户一般操作体验上很难感觉到技术层面上的差别,能够感觉到的最多只是对操作系统性能的影响。
主动加密从技术实现上可以分成三类:
(1)基于应用程序插件的主动加密
这类技术是最累的主动加密技术,其原理是为每一个应用程序写一个
插件程序(也称“外挂”),应用程序在加载时会自动加载插件程序,插件程序加载后会监视所有的
数据输出,必要时加密数据,如果一个操作不能主动加密,就强制取消对应的操作。
这种技术采用的是一对一的直观思维,因此其支持的目标是以应用程序为单位的,而且一般和应用程序的版本还有关系,因为同一个应用程序未必能够支持不同版本的
插件。也不是所有的应用程序都支持插件技术。事实上,能够支持
插件的应用程序仅限于Office、CAD等大型通用化应用软件,专用软件和一般的小型软件都不支持外挂插件。因此,这种技术应用环境受到诸多限制,而且由于从原理上不能保证受支持
应用软件之外的软件的适用性,因此这种技术基本面临淘汰。
(2)基于API拦截的主动加密
这种技术比起上面的技术来在通用性上有所进步,大部分“标准”的应用程序能够得到支持,实现上也相当简单,不需要考虑不同的应用程序。其缺点是API拦截是基于
应用层的,不是所有的应用程序都使用标准的API操作数据,一旦应用程序的数据操作使用的驱动方式,或者直接使用VMM的
内存映射文件,这种方式就会出现不能正常解密或泄密漏洞。因此,这种技术也只能适用于已经测试通过的环境。另外,API拦截不是标准的系统开发技术,使用API拦截后系统性能下降明显,与反病毒软件和一些工具软件往往也存在兼容性问题,这些都是API拦截技术的诟病。
(3)基于文件系统驱动技术的主动加密
这种技术是理论上最完美的技术。驱动技术是标准的系统开发技术,因此不存在兼容性问题(本身有程序BUG的下三滥驱动除外)。所有应用程序(包括操作系统本身)都必须通过文件系统驱动获取磁盘数据,因此在驱动中对数据进行控制几乎无一漏网。另外,由于驱动运行于操作系统核心层,其效率、性能和抗攻击性不是应用层的API拦截所能达到的。
当然文件系统驱动也是最难实现的,主要缘于
驱动程序的开发难度,在操作系统驱动级,任何小的错误都以
系统崩溃(“蓝屏”)收场。这也是驱动虽好,实现出来的却不多的原因。