一种文件保护方法及系统 【技术领域】
本发明涉及信息安全领域, 特别涉及一种文件保护方法和系统。背景技术 随着计算机技术的发展, 各行各业都开始了信息化的大进化, 尤其是各种金融公 司、 软件开发公司等, 敏感数据不断增多, 需要进行保护的电子数据不断增多, 这些电子数 据的安全大多关系着企业的生存, 因此文件的保护越来越受到重视。
同时, 各种木马、 病毒也越来月活动, 恶意攻击者开发越来越多的非法程序植入他 人计算机, 窃取各种敏感数据, 同时窃取技术也越来越高。为了防止保密数据被窃取, 出现 了越来越多的文件保护方法。 最简单是方法是, 对秘密文件进行隐藏, 或是对文件加上密码 保存, 但是这种方式及其脆弱, 很容易通过扫面计算机或是暴力破解等手段破解文件, 也出 现了更高安全性的手段。
对需要保密的文件使用密钥进行加密, 并且密钥是秘密保存的, 例如保存在加密 锁中, 加密锁一般为 USB 接口的智能设备, 其可以与计算机进行了连接, 和计算机一起完成 文件保护和权限管理的功能, 在密钥被攻击者获取的情况下, 可以保证文件的安全性, 该方 法具体为, 在计算机中安装一个文件保护程序, 当合法的程序打开加密文件时, 文件保护程 序使用密钥对文件进行解密, 得到明文的文件以供合法者操作, 当非法的程序试图打开加 密文件时, 文件保护程序禁止其打开加密文件, 并且不提供解密服务。
但是这种方法仍然存在不安全性, 在计算机操作系统中, 当合法的程序打开并解 密受保护的文件时, 操作系统会为解密得到的明文在缓存中分配一定的空间, 并将这些明 文存放在缓存中, 同时返回句柄, 合法者即可以对受保护文件进行操作, 当合法用户关闭受 保护文件时, 在缓存中的受保护文件并不会立即清空, 这时非法程序如果同样通过上层接 口访问该文件时, 可直接得到受保护文件在缓存中的地址读出明文的数据。
综上所述, 现有的文件保护方案中存在缺陷, 在合法的应用程序访问受保护文件 后, 缓存中的明文数据不会立即被清除, 导致非法应用程序在缓存中数据未清除时访问受 保护文件, 可以得到缓存中的明文数据, 使得受保护文件数据泄露。
发明内容
为了提高网络数据传输的安全性, 本发明实施例提供了一种签名方法和系统。技 术方案如下 :
一种签名方法, 所述方法包括 :
应用程序接收用户发出的对受保护文件进行操作的指令, 所述受保护文件为经过 加密并以密文形式保存在磁盘中的文件, 所述对受保护文件进行操作的指令包括打开、 读、 写、 关闭所述受保护文件的指令 ;
接收到所述打开所述受保护文件的指令之后, 打开所述受保护文件的操作包括 :
所述应用程序调用操作系统的上层接口, 所述上层接口向文件系统发出打开所述受保护文件的指令 ;
过滤驱动截获所述上层接口向文件系统发出的打开所述受保护文件的指令, 并判 断所述应用程序是否为合法应用程序 ; 如果合法, 所述过滤驱动读取受保护文件的属性信 息, 向所述文件系统发出在虚拟磁盘中创建所述受保护文件的影子文件的指令, 所述文件 系统通过虚拟磁盘驱动在所述虚拟磁盘中创建所述影子文件, 所述操作系统向所述应用程 序返回所述影子文件的句柄, 引用计数值增加一个步长 ;
其中, 在所述虚拟磁盘中创建影子文件包括方法 A 和 B :
A, 所述过滤驱动通过所述文件系统读取所述受保护文件的属性信息, 在所述虚拟 磁盘中创建所述影子文件, 为所述影子文件随机命名, 并写入所述受保护文件的属性信息, 所述影子文件的数据为空 ;
或,
B, 所述过滤驱动通过所述文件系统读取所述受保护文件, 并使用与主机连接的加 密锁中存储的密钥对所述受保护文件进行解密, 得到明文, 将明文放入所述虚拟磁盘中作 为影子文件的数据, 并为所述明文随机命名, 作为所述影子文件 ;
接收到所述读所述受保护文件的指令之后, 读所述受保护文件的操作包括 : 所述应用程序发出根据所述句柄对文件进行读的指令 ;
当创建影子文件使用方法 A, 所述影子文件的数据为空时, 所述过滤驱动截获所述 应用程序发出的根据所述句柄对文件进行读的指令, 从磁盘中读取所述受保护文件的预定 部分或全部, 使用与所述主机连接的加密锁内存储的密钥对所述受保护文件的预定部分或 全部进行解密, 得到所述受保护文件的预定部分的明文或全部明文, 所述操作系统为所述 影子文件分配缓存空间中, 并将所述预定部分的明文或全部明文放入所述操作系统为所述 影子文件分配的缓存空间, 建立文件映射关系, 所述应用程序完成对所述受保护文件的读 操作 ;
当创建影子文件使用方法 B, 所述影子文件中的数据为受保护文件的明文时, 所述 过滤驱动截获所述应用程序发出的根据所述句柄对文件进行读的指令, 通过所述虚拟磁盘 驱动在所述虚拟磁盘中读取所述影子文件, 所述操作系统为所述影子文件分配缓存空间, 并将所述虚拟磁盘中的明文放入所述操作系统为所述影子文件分配的缓存空间中, 所述应 用程序完成对所述受保护文件的读操作 ;
接收到所述写所述受保护文件的指令之后, 写所述受保护文件的操作包括 :
所述应用程序发出根据所述句柄对文件进行写操作的指令 ;
所述应用程序在所述操作系统为所述影子文件分配的缓存中完成对所述明文的 受保护文件的写操作, 所述写操作包括对所述受保护文件的插入新数据、 修改、 替换、 编 辑;
所述过滤驱动对所述修改后的受保护文件进行加密操作并保存 ;
接收到所述关闭所述受保护文件的指令之后, 关闭所述受保护文件的操作包括 :
所述过滤驱动逐一关闭打开的所述影子文件的句柄, 将所述引用计数值递减, 递 减后检查所述引用计数值, 当所述引用计数值为初值时, 删除所述影子文件。
优选地, 所述应用程序接收用户发出的打开所述受保护文件的指令前, 所述方法 还包括 :
所述操作系统启动, 再自动加载所述过滤驱动、 所述虚拟磁盘驱动, 并在内存中创 建所述虚拟磁盘。
优选地, 当判断所述应用程序为不合法时, 所述方法还包括 :
所述上层接口通过所述文件系统找到所述受保护文件, 所述操作系统为所述受保 护文件分配缓存, 并将所述受保护文件读入缓存, 所述读入缓存中的受保护文件为密文形 式;
或,
向所述应用程序返回错误, 非法应用程序禁止访问所述受保护文件。
优选地, 所述过滤驱动使用与所述主机连接的加密锁内存储的密钥对所述受保护 文件的预定部分或全部进行解密, 具体的为 :
所述过滤驱动使用与所述主机连接的加密锁内存储的密钥以簇为单位对所述受 保护文件的预定部分或全部进行解密。
相应地, 当所述将预定部分的明文放入所述操作系统为所述影子文件分配的缓存 空间时, 所述过滤驱动对所述修改后的受保护文件进行加密操作并保存, 具体的包括 :
所述过滤驱动将所述修改后的受保护文件的明文以簇为单位使用与所述主机连 接的加密锁内存储的密钥进行加密, 并通过所述文件系统对磁盘中存储所述受保护文件的 簇进行修改。
相应地, 当所述将全部明文放入所述操作系统为所述影子文件分配的缓存空间 时, 所述过滤驱动对所述修改后的受保护文件进行加密操作并保存, 具体的包括 :
所述过滤驱动将完整的所述修改后的受保护文件使用与所述主机连接的加密锁 内存储的密钥进行加密, 覆盖所述磁盘中存储的所述受保护文件。
优选地, 所述上层接口为, 所述操作系统提供的供所述应用程序调用, 为所述应用 程序提供创建、 打开、 读取文件操作的功能的接口。
优选地, 所述过滤驱动判断所述应用程序是否合法, 具体的包括 :
在进行文件保护前, 使合法的应用程序向所述过滤驱动进行注册, 过滤驱动记录 所述合法的应用程序的注册信息, 当存在应用程序通过调用上层接口发送访问受保护文件 的指令时, 过滤驱动获取应用程序的信息, 并判断与记录的合法应用程序的注册信息是否 相同, 如果相同, 则认为应用程序合法, 如果不相同, 则认为应用程序不合法, 所述注册信息 包括所述合法的应用程序的名称、 进程 ID、 路径, 以及应用程序的注册表信息。
优选地, 所述应用程序接收用户发出的打开受保护文件的指令前, 还包括 :
对所述应用程序进行加壳处理, 使得所述加壳后的应用程序在启动时判断是否有 合法的加密锁接入, 如果有, 则所述应用程序可以启动, 否则, 所述应用程序不能启动。
优选地, 所述引用计数值用于记录所述影子文件的句柄数, 当未返回所述影子文 件的句柄时, 所述引用计数值为初值, 每返回一个所述影子文件的句柄, 所述引用计数值增 加一个步长, 每关闭一个所述影子文件的句柄, 所述引用计数值递减一个步长。
一种签名系统, 所述系统包括 :
所述文件保护驱动包括 : 应用程序模块、 上层接口模块、 过滤驱动模块、 文件系统 模块、 虚拟磁盘驱动模块 ;
所述应用程序模块, 用于通过调用所述上层接口模块打开存储在磁盘中的受保护文件, 并通过所述上层接口模块发出根据句柄对文件进行读操作和写操作的指令 ;
所述上层接口模块, 用于接收所述应用程序模块发出的对文件操作的指令, 并通 过操作所述文件系统模块完成文件的打开、 读、 写、 关闭的操作 ;
所述过滤驱动模块, 用于监控主机中对所述文件系统模块的操作, 当发现预定义 的对所述文件系统模块的操作时, 执行预设的附加操作, 对所述预定义的对所述文件系统 模块的操作进行控制 ;
所述文件系统模块, 用于管理磁盘中存储的文件, 可以在磁盘中完成建立文件, 索 引文件, 读取文件, 修改文件的操作 ;
所述虚拟磁盘驱动模块, 用于当接收到所述过滤驱动模块通过所述文件系统模块 发出的创建所述受保护文件的影子文件的指令后, 在虚拟磁盘中建立影子文件, 当所述影 子文件建立完成后, 操作系统向所述应用程序模块返回所述影子文件的句柄 ;
所述加密锁包括 : 验证模块和密钥存储模块 ;
所述验证模块, 用于在所述应用程序模块启动时, 辅助验证是否有加密锁连接在 主机中, 如果有, 则所述应用程序模块可以启动, 否则, 所述应用程序模块不能启动。
所述密钥存储模块, 用于在所述过滤驱动模块对受保护文件进行加解密操作时, 提供加解密操作的密钥。 优选地, 所述应用程序模块包括验证单元、 打开单元、 读写单元 :
所述验证单元, 用于在所述应用程序模块启动时, 验证主机是否连接有合法的加 密锁, 如果有, 所述应用程序模块可以启动, 否则, 所述应用程序模块不能启动 ;
所述打开单元, 用于在接收到所述用户发送的打开受保护文件的指令时, 向所述 上层接口模块发出打开所述受保护文件的指令, 并在接收到所述影子文件的句柄时, 根据 所述句柄打开受保护文件 ;
所述读写单元, 用于在接收到所述操作系统返回的所述影子文件的句柄后, 根据 所述句柄发出读写操作的指令。
优选地, 所述过滤驱动模块, 具体的包括 : 过滤单元、 判断单元、 解密单元、 影子文 件创建单元 ;
所述过滤单元, 用于监控所述上层接口模块是否有打开所述受保护文件的操作, 当存在打开所述受保护文件的操作时, 执行预设的附加操作 ;
所述判断单元, 用于在所述过滤单元截获预设的对所述文件系统模块的操作时, 判断打开受保护文件的应用程序是否合法, 如果合法, 则向所述文件系统模块发出创建影 子文件的指令, 如果不合法, 则直接打开所述受保护文件, 打开所述受保护文件时, 不进行 解密操作 ;
所述解密单元, 用于当接收到所述上层接口模块发送的根据所述句柄读或写所述 影子文件的指令时, 向所述文件系统模块发出读取受保护文件的命令, 并将读出的密文形 式的所述受保护文件进行解密操作, 得到明文形式的受保护文件, 放入操作系统为所述影 子文件分配的缓存中 ;
所述影子文件创建单元, 用于向所述文件系统模块发送创建影子文件的指令, 并 为所述影子文件随机命名。
相应地, 所述预设的附加操作具体的为, 判所述预设的附加操作具体的为, 创建影
子文件、 对文件进行加解密、 对数据进行个性化操作。
相应地, 所述文件系统模块还用于, 当接收到所述影子创建单元发送的创建影子 文件的指令时, 向所述虚拟磁盘驱动模块发送创建影子文件的指令。
优选地, 所述在虚拟磁盘中建立影子文件具体的为 :
所述过滤驱动模块通过所述文件系统模块读取所述受保护文件的属性信息, 在所 述虚拟磁盘中创建所述影子文件, 并写入所述受保护文件的属性信息, 所述影子文件的数 据为空。
相应地, 当所述影子文件的数据为空时, 所述应用程序模块发出根据所述句柄对 文件进行读操作的指令后, 还包括 :
所述过滤驱动模块截获所述应用程序模块发出的根据所述句柄对文件进行读的 指令, 从磁盘中读取所述受保护文件的预定部分或全部, 使用所述加密锁内部存储的密钥 对所述受保护文件的预定部分或全部进行解密操作, 得到所述受保护文件的预定部分的明 文或全部明文, 所述操作系统为所述影子文件分配缓存空间, 并将所述预定部分的明文或 全部明文放入所述操作系统为所述影子文件分配的缓存空间, 建立文件映射关系。
优选地, 所述在虚拟磁盘中建立影子文件还具体的为 : 所述过滤驱动模块通过所述文件系统模块读取所述受保护文件, 并使用所述加密 锁中存储的密钥对所述受保护文件进行解密, 得到明文, 将所述明文放入所述虚拟磁盘中, 作为所述影子文件。
相应地, 所述应用程序模块发出根据所述句柄对文件读操作的指令后, 还包括 :
所述过滤驱动模块截获所述应用程序发出的根据所述句柄对文件进行读的指令, 向所述文件系统模块发送根据所述句柄对文件进行读的指令, 并通过所述虚拟磁盘模块在 所述虚拟磁盘中读取所述影子文件, 所述操作系统为所述影子文件分配缓存空间, 并将所 述虚拟磁盘中的明文放入所述操作系统为所述影子文件分配的缓存空间, 完成对所述受保 护文件的读操作。
优选地, 所述过滤驱动模块使用所述加密锁内部存储的密钥对所述受保护文件的 预定部分或全部进行解密操作, 具体的为 :
所述过滤驱动模块使用所述加密锁内部存储的密钥以簇为单位对所述受保护文 件的预定部分或全部进行解密操作。
优选地, 所述过滤驱动模块还包括加密单元, 所述加密单元用于 :
当所述将预定部分的明文放入所述操作系统为所述影子文件分配的缓存空间时, 所述加密单元将经过所述应用程序模块写操作修改的所述受保护文件的明文以簇为单位 进行加密, 并通过所述文件系统模块对磁盘中存储的所述受保护文件进行修改 ;
或,
当所述将全部明文放入所述操作系统为所述影子文件分配的缓存空间时, 所述加 密单元将经过所述应用程序模块写操作修改的所述受保护文件的明文以簇为单位进行加 密, 覆盖磁盘中存储的所述受保护文件。
优选地, 所述过滤驱动模块还包括引用计数单元, 所述引用计数单元用于 :
记录所述影子文件的句柄数, 当未返回所述影子文件的句柄时, 所述引用计数单 元的计数值为初值, 每返回一个所述影子文件的句柄, 所述引用计数值增加一个步长, 每关
闭一个所述影子文件的句柄, 所述引用计数值递减一个步长, 当所述引用计数值递减为初 值时, 删除所述影子文件。
本发明实施例提供的技术方案带来的有益效果是通过在文件保护系统中加入影 子文件, 将受保护文件的明文数据放入为影子文件分配的缓存空间中, 并且影子文件存储 在虚拟磁盘中, 虚拟磁盘对非常程序不可见, 且影子文件不为非法程序所知, 因此非常程序 无法通过访问影子文件得到缓存中受保护文件的明文数据, 解决了在现有技术中存在合法 的程序访问受保护文件后, 明文数据遗留在缓存未清除时, 非法的程序可通过缓存地址对 明文数据进行访问的缺陷, 具有更高的安全性。 附图说明
图 1 为本发明具体实施例一提供的一种文件保护方法的流程图。
图 2 为本发明具体实施例二提供的一种文件保护方法的流程图。
图 3 为本发明具体实施例三提供的一种文件保护系统的框图。 具体实施方式 为使本发明的目的、 技术方案和优点更加清楚, 下面将结合附图对本发明实施方 式作进一步地详细描述。
实施例 1
本实施例提供了一种文件保护方法, 本实施例以对在磁盘中存储的受保护文件 Encrypt.txt 进行读操作为例进行说明, Encrypt.txt 为存储在用户磁盘上的受保护文件, 并经过密钥加密, 是以密文形式在磁盘上存储的。
在用户对文件 Encrypt.txt 进行读取或修改操作时, 需要进行解密操作, 以使用 户能够在用户界面上得到明文的文件数据 ;
在不同的操作系统中, 需要相应的应用程序用以打开不同格式的文件, 本实施例 以在 windows XP 系统中为例进行说明, 在 windows XP 系统下对 txt 格式的文件进行读写 时, 需要启动系统提供的程序 notepad.exe, 并在系统中建立进程 notepad.exe, notepad. exe 可以调用操作系统提供的接口 NtcreateFile、 NtReadFile 等进行打开文件、 建立文件、 读取文件等操作, 即打开文件 Encrypt.txt, 需启动程序 notepad.exe ;
在本实施例所提供的一种文件保护方法之前还包括, 根据需要保护的文件, 对操 作系统提供的合法的应用程序进行预处理, 在本实施例中, Encrypt.txt 为受保护文件, 由 于受保护的文件为 txt 格式, 则对应用程序 notepad.exe 进行预处理, 在本实施例中, 优选 地, 对 notepad.exe 进行预处理为加壳处理, 具体的为 : 在 notepad.exe 中加入代码, 使得在 系统运行 notepad.exe 时, 先要检查主机上是否有合法的加密锁接入, 如果有, 则可以运行 该进程, 否则, 系统不能加载 notepad.exe 进程 ;
一种文件保护方法, 参加图 1, 具体步骤如下 :
步骤 101, 应用程序接收用户发出的打开受保护文件 Encrypt.txt 的命令 ;
在本实施例中, 具体的为, 应用程序接收用户发出的读文件 Encrypt.txt 的命令, 其中, 应用程序可能为合法应用程序或非法应用程序 :
合法应用程序为上述经过加壳处理的程序 notepad.exe, 并且有合法的加密锁接
入, 具有运行 notepad.exe 的权限 ;
非法应用程序为未经授权访问受保护文件 Encrypt.txt 的程序 ;
在本实施例中, 步骤 101 开始前还包括 : 启动操作系统, 加载过滤驱动和虚拟磁盘 驱动, 并在内存中建立虚拟磁盘, 其中, 过滤驱动和虚拟磁盘驱动为本发明所提供, 过滤驱 动通过文件系统操作虚拟磁盘驱动, 可以在虚拟磁盘中完成创建、 修改、 闪存文件等操作, 上述虚拟磁盘建立在内存中, 可以提高读写速度, 并且只对过滤驱动及过滤驱动认可的程 序可见 ;
虚拟磁盘为在内存中模拟出一个磁盘分区, 并在上面建立与磁盘存储相同的数据 存储格式, 使得内存中被划分为虚拟磁盘的区域可以作为普通存储类磁盘使用。
步骤 102, 应用程序调用操作系统上层应用接口准备打开受保护文件 ;
在本实施例中, 所述操作系统上层应用接口, 为操作系统提供的用于操作文件 Encrypt.txt 的接口, 例如 NtcreateFile、 NtReadFile 等, 这些接口可以完成 txt 文件的建 立、 读取等操作 ;
步骤 103, 过滤驱动截取上层应用接口发送的指令, 并判断应用程序是否合法, 如 果不合法, 执行步骤 104, 如果合法, 则执行步骤 105 ;
所述过滤驱动, 可以用于监控主机中对于文件系统的操作, 当发生预定义的对文 件系统的操作时, 执行预设的附加操作, 或对预定义的对文件系统的操作进行控制。并且, 所述过滤驱动还具有判断发出打开受保护文件命令的应用程序是否合法的功能 ;
其中, 上述预定义的对文件系统的操作包括读写预设文件等, 在本实施例中, 预定 义的对文件系统的操作为读取受保护文件 Encrypt.txt 的操作 ;
上述预设的附加操作包括, 创建影子文件、 对文件进行加解密、 对数据进行个性化 操作等 ;
过滤驱动判断应用程序是否合法, 具体的为 : 在对合法的应用程序进行加壳处理 时, 使加壳后的应用程序向过滤驱动进行注册, 过滤驱动记录合法的应用程序的注册信息, 当操作系统中存在应用程序通过调用上层应用接口发送打开受保护文件的指令时, 过滤驱 动获取应用程序的信息, 并判断与记录的合法应用程序的注册信息是否相符, 如果相同, 则 认为应用程序合法, 如果不相同, 则认为应用程序不合法。
其中, 上述注册信息包括应用程序的名称、 进程 ID、 路径, 以及应用程序的注册表 信息等。
步骤 104, 操作系统在磁盘上找到受保护文件 Encrypt.txt, 并为其分配缓存空 间, 进行读取 ;
在本步骤中, 由于没有使用密钥进行解密, 因此放入缓存并进行读取的文件 Encrypt.txt 为密文形式 ;
在本实施例中, 本步骤还可以为 : 返回错误, 禁止非法应用程序对受保护文件 Encrypt.txt 进行访问。
步骤 105, 过滤驱动在虚拟磁盘中创建一个新文件作为受保护文件的影子文件, 在 本实施例中, 将受保护文件的影子文件命名为 1.txt ;
其中, 过滤驱动创建受保护文件的影子文件具体包括 :
步骤 A, 过滤驱动读取受保护文件的属性信息 ;上述受保护文件的属性信息包括文件的大小、 类型、 创建时间等, 其中受保护文件 的具体内容为加密存储, 但是其属性信息可通过文件系统获得, 为明文数据, 过滤驱动通过 文件系统读取受保护文件的属性信息 ;
步骤 B, 过滤驱动向文件系统发送在虚拟磁盘中建立 1.txt 的指令 ;
步骤 C, 文件系统向虚拟磁盘驱动发送创建 1.txt 的指令, 虚拟磁盘驱动建立 1.txt ;
步骤 D, 在虚拟磁盘中为影子文件 1.txt 写入数据 ;
在本实施例中, 在为影子文件 1.txt 写入数据时包括两种方法 :
方法 1, 将受保护文件 Encrypt.txt 的属性信息写入虚拟磁盘, 作为影子文件 1.txt 的属性, 但是 1.txt 的数据为空 ;
方法 2, 将受保护文件 Encrypt.txt 的属性信息写入虚拟磁盘, 作为影子文件 1.txt 的属性, 同时过滤驱动将受保护文件 Encrypt.txt 中的数据读出, 并使用与主机连接 的加密锁内存储的密钥进行解密, 得到明文的数据, 写入虚拟磁盘中作为影子文件 1.txt 的数据 ;
其中, 在方法 2 中, 对 Encrypt.txt 进行解密时, 优选地以簇为单位对密文进行解 密, 将 Encrypt.txt 中的预定部分或全部解密, 得到预定部分的明文或全部的明文放入虚 拟磁盘中, 作为 1.txt 的数据 ;
在对受保护文件进行加解密操作时, 不局限于以簇为单位进行解密, 还可以以流 为单位进行解密、 以字节为单位进行解密、 以数据块为单位进行解密等 ;
在过滤驱动为受保护文件 Encrypt.txt 创建影子文件时, 影子文件的命名为随机 命名, 即为影子文件随机生成一个名称, 并且该名称与磁盘中所存储的其他文件名称不同, 在本实施例中, 以为影子文件随机生成的名称为 1.txt 为例进行说明。
步骤 106, 过滤驱动向应用程序返回影子文件 1.txt 的句柄 ;
在本实施例中, 认为影子文件 1.txt 的句柄为 h1txt ;
在本步骤中, 还包括 : 将引用计数值增加一个步长, 优选地, 将引用计数值增加 1, 引用计数值记录打开的影子文件的句柄数, 当未有影子文件的句柄返回时, 将引用计数值 设置为初值 0, 当有影子文件的句柄被关闭时, 将引用计数值递减一个步长。
步骤 107, 应用程序发出根据句柄 h1txt 进行读操作的指令 ;
步骤 108, 过滤驱动截获到根据句柄 h1txt 进行读操作的命令, 读出磁盘中存储的 密文形式的受保护文件 Encrypt.txt, 并进行解密操作, 将明文形式的 Encrypt.txt 内容读 入操作系统为 1.txt 分配的缓存当中 ;
其中, 过滤驱动对密文形式的 Encrypt.txt 进行解密操作, 还包括, 解密操作所使 用的密钥存储于与主机连接的加密锁中, 受保护文件的加密方式可以选择对称加密或非对 称加密 ;
将明文形式的 Encrypt.txt 内容读入操作系统为 1.txt 分配的缓存当中还包括 : 过滤驱动为缓存中的文件 Encrypt.txt 与磁盘中存储的密文的 Encrypt.txt 建立文件映射 关系, 将磁盘中存储的受保护文件 Encrypt.txt 解密后分块读入缓存中, 以节省缓存空间 ;
在对受保护文件进行解密并将明文放入为影子文件分配的缓存时, 可以包括如下 方法 :方法一, 将受保护文件的全部数据解密, 并完整的放入为影子文件分配的缓存中, 这个适用于受保护文件比较小时 ;
方法二, 将受保护文件中需要访问的部分, 以簇为单元进行解密, 并将解密的部分 放入为影子文件分配的缓存中, 这种方法适用于受保护文件比较大时, 并优选地受保护文 件在进行加密保存时, 以簇为单位进行加密。
在本步骤中, 上述描述的方法适用于步骤 105 中步骤 D 采用方法 1 时 ;
在步骤 D 采用方法 2 时, 步骤 108 还可以为 :
过滤驱动截获到根据句柄 h1txt 进行读操作的指令, 向文件系统发送读取影子文 件的指令, 文件系统通过虚拟磁盘驱动读取影子文件 1.txt 中的数据, 将 1.txt 中的数据放 入操作系统为影子文件分配的缓存中。
步骤 109, 应用程序关闭打开的受保护文件 Encrypt.txt。
在本实施例中, 步骤 109 后还可以包括 : 过滤驱动逐一关闭打开的影子文件 1.txt 的句柄, 同时将引用计数值递减, 每次递减后检查所述引用计数值, 当引用计数值为初值 0 时, 删除所述影子文件。
本实施例所提供的一种文件保护方法, 通过在系统中安装一个过滤驱动, 在合法 的应用程序访问受保护文件的过程中, 首先并不打开真实的受保护文件, 而是在虚拟磁盘 中建立受保护文件的影子文件, 并更改为其他名称, 为其分配缓存空间, 再将受保护文件进 行解密操作读入缓存中, 合法的应用程序通过影子文件的句柄打开受保护文件, 其中, 虚拟 磁盘只对合法程序可见, 影子文件的句柄也只有合法程序可以得到, 因此, 避免了被非法恶 意程序获得句柄, 而在缓存中将明文形式的受保护文件读出, 因此, 克服了现有技术中, 当 文件读入缓存中不能进行有效保护的缺点, 因此, 本发明提供的一种文件保护方法具有更 好的安全性。 实施例 2
在本实施例中, 以对存储在磁盘上的受保护文件 Encrypt.txt 进行写操作为例进 行说明, 其中, 写操作包括, 在原有文档 Encrypt.txt 的数据基础上插入新数据、 编辑和修 改数据的操作 ;
同实施例 1, 受保护文件 Encrypt.txt 加密后以密文的形式存储在磁盘上, 以在 windows XP 系统中为例, 将用于打开文件 Encrypt.txt 的合法应用程序 notepad.exe 进 行加壳处理, 本实施例中的加壳处理具体的为 : 在应用程序 notepad.exe 中加入代码, 使 得应用程序在运行时具有如下功能, 在启动 notepad.exe 时, 检查是否有合法的加密锁接 入, 当有合法的加密锁接入时, notepad.exe 可以运行, 系统允许建立 notepad.exe 进程, 并 通过 notepad.exe 对受保护文件 Encrypt.txt 进行写操作, 当没有合法的加密锁接入时, notepad.exe 不能运行 ;
上述加密锁在接入主机时, 可以提供对合法进程 notepad.exe 需要的认证, 并且, 在加密锁中秘密的存储有密钥, 所述密钥用于对受保护文件 Encrypt.txt 进行加解密操 作;
一种文件的保护方法, 参加图 2, 具体的如下 :
步骤 201, 应用程序接收用户发出的打开受保护文件 Encrypt.txt 的指令 ;
在本实施例中, 应用程序包括 : 合法应用程序和非法应用程序 ;
合法应用程序为经过加壳处理的 notepad.exe, 可将 notepad.exe 与 txt 格式进行 关联, 当用户打开文件 Encrypt.txt 时, notepad.exe 启动, 并验证是否有合法的加密锁接 入, 如果有, 则建立 notepad.exe 进程, 可以通过 notepad.exe 对 Encrypt.txt 进行操作 ;
非法应用程序为攻击者写入, 以窃取或修改受保护文件为目的的程序, 不需加密 锁接入就可以启动 ;
同实施例 1, 在步骤 201 前, 还包括 : 系统启动, 加载过滤驱动和虚拟磁盘驱动, 并 在内存中创建虚拟磁盘 ;
步骤 202, 应用程序调用操作系统上层应用接口向文件系统发出打开受保护文件 的指令 ;
其中, 合法应用程序和非法应用程序都需要通过操作系统提供的上层接口打开受 保护文件, 在 Windows XP 系统中, 上述上层接口包括 : NtcreateFile、 NtReadFile 等 ;
上述文件系统具体的为, 操作系统通过文件系统管理磁盘上存储的文件, 包括 FAT、 NTFS 等。
步骤 203, 过滤驱动截取操作系统上层接口向文件系统发出的打开受保护文件 Encrypt.txt 的指令, 并判断应用程序是否合法, 如果不合法, 执行步骤 204, 如果合法, 则 执行步骤 205 ; 上述过滤驱动, 可以用于监控所述主机系统中对文件系统的操作, 当发生预定义 的对文件系统的操作时, 执行预设的附加操作, 或对预定义的对文件系统的操作进行控制, 并且, 所述过滤驱动还具有判断发出打开受保护文件命令的应用程序是否合法的功能 ;
在本实施例中, 过滤驱动当截获到操作系统上层接口向文件系统发出的打开受保 护文件 Encrypt.txt 的指令时, 可以挂起该命令, 在对应用程序判断后, 根据判断结果执行 相应的命令 ;
其中, 过滤驱动判断应用程序是否合法, 具体的为 : 在对合法的应用程序进行加壳 处理时, 使加壳后的应用程序向过滤驱动进行注册, 过滤驱动记录合法的应用程序的注册 信息, 当操作系统中发现应用程序通过调用上层应用接口发送访问受保护文件的指令时, 过滤驱动获取应用程序的信息, 并判断与记录的合法应用程序的注册信息是否相同, 如果 相同, 则认为应用程序合法, 如果不相同, 则认为应用程序不合法 ;
上述注册信息包括应用程序的名称、 进程 ID、 路径, 以及应用程序的注册表信息 等。
步骤 204, 操作系统通过文件系统打开文件 Encrypt.txt, 文件为密文形式 ;
当步骤 203 中, 过滤驱动判断应用程序为非法应用程序时, 则通过文件系统打开 文件 Encrypt.txt, 将磁盘中存储的 Encrypt.txt 数据加载入缓存, 系统为其分配缓存地址 并返回句柄, 由于未进行解密操作, 所显示的文件内容为密文 ;
在本步骤后, 还可以包括 : 非法应用程序通过操作系统上层接口发送对文件 Encrypt.txt 进行写操作的指令, 上层接口向文件系统发出写数据的指令, 过滤系统截获该 指令, 禁止执行, 并返回非法修改的错误。
步骤 205, 过滤驱动创建一个新文件作为受保护文件的影子文件, 在本实施例中, 将受保护文件的影子文件命名为 1.txt ;
其中, 过滤驱动创建受保护文件的影子文件的过程与实施例 1 中步骤 105 中相同,
这里不再赘述 ;
步骤 206, 过滤驱动向合法的应用程序返回 1.txt 的句柄 h1txt, 打开文件受保护 文件 ;
在本实施例中, 具体的打开文件 Encrypt.txt 并得到明文数据的操作包括 :
206a, 过滤驱动返回 1.txt 的句柄 h1txt ;
206b, 应用程序发出根据句柄 h1txt 读文件的指令 ;
206c, 过滤驱动读出受保护文件 Encrypt.txt 的数据, 并进行解密操作, 将明文形 式的 Encrypt.txt 内容放入操作系统为 1.txt 分配的缓存中, 并建立文件映射关系 ;
其中, 步骤 206c 也可以为, 过滤驱动从虚拟磁盘中读取影子文件 1.txt 的内容, 1.txt 中存储的为受保护文件 Encrypt.txt 的明文数据 ;
过滤驱动对密文形式的 Encrypt.txt 进行解密操作, 具体地, 解密操作所使用的 密钥存储于与主机连接的加密锁中, 受保护文件的加密方式可以选择对称加密或非对称加 密;
过滤驱动向合法的应用程序返回 1.txt 的句柄 h1txt 后, 还可以包括 : 过滤驱动将 引用计数值增加 1。
步骤 207, 应用程序发出根据句柄对向受保护文件 Encrypt.txt 指定位置进行写 操作的指令, 并进行写操作 ;
在本步骤中, 对文件 Encrypt.txt 的写操作在缓存中完成, 即修改的为缓存中存 储的 Encrypt.txt 中的数据 ;
其中, 所述写操作包括对原受保护文件的写入新数据、 删除、 替换、 修改、 编辑等操 作。
步骤 208, 写操作结束, 过滤驱动对缓存中的明文 Encrypt.txt 内容进行加密操作 并保存, 得到修改后的受保护文件 Encrypt.txt ;
在本实施例中, 过滤驱动对缓存中的明文 Encrypt.txt 内容进行加密操作并保 存, 得到修改后的受保护文件 Encrypt.txt, 具体的包括如下方法 :
方法一, 在步骤 206c 中, 将 Encrypt.txt 的明文完整的读入缓存中, 以供用户在缓 存中对 Encrypt.txt 进行写操作, 当写操作结束后, 使用存储于缓存中的 Encrypt.txt 完整 覆盖存储于磁盘中的原受保护文件 Encrypt.txt, 得到修改后的受保护文件 Encrypt.txt ;
方法二, 在对受保护文件进行加解密操作时, 以簇为单位进行加解密操作, 其中, 簇为磁盘存储介质的最小存储单元。在步骤 206c 中, 将需要操作的 Encrypt.txt 文件部 分读入缓存中, 在缓存中完成写操作后, 以簇为单位对数据进行加密操作, 将磁盘中存储的 Encrypt.txt 文件中被修改的簇进行替换, 并由文件系统为增加的数据部分分配新簇进行 存储, 当簇中数据在文件 Encrypt.txt 中的位置发生改变时, 文件系统记录簇的顺序, 得到 修改后的受保护文件 Encrypt.txt ;
当步骤 206c 为过滤驱动从虚拟磁盘中读取影子文件 1.txt 的内容时, 使用方 法三 : 应用程序在缓存中完成对明文的 Encrypt.txt 的修改, 并对虚拟磁盘中存储的 Encrypt.txt 进行修改, 当写操作完成后, 将虚拟磁盘中明文的 Encrypt.txt 以簇为单位进 行加密, 替换磁盘中存储的密文 Encrypt.txt ;
在本实施例中, 步骤 208 后还可以包括 : 过滤驱动逐一关闭打开的影子文件 1.txt的句柄, 同时将引用计数值递减, 每次递减后检查所述引用计数值, 当引用计数值为初值 0 时, 删除所述影子文件。
本实施例所提供的文件保护方法, 通过在内存中建立虚拟磁盘, 并在虚拟磁盘中 建立影子文件的方法, 克服了传统技术中的将受保护文件解密到缓存中, 容易暴漏受保护 文件的缺点, 在本发明中, 所有的读写操作均是对影子文件进行的, 并且虚拟磁盘只是合法 的应用程序可见, 大大提高了文件数据的安全性。
实施例 3
本实施例提供了一种文件保护系统, 参加图 2, 上述一种文件保护系统包括, 文件 保护驱动 1 和加密锁 2 ;
其中, 文件保护驱动 1 包括 : 应用程序模块 11、 上层接口模块 12、 过滤驱动模块 13、 文件系统模块 14、 虚拟磁盘驱动模块 15。
具体地 :
应用程序模块 11, 用于通过调用上层接口模块 12 打开存储在磁盘中的受保护文 件, 并通过 12 上层接口模块发出根据句柄进行读操作和写操作的指令 ;
进一步地, 应用程序模块 11 包括 :
验证单元 111, 用于在应用程序模块 11 启动时, 验证主机是否连接有合法的加密 锁, 如果有, 所应用程序模块 11 可以启动, 否则, 应用程序模块 11 不能启动 ;
打开单元 112, 用于在接收到用户发送的打开受保护文件的指令时, 向上层接口模 块 12 发出打开受保护文件的指令, 并在接收到所述影子文件的句柄时, 根据上述句柄访问 受保护文件 ;
读写单元 113, 用于在接收到操作系统返回的影子文件的句柄后, 根据上述句柄发 出读和写操作的指令。
上层接口模块 12, 用于接收应用程序模块 11 发出的对文件操作的指令, 并通过操 作文件系统模块 14 完成文件的打开、 读、 写、 关闭的操作 ;;
过滤驱动模块 13, 用于监控主机中对于文件系统模块 14 的操作, 当发现预定义的 对文件系统模块 14 的操作时, 执行预设的附加操作, 对上述预定义的对文件系统模块 14 的 操作进行控制 ;
在本实施例中, 优选地, 上述预设的附加操作具体的为, 创建影子文件、 对文件进 行加解密、 对数据进行个性化操作等 ;
进一步地, 过滤驱动模块 13, 具体的包括 : 过滤单元 131、 判断单元 132、 解密单元 133、 影子文件创建单元 134 ;
过滤单元 131, 用于监控上层接口模块 12 是否有打开受保护文件的操作, 当存在 打开受保护文件的操作时, 执行预设的附加操作 ;
判断单元 132, 用于在过滤单元 131 截获预设的对文件系统模块 14 的操作时, 判断 打开受保护文件的应用程序是否合法, 如果合法, 则向文件系统模块 14 发出创建影子文件 的指令, 如果不合法, 则直接打开受保护文件, 打开受保护文件时, 不进行解密操作, 其中, 预设的对文件系统模块 14 的操作指的是对受保护文件的打开、 读、 写操作 ;
解密单元 133, 用于当接收到上层接口模块 12 发送根据句柄对文件进行读或写操 作的指令时, 向文件系统模块 14 发出读取受保护文件的命令, 并将读出的密文形式的受保护文件进行解密操作, 得到明文的受保护文件, 放入操作系统为上述影子文件分配的缓存 中;
影子文件创建单元 134, 用于向文件系统模块 14 发送创建影子文件的指令, 并为 该影子文件随机命名。
文件系统模块 14, 用于管理磁盘中存储的文件, 可以在磁盘中完成建立文件, 索引 文件, 读取文件, 修改文件的操作 ;
虚拟磁盘驱动模块 15, 用于当接收到过滤驱动模块 13 通过文件系统模块 14 发出 的创建受保护文件的影子文件的指令后, 在虚拟磁盘中建立影子文件, 当影子文件建立完 成后, 操作系统向应用程序模块 11 返回上述影子文件的句柄 ;
加密锁 2 包括 : 验证模块 21 和密钥存储模块 22 ;
验证模块 21, 用于在应用程序模块 11 启动时, 辅助验证是否有加密锁连接在主机 中, 如果有, 则应用程序模块 11 可以启动, 否则, 应用程序模块 11 不能启动。
密钥存储模块 22, 用于在过滤驱动模块 14 对受保护文件进行加解密操作时, 提供 加解密操作的密钥 ;
在虚拟磁盘中建立影子文件具体的为 :
过滤驱动模块 13 通过文件系统模块 14 读取所述受保护文件的属性信息, 在虚 拟磁盘中创建所述影子文件, 并写入所述受保护文件的属性信息, 所述影子文件的数据为 空;
或,
过滤驱动模块 13 通过文件系统模块 14 读取受保护文件, 并使用加密锁 2 中存储 的密钥对受保护文件进行解密, 得到明文, 将明文放入上述虚拟磁盘中, 作为影子文件 ;
其中, 当影子文件的数据为空时, 应用程序模块 11 根据句柄发出读操作的指令 后, 还包括 :
过滤驱动模块 13 截获应用程序模块 11 发出的根据上述句柄进行读操作的指令, 从磁盘中读取受保护文件的预定部分或全部, 使用加密锁 2 内部存储的密钥对受保护文件 的预定部分或全部进行解密操作, 得到受保护文件的预定部分的明文或全部明文, 操作系 统为影子文件分配缓存空间, 并将预定部分的明文或全部明文放入操作系统为上述影子文 件分配的缓存空间, 建立文件映射关系 ;
应用程序模块 11 根据上述句柄发出读操作的指令后, 还包括 :
所述过滤驱动模块截获所述应用程序发出的根据所述句柄对文件进行读的指令, 向文件系统模块 14 发送根据上述句柄进行读操作的指令, 并通过所述虚拟磁盘模块在所 述虚拟磁盘中读取影子文件, 操作系统为上述影子文件分配缓存空间, 并将所述虚拟磁盘 中的明文放入操作系统为上述影子文件分配的缓存空间, 完成对受保护文件的读操作 ;
过滤驱动模块 13 使用加密锁 2 内部存储的密钥对受保护文件的预定部分或全部 进行解密操作, 具体的为 :
过滤驱动模块 13 使用加密锁 2 内部存储的密钥以簇为单位对受保护文件的预定 部分或全部进行解密操作 ;
在本实施例中, 过滤驱动模块 13 还包括加密单元 135, 加密单元 135 用于 :
当将预定部分的明文放入操作系统为上述影子文件分配的缓存空间时, 加密单元135 将经过应用程序模块 11 写操作修改的受保护文件的明文以簇为单位进行加密, 并通过 文件系统模块 14 对磁盘中存储的受保护文件进行修改 ;
或,
当将全部明文放入操作系统为上述影子文件分配的缓存空间时, 加密单元 135 将 经过应用程序模块 11 写操作修改的受保护文件的明文以簇为单位进行加密, 覆盖磁盘中 存储的受保护文件。
在本实施例中, 过滤驱动模块 13 还可以包括引用计数单元 136, 引用计数单元 136 用于 :
记录影子文件的句柄数, 当准备打开受保护文件并且未返回所述影子文件的句柄 时, 所述引用计数单元 136 的计数值为初值, 每返回一个上述影子文件的句柄, 引用计数值 增加一个步长, 每关闭一个上述影子文件的句柄, 引用计数值递减一个步长, 当引用计数值 递减为初值时, 删除所述影子文件。
本实施例所提供的系统, 与实施例 1、 2 所提供的方法相对应, 并互做补充, 在系统 中可以体现方法, 并由方法可以推断得出系统。
在本发明所提供的实施例中, 所提供的各种操作及顺序仅为最优情况, 在实际的 使用中并不一定严格按照上述实施例提供的操作顺序进行实施, 并且文件名称等可以进行 协定的变化只要按照本发明所提供的方法以及通过本发明所提供的方法进行的没有创造 性的变换进行的实施均应该属于本发明的保护范围。
以上仅为本发明的较佳实施例, 并不用以限制本发明, 凡在本发明的精神和原则 之内, 所作的任何修改、 等同替换、 改进等, 均应包含在本发明的保护范围之内。