静态加密与动态加密:数据加密两大技术路线详解
数据加密究竟分为哪些类型?从实现方式来看,主要分为静态加密与动态加密两大阵营;从实现层级来看,又可细分为文件级加密与存储设备级加密。这两组维度相互交叉,构成了我们日常使用的各类加密产品。
静态加密的概念很好理解:数据在未被使用时进行加密处理。当你想使用这些数据时,必须先解密为明文,然后才能进行操作。市面上不少加密软件采用的就是这种模式,简单直接,但存在一个明显问题——每次使用都需要手动解密,用完后再加密,操作略显繁琐。
动态加密则完全不同。它也被称为实时加密、透明加密(encrypt on-the-fly)。数据在使用过程中自动完成加密或解密,用户完全无法感知。合法用户打开加密文件,与打开普通文件毫无区别,背后发生的加解密操作对用户而言完全透明。而对于没有权限的非法用户,即便通过非法手段获取文件,看到的也只是一堆乱码。这种技术不改变用户的使用习惯,也无需用户操心,因此近年来已成为市场主流方案。
然而,动态加密的实现难度远高于静态加密。它需要实时跟踪数据流,并且必须潜入操作系统内核层面去拦截读写操作。技术门槛相当高,这也正是市场上真正靠谱的动态加密产品数量有限的原因。
动态加密实现的层次级别:从应用到内核的深度解析
无论在Windows、Linux还是Unix系统下,应用程序访问存储设备的数据路径大致相同:应用层调用系统API,系统API再调用文件系统,文件系统通过设备驱动读写磁盘。这个路径可以抽象为图1所示的模型。其中层次I和II属于应用层,层次III和IV属于内核层。
500)this.width=500" title="点击这里用新窗口浏览图片" />
图1 操作系统的存储设备访问模型
在层次I,只能捕获当前应用程序自身读写的文件,其他程序的数据根本无法触及,因此这里只能实现静态加密。层次II虽然可以拦截文件的打开、关闭等操作,但并非所有文件流都会经过它。在这种层次上实现的所谓“动态加密”,其实是一种变通方案:应用程序打开文件时,先将整个文件解密到一个临时路径,然后让应用去读取那个临时文件;关闭时再将临时文件加密回去。本质上仍是静态加解密的自动化,算不上真正的动态加密。
真正的动态加密,只能在内核层实现。因为只有在内核层,才能拦截到所有文件操作或磁盘操作。文件系统层能够捕获文件操作,但无法覆盖所有存储设备操作——要拦截全部磁盘读写,必须深入到存储设备驱动层。这就引出了两大技术路线:文件级动态加解密与磁盘级动态加解密。
文件级动态加解密技术:灵活管控文档安全
在文件系统层,不仅可以获取文件的各种属性,还能知道是哪个进程、哪个用户在访问。这为打造功能强大的文档安全产品提供了可能。例如Windows的NTFS文件系统自带的EFS(加密文件系统),但EFS的加密粒度通常是分区或目录,难以满足用户个性化的需求——比如自动加密某类文件。虽然文件系统自带的加密具备一定安全性,但灵活度不足,这也给第三方厂商留下了发展空间。
要开发文件级的动态加密产品,有多种技术路线可选,常见的是通过Hook或过滤驱动嵌入文件系统,成为文件系统的一部分。这相当于为文件系统增加了一个功能扩展模块,可以根据需要挂载或卸载,比系统自带的加密方式灵活得多。
以亿赛通公司的SmartSec为例,其实现原理如图2所示。SmartSec采用文件过滤驱动程序的方式,位于层次III,同时在应用层(层次II)和内核层(层次III)都提供了访问控制功能,还整合了日志与程序行为控制。这种应用层与内核层协同的架构,既能提升安全性,又能减少对系统性能的影响。
500)this.width=500" title="点击这里用新窗口浏览图片" />
图2 SmartSec系统中动态加解密的实现
磁盘级动态加解密技术:全盘加密保障底层安全
对于信息安全要求较高的用户,文件级加密往往不够用。例如在Windows系统中,访问文件时会生成各种临时文件,虽然大多数情况下会被自动删除,但难免有漏网之鱼。即便删除了,使用数据恢复软件也能找回。而这些临时文件通常不会被加密,这就成了信息泄露的潜在通道。更麻烦的是,即使将临时文件也加密了,系统的页面交换文件(如Windows的Pagefile.sys)仍然可能保留用户访问文件的信息,第三方动态加密产品通常不能对系统文件进行加密——否则系统可能无法启动。
有没有办法堵住这些漏洞?有——将存储设备上包括操作系统在内的所有数据全部加密。这只有磁盘级的动态加解密技术能够实现。静态加密在这里行不通:如果操作系统被加密了,启动前必须先解密整个系统盘。如今操作系统动辄几十GB,每次开机解密耗时难以承受。
动态方式则完全不同:系统启动时,实时解密硬盘数据。系统需要读取哪个扇区,就在内存中解密哪个扇区,然后交给操作系统。性能损耗只与加解密算法的速度有关,对整体性能的影响通常不超过10%。图3展示了亿赛通DiskSec的原理:DiskSec位于操作系统最底层,所有磁盘操作都经过它。写入时先加密再写盘,读取时先解密再提交。对操作系统而言,加密的磁盘与未加密的磁盘看起来完全一样——这正是“透明”加密的含义。
500)this.width=500" title="点击这里用新窗口浏览图片" />
图3 磁盘级动态加解密的实现
文件级与磁盘级动态加密的对比:如何选择最合适的加密方案
两种方案各有优劣。磁盘级加密最大的优势在于:加密强度高,安全性好。它直接对物理扇区进行加密,没有文件、目录这些逻辑概念。任何存储在磁盘上的数据都是加密的,不存在临时文件遗漏的问题。相比之下,文件级加密只针对用户指定的文件,日常使用中临时文件、页面交换文件都可能成为安全短板。因此从安全性角度看,磁盘级加密明显更胜一筹。
但磁盘级加密的缺点也很突出:不够灵活,适用场景有限。因为没有文件、目录的概念,无法对某个文件或目录单独加密或隐藏。文件级加密则灵活得多,可以指定加密的文件类型、目录,甚至隐藏某些文件夹,实现细粒度管控。
选择哪种方案,取决于具体的应用场景与安全需求。如果追求极致安全、不介意部署复杂度,可以考虑磁盘级加密;如果需要灵活管控、兼顾用户体验,文件级加密更为合适。这并非二选一的难题,而是需要根据实际场景做出权衡。
