【发明授权】基于MPI的AC串匹配并行算法的磁盘敏感信息扫描系统_哈尔滨理工大学_201710291208.7 

申请/专利权人:哈尔滨理工大学

申请日:2017-04-28

发明/设计人:刘嘉辉;马翠平;宋大华

公开(公告)日:2020-03-31

代理机构:

公开(公告)号:CN107103253B

代理人:

主分类号:G06F21/62(20130101)

地址:150080 黑龙江省哈尔滨市学府路52号

分类号:G06F21/62(20130101)

优先权:

专利状态码:有效-授权

法律状态:2020.03.31#授权;2017.09.22#实质审查的生效;2017.08.29#公开

摘要:本发明提供一种基于MPI的AC串匹配并行算法的磁盘敏感信息扫描系统,包括:S1、获得模式字符集,指定的扫描目录,文件数据分块和AC算法自动机的信息;S2、在多核处理器架构中的系统主进程建立MPI执行环境,动态查询处理器的工作状态,分配数据块给从进程实现数据敏感信息的并行查找;S3、多核处理器的从进程中并行地执行确定的有限自动机匹配算法,记录敏感信息的位置,并动态报告处理器工作状态。本发明能够通过MPI有效地利用多核处理器的计算资源,提高了AC串匹配算法执行性能,特别适合信息安全领域对大容量的计算机磁盘敏感信息进行快速扫描,以及适用于信息安全检查的防护与预警系统。

主权项:1.一种基于MPI的AC串匹配并行算法的磁盘敏感信息扫描系统,其特征在于,包括:Part1、获得模式字符集,指定的扫描目录,文件数据分块和Aho-Corasick算法(AC算法)自动机的信息;Part2、在多核处理器架构中的系统主进程建立MPI执行环境,动态查询处理器的工作状态,分配数据块给从进程实现数据敏感信息的并行查找;Part3、多核处理器的从进程中并行地执行确定的有限自动机匹配算法,记录敏感信息的位置,并动态报告处理器工作状态;在上述步骤Part1中,系统初始化步骤包括:第一步,建立模式字符串集合文件;第二步,计算模式字符串集合中模式字符串的最大长度MaxPattern;第三步,用户设定扫描磁盘的目录;第四步,设定扫描文件的数据分块的最大长度MaxBlock,MaxBlock的值需要满足:MaxBlock3*MaxPattern并且MaxBlock=用户设定的数值,默认值为200;第五步,定义数据块信息表Block_Info,包括如下数据项:数据项1,扫描文件的名称,记为FileName;数据项2,扫描文件被划分的数据块的总数,记为N_Block;数据项3,数据块数组,记为ArrBlock,数组的起始下标为1,最大值为N_Block;数据块数组ArrBlock包含的数据项为:数据项1,数据块在文件中开始的位置,记为Begin,Begin的开始值设定为0;数据项2,数据块在文件中结束的位置,记为End;第六步,定义数据块i的长度,记为Len_Block,Len_Block=ArrBlock[i].End-ArrBlock[i].Begin+1;第七步,定义AC算法的确定的有限自动机DFA(DeterministicFiniteAutomaton)的状态节点StateNode,StateNode的结构为包含256个元素的数组ArrData[256],数组ArrData的起始下标为0,最大值为255,数组ArrData的每个元素结构包含2个数据项:数据项1,匹配模式函数FoundOut,如果FoundOut为真,则该函数输出匹配的模式字符串,函数初始值设定为假;数据项2,指向自动机下一个状态节点的指针NextState,NextState的初始值为空;定义自动机的第一个状态节点为根节点Root;第八步,读取当前磁盘目录下的子文件夹和文件,并建立目录树,对目录树中不包含文件的空文件夹进行删除,使得目录树中的叶子节点均为文件;目录树的根定义为第0层,叶子节点从第1层开始,目录树的深度定义为目录树中包含的最大层数,如果目录树的深度等于0,定义为目录树不包含任何文件;对目录树的按层次遍历定义为从第1层开始,遍历第一层的每个叶子节点,以此类推,直到目录树的最后一层;定义扫描文件遍历队列Q_File,对目录树进行按层次遍历,并把叶子节点插入Q_File队列;在上述步骤Part2中,包括:建立DFA自动机的过程:S1_part2_pro1、建立DFA自动机的根节点Root;S2_part2_pro1、打开模式字符串集合文件;S3_part2_pro1、读取文件当前行字符串StrLine,并把文件指针移动到下一行;S4_part2_pro1、如果读入的字符串StrLine的长度Len_StrLine的值为0,则转到S8_part2_pro1,否则,转到S5_part2_pro1;S5_part2_pro1、StateNode_Pre代表自动机中当前状态节点的前一个状态节点,StateNode_Pre的初始值为Root;S6_part2_pro1、假设i为循环变量,代表字符串StrLine的第i个位置,i的取值从1至StrLine的最后一个位置,i的初值设定为1;S61_part2_pro1、创建新的状态节点,记为StateNode_New;S62_part2_pro1、获得StrLine的第i个字符的ASCII码值为Value_i,并把StateNode_Pre的ArrData[Value_i]的NextState赋值为StateNode_New;S63_part2_pro1、如果i等于Len_StrLine,设定StateNode_New的FoundOut为真,并输出字符串StrLine;S64_part2_pro1、将StateNode_New赋值给StateNode_Pre;S65_part2_pro1、i的值增加1;S66_part2_pro1、如果i的值小于等于Len_StrLine,转到S61_part2_pro1,否则,转到S7_part2_pro1;S7_part2_pro1、转到S3_part2_pro1;S8_part2_pro1、DFA建立过程结束;系统主进程为:S1_part2_pro2、MPI运行环境初始化,加载MPI系统函数库,MPI版本信息,系统核心处理器和硬件信息;S2_part2_pro2、获取计算机系统核心处理器数量N_Procs,由系统核心处理器数量设定进程编号,系统核心处理器最低数量限定为二核,核心处理器0号设定为主进程,记为Master,其它核心处理器依次设定为从进程,记为Slave,依次设定进程编号为Slave_1至Slave_N_Procs-1;S3_part2_pro2、建立DFA自动机;S4_part2_pro2、Master发送给每个Slave进程DFA自动机;S5_part2_pro2、获得当前队列头Q_File的文件File,当前队列头节点出队;S6_part2_pro2、函数BlockPart对文件File进行数据块的划分;S7_part2_pro2、设定循环变量i,i的值从1至分块的数量N_Block,i的初始值设定为1;S8_part2_pro2、查询Slave进程的工作状态;S81_part2_pro2、如果Slave有空闲,分配ArrBlock[i]给一个空闲的Slave进行处理;S82_part2_pro2、接收Slave的匹配结果和当前工作状态;S83_part2_pro2、如果Slave无空闲,则转到S8_part2_pro2;S9_part2_pro2、i的值增加1;S10_part2_pro2、如果i的值小于等于N_Block,转到S8_part2_pro2,否则,转到S11_part2_pro2;S11_part2_pro2、文件File匹配过程结束;S12_part2_pro2、如果Q_File的队列为空,则转到S13_part2_pro2,否则,转到S5_part2_pro2;S13_part2_pro2、汇总Slave的扫描文件的结果,写入结果文件;S14_part2_pro2、MPI结束;在上述步骤Part3中,包括:DFA_Execute位置i,数据块的长度过程:S1_part3_pro1、获得当前数据块的第i个位置的字符的ASCII码值,记为Value_i;S2_part3_pro1、设定CurState为指向DFA自动机中当前状态节点的指针;S3_part3_pro1、查询DFA自动机中Root的数组ArrData的下标为Value_i的元素ArrData[Value_i]的NextState的值,并把该值赋值给CurState,如果CurState为空,则转向S8_part3_pro1,否则,转向S4_part3_pro1;S4_part3_pro1、假设j为循环变量,j的初值设定为0;S5_part3_pro1、获得当前数据块的第(i+j)个位置的字符的ASCII码值Value_ij;S51_part3_pro1、如果CurState的ArrData[Value_ij]的FoundOut为真,则传送当前数据块编号,数据块的起始位置,数据块内位置信息(i+j)和匹配的模式字符串给Master;S52_part3_pro1、如果CurState的ArrData[Value_ij]的NextState为空,则转到S8_part3_pro1;S53_part3_pro1、如果CurState的ArrData[Value_ij]的NextState不为空,则把NextState赋值给CurState;S6_part3_pro1、j的值增加1;S7_part3_pro1、如果i+j的值小于等于Len_Block,转到S5_part3_pro1,否则,转到S8_part3_pro1;S8_part3_pro1、过程结束;AC_DFA匹配过程:S1_part3_pro2、设定数据块的长度为Len_Block;S2_part3_pro2、假设i代表数据块的第i个位置,i的值变化从1至Len_Block,i的初值设定为1;S3_part3_pro2、函数DFA_Executei,Len_Block执行在数据块的第i个位置的模式匹配过程;S4_part3_pro2、i的值增加1;S5_part3_pro2、如果i的值小于等于Len_Block,转到S3_part3_pro2,否则,转到S6_part3_pro2;S6_part3_pro2、AC_DFA匹配过程结束;Slave从进程包括:S1_part3_pro3、接收Master传送的DFA自动机;S2_part3_pro3、发送给Master本进程编号的工作状态为忙;S3_part3_pro3、接收Master传送的文件的数据块,并记录数据块编号;S4_part3_pro3、执行AC_DFA匹配过程;S5_part3_pro3、发送给Master本进程编号的工作状态为空闲;一种基于MPI的AC串匹配并行算法的磁盘敏感信息扫描系统中,函数BlockPart的实现过程包括:S1_BlockPart、获得文件File的长度为Len_File,定义文件当前位置为CurLoc,设定初始值为0,设定数据块信息表Block_Info的N_Block的初始值等于1,初始化数据块信息表Block_Info的数据项FileName,S2_BlockPart、如果Len_File小于MaxBlock,则设定数据块信息表Block_Info的N_Block=1,设定数据块数组ArrBlock的第一个元素ArrBlock[1]的开始位置为ArrBlock[1].Begin=0,设定ArrBlock[1].End=Len_File-1,转到S5_BlockPart;S3_BlockPart、如果CurLoc+MaxBlockLen_File并且Len_File–CurLoc–MaxBlockMaxBlock,则设定:ArrBlock[N_Block].Begin=CurLoc,ArrBlock[N_Block].End=CurLoc+MaxBlock-1,N_Block的值增加1,即N_Block=N_Block+1,ArrBlock[N_Block].Begin=CurLoc+MaxBlock-MaxPattern+1,ArrBlock[N_Block].End=CurLoc+MaxBlock+MaxPattern-2,CurLoc=CurLoc+MaxBlock,N_Block的值增加1,即N_Block=N_Block+1,转到S3_BlockPart;S4_BlockPart、如果CurLoc+MaxBlockLen_File并且Len_File–CurLoc–MaxBlock=MaxBlock,则设定:ArrBlock[N_Block].Begin=CurLoc,ArrBlock[N_Block].End=Len_File-1,S5_BlockPart、结束。

全文数据:

权利要求:

百度查询: 哈尔滨理工大学 基于MPI的AC串匹配并行算法的磁盘敏感信息扫描系统

vip会员权益升级
价格优惠/年费监控/专利管家/定制微网站 关闭