基于LINUX的数据加密保护方法及系统
技术领域
本发明涉及数据加密领域,特别涉及一种基于LINUX的数据加密保护方法及系统。
背景技术
目前用于LINUX数据加解密主要有以下两种实现方式:
(I)基于磁盘级的加解密实现方式,主要通过dm-crypt的方式来实现,先对指定的磁盘分区进行处理,磁盘挂载后,对该分区进行写入时就会自动加密,读取时则会自动解密,磁盘卸载后,保存在该分区的数据也会自动处于加密状态。
(II)基于工作目录的数据透明加解密方式,主要通过ecryptfs的方式来实现,先指定受保护的数据目录,将挂载的类型指定为ecryptfs。目录挂载后,保存在该工作目录的数据就会自动进行加密,读取时则会自动进行解密。
但是目前的数据加解密存在如下缺点:1、磁盘级的加解密方式,需要对整个磁盘做一次全新的处理,对于已经运行并且保存有较多数据的服务器来讲,操作上不方便。2、磁盘正常挂载后,受保护的数据就处于解密的状态,任何应用程序都可以操作该空间中的数据。3、基于工作目录的数据加解密,目前也只能保护处于未挂载状态的数据,对于挂载后的数据也都处于解密状态。
发明内容
本发明要解决的技术问题,在于提供一种基于LINUX的数据加密保护方法及系统,通过对挂载状态下的数据进行保护,有效地防止了未授权数据的访问,提高了数据的安全性。
本发明要解决的技术问题之一是这样实现的:基于LINUX的数据加密保护方法,包括如下步骤:
步骤1、计算出要进行控制的应用程序的MD5码,并将该MD5码作为签名值与应用程序名称一并提交给服务器;同时将服务器返回的程序控制策略下发给内核;
步骤2、服务器接收提交的签名值并完成应用程序注册,之后配置应用程序的程序控制策略,并将配置的程序控制策略返回给客户;
步骤3、将程序控制策略加载到内核,并重定向内核的读/写接口,之后根据加载的程序控制策略对访问的应用程序进行控制以及对文档的读/写进行加解密。
进一步的,所述步骤3具体包括以下步骤:
步骤31、在内核重新定义读/写接口函数,并将原读/写系统调用接口的地址重定向到新定义的读/写函数接口;
步骤32、在新定义的读/写函数接口中添加程序控制策略,并对访问的应用程序进行应用程序名称及签名值验证;
步骤33、应用程序验证通过后,便对文档的读/写进行加解密。
进一步的,所述步骤31具体为:先在系统调用表的入口地址中获取原读/写系统调用接口的地址信息,并将该地址信息记录下来;然后在内核中重新定义读/写接口函数;最后将原读/写系统调用接口的地址重定向到新定义的读/写函数接口,实现对原读/写系统调用接口的拦截。
进一步的,所述步骤32具体为:在新定义的读/写函数接口中添加程序控制策略,当应用程序要调用读/写操作时,首先获取当前访问的应用程序名称,并与程序控制策略中记录的应用程序名称进行对比,如果有对比到相同名称,则进行控制,如果没有对比到相同名称,则不进行控制;然后计算出进行控制的应用程序的签名值,并与程序控制策略中记录的签名值进行比对,如果签名值一致,则允许当前应用程序正常操作文档的读/写加解密接口,如果签名值不一致,则不允许当前应用程序进入正常的读/写加解密操作接口。
进一步的,所述步骤33具体为:当要读加密文档时,首先读取文档的文件头,并判断该文件头是否为受系统保护的加密文档类型,如果是,则解密文件头的内容,获取系统密钥和随机密钥,之后调用对称加密算法解密接口,对文件主体内容进行解密并输出,如果不是,则直接读取文档;当要写加密文档时,首先判断该文档是否为已加密文档,如果是,则根据文件头中包含的密钥,以相同的对称加密算法对要写入的内容进行加密后写入,如果不是,则首先创建加密文件头,生成用于加密主体内容的加密密钥,并调用对称加密算法的加密接口对内容进行加密处理,之后将加密的文档内容写入。
进一步的,所述配置应用程序的程序控制策略包括配置程序允许打开的文档类型和程序存盘时加密的文档类型。
进一步的,所述加密文档包括头文件和文档主体内容两部分,所述头文件又包括系统密匙及随机密匙。
本发明要解决的技术问题之二是这样实现的:基于LINUX的数据加密保护系统,包括:
客户端模块,计算出要进行控制的应用程序的MD5码,并将该MD5码作为签名值与应用程序名称一并提交给服务器;同时将服务器返回的程序控制策略下发给内核;
服务器模块,服务器接收提交的签名值并完成应用程序注册,之后配置应用程序的程序控制策略,并将配置的程序控制策略返回给客户;
内核模块,将程序控制策略加载到内核,并重定向内核的读/写接口,之后根据加载的程序控制策略对访问的应用程序进行控制以及对文档的读/写进行加解密。
进一步的,所述内核模块包括:
调用拦截单元,在内核重新定义读/写接口函数,并将原读/写系统调用接口的地址重定向到新定义的读/写函数接口;
驱动过滤单元,在新定义的读/写函数接口中添加程序控制策略,并对访问的应用程序进行应用程序名称及签名值验证;
数据加解密单元,应用程序验证通过后,便对文档的读/写进行加解密。
进一步的,所述调用拦截单元具体为:先在系统调用表的入口地址中获取原读/写系统调用接口的地址信息,并将该地址信息记录下来;然后在内核中重新定义读/写接口函数;最后将原读/写系统调用接口的地址重定向到新定义的读/写函数接口,实现对原读/写系统调用接口的拦截。
进一步的,所述驱动过滤单元具体为:在新定义的读/写函数接口中添加程序控制策略,当应用程序要调用读/写操作时,首先获取当前访问的应用程序名称,并与程序控制策略中记录的应用程序名称进行对比,如果有对比到相同名称,则进行控制,如果没有对比到相同名称,则不进行控制;然后计算出进行控制的应用程序的签名值,并与程序控制策略中记录的签名值进行比对,如果签名值一致,则允许当前应用程序正常操作文档的读/写加解密接口,如果签名值不一致,则不允许当前应用程序进入正常的读/写加解密操作接口。
进一步的,所述数据加解密单元具体为:当要读加密文档时,首先读取文档的文件头,并判断该文件头是否为受系统保护的加密文档类型,如果是,则解密文件头的内容,获取系统密钥和随机密钥,之后调用对称加密算法解密接口,对文件主体内容进行解密并输出,如果不是,则直接读取文档;当要写加密文档时,首先判断该文档是否为已加密文档,如果是,则根据文件头中包含的密钥,以相同的对称加密算法对要写入的内容进行加密后写入,如果不是,则首先创建加密文件头,生成用于加密主体内容的加密密钥,并调用对称加密算法的加密接口对内容进行加密处理,之后将加密的文档内容写入。
进一步的,所述配置应用程序的程序控制策略包括配置程序允许打开的文档类型和程序存盘时加密的文档类型。
进一步的,所述加密文档包括头文件和文档主体内容两部分,所述头文件又包括系统密匙及随机密匙。
本发明具有如下优点:1、能够保护LINUX服务器上数据的安全,防止未授权应用程序的访问;2、对应用程序的签名值进行验证,使得验证没法通过的应用程序无法访问到明文的文档数据,这有效地保护了文档数据的安全。
附图说明
下面参照附图结合实施例对本发明作进一步的说明。
图1为本发明基于LINUX的数据加密保护方法执行流程图。
图2为本发明基于LINUX的数据加密保护系统的结构框图。
图3为本发明加密文档的结构示意图。
具体实施方式
请参照图1所示,基于LINUX的数据加密保护方法,包括如下步骤:
步骤1、客户端运行后,管理员就可以根据实际需求配置要进行控制的应用程序,并计算出要进行控制的应用程序的MD5码,之后将应用程序的MD5码作为签名值与应用程序名称一并提交给引擎服务器,供引擎服务器注册使用;同时引擎服务器会返回程序控制策略,该客户端又会下发程序控制策略给linux内核进行加载;
步骤2、引擎服务器先将接收的应用程序名称及签名值进行保存,并完成对该应用程序的注册,之后配置注册完的应用程序的程序控制策略,包括配置程序允许打开的文档类型和程序存盘时加密的文档类型,并将配置的程序控制策略返回给客户;
步骤3、将程序控制策略加载到linux内核,并重定向linux内核的读/写接口,之后根据加载的程序控制策略对访问的应用程序进行控制以及对文档的读/写进行加解密。该步骤又具体详细为以下步骤:
步骤31、 linux 系统在内核2.6以后的版本中,kallsyms都会把linux内核要用到的所有函数地址和名称连接进内核文件,当linux内核启动后,相应的函数地址和名称都会自动加载到内存中。在linux内核加载成功后,先通过动态分析路径/proc/kallsyms中系统调用表的入口地址,获取并记录原读/写系统调用接口的地址信息;然后在linux内核中重新定义读/写接口函数, 这里要保持新读/写接口函数的返回值类型、接收参数及参数类型与原读/写系统调用接口的函数一致;之后将原读/写系统调用接口的地址重定向到新定义的读/写函数接口,重定向完成以后,相关的读/写操作就会被新定义的读/写函数接口所接管,通过这种方式,实现对原读/写系统调用接口的拦截;
步骤32、拦截了系统调用接口后,就要在新定义的读/写函数接口中添加由引擎服务器所配置和下发的程序控制策略,当应用程序要调用读/写操作时,首先获取当前访问的应用程序名称,并与程序控制策略中记录的应用程序名称进行对比,如果有对比到相同名称,则进行控制,如果没有对比到相同名称,则不进行控制;然后计算出进行控制的应用程序的签名值,并与程序控制策略中记录的签名值进行比对,如果签名值一致,则允许当前应用程序正常操作文档的读/写加解密接口,如果签名值不一致,则不允许当前应用程序进入正常的读/写加解密操作接口;通过对签名值进行对比,能够有效的防止非授权应用程序的访问,保障数据的安全。
步骤33、通过对访问的应用程序和签名值进行对比过滤后,接下来就可以对文档的读/写进行加解密;当要读加密文档时,首先读取文档的文件头,并判断该文件头是否为受系统保护的加密文档类型,如果是,则解密文件头的内容,获取系统密钥和随机密钥,之后调用对称加密算法解密接口,对文件主体内容进行解密并输出,如果不是,则直接读取文档内容;当要写加密文档时,首先判断该文档是否为已加密文档,如果是,则根据文件头中包含的密钥,以相同的对称加密算法对要写入的内容进行加密后写入,如果不是,则首先创建加密文件头,生成用于加密主体内容的加密密钥,并调用对称加密算法加密接口对内容进行加密处理,之后将加密的文档内容写入。
请参照图2所示,基于LINUX的数据加密保护系统,包括:
客户端模块,客户端运行后,管理员就可以根据实际需求配置要进行控制的应用程序,并计算出要进行控制的应用程序的MD5码,之后将应用程序的MD5码作为签名值与应用程序名称一并提交给引擎服务器,供引擎服务器注册使用;同时引擎服务器会返回程序控制策略,该客户端又会下发程序控制策略给linux内核进行加载;
服务器模块,引擎服务器先将接收的应用程序名称及签名值进行保存,并完成对该应用程序的注册,之后配置注册完的应用程序的程序控制策略,包括配置程序允许打开的文档类型和程序存盘时加密的文档类型,并将配置的程序控制策略返回给客户;
内核模块,将程序控制策略加载到linux内核,并重定向linux内核的读/写接口,之后根据加载的程序控制策略对访问的应用程序进行控制以及对文档的读/写进行加解密。该模块又具体详细为以下单元:
调用拦截单元,linux 系统在内核2.6以后的版本中,kallsyms都会把linux内核要用到的所有函数地址和名称连接进内核文件,当linux内核启动后,相应的函数地址和名称都会自动加载到内存中。在linux内核加载成功后,先通过动态分析路径/proc/kallsyms中系统调用表的入口地址,获取并记录原读/写系统调用接口的地址信息;然后在linux内核中重新定义读/写接口函数, 这里要保持新读/写接口函数的返回值类型、接收参数及参数类型与原读/写系统调用接口的函数一致;之后将原读/写系统调用接口的地址重定向到新定义的读/写函数接口,重定向完成以后,相关的读/写操作就会被新定义的读/写函数接口所接管,通过这种方式,实现对原读/写系统调用接口的拦截;
驱动过滤单元,拦截了系统调用接口后,就要在新定义的读/写函数接口中添加由引擎服务器所配置和下发的程序控制策略,当应用程序要调用读/写操作时,首先获取当前访问的应用程序名称,并与程序控制策略中记录的应用程序名称进行对比,如果有对比到相同名称,则进行控制,如果没有对比到相同名称,则不进行控制;然后计算出进行控制的应用程序的签名值,并与程序控制策略中记录的签名值进行比对,如果签名值一致,则允许当前应用程序正常操作文档的读/写加解密接口,如果签名值不一致,则不允许当前应用程序进入正常的读/写加解密操作接口;通过对签名值进行对比,能够有效的防止非授权应用程序的访问,保障数据的安全。
数据加解密单元,通过以上对访问的应用程序和签名值进行对比过滤后,接下来就可以对文档的读/写进行加解密;当要读加密文档时,首先读取文档的文件头,并判断该文件头是否为受系统保护的加密文档类型,如果是,则解密文件头的内容,获取系统密钥和随机密钥,之后调用对称加密算法解密接口,对文件主体内容进行解密并输出,如果不是,则直接读取文档内容;当要写加密文档时,首先判断该文档是否为已加密文档,如果是,则根据文件头中包含的密钥,以相同的对称加密算法对要写入的内容进行加密后写入,如果不是,则首先创建加密文件头,生成用于加密主体内容的加密密钥,并调用对称加密算法加密接口对内容进行加密处理,之后将加密的文档内容写入。
请参照图3所示,以上所述加密文档包括头文件1和文档主体内容2,其中所述头文件1又包括系统密匙11和随机密匙12,文件头1的大小采用4KB,且该文件头1还预留有扩展空间,用于实现更多有效的文件访问及控制,例如:时间期限、受控应用程序、主机、网络环境信息等;所述文档主体内容2采用对称加密算法(例如RC4等),并通过系统密钥11对随机密钥12做进一步的加密保护。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。