文件透明加密系统


1、简介文件透明加密

    文件透明加密,就是在不影响用户对文档(work、txt、cpp等)使用的情况下, 对文档进行自动的加解密操作。 用户在阅读文档时,对文档进行解密操作;保存文档时,进行加密操作。 使保存在硬盘上的文档始终是密文状态,文档在打开时被加载到内存中时,才是明文状态。整个过程都是在用户完全不之情的情况下完成的。
   在实现透明加密的技术上,可以是在应用层、内核层实现。不同层次实现的难度可是相差很大啊, 而且加密效果也是不一样的。目前加密技术发展了三代(第四代也诞生了),分别是:
   第一代APIHOOK应用层透明加密技术;
   第二代文件过滤驱动层(内核)加密技术;
   第三代内核级纵深加密技术;
从网上找对它们的对比,如下表:

代次 第一代 第二代 第三代
名称: APIHOOK应用层透明加密技术 文件过滤驱动层(内核)加密技术 内核级纵深加密技术
设计思路 应用层透明加密技术俗称钩子透明加密技术。这种技术就是将上述两种技术(应用层API和Hook)组合而成的。通过windows的钩子技术,监控应用程序对文件的打开和保存,当打开文件时,先将密文转换后再让程序读入内存,保证程序读到的是明文,而在保存时,又将内存中的明文加密后再写入到磁盘中。 驱动加密技术是基于windows的文件系统(过滤)驱动(IFS)技术,工作在windows的内核层。我们在安装计算机硬件时,经常要安装其驱动,如打印机、U盘的驱动。文件系统驱动就是把文件作为一种设备来处理的一种虚拟驱动。当应用程序对某种后缀文件进行操作时,文件驱动会监控到程序的操作,并改变其操作方式,从而达到加密的效果。 客户端在涉密的场合,启动一个加密的沙盒,沙盒是个容器,把涉密软件,文件扔到容器中加密。而这个容器是透明的,使用者感觉不到它的存在。采用最先进的磁盘过滤驱动,文件过滤驱动,网络过滤驱动等内核级纵深加密防泄密技术,每个模块只做自己最擅长的那块,所以非常稳定。
优点 直接对文件加密直观感觉非常好,对于当时空白的市场来讲,这一旗号确实打动了不少企业。 由于工作在受windows保护的内核层,运行速度较快。 单个文件,复杂文件,大文件,源代码开发复杂环境等,都特别适合。
缺陷 应用层透明加密(钩子透明加密)技术与应用程序密切相关,它是通过监控应用程序的启动而启动的。一旦应用程序名更改,则无法挂钩。同时,由于不同应用程序在读写文件时所用的方式方法不尽相同,同一个软件不同的版本在处理数据时也有变化,钩子透明加密必须针对每种应用程序、甚至每个版本进行开发。

1)复杂软件经常会很多进程同时操作某个文件,如果这个时候,一个进程加密,另一个进程不加密,交替访问文件,极容易造成异常。如不能编译,调试等。

2)涉及到windows底层的诸多处理,开发难度很大。如果处理不好与其它驱动的冲突,应用程序白名单等问题。
无此类不稳定问题。
进程关联 和进程绑定,容易被冒充。另外很多软件进程非常多,如VC++的MFC/ATL的界面和socket编程,编译的时候,关联进程非常多,无法对应。 和进程无关,无冒充问题,因为都在容器中。
大文件破损 200M以上文件,极容易破损。 无文件破损问题。
源代码保密

无法针对源代码开发人员保密,具体表现在,影响调试,影响版本管理,版本工具对比乱码等问题。

对于一般员工的操作有效,但无法针对源代码开发人员保密。
适合源代码开发。有大型成功案例。
复杂图纸软件保密 复杂图纸一般都是进程多,文件大,此产品问题太多了。 复杂图纸适合DLP+
软件版本升级

当软件升级如V, S2005->2008,AutoCAD升级等,都需要重新设置。

不需要设置,因为和进程无关。
破解难度 非常容易破解,网上工具太多了。 很难破解,即使是懂电脑的程序员。
在windows系统中所处的层次结构如下图:

关于这些加密技术的详情介绍, 可参看:http://home.eeworld.com.cn/my/space-uid-309951-blogid-45293.html。 上面的各加密技术的对比和其所处windows系统中的层次结构都是来自该文章。


2、文件过滤驱动开发经历

    我的文件透明加密系统就是基于文件过滤驱动实现的,也就是上面所谓的第二代加密技术。为了完成这个系统,花了我近三个月的时间。
    这里我并不想在介绍我是怎样实现这个系统的技术,而我想介绍的是我的开发经历。 是在我大三下学期,当时我们参加中国软件杯,在选择题目时,看到透明加密这个题目, 当时看到感觉不错,技术方面吗,本人对网络安全协议及加解密算法也学过一些, 而且我们又开了网络安全这门课程,自己学的也还行。其次在java或C++方面我也亲自去用过这些算法。所以感觉拿下这个题目不成问题。
    后来在网上查这方面的资料,看到了透明加密的三个实现技术, 也就是上面介绍的所谓三代加密技术。决定使用第二代技术,也就是基于文件过滤驱动。 文件过滤驱动,也是驱动啊,运行在内核下的,以前从没做过也没接触过。 一点基础都也没有,但是已经报名了,没办法啊,还是得做啊,我们有三个人,两个大二的, 一个大三的(就是本人了),大二的基础不是很好,那就只能自己一个人去啃这个过滤驱动。 本想向认识的老师去讨教一下,但是他们的研究方向没有一个是文件加密这方面的, 不能帮助我。所以我就开始看书了,我看的第一本书就是<<Windows驱动开发技术详解>>,这本书很基础, 对想学习驱动开发的同学很有帮助,要有C的基础啊。花了大概3个星期, 就看完了整本书。而且将书中的例子全部运行了一遍,算是有了驱动开发的基础了。 虽然这本书很基础,但是对于从没基础过驱动开发的我来说,还是有难度的。 学的过程中还是比较艰辛,出了问题就不知道该到哪里找错误, 没有人可问,只能自己慢慢去找。难受啊。 然后我又看了<<Windows文件系统过滤驱动开发教程(第二版)>>,这本书是楚狂人这位大师的作品, 这本书其实就是楚狂人本人对自己发表的博文进行整理的。 就70页(43页之后介绍的是对微过滤驱动的讲解,微过滤驱动其实就是过滤驱动的一个新版本, 简化了一下过滤驱动复杂度)。在这本书只让我学到了一点:过滤驱动不是很简单。 不过还好,看完这本书后,基本上明白了过滤驱动的整体框架。 接着又看了谭文(楚狂人为其网名)的<<寒江独钓-Windows内核安全编程>>,这本书我并没有看完,我只看了前8章,看完这本书后, 收获很大,windows系统是不开源的,就只这种不开源, 才有让一些大牛们施展解开windows神秘面纱的机会, 反编译、反复测试、推测windows某一个功能实现的大概源码(有点像黑客啊), 从此我便喜欢上了内核编程,可是时间和环境不允许我去学习这方面的东西啊,在本书中有两章是关于透明加密的介绍,对理解过滤驱动很有帮助。
    看了大概两个月的书。终于感觉差不多了, 而且谭文大师讲解了在文件透明加密时要处理的问题及解决方法。更是帮助很大啊。 然后我就基于微软给出的关于过滤驱动的示例sfilter基础上进行修改(sfilter示例不简单啊,5000多行C代码)。 做了大概1个月的时间,做出来了,也差不多了(还是有时会出现系统蓝屏)。 这段时间多都不知道是怎样过来的,有问题没有人可问,网上又会的又不说。纠结在纠结, 很多次想放弃,最后还是坚持下了。很多次晚上从实验室回宿舍都是在2:30左右,还整过通宵。 每次晚上一个人走在回宿舍的路上,都在想自己能不能做好、做这些为了啥,希望渺茫, 但是既然选择了,我又不会轻易放弃。最可怕的是没有人能帮助我,只能靠自己。而且我在这方面又是一个新手,一边学一边做。
    回想那段日子,真的很充实,也学到了很多的东西,在驱动方面也算是有点基础了。 这里将在<<寒江独钓-Windows内核安全编程>>看到的一首诗引用过来,这首诗也是鼓励坚持下去的动力。

代牛言
渴饮颍水流,饿喘吴门月。黄金如可种,我力终不竭。


3、文件透明加密系统

   该文件系统采用的是c/s的架构,系统的整体结构如下图所示:

   整个系统有四部分,分别是:数据库、服务端、客户端、文件过滤驱动, 其中数据库和服务端可以部署在同一台PC,客户端和文件过滤驱动位于客户机中。 服务端和客户端是使用java编写的,用于实现用户身份认证和文件加解密密钥的产生及管理, 用户身份认证使用是基于RSA的数字证书的认证方式。文件过滤驱动就是执行文件加解密操作, 使用RC4加密算法,所需密钥是从客户端得到的。客户端和文件过滤驱动的交互使了JNI和动态链接库相结合实现的。
   在服务端主要的功能模块如下:
   用户认证模块:处理用户登录命令,认证用户证书。
   密钥分发模块:处理加解密密钥请求,当用户认证成功后,客户端会发送加解密密钥获取请求,对密钥加密后发送给对应的客户端。
    用户登录模块:注册用户,注销用户,更换用户密钥。
   服务器证书管理模块:添加服务器证书,更换服务器证书。
   文件加解密密钥管理模块:提取加密密钥,更换加密密钥,添加加密密钥。
   客户端主要的功能模块如下:
   用户登录模块:建立SSL连接,发送用户登录请求。
   文件解密密钥管理模块:解密接收到的文件加密解密密钥,并把它传送到文件加密驱动。
下面释出服务端和客户端的演示视频,供大家观看。
服务端视频:
客户端视频: