一种DFA空间压缩方法及装置与流程

专利2022-06-29  100


本发明涉及网络安全技术领域,尤其涉及一种dfa空间压缩方法及装置。



背景技术:

随着网络技术的发展,通过输入网包传输的数据量日益增加,数据较大的正则表达式广泛用于网络安全规则引擎,并且随着网络带宽和流量的急剧提升,对网络安全规则引擎的正则表达式匹配性能要求越来越高。正则表达式匹配引擎,需将正则表达式对应的非确定有穷自动机(non-deterministicfiniteautomaton,简称“nfa”)转换为确定有穷自动机(deterministicfiniteautomaton,简称“dfa”),然后,采用处理速度较快的dfa执行匹配任务。然而,dfa较nfa具有极高的空间复杂度,进而影响了dfa在大规模复杂正则表达式情形下的使用。

“基于dfa匹配技术”较“基于nfa匹配技术”性能较好,但是,dfa的空间利用率较小,容易发生dfa状态爆炸。如何压缩自动机空间,及提高nfa到dfa的转换速度,是实现高性能正则表达式匹配引擎的一大挑战。现有技术中有限自动机状态转移采用二维矩阵存储结构,其中,二维矩阵的行表示有限自动机状态,二维矩阵的列表示跳转字符。但是基于二维矩阵存储结构进行的有限自动机压缩方法,压缩比例较低,有限自动机空间利用率较低。



技术实现要素:

针对现有技术存在的问题,本发明实施例提供一种dfa空间压缩方法及装置。

本发明实施例提供一种dfa空间压缩方法,包括:

获取用于检测的正则表达式对应的nfa,并对所述nfa中的各nfa状态之间的跳转关系进行压缩;

确定与各nfa状态分别对应的各dfa状态,并根据nfa状态和dfa状态之间的对应关系,对各个dfa状态之间的跳转关系进行优化,得到优化后的dfa;

对所述优化后的dfa中的各dfa状态之间的跳转关系进行压缩。

其中,所述对所述nfa中的各nfa状态之间的跳转关系进行压缩,包括:

删除所述nfa中的各nfa状态中没有发生跳转关系的无效跳转字符;

和/或,删除所述nfa中的各nfa状态中跳转字符区间中的中间字符;所述中间字符是在所述跳转字符区间中的、除两端端点跳转字符之外的所有字符。

其中,所述对所述nfa中的各nfa状态之间的跳转关系进行压缩,还包括:

采用链式列表存储删除所述无效跳转字符和/或所述中间字符后的各nfa状态之间的跳转关系;

将基于链式列表存储的各nfa状态之间的跳转关系合并到第一有序数组列表。

其中,所述对所述优化后的dfa中的各dfa状态之间的跳转关系进行压缩,包括:

分别存储各dfa状态之间的跳转关系;

将存储的各dfa状态之间的跳转关系合并到第二有序数组列表。

其中,所述根据nfa状态和dfa状态之间的对应关系,对各个dfa状态之间的跳转关系进行优化,得到优化后的dfa,包括:

获取同一dfa状态对应的活跃nfa状态集,并根据所述活跃nfa状态集将所述nfa转换为dfa;所述活跃nfa状态集包括由与所述同一dfa状态相对应的连续跳转字符表示的nfa状态集合。

其中,所述根据所述活跃nfa状态集将所述nfa转换为dfa,包括:

根据所述活跃nfa状态集优化子集构造法的性能;

采用优化性能后的子集构造法将所述nfa转换成dfa。

其中,所述获取同一dfa状态对应的活跃nfa状态集的步骤之后,所述dfa空间压缩方法还包括:

对同一dfa状态中的连续跳转字符执行一次radix树检索。

其中,在对所述优化后的dfa中的各dfa状态之间的跳转关系进行压缩的步骤之后,所述dfa空间压缩方法还包括:

根据所述网络安全规则引擎对输入网包进行正则表达式匹配处理;

根据所述第二有序数组列表转发或存储所述输入网包。

本发明实施例提供一种dfa空间压缩装置,包括:

第一压缩单元,用于获取用于检测的正则表达式对应的nfa,并对所述nfa中的各nfa状态之间的跳转关系进行压缩;

优化单元,用于确定与各nfa状态分别对应的各dfa状态,并根据nfa状态和dfa状态之间的对应关系,对各个dfa状态之间的跳转关系进行优化,得到优化后的dfa;

第二压缩单元,用于对所述优化后的dfa中的各dfa状态之间的跳转关系进行压缩。

本发明实施例提供一种电子设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,

所述处理器执行所述计算机程序时实现如下方法步骤:

获取用于检测的正则表达式对应的nfa,并对所述nfa中的各nfa状态之间的跳转关系进行压缩;

确定与各nfa状态分别对应的各dfa状态,并根据nfa状态和dfa状态之间的对应关系,对各个dfa状态之间的跳转关系进行优化,得到优化后的dfa;

对所述优化后的dfa中的各dfa状态之间的跳转关系进行压缩。

本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如下方法步骤:

获取用于检测的正则表达式对应的nfa,并对所述nfa中的各nfa状态之间的跳转关系进行压缩;

确定与各nfa状态分别对应的各dfa状态,并根据nfa状态和dfa状态之间的对应关系,对各个dfa状态之间的跳转关系进行优化,得到优化后的dfa;

对所述优化后的dfa中的各dfa状态之间的跳转关系进行压缩。

本发明实施例提供一种计算机程序产品,所述计算机程序产品包括计算机可执行指令,所述计算机可执行指令在被执行时实现如下方法步骤:

获取用于检测的正则表达式对应的nfa,并对所述nfa中的各nfa状态之间的跳转关系进行压缩;

确定与各nfa状态分别对应的各dfa状态,并根据nfa状态和dfa状态之间的对应关系,对各个dfa状态之间的跳转关系进行优化,得到优化后的dfa;

对所述优化后的dfa中的各dfa状态之间的跳转关系进行压缩。

本发明实施例提供的dfa空间压缩方法及装置,通过nfa空间压缩、优化nfa到dfa转换和dfa空间压缩,不但解决dfa空间复杂度较高,nfa到dfa转换速度较慢的问题,而且采用合理的存储结构,节省了dfa存储空间,提升了nfa到dfa转换速度,还实现了网络安全。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明dfa空间压缩方法实施例流程图;

图2为本发明实施例nfa状态和dfa状态示意图;

图3为本发明dfa空间压缩方法另一实施例流程图;

图4为本发明dfa空间压缩装置实施例结构示意图;

图5为本发明实施例提供的电子设备实体结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明dfa空间压缩方法实施例流程图,如图1所示,本发明实施例提供的一种dfa空间压缩方法,包括以下步骤:

s101:获取用于检测的正则表达式对应的nfa,并对所述nfa中的各nfa状态之间的跳转关系进行压缩。

具体的,获取用于检测的正则表达式对应的nfa,并对所述nfa中的各nfa状态之间的跳转关系进行压缩。执行该方法步骤的可以是计算机设备。具体的,可以获取用于网络安全规则引擎的正则表达式对应的nfa。

对各nfa状态之间的跳转关系进行压缩,具体可以包括:

删除所述nfa中的各nfa状态中没有发生跳转关系的无效跳转字符;和/或,删除所述nfa中的各nfa状态中跳转字符区间中的中间字符;所述中间字符是在所述跳转字符区间中的、除两端端点跳转字符之外的所有字符。举例说明如下:nfa中的各nfa状态之间的跳转关系如表1所示:

表1

进行说明如下:nfa状态1通过字符a跳转到nfa状态3,通过字符c或字符d跳转到nfa状态3,即对于nfa状态1,跳转字符区间为字符c-字符d、字符e-字符f,但这两个区间都不包含中间字符;nfa状态2只有通过字符c才跳转到nfa状态1,即对于nfa状态2,除去字符c以外都是无效跳转字符,因此,删除字符a-b,字符d-g,对于nfa状态4,跳转字符区间为字符c-字符d、字符e-字符g,中间字符为字符f,因此,删除字符f。

该步骤实现的是,nfa空间压缩,用于构造压缩比例较高的“nfa状态转移”存储数据结构。本步骤保持nfa状态数目不变,只针对nfa状态之间的跳转关系做优化。

现有技术中nfa二维矩阵存储结构,行表示nfa状态,列表示跳转字符。但是,正则表达式中的跳转字符可以分为两类:第一类是单个跳转字符,比如:ab;第二类是跳转字符区间(包含多个连续字符),比如:[a-h]。

基于上述理论,nfa状态跳转边分“单个跳转字符”和“跳转字符区间”两种情况分别存储,其中,“跳转字符区间”可以合并为一条存储记录,参照表1,例如,对于nfa状态1为(c-d,3)。但是,“无效跳转字符”及“跳转字符区间”中的中间字符无须记录,例如,对于nfa状态2,只需记录(c,1),其他都是无效跳转字符;对于nfa状态4,只需记录(e-g,1),中间字符f无须记录。

对各nfa状态之间的跳转关系进行压缩,具体还可以包括:

采用链式列表存储删除所述无效跳转字符和/或所述中间字符后的各nfa状态之间的跳转关系;将基于链式列表存储的各nfa状态之间的跳转关系合并到第一有序数组列表。链式列表使用指针来表示前后元素之间的关系,因此,每个元素节点除了包含自身数据的相关信息外,还包括存储后续元素地址的指针。

将上述的“单个跳转字符”和“跳转字符区间”的链式列表的存储结构合并到“第一有序数组列表”,例如,对于nfa状态1,第一有序数组列表为(a,3),(b,2),(c-d,3),(e-f,2),(g,1),有序可以是指按照26个英文字母的先后顺序,对于其他nfa状态对应的第一有序数组列表不再赘述。此“第一有序数组列表”不仅可以缩短“nfa到dfa”转换时间,而且可以提高“基于nfa匹配技术”的执行效率。

s102:确定与各nfa状态分别对应的各dfa状态,并根据nfa状态和dfa状态之间的对应关系,对各个dfa状态之间的跳转关系进行优化,得到优化后的dfa。

具体的,确定与各nfa状态分别对应的各dfa状态,并根据nfa状态和dfa状态之间的对应关系,对各个dfa状态之间的跳转关系进行优化,得到优化后的dfa。图2为本发明实施例nfa状态和dfa状态示意图,如图2所示,左侧对应nfa状态,右侧对应dfa状态,一个dfa状态可以包含多个nfa状态,对于dfa状态0,对应nfa状态0;对于dfa状态1,对应nfa状态0 nfa状态1。

所述根据nfa状态和dfa状态之间的对应关系,对各个dfa状态之间的跳转关系进行优化,得到优化后的dfa,具体可以包括:

获取同一dfa状态对应的活跃nfa状态集,并根据所述活跃nfa状态集将所述nfa转换为dfa;所述活跃nfa状态集包括由与所述同一dfa状态相对应的连续跳转字符表示的nfa状态集合。参照上述示例,对于dfa状态0,由于只对应nfa状态0对应的活跃nfa状态集,参照上述说明,例如根据(a,3),(b,2),(c-d,3),(e-f,2),(g,1),得到活跃nfa状态集为nfa状态0:由a,c-d表示状态3、b,e-f表示状态2、g表示状态1。

对于dfa状态1,对应nfa状态0和nfa状态1分别对应的活跃nfa状态集。例如,由a,c-d表示状态3、b,e-f表示状态2、g表示状态1(活跃nfa状态集为nfa状态0)和活跃nfa状态集为nfa状态1,对于nfa状态1的举例说明,不再赘述。

所述根据所述活跃nfa状态集将所述nfa转换为dfa,可以具体包括:

根据所述活跃nfa状态集优化子集构造法的性能;采用优化性能后的子集构造法将所述nfa转换成dfa。

该步骤实现的是,优化nfa到dfa转换,用于合并nfa状态之间的跳转关系,进而改善“子集构造法”的性能,优化nfa到dfa转换效率。上述步骤即是预处理所述dfa的nfa状态集的过程。

本发明实施例nfa到dfa的转换原理为子集构造法,在nfa到dfa的转换过程中,有很大一部分时间用于查询当前跳转字符对应的“活跃nfa状态集”是否已经存在。但是,dfa状态的跳转边往往是有限的,并且存在极大的重复概率。至少大部分情况下,正则表达式为base64所含的64个常用字符,重复率近似为64/256=25%。

s103:对所述优化后的dfa中的各dfa状态之间的跳转关系进行压缩。

具体的,对所述优化后的dfa中的各dfa状态之间的跳转关系进行压缩。该步骤实现的是,dfa空间压缩,用于构造压缩比例较高的“dfa状态转移”存储数据结构。本步骤保持dfa状态数目不变,只针对dfa状态之间的跳转关系做优化。

现有技术中的dfa二维矩阵存储结构,行表示dfa状态,列表示跳转字符。但是,dfa的跳转字符可以分为两类:第一类是单个跳转字符跳转到目的dfa状态,并且这个跳转字符与相邻跳转字符目的dfa状态不同;第二类是跳转字符区间(包含多个连续字符)具有相同的目的dfa状态。

各dfa状态之间的跳转关系进行压缩,具体可以包括:

分别存储各dfa状态之间的跳转关系;将存储的各dfa状态之间的跳转关系合并到第二有序数组列表为了加快dfa匹配速度,“无效跳转字符”及“跳转字符区间”也需记录,“dfa状态之间的跳转关系”采用第二有序数组列表存储。

本发明实施例提供的dfa空间压缩方法,通过nfa空间压缩、优化nfa到dfa转换和dfa空间压缩,不但解决dfa空间复杂度较高,nfa到dfa转换速度较慢的问题,而且节省了dfa存储空间,提升了nfa到dfa转换速度,还实现了网络安全。

在上述实施例的基础上,所述对所述nfa中的各nfa状态之间的跳转关系进行压缩,包括:

具体的,删除所述nfa中的各nfa状态中没有发生跳转关系的无效跳转字符;和/或,删除所述nfa中的各nfa状态中跳转字符区间中的中间字符;所述中间字符是在所述跳转字符区间中的、除两端端点跳转字符之外的所有字符。可参照上述说明,不再赘述。

本发明实施例提供的dfa空间压缩方法,通过删除无效跳转字符和/或中间字符,进一步优化了nfa空间压缩。

在上述实施例的基础上,所述对所述nfa中的各nfa状态之间的跳转关系进行压缩,还包括:

具体的,采用链式列表存储删除所述无效跳转字符和/或所述中间字符后的各nfa状态之间的跳转关系;将基于链式列表存储的各nfa状态之间的跳转关系合并到第一有序数组列表。可参照上述说明,不再赘述。

本发明实施例提供的dfa空间压缩方法,将基于链式列表存储的跳转关系合并到第一有序数组列表,进一步优化了nfa空间压缩。

在上述实施例的基础上,所述对所述优化后的dfa中的各dfa状态之间的跳转关系进行压缩,包括:

具体的,分别存储各dfa状态之间的跳转关系;将存储的各dfa状态之间的跳转关系合并到第二有序数组列表。可参照上述说明,不再赘述。

本发明实施例提供的dfa空间压缩方法,将存储的跳转关系合并到第二有序数组列表,进一步优化了dfa空间压缩。

在上述实施例的基础上,所述根据nfa状态和dfa状态之间的对应关系,对各个dfa状态之间的跳转关系进行优化,得到优化后的dfa,包括:

具体的,获取同一dfa状态对应的活跃nfa状态集,并根据所述活跃nfa状态集将所述nfa转换为dfa;所述活跃nfa状态集包括由与所述同一dfa状态相对应的连续跳转字符表示的nfa状态集合。可参照上述说明,不再赘述。

本发明实施例提供的dfa空间压缩方法,通过根据活跃nfa状态集将nfa转换为dfa,进一步提升了nfa到dfa转换速度。

在上述实施例的基础上,所述根据所述活跃nfa状态集将所述nfa转换为dfa,包括:

具体的,根据所述活跃nfa状态集优化子集构造法的性能;采用优化性能后的子集构造法将所述nfa转换成dfa。可参照上述说明,不再赘述。

本发明实施例提供的dfa空间压缩方法,通过优化子集构造法的性能,进一步提升了nfa到dfa转换速度。

在上述实施例的基础上,所述获取同一dfa状态对应的活跃nfa状态集的步骤之后,所述dfa空间压缩方法还包括:

具体的,对同一dfa状态中的连续跳转字符执行一次radix树检索。图3为本发明dfa空间压缩方法另一实施例流程图;如图3所示,需要说明的是,预处理所述dfa的nfa状态集的过程还可以包括:对同一dfa状态中的连续跳转字符执行一次radix树检索。预处理dfa状态包含的“活跃nfa状态集”,通过图3的算法实现了多个连续的跳转字符具有相同的“跳转活跃nfa状态集”,只需执行一次“radix树检索”,由于只要含有剩余活跃nfa状态集,就执行采用radix树搜索是否已有相同dfa的步骤,经过不断的循环执行,使得对每一个相同dfa执行一次创建dfa,并将dfa信息添加到radix树的步骤,其中相同dfa即对应上述“合并后的同一dfa状态中的连续跳转字符”,极大减少了“radix树检索次数”,进而缩小了nfa到dfa的执行时间。

本发明实施例提供的dfa空间压缩方法,通过对同一dfa状态中的连续跳转字符执行一次radix树检索,进一步提升了nfa到dfa转换速度。

在上述实施例的基础上,在对所述优化后的dfa中的各dfa状态之间的跳转关系进行压缩的步骤之后,所述dfa空间压缩方法还包括:

具体的,根据所述网络安全规则引擎对输入网包进行正则表达式匹配处理。正则表达式匹配处理可以采用本领域通用方法,不作具体限定。

具体的,根据所述第二有序数组列表转发或存储所述输入网包。即本发明实施例可以应用于网络数据的传输中,实现安全转发或存储输入网包。本发明实施例具有如下优点:

1)nfa/dfa空间利用率高:采用合理的数据结构,优化了“有限自动机状态转移”存储结构,压缩了内存空间。

2)nfa转dfa执行时间短:合理压缩合并了nfa状态之间的跳转关系,提高了“子集构造法”性能,缩短了nfa转换为dfa的执行时间。

此外,还可以实现输入网包的快速传输。

本发明实施例提供的dfa空间压缩方法,进一步实现了安全传输输入网包。

图4为本发明dfa空间压缩装置实施例结构示意图,如图4所示,本发明实施例提供了一种dfa空间压缩装置,包括第一压缩单元401、优化单元402和第二压缩单元403,其中:

第一压缩单元401用于获取用于检测的正则表达式对应的nfa,并对所述nfa中的各nfa状态之间的跳转关系进行压缩;优化单元402用于确定与各nfa状态分别对应的各dfa状态,并根据nfa状态和dfa状态之间的对应关系,对各个dfa状态之间的跳转关系进行优化,得到优化后的dfa;第二压缩单元403用于对所述优化后的dfa中的各dfa状态之间的跳转关系进行压缩。

具体的,第一压缩单元401用于获取用于检测的正则表达式对应的nfa,并对所述nfa中的各nfa状态之间的跳转关系进行压缩;优化单元402用于确定与各nfa状态分别对应的各dfa状态,并根据nfa状态和dfa状态之间的对应关系,对各个dfa状态之间的跳转关系进行优化,得到优化后的dfa;第二压缩单元403用于对所述优化后的dfa中的各dfa状态之间的跳转关系进行压缩。

本发明实施例提供的dfa空间压缩装置,通过nfa空间压缩、优化nfa到dfa转换和dfa空间压缩,不但解决dfa空间复杂度较高,nfa到dfa转换速度较慢的问题,而且采用合理的存储结构,节省了dfa存储空间,提升了nfa到dfa转换速度,还实现了网络安全。

在上述实施例的基础上,所述第一压缩单元401具体用于:

删除所述nfa中的各nfa状态中没有发生跳转关系的无效跳转字符;

和/或,删除所述nfa中的各nfa状态中跳转字符区间中的中间字符;所述中间字符是在所述跳转字符区间中的、除两端端点跳转字符之外的所有字符。

本发明实施例提供的dfa空间压缩装置,通过删除无效跳转字符和/或中间字符,进一步优化了nfa空间压缩。

在上述实施例的基础上,所述第一压缩单元401还具体用于:

采用链式列表存储删除所述无效跳转字符和/或所述中间字符后的各nfa状态之间的跳转关系;

将基于链式列表存储的各nfa状态之间的跳转关系合并到第一有序数组列表。

本发明实施例提供的dfa空间压缩装置,将基于链式列表存储的跳转关系合并到第一有序数组列表,进一步优化了nfa空间压缩。

在上述实施例的基础上,所述第二压缩单元403具体用于:

分别存储各dfa状态之间的跳转关系;

将存储的各dfa状态之间的跳转关系合并到第二有序数组列表。

本发明实施例提供的dfa空间压缩装置,将存储的跳转关系合并到第二有序数组列表,进一步优化了dfa空间压缩。

在上述实施例的基础上,所述优化单元402具体用于:

获取同一dfa状态对应的活跃nfa状态集,并根据所述活跃nfa状态集将所述nfa转换为dfa;所述活跃nfa状态集包括由与所述同一dfa状态相对应的连续跳转字符表示的nfa状态集合。

本发明实施例提供的dfa空间压缩装置,通过根据活跃nfa状态集将nfa转换为dfa,进一步提升了nfa到dfa转换速度。

在上述实施例的基础上,所述优化单元402还具体用于:

根据所述活跃nfa状态集优化子集构造法的性能;

采用优化性能后的子集构造法将所述nfa转换成dfa。

本发明实施例提供的dfa空间压缩装置,通过优化子集构造法的性能,进一步提升了nfa到dfa转换速度。

在上述实施例的基础上,所述dfa空间压缩装置还用于:

对同一dfa状态中的连续跳转字符执行一次radix树检索。

本发明实施例提供的dfa空间压缩装置,通过对同一dfa状态中的连续跳转字符执行一次radix树检索,进一步提升了nfa到dfa转换速度。

在上述实施例的基础上,所述dfa空间压缩装置还用于:

根据所述网络安全规则引擎对输入网包进行正则表达式匹配处理;

根据所述第二有序数组列表转发或存储所述输入网包。

本发明实施例提供的dfa空间压缩装置,进一步实现了安全转发或存储输入网包。

本发明实施例提供的dfa空间压缩装置具体可以用于执行上述各方法实施例的处理流程,其功能在此不再赘述,可以参照上述方法实施例的详细描述。

图5为本发明实施例提供的电子设备实体结构示意图,如图5所示,所述电子设备包括:处理器(processor)501、存储器(memory)502和总线503;

其中,所述处理器501、存储器502通过总线503完成相互间的通信;

所述处理器501用于调用所述存储器502中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:获取用于检测的正则表达式对应的nfa,并对所述nfa中的各nfa状态之间的跳转关系进行压缩;确定与各nfa状态分别对应的各dfa状态,并根据nfa状态和dfa状态之间的对应关系,对各个dfa状态之间的跳转关系进行优化,得到优化后的dfa;对所述优化后的dfa中的各dfa状态之间的跳转关系进行压缩。

本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:获取用于检测的正则表达式对应的nfa,并对所述nfa中的各nfa状态之间的跳转关系进行压缩;确定与各nfa状态分别对应的各dfa状态,并根据nfa状态和dfa状态之间的对应关系,对各个dfa状态之间的跳转关系进行优化,得到优化后的dfa;对所述优化后的dfa中的各dfa状态之间的跳转关系进行压缩。

本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:获取用于检测的正则表达式对应的nfa,并对所述nfa中的各nfa状态之间的跳转关系进行压缩;确定与各nfa状态分别对应的各dfa状态,并根据nfa状态和dfa状态之间的对应关系,对各个dfa状态之间的跳转关系进行优化,得到优化后的dfa;对所述优化后的dfa中的各dfa状态之间的跳转关系进行压缩。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。


技术特征:

1.一种dfa空间压缩方法,其特征在于,包括:

获取用于检测的正则表达式对应的nfa,并对所述nfa中的各nfa状态之间的跳转关系进行压缩;

确定与各nfa状态分别对应的各dfa状态,并根据nfa状态和dfa状态之间的对应关系,对各个dfa状态之间的跳转关系进行优化,得到优化后的dfa;

对所述优化后的dfa中的各dfa状态之间的跳转关系进行压缩。

2.根据权利要求1所述的dfa空间压缩方法,其特征在于,所述对所述nfa中的各nfa状态之间的跳转关系进行压缩,包括:

删除所述nfa中的各nfa状态中没有发生跳转关系的无效跳转字符;

和/或,删除所述nfa中的各nfa状态中跳转字符区间中的中间字符;所述中间字符是在所述跳转字符区间中的、除两端端点跳转字符之外的所有字符。

3.根据权利要求2所述的dfa空间压缩方法,其特征在于,所述对所述nfa中的各nfa状态之间的跳转关系进行压缩,还包括:

采用链式列表存储删除所述无效跳转字符和/或所述中间字符后的各nfa状态之间的跳转关系;

将基于链式列表存储的各nfa状态之间的跳转关系合并到第一有序数组列表。

4.根据权利要求1所述的dfa空间压缩方法,其特征在于,所述对所述优化后的dfa中的各dfa状态之间的跳转关系进行压缩,包括:

分别存储各dfa状态之间的跳转关系;

将存储的各dfa状态之间的跳转关系合并到第二有序数组列表。

5.根据权利要求1-4任一所述的dfa空间压缩方法,其特征在于,所述根据nfa状态和dfa状态之间的对应关系,对各个dfa状态之间的跳转关系进行优化,得到优化后的dfa,包括:

获取同一dfa状态对应的活跃nfa状态集,并根据所述活跃nfa状态集将所述nfa转换为dfa;所述活跃nfa状态集包括由与所述同一dfa状态相对应的连续跳转字符表示的nfa状态集合。

6.根据权利要求5所述的dfa空间压缩方法,其特征在于,所述根据所述活跃nfa状态集将所述nfa转换为dfa,包括:

根据所述活跃nfa状态集优化子集构造法的性能;

采用优化性能后的子集构造法将所述nfa转换成dfa。

7.根据权利要求5所述的dfa空间压缩方法,其特征在于,所述获取同一dfa状态对应的活跃nfa状态集的步骤之后,所述dfa空间压缩方法还包括:

对同一dfa状态中的连续跳转字符执行一次radix树检索。

8.根据权利要求4所述的dfa空间压缩方法,其特征在于,在对所述优化后的dfa中的各dfa状态之间的跳转关系进行压缩的步骤之后,所述dfa空间压缩方法还包括:

根据所述网络安全规则引擎对输入网包进行正则表达式匹配处理;

根据所述第二有序数组列表转发或存储所述输入网包。

9.一种dfa空间压缩装置,其特征在于,包括:

第一压缩单元,用于获取用于检测的正则表达式对应的nfa,并对所述nfa中的各nfa状态之间的跳转关系进行压缩;

优化单元,用于确定与各nfa状态分别对应的各dfa状态,并根据nfa状态和dfa状态之间的对应关系,对各个dfa状态之间的跳转关系进行优化,得到优化后的dfa;

第二压缩单元,用于对所述优化后的dfa中的各dfa状态之间的跳转关系进行压缩。

10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至8任一项所述方法的步骤。

11.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至8任一项所述方法的步骤。

12.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机可执行指令,所述计算机可执行指令在被执行时实现如权利要求1~8中任一项所述方法的步骤。

技术总结
本发明实施例提供一种DFA空间压缩方法及装置,所述方法包括:获取用于网络安全规则引擎的正则表达式对应的NFA,并对所述NFA中的各NFA状态之间的跳转关系进行压缩,以获取与各NFA状态分别对应的第一有序数组列表;确定与各NFA状态分别对应的各DFA状态,根据各DFA状态与各NFA状态之间的对应关系,合并对应同一DFA状态的全部NFA状态的第一有序数组列表,以实现预处理所述DFA的NFA状态集,并根据所述NFA状态集将所述NFA转换为所述DFA;对所述DFA中的各DFA状态之间的跳转关系进行压缩,以获取与各DFA状态分别对应的第二有序数组列表。所述装置执行上述方法。本发明实施例提供的DFA空间压缩方法及装置,节省了DFA存储空间,提升了NFA到DFA转换速度。

技术研发人员:王彬;覃永靖;程诗尧;马江波
受保护的技术使用者:奇安信科技集团股份有限公司;网神信息技术(北京)股份有限公司
技术研发日:2020.01.13
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-21936.html

最新回复(0)