一种多字符串匹配方法和芯片的制作方法

文档序号:6608779阅读:183来源:国知局
专利名称:一种多字符串匹配方法和芯片的制作方法
技术领域
本发明涉及信息处理领域,特别涉及一种多字符串匹配方法和芯片。
背景技术
多字符串匹配技术,也叫多关键词匹配技术,已经比较成熟,并且广泛的应用于文本处理、内容过滤等很多领域。该技术能够在一维的待匹配内容中发现预先定义的一组字符串中的一个或多个,在匹配文本的过程中,充分利用一组字符串中的特点,进行预处理,并且根据预处理后的中间数据结构进行内容匹配,从而实现对一组预定义字符串的匹配。
多字符串匹配算法的性能主要受以下几方面影响字符串集合(也叫规则集、特征集、关键词集)的数量、字符串集合的最小长度、待匹配文本中出现匹配的可能性等。根据多字符串匹配技术对字符串集合预处理方法的不同,相关匹配算法可以分为以下三类前缀算法,包括KMP、AC、Shift-AND、Shift-OR等;后缀算法,包括Boyer-Moore、Wu-Manber等;子串模式算法,包括BDM、BOM、SBDM、SBOM等。
在网络安全领域中,有一类基于内容的安全应用需要利用多字符串匹配技术,典型应用如入侵检测和防御系统、垃圾邮件过滤、病毒扫描和过滤、恶意代码扫描和过滤、内容过滤等。这类应用对多字符串匹配技术的典型使用方式是通过程序抓取网络中的数据包,并将其还原成特定网络层的数据,根据预先定义的规则集(如入侵规则、病毒规则、垃圾邮件规则等)在数据中进行匹配。
由于网络带宽的发展十分迅速,为了能够满足千兆甚至更高网络带宽下内容的安全应用需求,对高性能的多字符串匹配技术的需求十分迫切。为了不断提高多字符串匹配技术的匹配性能,出现了一些改进的软件算法,尽管改进的算法匹配性能有一定的提高,但提高幅度仍然十分有限,通常能够较传统算法提高性能20%-40%。仅通过软件实现上述已有算法已经无法满足实际系统对该技术的性能需求。
在实际的多字符串匹配技术应用中,有一个算法因为具有如下一些特点而倍受青睐匹配的性能与规则库的大小无关、匹配的性能与规则库的最小长度无关、匹配的性能与规则库和待匹配文本之间的关系无关。这个软件算法叫做AC(Aho-Corasick)算法。
如图1所示,其中,圆圈表示状态,线条表示转换规则,有6个状态和16个转换规则,以字符串集合P={SIG,SSH}进行匹配为例,AC算法将P进行预处理,对其构造一个有限状态自动机(DFA,Deterministic Finite Automata),通过该有限状态自动机,对待匹配的一维文本(比如SSSIG),可以每次读入一个字符,并且在上述结构中根据转换关系,每次向前前进一个位置,当到达S3或者S5位置时,算法报告出一个有效匹配。
尽管AC算法具有上述优点,但也有比较明显的缺陷。对于P={SIG,SSH}这样简单的规则集,该算法的中间结构(即DFA)一共需要6个状态和16个转换规则。随着规则集中规则数量的增加,AC算法中间结构的规模将成指数形式递增,造成存储空间爆炸,应用领域十分有限。
现有技术中还有提出了一种带优先级的转换规则存储方法,可以将AC算法中将状态带回初始状态和初始状态的下状态的转换规则合并成最多256条规则。在实际应用中,可以在一定程度上减少转换规则的数量。该技术将状态带回初始状态的转换规则定为高优先级,将状态带回初始状态的下状态的转换规则定为次优先级。参见图2,其中,圆圈表示状态,线条表示转换规则,有6个状态14条规则,通过优先级描述,实际存在的规则为6条,如表1所示表1

该方法也没有解决随着规则数量增加存储空间爆炸的问题,针对大规模特征集进行匹配仍需要极大的空间代价。
随着网络安全应用中恶意代码的增多,预先定义的规则集中包含的规则数量也迅速增加。例如,对于入侵检测规则库,现有的规则数量超过5千;对于病毒规则,现有的规则数量超过20万。为此,在追求提高匹配性能的同时,还需要匹配技术能够处理大规模规则库(超过5万条以上规则的规则库可以称为大规模规则库)的匹配问题。传统的算法尽管可以支持对较大规模的规则库进行多字符串匹配,但对存储空间的影响很明显,降低了匹配速度,一般不具有实用性。

发明内容
为了解决网络安全领域目前对多字符串匹配技术的实际需求,即高匹配速度和对大规模规则集匹配等,本发明提供了一种多字符串匹配方法和芯片。所述技术方案如下一种多字符串匹配方法,所述方法包括步骤A接收到当前字符后,根据当前状态、缓存状态和所述当前字符在转换规则库中查找下一个状态;所述缓存状态为根据预设的缓存规则存储的状态;步骤B查找成功后,跳到下一个状态,将所述下一个状态作为当前状态,返回步骤A,直至没有字符输入。
所述步骤A具体包括步骤A1接收到当前字符后,检查基本转换规则中是否有下一个状态,如果有,根据缓存规则将所述下一个状态缓存或清空缓存,并执行所述步骤B;否则,执行步骤A2;步骤A2在基本转换规则中检查当前状态为缓存状态、接收的字符为所述当前字符时是否有下一个状态,如果有,根据缓存规则将所述下一个状态缓存或清空缓存,并执行所述步骤B;否则,执行步骤A3;步骤A3在基本转换规则中检查当前状态为初始状态、接收的字符为所述当前字符时是否有下一个状态,如果有,根据缓存规则将所述下一个状态缓存或清空缓存,并执行所述步骤B;否则,跳到初始状态。
所述预设的缓存规则具体为在基本转换规则中查看初始状态接收当前字符时,如果存在下一个状态,则将所述下一个状态缓存,如果不存在下一个状态,则清空缓存。
所述步骤A前还包括合并基本转换规则中的同构路径。
所述预设的缓存规则具体为如果当前状态为汇聚状态,则将所述当前状态缓存;如果当前状态为脱离状态,则取出缓存中的缓存状态,并清空缓存,如果当前状态为一般状态,则不对缓存进行操作。
所述步骤A具体包括接收到当前字符后,判断当前状态的类型;如果所述当前状态为汇聚状态,根据所述预设的缓存规则将所述当前状态存储在缓存中,并按照基本转换规则查找下一个状态;如果所述当前状态为一般状态,则按照基本转换规则查找下一个状态;如果所述当前状态为脱离状态,将缓存中的缓存状态取出,根据所述当前状态、缓存状态和当前字符在转换规则库中查找下一个状态。
本发明还提供了一种多字符串匹配芯片,所述芯片包括接口模块、状态寄存器、缓存状态寄存器、转换规则模块和控制模块。
所述接口模块用于接收输入的字符;所述状态寄存器用于存储当前状态;所述缓存状态寄存器用于存储缓存状态;所述转换规则模块用于存储状态转换规则库,并根据所述接口模块接收的字符、所述状态寄存器中存储的当前状态和所述缓存状态寄存器中存储的缓存状态查找下一个状态;所述控制模块用于控制所述接口模块正常接收输入的字符、所述控制状态寄存器更新当前状态、所述控制缓存状态寄存器更新缓存的状态、以及控制所述转换规则模块查找下一个状态。
所述转换规则库中的基本转换规则为合并同构路径后的基本转换规则。
本发明提供的技术方案的有益效果是本发明提出了一种缓存状态机原理,通过利用缓存状态机原理,可以消除绝大多数的交叉转换规则和基本转换规则中的同构路径,彻底地解决空间爆炸问题,能够有效降低空间需求。


图1是现有技术中的基于有限状态自动机AC算法转换规则示意图;图2是现有技术中的基于有限状态自动机带优先级的AC算法转换规则示意图;图3是现有技术中的有限状态自动机的结构示意图;图4是本发明提供的缓存状态机的结构示意图;图5是本发明实施例1提供的多字符串匹配方法的流程图;图6是本发明实施例1提供的现有AC算法构造的DFA示意图;图7是本发明实施例1提供的图6消除交叉规则后的转换规则示意图;图8是本发明实施例2提供的基本转换规则示意图;图9是本发明实施例2提供的图8经合并同构路径后的转换规则示意图;
图10是本发明实施例3提供的多字符串匹配芯片的结构图。
具体实施例方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
本发明实施例在进行多字符串匹配时,通过参考当前的输入字符、当前状态和缓存状态决定下一状态,从而避免存储空间爆炸的问题。
为了满足对高速大规模多字符串匹配技术的需求,本实施例提供了一种多字符串匹配方法,该方法基于缓存状态机原理,其特点是匹配的性能与规则库的大小无关、匹配的性能与规则库的最小长度无关、匹配的性能与规则库和待匹配文本之间的关系无关、能够支持大规模规则集、随着规则数量的增加存储空间亚线性增加。
缓存状态机原理缓存状态机是一个模型方法,设计思想来源于确定的有限状态自动机DFA。参见图3,每个DFA在状态寄存器中有一个当前状态,根据输入字符以及当前状态由状态转换规则库找出该字符对应的转换规则,进入下一个状态,将下一个状态存入状态寄存器中。在下一个字符到来之时,“下一个状态”变成“当前状态”。DFA可以根据内部的数据结构,在输入字符的驱动下进行状态转换。主要特点是它的下一个状态仅由当前状态和当前输入的字符决定。
参见图4,缓存状态机(CDFA,Cached Deterministic Finite Automata)除了包含一个状态寄存器和一个状态转换规则库外,还包含一个缓存状态寄存器,用于存储缓存状态。在缓存状态机中,当前状态的下一个状态由当前状态、当前输入的字符和缓存状态三个参数决定,下一个缓存状态由缓存状态机的内部机制决定,不需要外部输入,可以根据缓存状态机的特定需要灵活定制。
CDFA在状态机的内部操作方式上发生了变化,CDFA的对外接口和DFA是一致的。
CDFA的定义CDFA可以定义为一个八元组,cM={K,∑,N,C,s0,F,δ,θ},缓存区用C(N)表示,其中,K是有限状态集;∑是字符表;s0表示初始状态;N是CDFA维护的缓存空间大小,即缓存的状态数目;C是CDFA维护的缓存空间;
FK是终结状态集;δ是状态转换函数,δK×KN×∑→K;θ是缓存状态函数,用来描述缓存规则,即决定状态被放入缓存区的规则,θK×∑→C。
以图1为例,将图中的转换规则(带箭头的线条)分为四类,描述如下基本转换规则编号1、2、3、4、5所在的线条,是正确接收规则集的路径;交叉转换规则编号6所在的线条,在多个规则路径之间转换的路径;重启转换规则编号8,9,10,11所在的线条,回到初始状态后一个状态的路径;失败转换规则编号7,12,13,14,15,16所在的线条,回到初始状态的路径。
这四类规则的形式化描述如下基于DFA实现的AC算法在进行多字符串匹配时会造成随着规则增加存储空间爆炸的问题,空间爆炸来源于三类转换规则——交叉转换规则、重启转换规则和失败转换规则。其中,现有技术中的带优先级的方法能够将重启转换规则和失败转换规则的数量控制在256之内。
实施例1本实施例提供了一种多字符串匹配方法,该方法具体为基于缓存状态机原理的,以消除交叉转换规则为主要特点的,多字符串匹配方法。同时,该方法也能将重启转换规则和失败转换规则全部消除。参见图5,以当前状态Si,当前输入为K,存储状态数N=1为例进行说明,该方法包括以下步骤步骤101根据应用情况定义缓存状态机的缓存规则,即缓存状态函数。
本实施例的缓存规则具体用缓存状态函数(即θ)描述,具体为当前状态接收到当前字符后,如果初始状态S0接收当前字符在基本转换规则中有下一个状态,则将下一个状态存入缓存C(1)中;如果S0接收当前字符在基本转换规则中没有下一个状态,则将缓存C(1)清空。
步骤102检查当前状态为Si,接收到的字符为K时,基本转换规则中是否存在下一个状态,如果是,执行步骤103;否则,执行步骤104。
步骤103查到基本转换规则中下一个状态为Sj,跳到下一个状态Sj,并根据缓存状态函数进行状态缓存,即如果初始状态S0接收字符K在基本转换规则中有下一个状态,则将下一个状态存入缓存C(1)中;如果S0接收字符K在基本转换规则中没有下一个状态,则将缓存C(1)清空。
步骤104检查缓存C(1)中是否存在缓存状态,如果是,执行步骤105;否则,执行步骤107。
步骤105缓存C(1)中缓存的状态为Sc。
步骤106检查当前状态为Sc,接收到的字符为K时,基本转换规则中是否存在下一个状态,如果是,执行步骤103;否则,执行步骤107。
步骤107检查初始状态S0接收到字符K后,在基本转换规则中是否存在下一个状态,如果是,执行步骤108;否则执行步骤109。
步骤108按照缓存规则将查到的下一个状态Sm进行缓存,并跳到状态Sm。
步骤109跳到初始状态S0。
以P={slice,cross}为例,AC算法构造的DFA如图6所示,基本转换规则,交叉转换规则、重启转换规则和失败转换规则。如果待匹配的文本是croslice,应用本实施例提供的方法,参见图7,具体过程如下初始状态S0收到字符c后,执行步骤103,根据基本转换规则将跳到状态S1;状态S1收到字符r后,执行步骤103,根据基本转换规则将跳到状态S2;同理,状态S2收到字符o后,执行步骤103,跳到状态S3;当状态S3收到字符s后,根据基本转换规则将跳到状态S4,根据步骤102和步骤103,将状态S6缓存在C(1)中;状态S4将收到字符l,根据以上方法,将执行步骤104、步骤105和步骤106,得知状态S6接收到字符l后,跳到状态S7,并清空缓存C(1);同理,当状态S7收到i后,跳到状态S8,状态S8收到字符c后,跳到状态S9,状态S9收到字符e后,跳到状态S10,完成该文本的匹配。等待下一个字符的输入,如果新的字符输入,将根据前面的步骤跳回S0或者S0的下状态,从而开始新的匹配。
以上描述是针对N=1,即只利用CDFA中的一个存储空间,可以缓存一个状态。该方法也可以应用于N>1的情况,方法类似,不再赘述。
实施例2本实施例提供了一种多字符串匹配方法,基于缓存状态机原理的,以同构路径合并技术为主要特点的,多字符串匹配方法。
先将现有的基本转换规则进行合并同构路径的操作,以P={betters,pattern}为例,参见图8,为AC算法构造的DFA图(其中不包含重启转换规则和失败转换规则),一共需要14个基本转换规则和15个状态,状态S2-S5与状态S9-S12具有相同的性质,即都是接收字符串“tter”,将这种形式的称为同构路径。对于同构路径,采用缓存状态机对其进行合并。
参见图9,为图8经合并后的缓存状态机的示意图,将下一个状态汇聚为一个状态的状态S1和状态S8称为汇聚状态,将下一个状态为两个状态的状态S6称为脱离状态,其余状态称为普通状态。其中,5个状态和4个基本转换规则被去掉,需要的额外开销是一单位(一个状态存储空间)的存储作为缓存(图中$P位置),这样进一步节省了空间。
缓存状态函数(即θ)的规则如果当前CDFA在汇聚状态时,则将该汇聚状态存入C(X)中,其中C(X)表示应用于这个方法的缓存空间,本实施例C(X)的大小为1个单位;如果当前CDFA在脱离状态,则将C(X)中存储的状态取出;在普通状态时不对C(X)进行操作。
以当前状态Si,当前输入为K,存储状态数N=1为例进行说明,判断状态Si的类别汇聚状态、脱离状态、普通状态;如果是汇聚状态,则将Si存入缓存C(X)中;如果是脱离状态,则将缓存C(X)中的状态取出,并清空C(X);如果是一般状态,不做任何操作。
完成合并同构路径后,当状态Si收到字符K时,将按以下方法进行多字符串匹配首先,判断Si的类别汇聚状态、脱离状态、普通状态;如果是汇聚状态和一般状态,C(X)不参与确定下一个状态,按照基本转换规则找到下一个状态;如果是脱离状态,将缓存C(X)中的状态取出,设该状态为Sj;然后根据Si、Sj和k查找以Si为起点的转换规则库,判断下一个状态。
以图9为例,当前状态为S6,收到的字符为n,如果缓存的状态为S1,则下一个状态为S7,如果缓存的状态为S8,查找转换规则库,没有下一个状态,跳回初始状态,。
以脱离状态为起点的转换规则与其他状态为起点的转换规则不同,这类转换规则判断条件有三项当前状态、汇聚状态和输入字符。
实施例3参见图10,本实施例提供了一种多字符串匹配芯片,该芯片包括接口模块、状态寄存器、缓存状态寄存器、转换规则模块和控制模块。
其中,接口模块用于接收输入的字符;状态寄存器用于存储当前状态;缓存状态寄存器用于存储缓存状态,缓存状态为N个,N可以为1或其它数值;转换规则模块用于存储状态转换规则库,并根据接口模块接收的字符、状态寄存器中存储的当前状态和缓存状态寄存器中存储的缓存状态查找下一个状态;控制模块用于控制接口模块正常接收输入的字符、控制状态寄存器更新当前状态、控制缓存状态寄存器更新缓存的状态、以及控制转换规则模块查找下一个状态。
转换规则库中的基本转换规则为合并同构路径后的基本转换规则,合并同构路径的方法同实施例2,这里不再赘述。
以上实施例利用缓存状态机原理,可以消除绝大多数的交叉转换规则,如消除ClamAV病毒规则库全部转换规则中95.9%的转换规则,消除其交叉转换规则中96.9%的交叉转换规则,消除Snort入侵检测规则库全部转换规则中79.2%的转换规则,消除其交叉转换规则中89.9%的交叉转换规则,从而彻底的解决空间爆炸问题。另外,本发明利用缓存状态机原理,进行同构路径的合并,可以减少基本转换规则数量,如消除Snort入侵检测规则库中基本转换规则的78.6%,从而实现存储空间随着规则数量增加亚线性增长,能够有效降低空间需求。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种多字符串匹配方法,其特征在于,所述方法包括步骤A接收到当前字符后,根据当前状态、缓存状态和所述当前字符在转换规则库中查找下一个状态;所述缓存状态为根据预设的缓存规则存储的状态;步骤B查找成功后,跳到下一个状态,将所述下一个状态作为当前状态,返回步骤A,直至没有字符输入。
2.如权利要求1所述的多字符串匹配方法,其特征在于,所述步骤A具体包括步骤A1接收到当前字符后,检查基本转换规则中是否有下一个状态,如果有,根据缓存规则将所述下一个状态缓存或清空缓存,并执行所述步骤B;否则,执行步骤A2;步骤A2在基本转换规则中检查当前状态为缓存状态、接收的字符为所述当前字符时是否有下一个状态,如果有,根据缓存规则将所述下一个状态缓存或清空缓存,并执行所述步骤B;否则,执行步骤A3;步骤A3在基本转换规则中检查当前状态为初始状态、接收的字符为所述当前字符时是否有下一个状态,如果有,根据缓存规则将所述下一个状态缓存或清空缓存,并执行所述步骤B;否则,跳到初始状态。
3.如权利要求1或2所述的多字符串匹配方法,其特征在于,所述预设的缓存规则具体为在基本转换规则中查看初始状态接收当前字符时,如果存在下一个状态,则将所述下一个状态缓存,如果不存在下一个状态,则清空缓存。
4.如权利要求1所述的多字符串匹配方法,其特征在于,所述步骤A前还包括合并基本转换规则中的同构路径。
5.如权利要求4所述的多字符串匹配方法,其特征在于,所述预设的缓存规则具体为如果当前状态为汇聚状态,则将所述当前状态缓存;如果当前状态为脱离状态,则取出缓存中的缓存状态,并清空缓存,如果当前状态为一般状态,则不对缓存进行操作。
6.如权利要求5所述的多字符串匹配方法,其特征在于,所述步骤A具体包括接收到当前字符后,判断当前状态的类型;如果所述当前状态为汇聚状态,根据所述预设的缓存规则将所述当前状态存储在缓存中,并按照基本转换规则查找下一个状态;如果所述当前状态为一般状态,则按照基本转换规则查找下一个状态;如果所述当前状态为脱离状态,将缓存中的缓存状态取出,根据所述当前状态、缓存状态和当前字符在转换规则库中查找下一个状态。
7.一种多字符串匹配芯片,其特征在于,所述芯片包括接口模块、状态寄存器、缓存状态寄存器、转换规则模块和控制模块;所述接口模块用于接收输入的字符;所述状态寄存器用于存储当前状态;所述缓存状态寄存器用于存储缓存状态;所述转换规则模块用于存储状态转换规则库,并根据所述接口模块接收的字符、所述状态寄存器中存储的当前状态和所述缓存状态寄存器中存储的缓存状态查找下一个状态;所述控制模块用于控制所述接口模块正常接收输入的字符、所述控制状态寄存器更新当前状态、所述控制缓存状态寄存器更新缓存的状态、以及控制所述转换规则模块查找下一个状态。
8.如权利要求7所述的多字符串匹配芯片,其特征在于,所述转换规则库中的基本转换规则为合并同构路径后的基本转换规则。
全文摘要
本发明公开了一种多字符串匹配方法和芯片,属于信息处理领域。所述方法包括接收到当前字符后,根据当前状态、缓存状态和所述当前字符在转换规则库中查找下一个状态;所述缓存状态为根据预设的缓存规则存储的状态;查找成功后,跳到下一个状态,将所述下一个状态作为当前状态,重复前面的步骤,直至没有字符输入。所述芯片包括接口模块、状态寄存器、缓存状态寄存器、转换规则模块和控制模块。本发明通过利用缓存状态机原理,可以消除绝大多数的交叉转换规则,彻底地解决空间爆炸问题。另外,本发明利用缓存状态机原理,进行同构路径的合并,可以减少基本转换规则数量,从而实现存储空间随着规则数量增加亚线性增长,能够有效降低空间需求。
文档编号G06F17/30GK101051321SQ200710099389
公开日2007年10月10日 申请日期2007年5月18日 优先权日2007年5月18日
发明者嵩天 申请人:北京哲安科技有限公司, 嵩天
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1