加密文件系统(共8篇)
加密文件系统 篇1
摘要:该文论述了数据加密的原理与方法,介绍了几种常见的加密算法并在此基础之上比较了常用的加密算法的优缺点,在掌握了这几种算法的基础之上,对比对称密钥加密体制和公共密钥密码体制的优缺点以及前面的两个需求,最终利用DES算法和RSA算法来设计和实现自己的加密系统。该文详细的介绍了理论原理并详细记录了系统设计与实现过程。
关键词:密码学,DES算法,RSA算法,加密系统设计
1 绪言
随着Internet的发展人类已经步入信息时代,在信息时代,信息安全问题越来越重要。我们经常需要一种措施来保护我们的数据,防止被一些怀有不良用心的人所看到或者破坏。因此,在客观上就需要一种强有力的安全措施来保护机密数据不被窃取或篡改。解决这个问题的方式就是数据加密[1]。近年来,保护个人敏感数据成为人们关注的热点问题。使用加密技术是一种比较成功的保护方法。特别是在当今相互合作以及公共工作环境下,电脑中的资料可能对于写工作人员时可见的而对于另外一些工作人员是不可见的,对于一些文件进行加密是有必要的[2]。因此选择这个方面作为自己的论文研究方向,想通过对数据加密方法的研究对密码学有一个全面的认识,同时在研究过程中对当前已经比较成熟的加密算法进行学习并且总结和比较得出自己的结论并结合需求分析选择几种常见的加密算法设计、实现一个自己的单机文件加密系统。
2 系统采用的关键技术
公开密钥密码系统一般是基于数学上难解的问题,所以其安全性高,同时,密钥的管理比较容易。缺点是它的密钥太长、运算速度比对称算法的慢很多;公开密钥密码系统生成一对公私钥的速度比较慢,通常需要几分钟以上,从而对有大量用户的系统而言,服务器的工作效率不高[3]。
鉴于对称密钥密码算法和公开密钥密码算法的特点,综合使用DES对称密钥加密算法和RSA公开密钥加密算法来保障信息安全。大量数据用64bit密码长度的DES对称密码算法进行加密,而公开密钥密码算法则使用1024bit长度的RSA公开密钥加密算法进行加密,此种方法既保证了数据信息的安全又提高了数据加密和解密的速度,实现了对数据信息安全、加密效率的要求[4]。
2.1 DES算法的实现过程
DES工作的基本原理是,其入口参数有三个:key、data、mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。实际运用中,密钥只用到了64位中的56位,这样才具有高的安全性[4]。
DES算法是这样工作的:如Mode为加密,则用Key去把数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果[5]。
对于单机用户用于保存不需在网络中传递的文件则只需要在加密的时候输入一个自己熟悉但相对来说比较复杂不易被其他人破解的密码串就行,记住该密码串在解密的时候输入就行。
DES算法具有极高安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。而56位长的密钥的穷举空间为256,这意味着如果一台计算机的速度是每一秒种检测一百万个密钥,则它搜索完全部密钥就需要将近2285年的时间,可见,这是难以实现的,当然,随着科学技术的发展,当出现超高速计算机后,我们可考虑把DES密钥的长度再增长一些,以此来达到更高的保密程度[6]。
2.2 RSA算法的实现过程
首先产生一对公钥和私钥:
(l)选取两个大素数p和q(10到20个十进制数或更大),为了获得最大程度的安全性,两个数的长度最好相同。两个素数p和q必须保密。
(2)计算p与q的乘积:n=p*q。
(3)再由p和q计算另一个数Z,Z=(p-1)*(q-1)。
(4)随机选取加密密钥e,使e和Z互素。
(5)用欧几里德扩展算法计算解密密钥d,以满足e*d=l mod(z)。
(6)由此而得到的两组数(n,e)和(n,d)分别被称为公开密钥和私人密钥,简称公钥和私钥[7]。
其次是加密过程:RSA算法是一种分组加密算法,加密消息M时,首先将它分成比n小的数据分组(采用二进制数,选取小于n的2的最大次幂),也就是说,p和q为100位的素数,那么n将有200位,每个消息分组m,应小于200位长(如果需要加密固定的消息分组,那么可以在它的左边填充一些0并且保证该数比n小)。加密后的密文C,将由相同长度的分组组成。
由上述RSA算法可知:若n被因式分解,则RSA便可以被击破。因为n=p*q,如果p和q已知,那么Z=(p-1)*(q-1)便可以算出,故满足条件e*d=l mod(Z)的解密密钥d也不难求出。因此RSA的安全性完全依赖于大数的分解难度。RSA算法的公开密钥和私人密钥是一对大素数(10到20个十进制数或更大)的函数。从一个公开密钥和密文中恢复出明文的难度等价于分解两个大素数之积[8]。目前因子分解速度最快的方法,其时间复杂性为:exp(Sqrt(ln(n)lnln(n))).从技术上讲,这种安全性只是一种推测。
3 系统的设计与实现
根据需求分析,本系统的主要功能是保护存储在电脑的文件不被非法用户盗取后读取信息,面向用户主要是单机用户以及多用户系统,不涉及到网络传输,结合对称密钥加密体制和公开密钥加密体制的优缺点。设计主要功能有:读取文件路径,利用DES算法对文本文件中的数据进行加密和解密,利用RSA算法将DES算法的密钥加密并保存即密钥导出功能;同时可以导入加密后的DES密钥文件对其解密后辅助完成利用DES算法对数据的解密。主要功能如图1所示。
与此同时考虑到加密后密钥的安全问题以及当前移动存储介质的普遍使用,系统可以将保存加密后的DES密钥的文件导出到移动存储介质中,以便更好的保护密钥的安全同时也方便了用户对密钥的管理。在以前功能上有几点修改,将以前的导出功能改为保存,保存只是将加密后的密钥文件保存在当前文件夹下,新添加的导出功能是将加密后的密钥文件导出到移动存储器中;将导入功能改为加载,加载是将解密后的密钥读取到系统辅助数据的解密,新添加的导入是将保存在移动存储器中的加密后的密钥文件导入到系统。经过添加功能后系统的功能图如图2所示。
根据功能的不同将整个系统实现分为三个模块,分别为:MainFrame、DES、RSA。MainFrame的主要功能是显示系统界面,对系统界面布局进行定位并且接收由DES和RSA模块传来的参数辅助完成文件加密和解密功能,在加密和解密过程中给用户提供交互界面并文成加密后密钥的保存和导出及导入功能。DES的主要功能是接受由MainFrame传递过来的参数,对指定文件的数据进行加密和解密。RSA的主要功能接受由MainFrame传递的参数对指定的DES密钥进行加密并保存,同时可以将加密后的DES密钥导出,一边以后辅助完成数据解密功能。
3.1 MainFrame模块设计
定义一个MainFrame类,主要是界面的初始化,同时在加密和解密过程中起到桥梁的作用,传递参数。同时所有的相应函数均封装在MainFrame类中,便以管理和界面的优化。界面的初始化及所有的响应按钮:public class Mainframe extends javax.swing.JFrame
主要响应按钮响应的函数如下:选择要加密或者解密的源文件,将文件路径传递DES对象并显示在文本框中,private void jButton1ActionPerformed();输入DES密钥,并弹出对话框确认:private void jButton2ActionPerformed();数据解密,通过调用DES对象中的加密函数对数据进行加密:private void jButton4ActionPerformed();数据加密,首先通过调用DES对象中的获取密钥函数得到密钥,然后调用解密函数对数据进行解密:
生成RSA密钥对:
用RSA算法对DES密钥进行加密并保存:
将加密后的DES密钥文件导出到移动存储器中:
将RSA私钥导出到移动存储器中:
将经过加密并保存在电脑中的DES密钥解密并导入到加密系统:
结束系统:
3.2 DES模块设计
定义一个DES类,将参数和函数封装在DES类中。
public class DES
定义一个初始化函数和三个成员函数:
public void setKey(String s)//获得DES密钥
public void init()//对DES加密初始化,主要调用java系统函数
加密函数,source为要加密的文件的路径,result为加密后文件保存路径;因为在MainFrame模块中要对是否加密成功进行判断所以此函数要返回参数:
public String encryptorFile(String source,String result)加密函数设计框架图如图3所示。
解密函数,source为要解密的文件的路径,result为解密后文件保存路径;因为在MainFrame模块中要对是否解密成功进行判断所以此函数要返回参数:public String decryptorFile(String source,String result)解密函数设计框架图如图4所示。
3.3 RSA模块设计
定义一个RSA类,将主要参数和方法封装在RSA类中。public class:RSA定义三个成员函数:生成RSA的密钥和公钥并将私钥和公钥分别以dat文件形式保存在系统的当前文件夹中;因为在MainFrame模块中要对生成密钥是否成功进行判断所以此函数要返回参数;public String setkey(),密钥生成函数设计框架图如图5所示。
利用RSA公钥将传递进来的DES密钥进行加密并以dat文件形式保存在系统的当前文件夹中,传递过来的密钥是String形式的,只能由数字和字母组成;因为在MainFrame模块中要对是否加密成功进行判断所以此函数要返回参数;public String encryptorFile(String Dkey),加密函数设计框架图如图6所示。
利用RSA私钥对保存的加密后的DES密钥解密并传递给MainFrame类中的解密方法,实现密钥的导入功能,该方法中首先要读取RSA的私钥然后读取加密后的DES密钥文件;因为在MainFrame模块中要对是否解密成功进行判断所以此函数要返回参数:public String decryptorFile();解密函数设计框架图如如7所示。
4 系统的开发环境及实现
系统的设计选择在java环境下。Java技术是与平台无关,是当今被各大软件公司可接受为最高级的面向对象设计语言的主流技术;且Java安全API提供了加密、信息融合、密钥管理、认证、存取控制和数字签名等功能,允许开发者进行低层和高层的安全应用,而且在Java中,RSA密钥生成、RSA加密解密的功能实现十分简单,因为标准库中集成几乎所有功能,不需要从RSA算法出发进行编码。在j2se标准库中,javax.crypto中的Cipher类用于具体的加密和解密,java.security包直接提供了数字签名的相关方法。测试实例一,对txt文本文件进行加解密(密钥为000000)。
5 结束语
整体情况来说系统基本上达到预期的要求,能够对文本文件进行加密和解密并且方便公共环境下多用户系统对资源的共享,同时方便用户对密钥的管理,为用户提供了一个操作简单、方便实用的加密系统。
参考文献
[1]卢开澄.计算机密码学[M].北京:清华大学出版社,1998.
[2]耿祥义.Java基础教程[M].北京:清华大学出版社,2004.
[3]徐迎晓.Java安全性编程实例[M].北京:清华大学出版社,2003.
[4]Daeman Rijmen.高级加密标准算法[M].谷大武,徐胜波,译.北京:清华大学出版社,2003.
[6]赖溪松.计算机密码学及其应用[M].北京:国防工业出版社,2001.
[7]钱乐秋.软件工程[M].北京:清华大学出版社,2007.
加密文件系统 篇2
1. oppnssl md5加密字符串的方法
a.手动输入命令及过程如下:
代码如下:
#openssl //在终端中输入openssl后回车,
OpenSSL>md5 //输入md5后回车
123456//接着输入123456,不要输入回车。然后按3次ctrl+d。
123456e10adc3949ba59abbe56e057f20f883e //123456后面的就是密文了
解释:为何在输入123456后不回车呢?
是因为openssl默认会把回车符当做要加密的字符串中的一个字符,所以得到的结果不同。如果你输入123456后回车,在按2次ctrl+d,
得到的结果是:
代码如下:
OpenSSL>md5
123456
f447b20a7fcbf53a5d5be013ea0b15af //因为openssl不忽略回车符导致的
b.或者直接用管道命令
代码如下:
# echo -n 123456 | openssl md5 //必须要有-n参数,否则就不是这个结果了。
e10adc3949ba59abbe56e057f20f883e
解释:为何要加-n这个参数?
-n就表示不输入回车符,这样才能得到正确的结果。如果你不加-n,那么结果和前面说的一样为:
代码如下:
f447b20a7fcbf53a5d5be013ea0b15af //因为openssl不忽略回车符导致的
2.用openssl加密文件。
代码如下:
加密文件系统 篇3
数据复制模式的选择对信息系统进行容灾备份的保护至关重要, 数据复制引擎位于不同的层面, 如磁盘系统、逻辑卷、文件系统、数据库、应用系统, 采取相应的数据复制技术对业务系统产生的数据进行备份。通过层叠文件系统技术为文件系统层添加透明加密的功能, 对数据提供加密保护, 将对系统性能的影响降至最低, 能够有效地提高对信息系统备份数据的安全保护。
1 基于文件过滤驱动的数据复制技术
基于文件系统的数据复制技术的实现方式是将生产中心产生的新增或修改的文件复制到容灾中心, 因此嵌入在文件系统中的数据复制引擎需要监视容灾中心文件系统的变化, 如图1所示。
它有以下几个方面的优点: (1) 支持广域网协议, 容灾中心的地点不受传输距离的影响; (2) 硬件和软件投资较少; (3) 对磁盘子系统透明, 两个数据中心可采用不同的磁盘阵列设备。
然而, 现有的Windows NT操作系统中的文件系统无法支持对数据的实时加密和解密功能, 因此在已有的文件系统上添加一个文件系统过滤驱动即可达到对文件进行透明加密的目的。文件系统过滤驱动是一种基于Windows内核的驱动模式[1,2], 如图2所示, 它通过拦截发往已存在的内核模式驱动的请求来实现新的功能, 截取Windows系统对文件的操作指令, 例如创建、打开、修改和读写等。文件系统过滤驱动是实现对数据进行透明加密的主体。
I/O管理器是用户层和内核层进行交互操作的控制器, 当I/O管理器接收到上层应用发来的文件操作请求, 将构造成I/O请求包IRP (IO request package) , 文件系统过滤驱动通过收取这些IRP进行功能的实现。因此, 基于文件系统的透明加密机制是建立在文件系统过滤驱动的基础上的[3,4]。
2 基于文件系统的透明加密机制的设计
2.1 添加文件加密标识
容灾系统对文件发送的操作指令由I/O管理器传达到下层文件系统, 并经过过滤驱动程序对所要进行操作的文件进行加密标识的判断, 从用户层对文件的访问和修改情况可以比较, 将加密标识置于文件头部是最优的选择[5]:每次对文件进行保存时会修改文件的长度, 将加密标识置于文件的中部或者文件的尾部都容易导致加密标识的丢失或者损坏, 造成对文件的破坏, 导致不可访问。
加密标识需要对外界保密且不可见, 而添加加密标识后, 其文件的长度会发生改变, 文件的大小应该是文件标识和文件本身长度之和所决定的, 所以, 在对文件进行读写操作之前应先对文件进行预处理, 即改变文件的读写偏移, 否则系统不能正确对文件进行读取[6]。如图3所示在存储设备中的文件长度=有效数据的长度+加密标识的长度, 通过改变存储设备中的文件的读取偏移地址, 对文件的长度进行修改, 通过增加和加密标识长度相同的偏移量, 即修改文件偏移地址后的文件长度=有效数据的长度+加密标识+增加长度。
2.2 透明加密机制的设计
用户层对数据进行操作之后就涉及到对文件的存储和备份操作, 其WRITE请求流程如图4所示。
(1) 当用户层应用程序进行了对文件的写操作后, 系统的I/O管理器接收到WRITE请求, 将构成的I/O请求包IRP发送至下层的文件系统。
(2) 在文件系统过滤驱动层中添加的透明加密机制对要写入存储设备的文件进行加密需求判断, 对于不需要加密的文件则直接发送至存储设备驱动程序进行存储, 同时通过存储设备驱动程序进行数据的容灾备份, 将文件复制到容灾中心的文件系统中。
(3) 将需要加密的文件发送到数据加密层, 在数据加密层中, 对该文件进行加密强度的判断, 选择不同分组长度和密钥长度的AES算法, 满足用户不同的加密需求, 使系统的适用性更强;对于不需要加密的文件直接发送到存储设备驱动程序。
(4) 在数据加密引擎对文件进行数据加密的操作, 将文件发送至存储设备驱动程序进行数据存储。
(5) 将文件备份到容灾中心的文件系统并进行下一步操作。
同样, 系统的READ请求的工作过程如图5所示。
系统应用层发出的READ指令被I/O管理器接收后从存在设备中提取需要进行操作的文件, 发送到文件系统过滤驱动程序进行下一步操作的准备, 主要是进行解密需求的判断和分析, 文件的加密标识是加密的文件则需要进行解密才能被应用程序正确识别, 如果是不需要解密的文件就直接发送到用户层。
业务系统出现故障需要从容灾中心将备份文件进行恢复时, 先将容灾中心的备份数据传入生产中心的文件系统过滤驱动层中, 再进行数据的解密需求判断和计算。在容灾系统中通过层叠文件系统技术添加这样的文件加密模块, 在生产中心的存储设备中对密钥和加解密环境进行保存和设置, 而在容灾中心中只对备份数据进行容灾保护, 对其业务系统的整个透明加密环境不进行备份, 同时利用身份认证等技术手段对生产中心提供保护, 加强整个容灾系统的安全性。
2.3 加密算法的选择
在Windows系统中, 物理存储设备磁盘被分成若干分区, 而分区则是由磁盘上一组连续扇区组成, 这些扇区是一些固定大小的、可寻址的存储块。扇区的大小由硬件决定。大多数硬盘的扇区是512字节。在Windows中, 读写文件是以扇区为单位进行的。要么整个扇区的数据全部读 (写) , 要么全不读 (写) , 不存在只读取或者写入不足一个扇区现象的发生, 所以Windows一次性读写文件的大小总是512字节的整数倍。透明加密机制在读解密 (或写加密) 的过程中, 正是利用这一特点以分组密码对数据进行加解密[7], 选择与系统存储结构相吻合的加密算法可以达到较快的运算速度。本文设计的透明加密机制提供的加密算法主要是分组长度和密钥长度分别为128、192、256 bit的AES算法, 系统可以根据用户的实际需求选择不同密钥长度 (或者分组长度) 的AES算法[4]。
3 设计与实现
在Windows NT及XP系统中, 应用程序对文件的读写操作流程一般如图6所示[8], 因此可以根据此流程编写加解密代码。
加密过程:即函数Encrypt Write Per (irp, Irpsp, context) 的处理:
4 透明加密机制的安全性分析
整个加密机制是建立在容灾系统生产中心的主机上, 其加密环境是独立的, 一旦数据离开生产中心的存储环境, 数据文件则以密文的形式存储, 当需要从容灾中心进行数据恢复时, 首先要建立的是生产中心的业务环境, 恢复容灾系统的加解密环境。由于其加密机制是通过文件系统过滤驱动程序进行添加, 任何驱动程序都有对应的DRIVER_OBJECT。DRIVER_OBJECT的重要之处在于它有一组函数指针, 称为Dispatch functions。开发驱动的主要任务就是撰写这些dispatch functions。当系统需要调用驱动, 就会向驱动发送IRP, 并在dispatch function中处理这些请求[9]。对加载在文件系统过滤驱动程序下的数据加密机制可以通过包括身份认证、数据隐藏等技术手段进行安全保护, 在需要进行数据恢复时, 直接通过DRIVER_OBJECT调用加密机制即可以恢复到系统正常工作时的环境。在相同的业务环境下才可以进行正常的数据解密恢复, 通过这样的加密机制对容灾系统进行保护, 可以有效地控制业务系统数据文件的知晓范围, 一旦容灾中心的备份数据丢失, 没有相同的业务系统环境也不能将文件进行正确的解密和恢复, 在很大程度上提高了容灾系统的可靠性。
(1) 选择AES算法作为透明加密机制的加密算法, 达到了数据加密强度高和运算速度快的要求。对信息系统进行容灾保护, 需要考虑到多方面的因素, 尤其是对其添加透明加密机制, 要充分考虑到系统载荷的问题, 业务系统产生的数据需要向容灾中心进行实时的数据传递, 对生产中心的数据进行加密时如果达不到较快的运算速度, 无法达到容灾系统对数据进行同步或者异步复制的要求;其次会对容灾的通信通道造成巨大的资源闲置。
(2) 算法选择的多样性可以满足不同用户的加密需求。AES算法可提供多种不同长度的密钥, 对文件提供不同安全需求强度的数据加密保护, 具有更好的适用性, 同时由于其算法的复杂性又保证了短密钥对文件加密的不可逆性。
(3) 基于文件过滤驱动的透明加密机制, 对文件进行加密保护有较好的隐蔽性和灵活性[10]。对生产中心进行透明加密机制的添加, 一旦出现备份数据的泄露和破坏, 离开了生产中心的系统环境文件则无法正常恢复, 能够在很大程度上对业务数据提供保护。过滤驱动的灵活性可以随意对加密机制进行加载和卸载, 易于系统维护人员进行操作。
5 结论
由于大多的容灾中心都是在距离业务生产中心较远的地方, 其数据存储保护以及系统的维护都相对薄弱, 需要设计完善的安全保护机制才能有效提高容灾系统的安全性, 本文所设计的基于文件系统的容灾备份数据的透明加密机制可提供多种加密算法, 能够满足不同数据文件的保密需求, 对系统的运行影响较小。该机制具有以下特点:基于文件系统驱动程序使数据的加密部分模块化, 简化实现过程;对加密算法有多种可提供的选择, 尽可能地减小对容灾效果的影响;对文件进行加密标识的添加, 强化了对敏感数据的保护。
基于文件系统驱动程序的透明加密技术与Windows内核紧密相关, 将加密技术应用于Windows的内核层要比应用于用户层的安全性要大得多, 所以, 相比其他的加密方式, 安全机制更加完善, 加密算法易于隐藏, 不容易被攻击和破解;对驱动程序的动态加载卸载灵活, 只需进行简单的程序编写, 有广阔的开发前景。将基于文件系统的透明加密技术应用于容灾领域, 对容灾技术的进一步研究和发展有极其重大的促进作用, 具有很大的实用价值。
摘要:针对容灾系统的备份数据安全保护问题进行分析, 设计一个基于文件系统的容灾备份数据的透明加密机制。采用基于文件系统过滤驱动程序的方法进行加密模块的添加;并进行了程序上的设计和模拟实现。其主要思想是将容灾系统的生产环境和容灾环境进行区分, 系统的透明加密机制只在生产中心的存储设备中进行保存。一旦容灾中心的备份数据丢失, 没有相同的数据加密环境, 文件不能被正确恢复, 极大地提高了容灾系统的数据安全性。
关键词:文件系统过滤驱动程序,容灾备份数据,透明加密机制,加密标识
参考文献
[1] 宋志武.基于Windows内核驱动的加密文件系统.武汉:华中科技大学, 2007
[2] 康潇文, 杨英杰, 杜鑫.面向容灾的备份数据透明加密机制.计算机工程, 2009;35 (20) :131—133
[3] 彭荣辉.基于过滤驱动的安全文件系统的设计与实现.北京:北京交通大学, 2011
[4] 李世富.基于透明加密的文件保密技术的研究.武汉:武汉理工大学, 2012
[5] 王熙, 朱震, 苗启广.文件头中存储加密标识技术的研究与实现.计算机工程与设计, 2012;33 (10) :3746—3750
[6] 王全民, 周清, 刘宇明.文件透明加密技术研究.计算机技术与发展, 2010;20 (3) :147—150
[7] 张青凤, 张凤琴.基于Rijndael算法的研究和应用.山西大同大学学报 (自然科学版) , 2012;28 (1) :14—16
[8] 易丹.基于Windows文件系统过滤驱动透明加密的研究.武汉交通职业学院学报, 2013;15 (1) :80—84
[9] 谭文, 杨潇.Windows内核安全编程.北京:电子工业出版社, 2009:236—262
磁盘文件透明加密技术 篇4
随着IT技术的飞速发展,很多企业办公、设计、管理日益电子化。这些电子文档存储在计算机硬盘中,一旦被拷贝或者通过网络传播出去,在另一台计算机上就可用同样的应用软件打开这些电子文档,造成信息泄密。透明加密技术是近年来针对企业文件保密需求应运而生的一种文件加密技术。应用透明加密技术,用户在指定的计算机上操作这些文件时会自动对这些文件进行加解密,不需要输入密码,用户在环境内使用密文不影响原有的习惯,但文件已经始终处于加密状况。一旦离开环境(指定的计算机),文件将得不到解密服务,将无法正确打开,从而起到保护电子文件知识产权的效果。
1 磁盘文件加密技术原理
磁盘的透明加密主要方法有3种,第一种是BIOS接管方式,这种方式在计算机刚刚启动的时候就接管BIOS中磁盘操作的中断,类似还原卡、还原精灵这类产品就是利用这个原理工作的。这种方式工作在最底层,工作方式不够灵活,很难根据需要配置对哪些类型文件的文件进行加密。所以一般很少用在磁盘透明加密的的应用中。
第二种是HOOK(钩子)技术。所有Windows应用程序都是通过Windows API函数对文件进行读写的。程序在打开或新建一个文件时,一般要调用Windows的Create File或OpenFile、ReadFile等Windows API函数;而在向磁盘写文件时要调用WriteFile函数。通过截获这些函数的操作,就可以接管文件的操作。但是Windows的安全保护机制限制了一个任务不能随便的访问另一个任务的进程空间。利用Windows提供了一种叫钩子的消息处理机制,允许应用程序将自己安装一个子程序到其它的程序中,以监视指定窗口某种类型的消息。当消息到达后,先处理安装的子程序后再处理原程序。这就是钩子。钩子透明加密技术就是将上述两种技术组合而成的。通过Windows的钩子技术,监控应用程序对文件的打开和保存,当打开文件时,先将密文转换后再让程序读入内存,保证程序读到的是明文,而在保存时,又将内存中的明文加密后再写入到磁盘中。钩子透明加密技术与应用程序密切相关,它是通过监控应用程序的启动而启动的。一旦应用程序名更改,则无法挂钩。监视钩子程序运行在Windows应用层,很容易被操作人员发现,通过结束进程的办法关闭保护进程,使保护程序失效。
驱动加密技术基于Windows的文件系统(过滤)驱动(IFS)技术,工作在Windows的内核层。我们在安装计算机硬件时,经常要安装其驱动,如打印机、U盘的驱动。文件系统驱动就是把文件作为一种设备来处理的一种虚拟驱动。当应用程序对指定类型的文件进行操作时,文件驱动会监控到程序的文件读写操作,通过分析判断是否是需要保护的数据,如果是需要保护的数据就进行加密或者解密工作,从而达到透明加密的效果。驱动加密技术与应用程序无关,他工作于Windows的内核层。当API函数对指定类型文件进行读操作时,系统自动将文件解密;当进入写操作时,自动将明文进行加密。由于工作在受Windows保护的内核层,运行速度更快,加解密操作更稳定。驱动加密技术虽然有诸多的优点,但由于涉及到Windows底层的诸多处理,开发难度很大。如果与其它驱动的冲突、程序操作有错误,造成系统崩溃甚至还会丢失用户数据文档。
2 驱动透明加密的相关技术
驱动透明加密技术工作在Windows的内核层,根据Windows内核驱动分层设计的原理,Windows内核是一个分层驱动模型(图1)。
每一个物理设备对应着多个驱动设备对象,而这些驱动设备对象是按照分层结构堆叠的。每一层只能同上面层和下面层进行服务请求交互,这些服务请求信息被统一的设计为IRP(I/O请求包)。每一个驱动设备对象处理IRP完一次,完成一次服务。这些设备对象根据目的的不同,被设计为不同的功能。Windows的分层驱动程序模型允许用户开发第三方驱动程序,并通过Io Attach Device By Pointer或者Io Attch Device函数将自己的设备驱动程序插入到这个分层结构中,这样我们的第三方驱动程序就有机会截获IRP,然后通过分析IRP,针对自己感兴趣的IRP包进行相应的处理。这种第三方驱动程序称为过滤驱动程序。
2.1 磁盘过滤驱动程序的挂接
根据上面叙述的原理,我们可以设计一个文件系统的过滤驱动程序来完成我们的功能。首先需要把过滤驱动程序挂接在某个硬盘分区之上,可以在过滤驱动程序的入口点DriverEntry例程发送一个IRP,请求驱动程序来挂接到硬盘上。该过程的函数调用流程为:由ZwCreateFile得到硬盘分区的设备句柄,再用ObReferenceObjectByHandle得到对应的FILEOBJECT指针(Windows把每个设备当作一个文件来看待,并有一个对应的FILEOBJECT结构描述其属性),然后调用IOGetRelatedDevieeObjeet得到硬盘分区设备对象指针,然后调用IOCreateDevice来构造代表过滤器的一个设备并为它指定驱动程序也就是过滤驱动程序。最后调用IOAttachDeviceByPOinter把该设备挂接在硬盘分区设备上。
挂接上设备链后,我们的驱动就可以截获对文件的IRP请求包。根据我们磁盘过滤驱动的要求,我们只对打开文件、读文件、写文件的IRP进行处理,对于其他IRP请求,我们则统统直接传递给下层驱动程序处理。
2.2 被保护程序的判别
当通过API函数CreateFile对文件进行打开操作时候,驱动程序需要判断打开的文件是否属于需要保护的文件。我们是通过进程内核的PEB(进程环境块:Process Enviroment Block)对象来查看当前发出该请求的进程。Windows操作系统为每一个进程在内核都创建了一个PEB对象。该对象的ImageFileName成员变量就是进程的名字。驱动程序可以调用内核函数Ps GetCurrentProcess获得运行上下文环境的PEB对象,然后根据进程名就判断是否是我们需要保护的进程。需要注意的,不同版本的Windows的PEB中ImageFileName的偏移量是不确定的,为此,我们通过内核函数PsGetVersion判断Windows的版本号来决定ImageFileName的偏移量。表1是常用Windows版本的ImageFileName偏移量。
2.3 文件读写操作
对于文件读写请求,内核有两种数据传送方式,一种是缓冲I/O的方法,这种方式由Windows操作系统自动分配内核态的内存,然后将用户传递的读写磁盘数据拷贝到这个内核态UserBuffer中,然后传递给驱动程序,驱动程序处理的是这个内核态的内存数据。驱动程序处理完毕后返回用户态程序的时候,由Windows操作系统再将这个内核态的内存数据拷贝回用户态内存。显然这种方式存在着内核态和用户态内存的拷贝和状态的切换,对于文件操作这种数据量比较大的操作,速度显得很慢了。另一种是使用直接I/O,这种方式减少了Windows的数据复制。这种方式是通过Windows直接传递一个内存描述符列表(Memory descriptor list,MDL)来实现的,这个描述符列表是描述用户空间缓冲区,驱动程序可以通过相关函数操作该MDL来得到用户写磁盘数据。在实际的文件操作中两种方式的操作都要支持,通过判断IRP包中的MdlAddress和UserBuffer成员变量来判断的。如果IRP.MdlAddress不为0,则说明是采用的MDL方式,则可以通过内核函数Mm GetSystemAddressForMdlSafe来获得到需要的读写磁盘数据。如果IRP的UserBuffer成员变量不为0,则说明采用的缓冲I/O的方式,我们可以通过直接IRP的UserBuffer获得需要的读写磁盘数据指针。
2.4 加密种子的选择
对于数据加密算法,我们需要能标示计算机“身份”的信息作为加密种子,这样即使文件被拷贝走,如果加密种子不对也无法解密数据。我们可以选择CPUID、网卡序列号、硬盘序列号作为标示计算机“身份”惟一性的参数,这些参数可能在有的计算机上的设备并不支持,比如说对于老式计算机的CPU和硬盘就没有序列号,所以需要几种方式都需要支持。
使用汇编指令CPUID可以获得CPU的信息,包括CPU类型、型号、制造商信息、商标信息、序列号等信息,其中序列号是生产时的惟一序号,具有惟一性,可以用来做加密种子。
硬盘序列号是硬盘在生产的时候为每个硬盘分配的惟一标示号,要取得这个序列号我们可以在驱动层读取硬盘相应的寄存器得到信息,这种方式比较复杂繁琐,幸好绝大多数磁盘的设备驱动程序都支持通过发送相应的IRP取得磁盘序列号,其中IRP中功能号IoControlCode为0x0007c088,可以通过向硬盘驱动发送这个IRP就可以获得磁盘序列号。
网络底层的物理传输过程中,是通过物理地址来识别主机的,物理地址一般也是全球惟一的,网卡在生产的时候都在网卡上固定了一个MAC地址,通过GetAdaptersInfo函数可以获得网卡的MAC地址。
3 总结
计算机信息技术飞速发展,越来越多的电子信息被保存在计算机上,由于电子信息传播的十分方便,很容易造成信息的泄密。磁盘透明加密技术通过对保存在计算机上的信息进行实时的加解密,即不影响计算机合法使用者的使用,又防止了机密文件被拷贝,对于保护企业、政府、机关的机密数据有很好的推广价值和应用前景。本文对磁盘透明加密中的关键技术问题进行了分析和阐述。
参考文献
[1]谭文,邵坚磊.天书夜读:从汇编语言到Windows内核编程[M].电子工业出版社.2009.
[2]马林.数据重现——文件系统原理精解与数据恢复最佳实践[M].清华大学出版社.2009.
文件夹加密隐身技巧 篇5
关键词:文件夹,数据安全,加密强度,破解
一、概述
您一定也遇到过这样的事情,在一个集体化的办公室里,好几个职员都在使用同一台电脑为工作服务,每个职员都要存自己的一些数据、文档到电脑上管理。虽然这提高了工作效率,但这时,数据共享、数据安全等问题却成了这台机器需要解决的问题之一。
如果仅在个人计算机上,所有使用权限归个人所有,那么这种方法可能不值得推荐,因为除此之外,还有很多更好、更安全的方法都可以保护数据的安全。然而,在公有的计算机上,比如办公室,多人共用一台机器的时候,你不能把别人拒之门外,你保存文件的地方,迟早会被看到的,而您不希望出现这种情况时,这种方法就显得额外的突出。
二、方案
仅从技术层面上,文件夹加密的方法不胜枚举。然而从使用的角度去看,像Windows XP这样的系统,没有直接提供加密的方法。普通用户想要保护自己的私有数据,除非下载、购买第三方软件开发商设计的加密软件,购买费用及会不会污染机器环境,尚不得而知。使用本文介绍的方法,不需要任何费用、也不会对机器构成任何的不良影响,就可能满足不同需求的普通用户。
1、替换加密
(1)简单替换
替换加密是指将文件夹的图标、名称、属性等信息替换为其它信息,以迷惑别人。比如将文件夹的属性改为隐藏属性、系统属性,然后再设系统文件夹查看属性为“不显示隐藏文件夹或文件”和“隐藏受保护的操作系统文件”,这时别人将不会看到您的文件夹,在您自己需要打开文件夹时,再将这些改回来。
设置和取消系统的文件夹查看属性的方法为:在资源管理器或我的电脑窗口点击“工具”-〉“文件夹选项…”-〉选择“查看”标签-〉在高级设置下面的列表框里找到相应项后单击。设置文件夹为系统属性的方法为(XP系统,以D:user文件夹为例):点击“开始”-〉运行”-〉输入“cmd”,确定->输入“D:”回车-〉输入"attrib-s-h user",回车-〉“exit”回车退出。
再者,将文件的扩展名更改成不常见的类型,这样和文件关联的图标也会发生改变,用户不熟悉这些图标代表的类型从而避开,自己使用时再改回来。
这种加密的强度很低,只能应对一些不太了解操作系统的使用者。
(2)应用程序替换
这种方法迷惑性会更大一些的,其方法来源是参考了最近在我们机房很流行的一种文件夹病毒,这种病毒的表现就是把使用者u盘根目录下的文件夹统统改为系统属性、隐藏属性,取而代之的是生成和用户文件夹同名的应用程序,这些应用程序的图标为文件夹的图标,来迷惑使用者。当使用者误以为应用程序就是自己的文件夹,执行打开操作时,正好执行了恶意的应用程序,从而破坏了系统的安全性。
我们正好可以利用这一特性,制作我们自己的应用程序来保护自己的目录。只是我们自己的应用程序仅仅是为了保护自己的隐私,而决不会做任何坏事的。
我们应用程序的目标是在用户双击打开时,将和应用程序同名的文件夹,也就是您需要保护的目录名设置为隐藏属性、系统属性,然后显示一窗口提示您要打开的文件夹是一受密码保护的文件夹,请求输入密码,如果输入了正确的密码,则可以调用资源管理器来打开文件夹,否则提示密码错误后直接退出。当然我们的应用程序也和目录是同一图标,同时,该应用程序还具备重设密码功能,前提是必须提供原来的旧密码,首次打开时没有密码。
当然,这种方法如果用户自己实现,需要有一定的程序设计能力,这里就只给出思路,不再具体实现了。如果需要这样简单的程序,可以和本文作者联系,免费送您一份。
2、隐藏加密
隐藏加密的原理很简单,就是将需要加密的文件夹放置在不易找到的地方,以起到对其保护的作用。使用时可选系统一深度目录,比如C:Documents and SettingsAdministratorLocal SettingsUser,对User目录也可再次使用上述的简单替换加密,为了您自己打开时方便也可为目标位置创建一“快捷方式”指向它,将快捷方式放置在容易找到的安全地方(比如随身携带的u盘上)。
这种加密的强度也很低,也只能应对一些不了解系统且无意窃密的使用者。
3、压缩加密
压缩加密就是将需要加密的文件夹使用压缩工具进行加密,需要打开时再解压数据。比如使用Winrar软件,压缩时设置一解压密码,再打开时就需要此密码,如图1。
使用这种方法,加密强度很大,如果密码长度足够的话,几乎不可能被破解;但每次打开时,即使您自己也需要重新解压一次,使用之后还得再次压缩,比较麻烦一些的。
4、自身加密
如果您的文件主要是Office文档,那么您很幸运。因为这些文档在使用Office程序编辑时就可以设置密码项保护,以Excel工作簿为例,保存时选另存为…,然后在弹出的另存为对话框中单击工具栏中的工具按钮,在下拉菜单中选常规选项,之后在弹出的保存选项对话框中设置该工作簿的打开权限密码等信息,如图2所示。
其它类型的Office文档,如Word文档,其方法类似,不再赘述。
这种加密方法非常简便,其强度也很大。当然也有过破解,而且互联网上有很多破解Office密码的软件,您去Google一下就会清楚,不过能这样做的人已不是一般用户,您需要更谨慎、更积极的方法。随着Office版本的升级,这方面的顾虑会越来越少的。
三、结论
使用上述方法,即使是普通用户也能够有效保护自己的文件数据,方法不同,使用的针对性、便捷性、安全性也不一样。用户可以根据自己的实际情况,适当选择。
参考文献
[1]汤子瀛,哲凤屏,汤小丹等,计算机操作系统[M],第3版,西安:西安电子科技大学出版社。2007.224-234.
[2]马建峰,郭渊博编著,计算机系统安全[M],西安:西安电子科技大学出版社,2005.2.
将文档加密藏身任意文件中 篇6
使用Our Secret这款独特的加密软件, 可以将机密文件加密隐藏到任意类型的文件中, 来实现更加灵活的隐藏操作。Our Secret的使用方法很简单, 在其主窗口 (如图1) 左侧的“Hide”面板中的“Step 1:Select a carrier file”栏中点击浏览按钮, 选择作为加密载体的宿主文件 (可以是任意大小, 任意类型的文件) 。在“Step 2:Add/remove file or message”栏中点击“Add”按钮, 在弹出的窗口中如果选择“File”项, 在下一步窗口中选择需要加密的文件即可。如果选择“NewMessage”项, 在下一步窗口中的“Subject”栏中输入标题, 在“Text”栏中输入机密信息, 注意中文的加密信息标题虽然以乱码显示, 但是不影响实际使用, 点击OK按钮完成添加操作。
按照上述方法, 可以在宿主文件中添加任意数量的机密文件或者机密数据。之后在“Step3:Password”栏中输入密码, 最后点击“Hide”按钮, 在弹出窗口中选择宿主文件的保存路径, 既可以覆盖原始的文件, 也可以将其另存放到其它位置, 这样即可完成加密操作了。
如何执行解密操作呢?在Our Secret主窗口右侧的“UNHIDE”面板中的“Step1:Specify a carrier file”栏中点击浏览按钮, 选择包含加密数据的宿主文件, 在“Step 2:Enter password”栏中输入密码, 点击“Unhide”按钮, Our Secret即可分析并解密该宿主文件, 将保存在其中的加密文件或者机密数据提取出来, 并将其显示在文件列表中, 在分析列表中双击对应的文件, 即可将其保存为独立的文件。双击对应的机密消息, 在弹出的窗口中可以显示其内容了。下载地址:http://www.dwz.cn/Owx U4。
此外, 使用De Egger Embedder (简称DE) 这款小工具, 也可以隐藏任意文件。这里我们举例说明其用途, 例如我们选择某个DLL文件作为宿主文件, 在其中捆绑隐藏“机密.txt”文件。当然, 也可以选择其他任意文件。在DE主界面 (如图2) 中的“Combine Files”面板的“Select a Host file”栏中点击“Open Host File”按钮, 导入目标DLL文件。也可以直接将该文件拖动到上述列表栏中。在“Select the file to embed”列表中点击“Open Hide File”按钮, 导入“机密.txt”文件。之后点击“Combine”按钮, 选择合并后文件的存储路径, 这样, 就将机密文件隐藏到了宿主文件中。而且, 这对宿主文件的使用毫无影响。
当想提取机密文件时, 只需在DE主界面中点击“Open Host File”按钮, 导入宿主文件“p2sp.dll”。之后点击“Extract”按钮, 选择文件输出路径, 就可以将隐藏在其中的机密文件提取出来了。当然, 其名称产生了些许变化, 将其改为合适的名称即可。下载地址:http://www.dwz.cn/Owuw2。
顺便说一下, 虽然我们将机密文件隐藏到了别的宿主文件中, 但是该文件的日期参数也发生了变化, 这使其显得很“扎眼”。因此, 在隐藏机密文件之前, 首先需要记录下宿主文件“p2sp.dll”文件的创建日期, 修改日期, 访问日期等参数。
文件透明加密技术研究与实现 篇7
计算机数据本身所具有的易复制的特点, 使得计算机数据安全问题日益突出。目前, 针对计算机数据安全问题的解决方法主要有两类:一种是数据加密, 即事先运用各种加密算法对一些比较重要的文件进行加密, 这样即使数据被窃盗窃者也无法获取真实数据内容以此达到保护数据安全的目的;另一种方法是对数据访问和流向进行控制, 即通过事先制定各种安全策略使得盗窃者无从获取要保护的数据内容, 这种方法并不会改变数据本身的内容。
本文透明加密系统所使用的透明加密技术本质上属于前一种方法。它与传统的加密技术的不同就在于所有的文件加解密操作对用户都是透明的, 用户不需要改变原来的使用习惯。
二、透明加密相关技术
要实现透明加密, 我们必须能够捕获文件读写操作及其内容以便能够及时的完成相应加解密操作。在Windows环境下大体上有两种技术可以捕获文件的读写操作:API Hook和文件过滤驱动[1]。
2.1 API Hook
Windows应用程序对文件的访问操作一般都需要通过调用CreateFile、ReadFile等API来完成。而所谓的API Hook就是修改一些API的入口地址, 使所有对这些API的调用都先跳转到事先定义的函数中去。因此, 通过Hook一些常用的文件访问函数就可以事先捕获文件的读写操作从而完成加解密操作。
2.2文件过滤驱动
文件系统驱动就是把文件作为一种设备来处理的一种虚拟驱动。所有访问文件API最终都将调用内核层的文件系统驱动来完成相应的操作。因此, 通过在文件系统驱动之上加载一层过滤驱动也可以捕获所有的文件访问操作从而完成特定文件的加解密操作。
2.3两种技术的比较
使用以上两种技术都能捕获文件的读写操作从而完成透明加密的任务, 但由于两者工作的层面不同, 他们最终的实际应用效果也将不尽相同。使用文件过滤驱动加解密的稳定性好、效率高且加密策略相对灵活, 而使用API Hook加解密文件时特别是大文件时容易死机、效率低下而且容易被反Hook技术破解。因此, 文件过滤驱动更适合用于实现透明加密。
三、透明加密系统工作原理
3.1 Windows NT文件系统
Windows NT文件系统是存储管理子系统的一部分, 主要负责向用户提供非易失性媒介信息的存储、转发等操作[2]。图1显示了文件系统驱动的工作原理:
应用程序的文件读写请求首先会到达I/O管理器。对于所有non-cached I/O, I/O管理器会为之构造一个IRP包发送给文件系统驱动, 接着文件系统驱动将该IRP进行必要的处理后继续调用下层驱动完成读写请求。对于同步cached I/O, I/O管理器会将当前操作视为Fast I/O, 接着通过Fast I/O例程的返回值判断Fast I/O path是否可行[3]。如果可行则直接缓存管理器交互并操作数据, 否则I/O管理器重新构造IRP包交由文件系统驱动处理。对于其他类型的I/O, 文件系统驱动在收到I/O管理器的IRP包之后, 并不将该包下发给下层驱动而是直接与缓存管理器进行交互, 如果所操作的数据没有映射到缓冲区内, 那么内存管理器将会根据相应的情况向I/O管理器发送一个non-cached I/O进行相应的操作。
3.2系统实现原理
实现文件的透明加密需要在文件系统驱动之上加载一层过滤驱动, 这样就能截获所有应用程序对文件的访问操作。对于符合加密策略的读写操作, 就可以在内核层动态进行解密加密操作, 从而达到透明加密的效果。从表面上看该加密系统的文件过滤驱动程序需要设计两类派遣例程:普通的IRP包的派遣例程;Fast I/O的派遣例程。但是它们最终都要通过向I/O管理器发送non-cached I/O实现磁盘文件数据的读写, 因此只需要重写普通IRP包的派遣例程能实现动态加密的功能。当然这需要在设计派遣例程时加入加密点的判断。
四、透明加密系统设计与实现
4.1系统总体设计
系统主要分为两部分:应用层模块和内核模块。前者的主要负责加密策略定制, 后者负责过滤出符合加密策略的文件并动态完成其加解密的操作。内核模块驱动需含有这三类设备对象:对应文件系统控制设备对象 (CDO) 的过滤设备对象 (FiDO) FiDO1, 对应卷设备对象 (VDO) 的过滤设备对象FiDO2以及过滤驱动本身的控制设备对象[4]。控制设备对象在内核模块加载时会自动生成, 主要功能是记录必要信息并与应用层通信。FiDO1需要在文件系统加载时生成并放入对应的设备栈中, 主要功能是监视当前文件系统下新挂载的卷设备并及时生成对应的FiDO2。FiDO2需要在卷设备挂载时生成, 对于已经挂载完的卷设备需要手动枚举生成, 然后放入对应的设备栈中。它的主要功能是过滤出符合加密策略的操作并完成相应的动态加解密过程。图2显示了系统结构:
4.2应用层模块实现
应用层模块的实现需要解决制定加密策略和同内核驱动交互两个问题。
(1) 加密策略
加密策略由若干条规则组成。每条规则都包含三个部分加密对象、访问进程、加密级别。加密对象可以是特定的文件夹下的所有文件, 也可以是带有特定后缀名的文件。这些加密策略保存在特定的配置文件中, 为了减少内核模块的代码量在本系统中由应用程序负责解析出每条规则的内容并放入特定的数据结构中。
(2) 同内核的交互
应用程序同内核交互之前需要先加载相应的驱动, 基本过程如下:打开服务控制器、创建服务、打开服务、启动服务。应用层模块通过将调用CreateFile获得驱动设备的句柄传递给DeviceIoControl就能实现与内核模块的控制设备对象的交互。这样应用层模块就能将加密策略传递给内核模块, 并及时获取一些日志信息向用户显示。
4.3内核模块实现
内核模块的实现需要解决问题主要包括:过滤设备的挂载、加解点判断、数据获取和加密、以及与应用层的交互, 其中与应用程序交互这一部分内容在前面有所提及这里就不再做介绍了。这一节的最后给出了过滤驱动中读写派遣例程的流程。以下实现中针对的内核版本是NT5.1 (Windows XP) 。
(1) 过滤设备的挂载
要将FiDO1加入到对应的设备栈中, 首先要在驱动程序入口函数DriverEntry中调用IoRegisterFsRegistrationChang e。这个例程会在文件系统加载时 (在NT5.1中它会自动枚举系统中已加载的文件系统) 调用指定的回调例程。然后在回调例程中创建设备对象FiDO1并调用AttachDeviceToDevic eStackSafe将其加入对应的设备栈中。对于已经挂载到当前文件系统的卷设备, 需要手动枚举。而对于以后要挂载到当前文件系统的卷设备, 可以通过截获发往文件系统CDO的主功能号为IRP_MJ_FILE_SYSTEM_CONTROL副功能号为IRP_MN_MOUNT的IRP包获得相关信息。最后在获的文件系统的VDO后就可以创建设备对象FiDO2并将其加入到卷设备栈中。
(2) 加解点判断
通常情况下绝对不允许对系统文件以及根目录区文件进行加密解密操作, 否则会带来一系列的问题并严重影响操作系统性能。因此, 必须在加解密操作之前设计加密点用以区分哪些是符合加密策略的文件, 哪些是不需要加解密操作的文件。对于符合加密策略的文件还需要知道当前访问操作来自哪个进程, 防止非法应用程序的越权访问操作。加密策略中加密对象存放的都是文件的全路径, 而在文件系统驱动中都是通过文件对象 (FileObject) 来操作具体的文件。因此, 过滤驱动在得到指向FileObject的指针后需要调用ObQueryObjectString取得文件的全路径, 然而此时得到的形式类似“DeviceHardDiskVolume1MyDocumentTest.doc”。这就还需要将“DeviceHardDiskVolume1”这样的名字转化成“C:”这类的符号链接名。至于防止非法进程的访问操作, 可以通过将在当前读写的派遣例程中调用PsGetCurrentProcess得到当前操作系统正在执行的进程信息与加密策略中对应的进程进行比对来完成。
(3) 数据获取和加密
应用程序读写文件时会提供用户数据缓冲区, 而I/O管理器在处理读写请求的时候会为设备对象设置DO_BUFFER_IO、DO_DIRECT_IO两种标记中的一种或者两者都不是[5]。DO_BUFFER_IO标记表示I/O管理器已经将在非分页内存中分配了一块空间并将用户数据缓冲区的内容拷贝到了该空间中, 可以从Irp->AssociatedIrp.System Buffer得到相应的地址。这种方式不仅浪费宝贵的非分页内存而且多了一次内存拷贝操作效率低下, 在实际应用当中很少用到。DO_DIRECT_IO标记表示I/O管理器用一个内存描述符列表 (MDL) 描述用户数据缓冲区并锁定相关的分页内存, 指向这个MDL的指针可以在Irp->MdlAddress中的到。如果以上两者都不是, 那意味着用户数据缓冲区的用户模式虚拟地址可在Irp->UserBuffer找到。Irp->UserBuffer中的地址只在发出对应请求的线程上下文环境中才有效, 安全起见相关的代码应该包含在try…except…语句块中。因此, 过滤驱动在加解密数据时需要根据具体情况的不同从对应的地方获取数据。为了保证数据在加密前后大小的一致, 在选择加密算法时一般选择对称加密算法。
(4) 读写派遣例程
过滤驱动捕获用户的读请求时该请求还没完成无法直接对相应的数据进行解密, 需要做特殊处理。由于二者大体流程一样, 下面就以读派遣例程为例说明程:
1) 获得当前文件的全路径判断是否需要加密, 如果不需要直接交下层文件系统驱动。
2) 获得当前操作对应进程信息判断是否越权, 如果越权直接返回当前IRP包。
3) 判断当前IRP包的标志位是否为带有IRP_NOCACHE、IRP_PAGING_IO、IRP_SYNCHRONOUS_PAGING_IO三者中的一种, 如果都没有直接交下层文件系统驱动。
4) 设置完成例程, 初始化并等待内核事件K e E v e n t_R e a d C o m p l e t e。完成例程负责将KeEvent_ReadComplete置为signaled状态。 (写例程此步骤不需要)
5) 获取数据内容, 完成解密操作。
之所以不直接在完成例程中获取数据内容, 是因为完成例程所在的线程上下文环境不是发出读写请求操作的线程上下文环境, Irp->UserBuffer中用户数据缓冲区地址无效。
五、结语
本文的文件透明加密系统由于使用了文件过滤驱动技术, 具有安全、稳定、高效的优点, 而且能够广泛应用于对数据保密要求较高的机构如政府机关、研发型企业等。该系统主要是从数据加密的角度入手, 虽然能在一定程度上保证数据的安全, 但要最终形成一个完整的数据安全防护体系还需要在此基础上引入数据的访问控制和备份机制。
参考文献
[1]李民, 方勇.基于文件系统过滤驱动的文件加/解密技术研究与实现[J].四川:四川大学, 2006.
[2]David Solomon, Mark Russinovich.Windows Internals Fourth Edition[M].Washington:Microsoft Press, 2005
[3]Nagar R.Windows NT file system internals[M].New York:O.Reilly&Associates, 1998.
[4]武安河.Windows2000/XP WDM设备驱动程序开发[M].第二版, 北京:电子工业出版社, 2005
文件加密算法研究与VB实现 篇8
1 文件加密算法
文件加密的基本过程就是对原来为明文的文件按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,只有在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的,该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程。简单的加密和解密如图1。
1.1 逐位倒排序加密法
字节逐位倒排序加密法是以比特为单位的换位加密方法,用VB实现的具体算法是:1)以二进制模式打开源文件;2)从源文件第I位读取一个字节,假设为字母“A”,得到“A”的ASCII值为65;3)将65转换成八位二进制串为“01000001”;4)将“01000001”按字节逐位倒排序得另一个八位二进制串“10000010”;5)将“10000010”转换成十进制再写回源文件第I位置,完成一个字节的加密;6)重复2)、3)、4)和5),直到所有字节加密结束。
1.2 循环移位加密法
循环移位加密法,是一种出现较早的加密方法,它的算法就是通过将明文中的每个字母用其后的第三个字母置换加密。对于26个英文字母的对应关系如表1所示。
利用表1就可以进行加密,如:
明文:THISISEXAMPLE密文:WKLVLVHADPSOH
用公式表示为:f(x)=(x+3)mod 26
推广到一般化为:f(x)=(x+k)mod n
其中x为加密字符、k为密钥、n为字符集中字母的个数。
循环移位加密算法的密文与明文之间的对应关系过于简单,由于k的取值范围的限制,循环移位密码的密钥空间很小,难以抵御强行攻击密码分析。攻击者最多尝试25次,就一定能够破译密码,用VB实现方法也很简单,但是安全性较差。
1.3 矩形转置加密法
矩形转置加密法是在不丢失信息的前提下对明文中的元素进行重新排列,将明文写成矩形结构,然后通过控制其输出方向和输出顺序来获得密文。例如,明文please send the data在不同输出顺序下的密文如图2所示。矩形方阵上方的数字和字母串为代表输出顺序的密钥,字母串按字母顺序输出(aefrt)。
1.4 异或运算加密法
异或加密法原理是一个数A和另一个数B进行异或运算会生成另一个数C,如果再将C和B进行异或运算则C又会还原为A。利用这个特性可以对数据进行加密运算。如果对Unicode字符进行这种运算,需要两个密钥,其取值范围为0-255,其中一个用于对高字节加密,一个用于对低字节进行加密,这样对同一字符的加密就有255×255=65025种可能,如果更换密钥后对密文再进行加密,则会有无穷的可能性,安全性高。
2 文件加密算法的VB实现
文件加密的算法较多,从以上四种加密法研究可以看出逐位倒排序加密法、循环移位加密法、矩形转置加密法这三种加密法都具有规律性或穷举性、安全性较差,容易受到攻击破译,算法实现起来也较简单。相对而言,异或运算加密法则会有无穷的可能性,而且这种加解密数据的方法无论是对中文或西文字符都是有效的,安全性较高、具有使用的普遍性。因此,就以异或运算加密算法为例对文件进行加密进行说明,其VB实现其过程如下:
2.1 界面设计
如图3所示。
2.2 代码实现
以上程序在中文VB6.0和Winxp环境中以不同语言的字符进行过多次测验并通过。在实际运用要实现更大难度的加解密算法,应从字符密钥中分别求出Key1和Key2,然后将加密后的数据再更换Key1和Key2反复进行多次加密运算,并结合换位法进行。
3 结束语
利用异或运算法及二进制文件读写模式,可以实现对任意的中西文字符及不同类型的的文件进行加密,具有安全性相对较高、适用范围较广、算法不太复杂等特点,有较大的实用价值。
摘要:该文从信息安全的角度出发,阐述了文件加密的几种算法,并用VB的方法加以实现。
关键词:信息安全,文件加密,VB,算法
参考文献
[1]李书琴.VB60程序设计教程[M].西安:西北大学出版社,2008.
[2]石林祥,贺海晖,魏淑桃.一种实用文件加密方法的实现[J].计算机工程,2004,30(z1).
【加密文件系统】推荐阅读:
利用文件加密文件11-21
文件加密权限09-03
文件加密技术信息安全论文11-05
自动加密系统11-10
数字信息加密系统11-17
数据库加密系统07-22
加密不可盲目,有关无线加密协议兼容疑问06-13
加密通信07-15
信息加密07-18
程序加密10-18