联系我们Contact

杭州万用密宝科技有限公司
联系人:周先生
电 话:86-0571-86870677 , 86870682
传 真:86-0571-86870960
地 址:杭州市上城区紫金观巷26号512室
邮 编:310015

文件透明加解密技术分析

1、主动加密和被动加密:

主动加密:指作者自己来按照需要对文件进行加密,例如WinRar带口令压缩、给WordExcel文件设置打开密码等。只针对某些文件夹加密的方式也可以理解为主动加密方式。

被动加密:与作者的意愿无关,相关文件都会被加密,磁盘加密和文件透明加解密属于此类。以下内容均为讨论被动加密。

2动态透明加解密的含义:

动态和静态:动态是对文件读写多少就加解密多少,静态是指一次性把整个文件加密或解密。两者的区别在于,动态加密由于不会出现整个文件的明文,相对于静态加密而言更加安全,两者在程序实现上存在区别。

透明:指使用者看不见、感觉不到加解密的存在,透明加密的实现目标是不对普通用户产生影响,用户在前台的操作习惯无需调整,能有效降低在企业实际应用中的阻力。

加解密:将文件内容使用某个密钥+某种算法转换成另外的内容,对于普通用户而言,其直观的效果是:在企业局域网中,具有授权的计算机能够打开被加密的文件,而一旦离开了这个环境,文件被打开时显示为乱码,从而防范用户有意无意的主动泄密。

3、透明加解密工作原理分析:

3.1 重定向原理:

重定向指的是在打开文件时,将加密文件拷贝出一个临时文件到一个隐蔽的位置,然后把这个文件解密、打开,保存时再把临时文件加密后覆盖原文件,采用该技术的产品属于静态加密产品。

采用重定向原理的加密产品,实质上是通过变换文件位置来实现加密的,为了确保明文和密文之间的一致性,必须在每次用户存盘或者系统自动存盘的时候,对整个文件进行一次整体加密和并复制到用户文件原来存储的位置,因此效率较低,且由于在计算机上保存了完整的明文文件,只要跟踪到临时文件所在位置即可能泄密,此外,文件在存储过程中需要多次复制,应用程序兼容性需要验证。

3.2 动态加解密原理:

采用动态加解密原理的加密产品在读取文件时,会将读出到内存的那部分数据解密,写文件时,则将内存中将写入的部分数据加密并下传至存储设备,采用该技术的产品属于动态加密。

采用动态加解密原理的产品由于只需要对部分文件内容进行加解密,效率较高。但采用该工作原理在应用层没有可行的实现方法,只能 在驱动层中开发,技术实现中的难度很大,开发成本较高。其原因是由于windows操作系统读写文件时,基本采用二种方式,一种方式是使用ReadFileWriteFile的常规读写方式,另一种是使用CreateFileMappingMapViewOfFile的文件映射方式,如果应用程序仅用常规读写方式,可以在应用层通过API函数的拦截来进行动态加解密;但在实践中很多程序使用了文件映射的读写方式,映射后文件的读写由系统底层缓存管理器自动处理,在应用层无法控制,例如Office就大量使用文件映射方式,在这种情况下只能在驱动层中进行开发加以控制。

4文件加密状态确认:

4.1 加密指定后缀:

通过指定后缀加密是指加密产品对需要管理的应用程序生成的某一类文档进行加密,而对其他后缀仍然采用明文。其优点是只加密制定类型的文档,而不影响其它文件,在加密范围上相对较小,系统的稳定性容易提高;缺点是可能产生另存为其他类型的文档的泄密漏洞,因为此时存储的结果并不是被指定加密的文件类型。即使把程序可能产生的后缀格式都指定也没有用,因为有很多办法另存出来 ,例如在Word中可以点击另存为然后在文件名栏输入2个双引号("),然后在这2个双引号之间输入任意后缀(例如test.123),那么保存后的文件就是明文的,拷贝出来文件名改回doc后缀就可能导致文档泄密。

4.2 加密不区分后缀:

加密不区分后缀是指加密产品对指定进程生成的所有文件都进行加密。这种加密方式由于对指定进程产生的任何文件都加密从而堵住另存为其他类型的文档的漏洞,可保证不论用户如何将文件另存都不会出现明文文件。其工作原理为指定进程只要发生写操作就加密被写的文件,任何中间文件和临时文件都会被加密,但由于要全面接管操作系统以及各类应用软件对磁盘的写操作,在技术实现上要解决问题很多,可能发生和其他软件争夺控制权的现象。

加密不区分后缀的透明加密产品开发的层面有两个:应用层和驱动层,应用层只能采用重定向原理+加密指定后缀;驱动层可能为2×2的组合即4种模式,如下表所示:

 

加密指定后缀

加密不区分后缀

重定向原理

重定向原理+加密指定后缀(1)

重定向原理+加密不区分后缀(2)

动态加解密原理

动态加解密原理+加密指定后缀(3)

动态加解密原理+加密不区分后缀(4)

上表中模式2技术上很难实现,所以实际上驱动层加密一般采用模式(1)-模式(3)-模式(4)

部分透明加密产品还可能将加解密操作在应用层和驱动层中混合完成,在驱动层拦截文件打开然后传递给应用层加解密,这种方法和纯应用层开发是一样只能采用模式(1)

5、加密标记处理

加密标记是指如何判断一个文件是否加密的关键,也是在做动态透明加解密开发中最为重要的一环,加密标记的正确与否决定了文件是否会丢失、损坏,是必须要保证不能出任何问题的技术关键点。加密标记一般可存放在文件外部和文件内部,存放于文件内部时,又常分为存放在文件头上、文件尾上、压缩在文件内等三类技术方法,相关介绍如下:

标记存储位置

类型

文件

变长

 

  

1

 

数据库中

 

文件外部

 

文件的加密状态记录在数据库中,判断文件加密状态时读取数据库,缺点巨大,在驱动中是很难访问数据库的,且若数据库丢失则所有文件都可能无法打开了。

 

2

 

文件目录中

 

文件外部

 

文件的加密状态记录在其所在的目录中,文件所属目录变化时程序需要处理各种细节,且存在记录丢失整个目录文件无法打开的可能性。

 

3

 

文件名上

 

文件内部

 

将文件的名字加上一个后缀来识别是否加密过且使用技术手段对用户隐藏掉这个后缀,通用性不好且容易被人为不小心去掉加密标记。

 

4

 

文件属性里

 

文件内部

 

将文件的时间或者其他属性改变一下,例如将时间加上1000年且向用户隐藏掉这个变化,通用性太差且加密标记极易丢失。

 

5

 

压缩在文件里

 

文件内部

 

最好的思路可惜无法兼容所有的文件,一方面如果文件太小,可能很难进行压缩,对于一些压缩软件产生的压缩文件无法继续压缩等,通用性很差。

        6

文件头上

文件内部

 

在文件头部附加一段内容来记录文件的加密标记,和文件尾的对比见图1

7

文件尾上

文件内部

 

在文件尾部附加一段内容来记录文件的加密标记,和文件头的对比见图1

实际上,考虑到整体系统的稳定性和可管理性,文件的加密标记存放在文件内部,更能保证标记的可靠性、恒久性和通用性,而使用重定向原理时由于是静态加解密,加密标记存放位置对此类产品的影响不大。我们这里把使用动态加解密原理时的文件头和文件尾技术进行对比:假设一个文件的开头位置是P1,结束位置是P2,加密标记的长度是L,带文件头和带文件尾有不同的状态,然后需要发出一个写操作从Pw1位置写到Pw2位置,此事写操作会超过原有的结束位置P2,如图1:

      

1 动态加解密时文件头和文件尾对比

 

文件头标记的处理方法:仅改变写入位置参数将Pw1= Pw1+L然后加密Pw2-Pw1这段内容并传递下去。

文件尾标记的处理方法也有两种:一种方法是将L段加密标记复制到内存中,然后加密Pw2-Pw1这段内容并原位置传递下去,再到Pw2的位置把L段加密标记接上去;另一种方法是先到Pw2的位置复制L段加密标记并接上去,然后加密Pw2-Pw1这段内容并原位置传递下去。

从以上分析可以看出,在文件尾加标记会导致加长写文件时软件要多执行一个动作,就是移动尾部加密标记的动作,如果完成第一个动作后由于掉电或其他原因未能完成第二个动作,那么文件就会被损坏。不论是加长写文件还是缩短写文件都需要把加密标记不断移动,可能在一个文档的一个保存操作中这种动作会执行几十上百次。

当然计算机掉电本来就有可能造成文件的损坏,但使用文件头标记不会造成多余的动作,也就意味着使用文件头存放加密标记在文件损坏的概率与文件未加密时是相等的,没有扩大文件损坏的概率。

还发现为了逃避技术实现上的困难,某些透明产品虽然使用了文件尾加密标记的处理方式,但会在打开文件时去掉尾部的加密标记,关闭文件时再将该尾部标记加上,这种方法是不可取的,因为在用户打开了大量的文件后,如果出现掉电等意外情况,会导致所有打开文件的加密标记全部丢失,从而造成大量文件无法打开,这是企业用户绝对不能容忍的。