一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种文件透明加解密方法和系统与流程

2022-06-11 12:28:37 来源:中国专利 TAG:
1.本发明涉及文件加解密
技术领域
:,尤其涉及一种文件透明加解密方法和系统。
背景技术
::2.随着个人计算机、办公自动化的普及,保护敏感文件不被泄漏成为人们关注的热点问题。目前各个公司的办公业务系统都会有使用各自的安全管控手段对办公文件实行加密和解密操作,反正机密文件和信息的泄漏。由于办公文件对内部人员是公开的,因此通常采用透明加解密技术来实现。透明加解密是指用户在操作过程中,加解密过程不会被用户察觉到,即在用户无感知的情况下,实现对文件的加解密操作。3.目前,基于文件的透明加解密方法,要么完全在用户态实现的,要么完全内核态实现。基于用户态的透明加解密方法,往往存在安全隐患和速度慢的问题;基于内核态的透明加解密方法,会导致系统的不稳定和系统升级困难的问题。技术实现要素:4.鉴于上述的分析,本发明实施例旨在提供一种文件透明加解密方法,用以解决现有的文件透明加解密方法存在安全隐患、速度慢并且升级困难的问题。5.一方面,本发明实施例提供了一种文件透明加解密方法,包括:6.在内核态创建共享缓存,用于缓存文件的读写内容;7.在内核态拦截文件读操作,获取读操作参数;根据所述读操作参数判断所述文件是否为加密文件,若是,则根据读操作参数从共享缓存中读取文件内容发送至用户态进程;否则,采用系统函数读取文件内容将所述文件内容发送至用户态进程;8.在内核态拦截文件写操作,获取写操作参数;将写入内容存储在共享缓存中;当共享缓存空间已满或写入内容为文件尾时,根据所述写操作参数判断所述文件是否为加密文件,若是,则在用户态对共享缓存中存储的文件内容进行加密,在内核态将加密后的内容写入文件,否则,直接在内核态将写入内容写入文件。9.基于上述技术方案的进一步改进,10.所述读操作参数包括:文件描述符、读取偏移量和读取长度;11.所述写操作参数包括:文件描述符、写入偏移量和写入长度;12.根据所述读操作参数或写操作参数判断所述文件是否为加密文件,包括:13.根据所述文件描述符得到文件名、文件类型和打开文件的进程,若所述文件类型为监控类型或所述打开文件的进程为监控进程,则根据所述文件名获取扩展属性或文件头,根据所述文件扩展属性或文件头判断所述文件是否为加密文件;否则,判断所述文件为非加密文件。14.基于上述技术方案的进一步改进,根据读操作参数从共享缓存中读取文件内容发送至用户态进程,包括:15.根据所述读操作参数判断读取的文件内容是否在共享缓存中,若存在,则从共享缓存中直接读取所述文件内容发送至用户态进程;否则,在用户态读取加密文件内容,调用解密算法进行解密,将解密内容写入共享缓存,在内核态根据读取偏移量和读取长度从共享缓存中读取解密的文件内容发送至用户态进程。16.进一步地,根据所述读操作参数判断读取的文件内容是否在共享缓存中,包括:17.根据所述文件名判断共享缓存中是否存在该文件,若不存在,则判断所述读取的文件内容不在共享缓存中;否则,18.判断读取偏移量是否大于等于共享缓存区中缓存的偏移量并且读取长度小于读取偏移量到缓存内容结尾的长度,若是,则判断所述读取的文件内容在共享缓存中,否则,判断所述读取的文件内容不在共享缓存中。19.进一步地,在用户态读取加密文件内容,调用解密算法进行解密,将解密内容写入共享缓存,包括:20.在内核态向用户态加解密进程发送消息,消息包括文件名、读取偏移量、读取长度、共享缓存地址;21.用户态加解密进程根据文件名、读取偏移量和读取长度读取加密的文件内容,根据解密算法对加密的文件内容进行解密,将解密的内容存入共享缓存地址中。22.进一步地,将写入内容存储在共享缓存中,包括:23.根据所述文件名判断共享缓存中是否存在该文件,若不存在,则将写入内容直接存入共享缓存中;若存在,则:24.若共享缓存区中缓存的偏移量小于等于写入偏移量且写入偏移量与缓存偏移量的差与写入长度的和小于等于缓存区大小,则将写入内容存入共享缓存中写入偏移量对应的位置;若共享缓存区中缓存的偏移量小于等于写入偏移量且写入偏移量与缓存偏移量的差与写入长度的和大于缓存区大小,则将缓存内容写入文件,删除共享缓存中该文件的内容,将写入内容存入共享缓存;若共享缓存区中缓存的偏移量大于写入偏移量,则删除共享缓存中该文件的内容,将写入内容存入共享缓存。25.进一步地,在用户态对共享缓存中存储的文件内容进行加密,在内核态调用系统函数将加密内容写入文件,包括:26.在内核态向用户态加解密进程发送消息,消息包括未加密文件内容的共享缓存地址、文件内容长度和加密文件内容的共享缓存地址;27.用户态加解密进程从共享缓存中未加密文件内容的存储地址中读取文件内容长度的未加密内容,根据加密算法对未加密内容进行加密,将加密后的内容存入加密文件内容的共享缓存地址中;28.在内核态根据文件描述符、写入偏移量将加密内容写入文件。29.进一步地,所述用户态加解密进程为守护进程,所述用户态加解密进程采用多线程并行的方式进行加密或解密。30.与现有技术相比,本实施例提供的文件透明加解密方法通过在内核态建立共享缓存,缓存加密文件内容,当读取文件时从共享缓存中读取文件内容从而加速文件读取,当写文件时,先将文件放入共享缓存,当写结束或缓存区满后,在用户态对共享缓存区的内容进行加密,再写入文件,通过用户态和内核态的相互配合,提高文件透明加解密的性能和安全性;同时,当加解密算法更新时,只需要在用户态更新相应的算法库即可,升级流程简单,提高了系统的稳定性。内核态模块直接截获用户的读写操作,无需利用另外的堆叠文件系统和挂载目录的方式,简化了加密文件管理。31.另一方面,本发明实施例提供了一种文件透明加解密系统,包括:32.共享缓存创建模块,用于在内核态创建共享缓存,用于缓存文件的读写内容;33.文件读模块,用于在内核态拦截文件读操作,获取读操作参数;根据所述读操作参数判断所述文件是否为加密文件,若是,则根据读操作参数从共享缓存中读取文件内容发送至用户态进程;否则,采用系统函数读取文件内容将所述文件内容发送至用户态进程;34.文件写模块,用于在内核态拦截文件写操作,获取写操作参数;将写入内容存储在共享缓存中;当共享缓存空间已满或写入内容为文件尾时,根据所述写操作参数判断所述文件是否为加密文件,若是,则在用户态对共享缓存中存储的文件内容进行加密,在内核态将加密后的内容写入文件,否则,直接在内核态将写入内容写入文件。35.进一步地,所述文件读模块,根据读操作参数从共享缓存中读取文件内容发送至用户态进程,包括:36.根据所述读操作参数判断读取的文件内容是否在共享缓存中,若存在,则从共享缓存中直接读取所述文件内容发送至用户态进程;否则,在用户态读取加密文件内容,调用解密算法进行解密,将解密内容写入共享缓存,在内核态根据读取偏移量和读取长度从共享缓存中读取解密的文件内容发送至用户态进程。37.本发明中,上述各技术方案之间还可以相互组合,以实现更多的优选组合方案。本发明的其他特征和优点将在随后的说明书中阐述,并且,部分优点可从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过说明书以及附图中所特别指出的内容中来实现和获得。附图说明38.附图仅用于示出具体实施例的目的,而并不认为是对本发明的限制,在整个附图中,相同的参考符号表示相同的部件。39.图1为本发明实施例文件透明加解密方法的流程图;40.图2为本发明实施例文件透明加解密系统的框图。具体实施方式41.下面结合附图来具体描述本发明的优选实施例,其中,附图构成本技术一部分,并与本发明的实施例一起用于阐释本发明的原理,并非用于限定本发明的范围。42.基于用户态的透明加解密方法,往往存在安全隐患和速度慢的问题;基于内核态的透明加解密方法,会导致系统的不稳定,当加密算法升级时,需要重新开发内核态程序,因而导致统升级困难。43.针对上述问题,本发明的一个具体实施例,公开了一种文件透明加解密方法,如图1所示,包括:44.s1、在内核态创建共享缓存,用于缓存文件的读写内容;45.s2、在内核态拦截文件读操作,获取读操作参数;根据所述读操作参数判断所述文件是否为加密文件,若是,则根据读操作参数从共享缓存中读取文件内容发送至用户态进程;否则,采用系统函数读取文件内容将所述文件内容发送至用户态进程;46.s3、在内核态拦截文件写操作,获取写操作参数;将写入内容存储在共享缓存中;当共享缓存空间已满或写入内容为文件尾时,根据所述写操作参数判断所述文件是否为加密文件,若是,则在用户态对共享缓存中存储的文件内容进行加密,在内核态将加密后的内容写入文件,否则,直接在内核态将写入内容写入文件。47.与现有技术相比,本实施例提供的文件透明加解密方法通过在内核态建立共享缓存,缓存加密文件内容,当读取文件时从共享缓存中读取文件内容从而加速文件读取,当写文件时,先将文件放入共享缓存,当写结束或缓存区满后,在用户态对共享缓存区的内容进行加密,再写入文件,通过用户态和内核态的相互配合,提高文件透明加解密的性能和安全性;同时,当加解密算法更新时,只需要在用户态更新相应的算法库即可,升级流程简单,提高了系统的稳定性。内核态模块直接截获用户的读写操作,无需利用另外的堆叠文件系统和挂载目录的方式,简化了加密文件管理。48.实施时,linux环境下,例如通过get_free_pages申请内存,通过mmap将缓存共享至用户态,用户态通过设备接口实现共享缓存的读写。49.windows环境下通过在内核层调用exallocatepoolwithtag函数创建内存,然后通过ioallocatemdl函数映射为mdl共享内存,用户态通过deviceiocontrol函数实现共享缓存的读写。50.实施时,为了便于管理,在共享缓存中建立读文件hash链表和写文件hash链表,分别用于管理共享缓存区中存储的读文件内容和写文件内容。51.读文件hash链表以文件名/magic为hash函数,在链表上存放解密内容结构体,包含文件名、缓存偏移量、缓存长度和解密文件内容指针。解密文件内容指用于指示解密文件内容存储的地址。52.实施时,可为每个读取文件设置固定大小的缓存区,例如2m。53.写文件hash链表以文件名/magic为hash函数,在链表上存放加密内容结构体,包含文件名、缓存偏移量、缓存长度、源内容指针和加密内容指针,源内容指针用于指示源文件内容(即加密前文件内容)的存储地址,加密内容指针用于指示加密文件内容(即加密后文件内容)的存储地址。54.实施时,可为每个写文件设置固定大小的缓存区,例如2m。55.实施时,当用户在操作系统上打开文件处理文件时,在内核态拦截文件的读写操作获取读操作参数和写操作参数,从而进行文件的透明加解密。实施时,在linux环境下通过替换_sys_call_table[__nr_read]实现读文件hook,通过替换_sys_call_table[__nr_write]实现写文件hook。在windows上通过minifliter框架注册irp_mj_read类型preread实现对读操作的hook;通过minifliter框架注册irp_mj_write类型prewrite实现对写操作的hook。[0056]具体的,所述读操作参数包括:文件描述符、读取偏移量和读取长度。所述写操作参数包括:文件描述符、写入偏移量和写入长度。[0057]其中,文件描述符是系统为了高效管理文件所创建的索引。根据文件描述符信息可获取文件名(文件路径 文件名称)、打开文件的进程和文件类型。具体获取过程为现有技术,此处不再赘述。[0058]读取偏移量为读取内容相对于文件开头的偏移量。写入偏移量为写入内容相对于文件开头的偏移量。[0059]根据所述读操作参数或写操作参数判断所述文件是否为加密文件,包括:[0060]根据所述文件描述符得到文件名、文件类型和打开文件的进程,若所述文件类型为监控类型或所述打开文件的进程为监控进程,则根据所述文件名获取扩展属性或文件头,根据所述文件扩展属性或文件头判断所述文件是否为加密文件;否则,判断所述文件为非加密文件。[0061]例如,若监控进程为wps、wpp、et和gedit等进程,监控文件类型为doc、docx、ppt、pptx、et为。当打开文件的进程为wps、wpp、et和gedit,或文件的类型为doc、docx、ppt、pptx、et时,则进一步根据文件扩展属性判断判断文件是否为加密文件,否则判断文件为非加密文件。[0062]实施时,在linux环境下,通过系统调用getxattr获取文件扩展属性键值;在windows环境下通过ntqueryinformationfile获取文件扩展属性键值,根据扩展属性键值判断是否为加密文件。[0063]实施时,若文件是否加密是通过文件头部内容标识的,也可根据文件名获取文件头,根据文件头判断文件是否为加密文件。[0064]当读操作读取的文件为非加密文件时,则调用原来的系统读函数,读取文件内容返回给用户态读取文件进程。[0065]当读取文件为加密文件时,根据读操作参数从共享缓存中读取文件内容发送至用户态进程,具体包括:[0066]根据所述读操作参数判断读取的文件内容是否在共享缓存中,若存在,则从共享缓存中直接读取所述文件内容发送至用户态进程;否则,在用户态读取加密文件内容,调用解密算法进行解密,将解密内容写入共享缓存,在内核态根据读取偏移量和读取长度从共享缓存中读取解密的文件内容发送至用户态进程。[0067]若共享缓存总包含欲读取的内容时,直接从共享缓存读取内容发送至用户态的读文件进程,从而加快文件读取速度,若用共享缓存中不存在欲读取的内容,则在用户态进行加密文件的读取和解密,将解密后的内容写入共享缓存,再从共享缓存中读取解密后的文件内容发送至用户态读取进程。解密算法在用户态实现,当解密算法更新时,只需要替换算法动态库即可,不会对系统的稳定性造成影响,并且解密后的内容直接写入用户态的共享缓存。只对需要读取的内容进行解密,因为读取速度快,并且解密后的内容直接写入内核态共享内容,提高了安全性。[0068]具体的,根据所述读操作参数判断读取的文件内容是否在共享缓存中,包括:[0069]根据所述文件名判断共享缓存中是否存在该文件,若不存在,则判断所述读取的文件内容不在共享缓存中;否则,[0070]判断读取偏移量是否大于等于共享缓存区中缓存的偏移量并且读取长度小于读取偏移量到缓存内容结尾的长度,若是,则判断所述读取的文件内容在共享缓存中,否则,判断所述读取的文件内容不在共享缓存中。[0071]实施时,首先根据文件名判断读文件hash链表是否存在该文件,若不存在则直接判断读取的文件内容不在共享缓存中。若存在该文件名,则判断读取偏移量是否大于等于共享缓存区中缓存的偏移量并且读取长度小于读取偏移量到缓存内容结尾的长度,若是,说明欲读取的内容全部存在于共享缓存区中,否则,说明欲读取的内容不在共享缓存区中。[0072]若欲读取内容全部存在于共享缓存区中,由于共享缓存区存储的为解密后的内容,因此直接根据读取偏移量和读取长度,根据读文件hash链表中存储的解密文件内容指针,从对应的地址中读取文件内容,将读取的文件内容发送至用户态读取文件的进程。[0073]若读取偏移量小于缓存偏移量,或者读取偏移量大于等于缓存偏移量但读取长度大于读取偏移量到缓存内容结尾的长度,此时,欲读取内容并非全部都在共享缓存中,需要在用户态进行文件解密,将解密内容写入共享缓存。[0074]具体的,在用户态读取加密文件内容,调用解密算法进行解密,将解密内容写入共享缓存,包括:[0075]在内核态向用户态加解密进程发送消息,消息包括文件名、读取偏移量、读取长度、共享缓存地址;[0076]用户态加解密进程根据文件名、读取偏移量和读取长度读取加密的文件内容,根据解密算法对加密的文件内容进行解密,将解密的内容存入共享缓存地址中。[0077]实施时,在linux环境下,通过netlink协议在内核态向用户态加解密进程发送消息,在windows环境,通过kesetevent在内核态向用户态加解密进程发送消息。[0078]实施时,为了进一步提高文件读取速率,在内核态向用户态加解密进程发送消息时,读取偏移量可为该文件对应的共享缓存区的最大长度。一次性将共享缓存区填满,便于之后读取文件时直接从共享缓存读取内容,从而加快读取速度。[0079]用户态加解密进程为守护进程,在用户态为自启动服务进程。[0080]不同的加解密算法,源内容和加密后的内容长度不同,用户态加解密模块接收到消息后,首先根据使用的加解密算法,计算出读取偏移量在加密文件中的位置,读取长度对应加密内容的长度,然后调用系统读函数读取相应的加密文件内容,然后调用解密算法库,对加密文件内容进行解密,将解密后的内容写入共享缓存。[0081]实施时,为了提高文件读取速度,用户态加解密进程采用多线程并行的方式进行解密。例如将加密文件内容分为16份,启动16个线程并发对内容进行解密,每个线程的偏移量为offset round(max_size/16)*i,读取长度为round(max_size/16),即预读取长度除16向上取整。offset表示读取偏移量在加密文件中的位置,max_size表示读取长度对应加密内容的长度。[0082]实施时,可在共享缓存区设置固定地址作为标志位,当用户态加解密进程的每个线程完成解密后修改对应的标志位。内核态可根据标志位的状态判断是否解密完成,当所有线程都完成解密后,即所有标志位都置位后,内核态读取对应的解密内容,返回至用户态。[0083]解密后将解密内容写入对应的共享缓存地址中,同时更新hash链表中存储的缓存偏移量和缓存长度。内核态根据读取偏移量和读取长度,从共享缓存中读取相应的内容发送至读文件进程,从而完成文件的透明解密。[0084]采用按需处理技术,只处理用户需要读写的片段,无需全文处理,从而加快了文件读写的速度。[0085]对于文件写操作,获取写操作参数后,首先将写入内容存储在共享缓存中,具体包括:[0086]根据所述文件名判断共享缓存中是否存在该文件,若不存在,则将写入内容直接存入共享缓存中;若存在,则:[0087]若共享缓存区中缓存的偏移量小于等于写入偏移量,则将写入内容存入共享缓存中写入偏移量对应的位置;否则,删除共享缓存中该文件的内容,将写入内容存入共享缓存。[0088]实施时,首先根据文件名判断写文件hash链表是否存在该文件,若不存在,则在共享缓存中为该文件分配缓存区域,将写入内容存入共享缓存中,并在写文件hash链表中增加表示该文件内容的节点。[0089]若存在该文件名,由于修改文件后,对文件的保存是从文件头或修改位置开始到文件尾,分成内容块顺序进行保存的,因此可根据缓存偏移量和写入偏移量的大小判断写入内容在共享缓存区的具体存放地址。若共享缓存区中缓存的偏移量小于等于写入偏移量,并且写入偏移量与缓存偏移量的差,与写入长度的和小于等于缓存区大小,此时缓存中已经存储有当前保存的内容块的前面的内容,并且缓存区有空间可以存储当前内容块的内容,则直接将写入内容存入共享缓存中写入偏移量对应的位置。若共享缓存区中缓存的偏移量小于等于写入偏移量,但写入偏移量与缓存偏移量的差,与写入长度的和大于缓存区,则说明此时缓存区没有足够的空间存储当前内容块的内容,此时认为缓存区已满,需要先将缓存区的内容写入文件,然后删除缓存区的内容,将写入内容写入该文件对应的共享缓存区的起始地址。[0090]若共享缓存区中缓存的偏移量大于写入偏移量,将共享缓存中该文件的内容删除,将写入内容存入该文件对应的共享缓存区的起始地址。由于每次修改后都是从修改位置或者文件开头到文件尾顺序保存的,共享缓存区中缓存的偏移量大于写入偏移量,说明是上一次修改保存的内容,该内容已经被写入文件了,因此可以将共享缓存区的内容删除,将本次写入内容存入该文件对应的共享缓存区的起始地址。[0091]实施时,读文件的共享缓存和写文件的共享缓存为不同的缓存区域。[0092]当该文件共享缓存区空间已满或写入内容为文件尾时,根据所述写操作参数判断所述文件是否为加密文件。[0093]根据写操作参数判断文件是否为加密文件的过程和根据读操作参数判断文件是否是加密文件的过程相同,根据所述文件描述符得到文件名、文件类型和打开文件的进程,若所述文件类型为监控类型或所述打开文件的进程为监控进程,则根据所述文件名获取扩展属性或文件头,根据所述文件扩展属性或文件头判断所述文件是否为加密文件;否则,判断所述文件为非加密文件。[0094]若文件为非加密文件,则直接调用原系统写函数将共享缓存中的内容写入文件。[0095]若文件为加密文件,则在用户态对共享缓存中存储的文件内容进行加密,在内核态调用系统函数将加密内容写入文件,具体包括:[0096]在内核态向用户态加解密进程发送消息,消息包括未加密文件内容的共享缓存地址、文件内容长度和加密文件内容的共享缓存地址;[0097]用户态加解密进程从共享缓存中未加密文件内容的存储地址中读取文件内容长度的未加密内容,根据加密算法对未加密内容进行加密,将加密后的内容存入加密文件内容的共享缓存地址中;[0098]在内核态根据文件描述符、写入偏移量将加密内容写入文件。[0099]实施时,在linux环境下,通过netlink协议在内核态向用户态加解密进程发送消息,在windows环境,通过kesetevent在内核态向用户态加解密进程发送消息。[0100]用户态加解密模块接收到消息后,从共享缓存中未加密文件内容的存储地址中读取文件内容长度的未加密内容,根据加密算法对未加密内容进行加密,将加密后的内容存入加密文件内容的共享缓存地址中。[0101]实施时,为了提高文件加密速度,用户态加解密进程采用多线程并行的方式进行加密。例如将源内容即未加密内容分为16份,启动16个线程并发对内容进行加密,将加密后的内容写入加密文件内容的共享缓存地址中。[0102]linux环境下,用户态加解密进程通过设备接口/dev/hangdun_mb实现共享缓存的读写。在windows环境下,用户态加解密进程通过deviceiocontrol函数实现共享缓存的读写。[0103]加密完成后,在内核态调用原系统写函数,将加密内容写入加密文件,加密写入完成后,将该文件对应的共享缓存清空。从而实现文件的透明加密。[0104]本发明的一个具体实施例,公开了一种文件透明加解密系统,如图2所示,包括:[0105]共享缓存创建模块,用于在内核态创建共享缓存,用于缓存文件的读写内容;[0106]文件读模块,用于在内核态拦截文件读操作,获取读操作参数;根据所述读操作参数判断所述文件是否为加密文件,若是,则根据读操作参数从共享缓存中读取文件内容发送至用户态进程;否则,采用系统函数读取文件内容将所述文件内容发送至用户态进程;[0107]文件写模块,用于在内核态拦截文件写操作,获取写操作参数;将写入内容存储在共享缓存中;当共享缓存空间已满或写入内容为文件尾时,根据所述写操作参数判断所述文件是否为加密文件,若是,则在用户态对共享缓存中存储的文件内容进行加密,在内核态将加密后的内容写入文件,否则,直接在内核态将写入内容写入文件。[0108]优选的,所述文件读模块,根据读操作参数从共享缓存中读取文件内容发送至用户态进程,包括:[0109]根据所述读操作参数判断读取的文件内容是否在共享缓存中,若存在,则从共享缓存中直接读取所述文件内容发送至用户态进程;否则,在用户态读取加密文件内容,调用解密算法进行解密,将解密内容写入共享缓存,在内核态根据读取偏移量和读取长度从共享缓存中读取解密的文件内容发送至用户态进程。[0110]上述方法实施例和系统实施例,基于相同的原理,其相关之处可相互借鉴,且能达到相同的技术效果。具体实施过程参见前述实施例,此处不再赘述。[0111]本领域技术人员可以理解,实现上述实施例方法的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于计算机可读存储介质中。其中,所述计算机可读存储介质为磁盘、光盘、只读存储记忆体或随机存储记忆体等。[0112]以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域
:的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献