用于正则表达式的编译器的制造方法

文档序号:7991460阅读:270来源:国知局
用于正则表达式的编译器的制造方法
【专利摘要】一种方法和相应的装置涉及将用于给定的图样集合的非确定性有限自动机(NFA)图转换成具有多个状态的确定性有限自动机(DFA)图形。DFA状态中的每一个被映射成NFA图形的一个或多个状态。计算映射到每个DFA状态的NFA的图形的一个或多个状态的哈希值。对于给定图样,DFA状态表将多个DFA状态中的每一个与NFA图形的一个或多个状态的哈希值相关。
【专利说明】用于正则表达式的编译器
[0001]相关申请
[0002]本申请是2011年6月24日提交的美国申请N0.13/168,450的继续并且要求其优先权。上述申请的全部教导通过引用合并于此。
【背景技术】
[0003]开放系统互连(OSI)参考模型定义了用于通过传输介质进行通信的7个网络协议层(L1-L7)。上层(L4-L7)表示端对端通信并且下层(L1-L3)表示本地通信。
[0004]联网应用感知系统需要处理、滤波和切换L3到L7网络协议层的范围,例如,L7网络协议层诸如超文本传输协议(HTTP)和简单邮件传输协议(SMTP),以及L4网络协议层诸如传输控制协议(TCP)。除了处理网络协议层,联网应用感知系统需要通过L4-L7网络协议层来同时确保这些协议对基于访问和内容的安全性,包括防火墙、虚拟专用网(VPN)、安全套接字层(SSL)、入侵检测系统(TDS)、因特网协议安全(IPSec)、线速度的防病毒(AV)和防垃圾邮件功能。
[0005]网络处理器可用于高吞吐量L2和L3网络协议处理,即执行分组处理以线速度转发分组。通常,通用处理器用于处理需要更多智能处理的L4-L7网络协议。虽然通用处理器可以执行计算密集型任务,但是没有足够用于处理数据使得其能够被以线速转发的性能。
[0006]内容感知联网需要以“线速度”的对分组内容的检查。可以对内容进行分析,以确定是否存在安全漏洞或入侵。应用大量正则表示式形式的图样和规则以确保所有的安全漏洞或入侵被检测到。正则表示式是用于描述字符串的图样的紧凑型方法。由正则表示式所匹配的最简单图样是单个字符或字符串,例如,/c/或/cat/。正则表示式还包括具有特殊含义的运算符和元字符。
[0007]通过使用元字符,正则表示式可以用于更复杂的搜索,诸如“abc.*Xyz”。也就是说,在不限制“abc”和“xyz”之间的字符数目的情况下,找到字符串“abc”,之后是字符串“xyz”。另一示例是正则表示式“abc..abc.*xyz ; ”,也就是找到字符串“abc”,后面两个字符,然后是“abc”并且在不限制个数的字符后由串“xyz”跟随。
[0008]入侵检测系统(IDS)应用检查所有流过网络的独立分组的内容,并且识别可能指示尝试闯入或威胁系统的可疑图样。可疑图样的一个示例可以是分组中的特定文本串,该特定文本串在100个字符以后跟随另一特定文本串。
[0009]通常使用搜索算法来执行内容搜索以处理正则表示式,搜索算法诸如确定性有限自动机(DFA)或者非确定性有限自动机(NFA)。

【发明内容】

[0010]一种方法和相应的装置,涉及将用于给定的图样集合的非确定性有限自动机(NFA)图形转换成具有多个状态的确定性有限自动机(DFA)图形。DFA状态中的每一个被映射成NFA图形的一个或多个状态。计算映射成每个DFA状态的NFA图形的一个或多个状态的哈希值。对于给定图样,DFA状态表将多个DFA状态中的每一个与NFA图形的一个或多个状态的哈希值相关。
[0011]可以确定与由NFA图形和DFA图形所识别的字母相关联的给定图样的有效字符。基于该确定,该方法压缩NFA图形和DFA图形以识别图样,该图样仅由与NFA图形和DFA图形所识别的字母相关联的给定图样的有效字符组成。
【专利附图】

【附图说明】
[0012]从如在附图中所示的本发明的示例性实施例的以下更具体的描述中,前述内容将显而易见,在附图中相同的附图标记指代所有不同视图中的相同部件。附图不一定按比例,而是着重于图示本发明的实施例。
[0013]图1是图示系统的框图,在该系统中操作安全设备以保护专用网络。
[0014]图2是可以由本发明使用的安全设备的框图。
[0015]图3是示例NFA的NFA图形。
[0016]图4是示例DFA的DFA图形。
[0017]图5A-G是图示图形爆炸的原理的NFA和DFA图形和表。
[0018]图6A-B是将NFA图形转换成DFA图形的方法的流程图。
[0019]图7是用于确定NFA图形中的状态的埃普西隆终止的方法的流程图。
[0020]图8A-C是用于将NFA图形转换成DFA图形的方法的流程图。
[0021]图9是用于确定NFA图形中的状态的埃普西隆终止的方法的流程图。
[0022]图9A-9B是用于将NFA图形转换成DFA图形的方法的流程图。
[0023]图9C是用于确定用于一组NFA状态的埃普西隆终止的流程图。
[0024]图10图示了用于使用Aho-Corasik算法来搜索例如图样“她的”、“他的”和“她”的图样匹配机制。
[0025]图1lA图示了图样匹配机制的每个状态的故障值。
[0026]图1lB图示了图样匹配机制的状态的输出函数值。
[0027]图12图示了例如锚定的图样“帮助”和“贝壳”的状态树。
[0028]图12A图示了图12的状态树的每个状态的故障值。
[0029]图12B图示了图12的状态树的状态14和19的输出函数值。
[0030]图13A图示了图12中的状态树的每个状态的故障值。
[0031]图13B图示了图12的状态树的状态12、14、17和19的输出函数值。
【具体实施方式】
[0032]在详细描述本发明的示例性实施例之前,以下马上描述其中可以实现实施例的示例安全应用以及使用DFA和NFA的典型处理,以有助于读者理解本发明的发明特征。
[0033]正则表示式(Regex)处理在许多分组处理系统中变得普遍。Regex处理可以应用于传统的安全系统(例如,入侵防止系统(IPS)、防火墙和统一威胁管理(UTM)设备)、较新的安全系统(例如,防恶意软件、反间谍软件、零日附加检测)、在有线/无线网络中用于计费,服务质量(QoS)和网络监控系统的新兴的协议/应用识别系统。
[0034]正则表示式处理可以被细分为两个阶段i)将签名/图样编译成二进制数据结构,诸如DFA图形或NFA图形,以及ii)根据编译的图形处理接收到的分组。[0035]存储与性能的折衷要求在正则表示式处理的两个阶段均发生。分配有大的运行时间内存占用的编译器能够以较高的速度和效率来编译图样。类似地,相对于紧凑图,用于分组检查的较大的图或等效二进制数据结构可以给出更好的分组检查性能。
[0036]而在实践中,期望编译器以尽可能少的内存占用来非常快速地编译规则。一个原因是,在网络设备仍然在运行(例如检查/转发分组)时在网络设备(例如,路由器、交换机、UTM等)的字段中更新图样。因此,需要使用在嵌入的路由器设备中的有限内存来编译规则。因为规则/图样用于防止对系统的攻击或停止被病毒感染的业务,所以需要尽可能早地应用规则/图样以便于优化系统的安全性。因此,编译器应当能够非常快地将规则编译成二进制数据结构。
[0037]—般的方法在中央服务器上将新的图样或签名编译成图形,该中央服务器然后向路由器传送编译了的图形。然后,路由器通过使分组经过每个图形来根据接收到的图形检查到达的分组。高效的编译器需要足够的内存资源。如果编译器没有足够的资源,那么编译器性能很慢。因此,简单方法不在路由器上编译新的图样或特征,因为路由器通常没有足够的资源(即,随机存取存储器(RAM)和CPU计算)。
[0038]本发明的实施例在路由器上将新的图样/签名编译成图形,同时保持中央服务器编译器的性能水平。
[0039]图1是图示系统100的框图,该系统包括安全设备110、受保护的网络115和公共网络105。公共网络105可以包括不安全的广域网(WAN),诸如因特网、无线网络、局域网或者其他类型的网络。受保护的网络115可以包括安全的计算机网络,诸如办公室或数据中心的局域网。如所示,局域网可以是包括多个工作站125的企业网络120。多个工作站125可操作地耦合到数据库130、FTP (文件传输协议)服务器135和内联网服务器140。
[0040]在系统100中,安全设备110连接到公共网络105和受保护的网络115,使得从公共网络105流动到受保护网络115的网络业务首先流动到安全设备110。安全设备110可以是独立的网络设备(例如,路由器)、另一网络设备(例如,防火墙设备)的组件、在网络设备上执行的软件模块或其它配置。通常,安全设备检查来自公共网络105的网络业务,并且确定网络业务是否包括任何计算机安全威胁。计算机安全威胁是获取对敏感信息的访问的尝试、破坏组织的操作的尝试或其他类型的攻击。示例计算机安全威胁包括计算机病毒、间谍软件、流氓软件(rootkit)、猜测密码的尝试、钓鱼邮件、与拒绝服务添加相关联的请求以及其他类型的攻击。
[0041]计算机安全威胁可以与一个或多个符号图样相关联,该一个或多个符号图样识别计算机安全威胁,但不识别无害的数据。与计算机安全威胁相关联的符号图样在本文中被称为“威胁签名”。例如,特定的病毒可能总是包括指令序列中,当被执行时该指令序列执行恶意操作。
[0042]如果安全设备110确定了给定的网络业务流不包括任何计算机安全威胁,则安全设备Iio可以将网络业务流传递到受保护的网络115。否则,如果安全设备110确定了该流包括一个或多个计算机安全威胁,则安全设备110可以丢弃该网络业务、记录该网络业务、将该业务转发到业务分析器以用于进一步分析,和/或执行关于该网络业务的一些其他动作。以该方式,安全设备110可以防止包括计算机安全威胁的网络业务到达受保护的网络115。[0043]为了检测与一个或多个符号图样相关联的安全威胁,安全设备110从安全数据中心140接收在来自公共网络105的到达数据业务中要被监测的给定的图形或符号序列。一旦安全设备接收到要监测的给定图样,安全设备就针对要监测的每个给定的图样创建有限状态机。安全设备110使接收到的数据分组经过有限状态机,以确定到达的数据分组是否包括潜在的安全威胁。
[0044]图2是可以和本发明一起使用的示例性安全设备200的高层框图。安全设备包括经由存储器总线245耦合到处理器225的存储器210以及经由输入/输出(I/O)总线250耦合到处理器的存储设备230和网络接口 240。应当注意,安全设备可以包括其他设备,诸如键盘、显示单元等。网络接口 240将安全设备与安全网络115、公共网络105和安全数据中心140对接,并且使得数据(例如,分组)能够在安全设备和系统100中的其他节点之间进行传送。为此,网络接口 240包括常规电路,包含信号、电气和机械特征,以及交换电路,需要该交换电路以与系统100的物理介质和在该介质上运行的协议对接。
[0045]存储器210是实施为RAM的计算机可读介质,包括诸如DRAM设备和/或闪存设备的RAM设备。存储器210包含各种软件以及由处理器225使用的数据结构,包括实施本发明的各方面的数据结构。具体地,存储器210包括操作系统215和图样匹配/编译服务220。操作系统215在功能上通过调用支持软件处理的操作和在安全设备200上执行的服务来组织安全设备200,诸如图样匹配/编译服务220。如下面将要描述的,图样匹配/编译服务220包括计算机可执行指令,用于从给定图样编译有限状态机图形和/或使到达的数据分组经过编译的图形。
[0046]存储设备230是常规的存储设备(例如,磁盘或更可能的DRAM),其包括图样匹配数据库(DB) 235,该图样匹配数据库(DB) 235是配置成保持用于从给定图样编译有限状态机的各种信息的数据结构。信息可以包括签名图样、有限状态机图形(例如,DFA图形和NFA图形)、埃普西隆终止(EC)高速缓存表以及DFA状态哈希表。
[0047]通常,内容感知应用处理使用确定性有限自动机(DFA)或非确定性有限自动机(NFA)来识别在接收到的分组的内容中的图样。DFA和NFA都是有限状态机,即计算模型,计算模型中的每一个都包括状态集合、开始状态、输入字母(所有可能的符号集合)和转换函数。计算在启动状态中开始,并且根据转换函数而改变为新的状态。
[0048]图样通常使用正则表示式来表述,正则表示式包括基本元素,例如,诸如A-Z、0_9的正常文本字符以及诸如*、'和|的元字符。正则表示式的基本元素是要被匹配的符号(单个字符)。这些与允许级联(+)、替换(|)和克林星号(*)元字符组合。用于级联的元字符用于从单个字符(或子串)创建多个字符匹配模式,而用于替换(|)的元字符用于创建可以匹配两个或更多个子串中任何一个的正则表示式。元字符克林星号(*)允许图样匹配任何数目,包括不出现前面字符或字符串。结合不同的运算符和单个字符允许构建复杂的表示式。例如,表示式(th (is | at) *)将匹配以下字符串:th, this, that, thisis, thisat,thatis 或 thatato
[0049]字符类结构[...]允许列出要搜索的字符的列表,例如gr[ea]y查找grey和gray。破折号指示字符的范围,例如[A_Z]。元字符”匹配任何一个字符。
[0050]对DFA或NFA状态机的输入通常是(8位)字节的串,即,字母是单个字节(一个字符或符号)。输入流中的每个字节产生从一个状态到另一状态的转换。[0051]DFA或NFA状态机的状态和转换函数可以通过图来解释,其中图中的每个节点表示状态,并且图中的圆弧表示状态转换。状态机的当前状态由选择特定图形节点的节点识别符来表示。
[0052]使用DFA来处理正则表示式并且找到字符的输入流中由正则表示式描述的一个或多个图样的特征在于:
[0053]I)确定的运行时间性能:DFA的下一个状态可以从输入字符(或符号)以及DFA的当前状态来确定。换言之,每DFA状态仅存在一次状态转换。这样,DFA的运行时间性能被认为是确定的并且行为可以从输入完全预测。
[0054]2)支持跨多个分组匹配所需要的较小的每流上下文(例如,状态或节点指针):在搜索跨越构成流的若干分组的输入的图样中,搜索可能在一个分组处停止,并且然后在另一个分组处恢复。通常,确定要恢复搜索的状态需要跟踪、记住或以其他方式存储(例如,作为状态指针)直至搜索停止时所经历的所有状态。然而,在DFA中,为了恢复搜索,仅需要记录搜索停止时的状态。这样,可以说,DFA被特征化为需要较小的每流上下文,以支持跨多个输入分组的图样匹配,例如,以几字节的量级存储状态或节点指针。
[0055]3)节点的数目(或图形大小)随着图样的大小呈指数增长的图形。
[0056]相比之下,使用NFA来处理正则表示式并且找到由字符的输入流中的正则表示式描述的图样的特征在于:
[0057]I)非确定的运行时间性能:给定输入字符(或符号)和NFA的当前状态,可能存在要转换到的多于一个NFA的下一状态。换言之,NFA的下一状态不能从NFA的输入和当前状态来确定。这样,NFA的运行时间性能被认为是不确定的,并且行为不能完全从输入预测。
[0058]2)支持跨多个分组匹配所需要的较大的每流上下文(例如,状态或节点指针):如前所述,图样跨多个输入分组匹配,其中搜索在一个分组处停止,然后在另一分组处恢复,需要跟踪直至在分组停止时所经历的所有状态。在NFA中,越多输入被匹配,经历的状态和需要跟踪的状态的数目就越多。这样,可以说,与DFA相比,NFA被特征化为需要较大的每流上下文,以支持跨多个输入分组的图样匹配。
[0059]3)节点的数目(或图形大小)随着图样的大小呈线性增长的图形。
[0060]进一步参考附图3、4和5-G来讨论上述DFA和NFA的特征。应当注意,为简单起见,对于附图中所示的所有DFA图形,没有示出到节点(状态)0的弧(状态转换),并且也没有示出对于相同字符的到与由节点O指向的节点相同的节点的弧。
[0061]图3 不出了 用于搜索图样 “cavium.*networks”、“nitrox[~\r\n\t\v\s] {3}octeon” 和 “purevu.{5, 10} videochips” 的不例 NFA 的 NFA 图形 300。图 4 不出了用于搜索相同的图样集合的示例DFA的DFA图形400。如上所述,应当注意,DFA图形400和本文中所提供的其他DFA图形是出于绘制的目的而被“简化”的。在附图中没有示出表示到DFA状态O的状态转换的到节点O的弧。在附图中也没有示出对于相同字符的到与由节点O指向的节点相同的节点的弧。
[0062]对于相同的图样集合,图3的NFA图形300具有69个节点,表示69个状态,而图4的DFA图形400具有931个节点(在图4中仅示出了其中的一部分),表示931个状态。如示,对于给定的一个或多个图样,DFA状态的数目可以大于NFA状态的数目,通常多了几百或几千量级的状态的。这是“图形爆炸”的示例,这是DFA的标志性特征。[0063]为了进一步描述“图形爆炸”的概念,考虑分别示出了对于图样“.*a[~\n]”、“.*a[~\n] [\η] ”、“.*a[~\n] [\η] [\η] ” 的 NFA 图形的图 5Α、图 5Β 和图 5C,以及示出了对于相同图样的DFA图形的图5D、图5Ε和图5F。如图5A-5F中所示以及由图5G的表所总结的,对于一些图样,NFA可以线性增长,而DFA可以指数地增长而产生图形爆炸。
[0064]返回图3,使用图形300表不的NFA来搜索输入流“purevuchips arevideo chips”中的图样,NFA处理或匹配开始于NFA的开始状态0、2、19和36,由节点305a_d表示并且简写为NFA START STATES={0,2,19,36}。关于输入流的字符“p”,NFA转换到状态37 (由节点310表示)并且跟踪状态0、2和19 (简写为对“p” = {0,2,19,37}),并且继续如下:
[0065]对“U,,= {0,2,19,38}
[0066]对“r,,= {0,2,19,39}
[0067]对“e” = {0,2,19,40}
[0068]对‘V,={0,2,19,41}
[0069]对“U,,= {0,2,19,42}
[0070]对“C,,= {0,2,19,44}
[0071]对“h” = {0,2,19,45}
[0072]…
[0073]...等,
[0074]使用图4的DFA图形400表示的DFA来搜索在相同输入中的相同图样,DFA匹配开始于DFA开始状态0,由节点405表示并且简写为DFA START STATES= {O}。对于输入流的字符“P”,DFA转换到状态3,由节点410表示并且简写为对“P” = {3},并且继续如下:
[0075]对“U,,= {6}
[0076]对“r,,= {9}
[0077]对“e” = {12}
[0078]对‘V,={15}
[0079]对“U,,= {18}
[0080]对“c” = {27}
[0081]对“h” = {41}
[0082]…
[0083]...等。
[0084]如在上面的示例中所示,在NFA中,存在至少n+1个数目的NFA状态要跟踪,其中η是要搜索的图样的数目(例如,在要搜索3个图样的情况下,存在至少4个要跟踪的状态)。与此相反,在DFA中,每个输入字符仅存在一个状态要跟踪。为了说明的目的,现在假定输入流(stream)或流(flow) “purevuchips are video chips”跨越多个分组,其中第一分组以“purevuchips”的“h”结束,并且第二分组以“purevuchips”的“i”开始。在NFA中,搜索在“h”(第一分组的结束)停止,具有四种状态要跟踪(即,状态0,2,19和45)。为了在“i”恢复搜索(第二分组的开始),需要记住这四个状态。相反,在DFA中,搜索在“h”(第一分组的结束)停止,具有一个状态被跟踪(即,状态41)。为了在“i”恢复搜索(第二分组的开始),需要记住这一个状态。该示例示出,在NFA中,支持跨多个分组的匹配需要的的每流上下文是四个状态(例如,通过存储四个状态指针),而在DFA中,每流上下文是一个状态。因此,NFA需要的每流上下文比相同图样的DFA所需要的每流上下文更大。类似地,DFA需要的每流上下文比相同图样的NFA所需要的每流上下文更小。
[0085]对于每个非确定性有限自动机,存在等效的确定性有限自动机。这两者之间的等效以语言接受来定义。因为NFA是有限自动机,其中,对于输入符号允许O、I或多次转换,所以等效的DFA可以被构造为模拟关于特定输入符号的并行的NFA的所有移动。
[0086]由于NFA的DFA等效模拟(并行)NFA的移动,DFA的每个状态是NFA的一个或多个状态的组合。因此,DFA的每个状态将由NFA的状态集合的某个子集来表示;并且因此,从NFA到DFA的转换通常被称为“构建”子集。因此,如果给定的NFA具有η个状态,则等效的DFA可以具有2η数目的状态,其中初始状态对应于子集{qd。因此,从NFA到DFA的转换涉及找到NFA的状态集合的所有可能的子集,考虑每个子集是DFA的状态,并且然后找到对于每个输入符号从该状态的转换。
[0087]如上所述,由于NFA的多个可能的转换,由计算机系统对NFA图形进行处理是困难的,因此NFA到DFA的转换发生。
[0088]图6A-B是用于将NFA图形转换为DFA图形的方法600的流程图。该方法600开始于605。在该阶段,DFA状态集合“Sd”为空。在610,DFA的开始状态被确定并添加到DFA状态集合“Sd”作为未标记的状态。DFA的开始状态被确定为NFA图形的开始状态的埃普西隆终止。以下参考图7来进一步描述确定NFA状态集合的埃普西隆终止的方法。
[0089]在615,确定DFA状态集合“Sd”是否包括未标记的DFA状态。如果该DFA状态集合“Sd”的未标记的DFA状态存在,则在620,未标记的状态” S”被选择并标记。在625,由NFA图形所识别的语言“A”的字母(例如,文字)被选择。在步骤630,DFA状态“S”的NFA状态“s”被选择。此外,步骤630之前,用于保持NFA状态集合的数据结构“St”被设置为“空”。在635,转换函数“TTn= (s,a)”被使用字母“a”应用于NFA状态“S”。如果接收到“a”的输入,转换函数确定从NFA状态“s”到达的所有NFA状态。然后,确定的NFA的状态被添加到该数据结构“St”。在644,确定DFA状态“s”是否包括其他的NFA状态。如果是,则该方法重复步骤630和635,直到DFA状态“s”的所有NFA状态“s”已经被处理。如果已经处理了所有的NFA状态,则该方法在步骤640继续。在640,在数据结构“St”中的所有NFA状态“s”的埃普西隆终止被确定并且被添加到数据结构“St”。
[0090]在步骤645,将数据结构“St”与所有现有的DFA状态“s”作比较,以确定DFA状态“S”是否已经包括数据结构“St”中的所有NFA状态“S”。当前的方法存储与数据结构中的每个DFA状态“S”相关联的每个NFA状态“S”。为了确定数据结构“St”中的NFA状态是否已经与DFA状态“S”相关联,数据结构“St”的“每个NFA状态“s”必须与每个DFA状态“S”每个NFA状态“s”作比较。因此,这样的比较需要大量的时间和内存。
[0091]以下表1说明了将DFA状态数与NFA状态集合相关联的示例DFA状态表。NFA状态集合可以针对每个DFA状态数被存储在数据结构中,如上所述。
[0092]表1
[0093]
【权利要求】
1.一种方法,包括: 在耦合到网络的安全设备的处理器中: 将用于给定的图样集合的非确定性有限自动机(NFA)图形转换成具有多个状态的确定性有限自动机(DFA)图形,转换所述NFA图形包括: 将多个DFA状态中的每一个状态映射到所述NFA图形的一个或多个状态; 计算映射到每个DFA状态的所述NFA图形的所述一个或多个状态的哈希值; 存储DFA状态表,所述DFA状态表将所述多个DFA状态中的每一个状态与用于所述给定的图样的所述NFA图形的所述一个或多个状态的所述哈希值相关。
2.根据权利要求1所述的方法,其中,所计算的哈希值是加密/完美哈希值。
3.根据权利要求1所述的方法,其中,映射包括: 确定在所述多个DFA状态内是否存在未标记DFA状态; 选择所述未标记DFA状态中的一个; 标记所述未标记DFA状态;以及 针对由所述NFA图形所识别的字母的字符,确定映射到标记的DFA状态的所述NFA图形的所述一个或多个状态到其他NFA状态的转换。
4.根据权利要求3所述的方法,其中,确定转换包括:将所述其他NFA状态和所述其他NFA状态的埃普西隆终止映射到可能的新的未标记DFA状态。
5.根据权利要求4所述的方法,其中,将可能的新的未标记DFA状态映射到所述其他NFA状态的埃普西隆终止包括:从埃普西隆高速缓存获得所述其他NFA状态的所述埃普西隆终止,并且如果在所述埃普西隆高速缓存内不存在所述其他NFA状态的所述埃普西隆终止,则计算所述其他NFA状态的所述埃普西隆终止。
6.根据权利要求5所述的方法,进一步包括:如果映射到所述可能的新的未标记DFA状态的所述其他NFA状态和所述其他NFA状态的所述埃普西隆终止没有被映射到所述多个DFA状态的现有DFA状态,则将所述可能的新的未标记DFA状态添加到所述多个DFA状态,并且将所述可能的新的未标记DFA状态存储在所述DFA状态表中。
7.根据权利要求6所述的方法,其中,添加所述可能的新的未标记DFA状态包括: 将映射到所述可能的新的未标记DFA状态的所述其他NFA状态的所述埃普西隆终止的哈希值与映射到所述多个DFA状态中的每一个状态的NFA状态的哈希值作比较。
8.根据权利要求6所述的方法,其中,将所述可能的新的未标记DFA状态添加到所述多个DFA状态进一步包括:确定映射到所述可能的新的未标记状态的所述其他NFA状态的所述埃普西隆终止是否属于最终接受NFA状态,并且如果是,则将可能的未标记状态添加为最终接受DFA状态。
9.根据权利要求6所述的方法,进一步包括:将所述可能的新的未标记状态添加为针对由所述NFA图形所识别的所述字母的所述字符、从标记的DFA状态的转换。
10.根据权利要求4所述的方法,进一步包括:用计算的所述其他NFA状态和所述其他NFA状态的埃普西隆终止的哈希值到所述可能的新的未标记DFA状态的映射来替换所述其他NFA状态和所述其他NFA状态的所述埃普西隆终止到所述可能的新的未标记DFA状态的映射。
11.根据权利要求10所述的方法,其中,替换包括删除所述其他NFA状态和所述其他NFA状态的所述埃普西隆终止。
12.根据权利要求3所述的方法,进一步包括:从所述DFA状态表中删除所述NFA图形的一个或多个状态的所述转换。
13.根据权利要求1所述的方法,其中,映射包括: 确定DFA开始状态;以及 将DFA开始状态作为未标记状态添加到包括所述多个DFA状态的数据结构。
14.根据权利要求13所述的方法,其中,确定DFA开始状态包括: 确定NFA开始状态的埃普西隆终止; 计算所述NFA开始状态的所述埃普西隆终止的哈希值;以及 将所述DFA开始状态映射到所述NFA开始状态的所述埃普西隆终止的所述哈希值。
15.根据权利要求13所述的方法,其中,映射包括: 确定在所述多个DFA状态内是否存在未标记DFA状态; 选择所述未标记DFA状态中的一个未标记DFA状态; 标记所述未标记DFA状态;以及` 针对由所述NFA图形所识别的字母的字符,确定映射到标记的DFA状态的所述NFA图形的一个或多个状态到其他NFA状态的转换。
16.根据权利要求15所述的方法,其中,确定转换包括: 针对由所述NFA图形所识别的所述字母的所述字符、确定从所述标记的DFA状态的转换DFA状态。
17.根据权利要求16所述的方法,其中,确定所述转换DFA状态包括: 计算所述NFA图形的所述一个或多个状态的所述转换的哈希值;以及 将计算的哈希值与埃普西隆终止(EC)高速缓存表中的哈希值条目作比较,所述EC高速缓存表将哈希值映射到DFA状态。
18.根据权利要求17所述的方法,进一步包括: 确定计算的哈希值是否匹配所述EC高速缓存表中的所述哈希值条目中的一个哈希值条目;以及 如果匹配存在,则将映射到匹配哈希值的所述DFA状态设置为针对由所述NFA图形所识别的所述字母的所述字符的转换DFA状态。
19.根据权利要求18所述的方法,进一步包括: 如果不存在匹配,则计算所述NFA图形的所述一个或多个状态的所述转换的埃普西隆终止; 计算所述埃普西隆终止的哈希值; 将新的条目添加到所述EC高速缓存表中,所述新的条目将新的DFA状态映射到所述埃普西隆终止的所述哈希值;以及 将所述新的DFA状态设置为针对由所述NFA图形所识别的所述字母的所述字符的所述转换DFA状态。
20.根据权利要求19所述的方法,进一步包括: 从所述DFA状态表中删除与所述标记的DFA状态相对应的所述NFA图形的所述一个或多个状态的所述转换。
21.一种用于确定NFA状态集合的埃普西隆终止的方法,所述方法包括: 在耦合到网络的安全设备的处理器中: 接收NFA状态集合,所述NFA状态集合是针对由NFA图形所识别的字母的字符的转换状态;以及 确定所接收的NFA状态集合是否与埃普西隆终止(EC)高速缓存表中的NFA状态集合匹配,所述EC高速缓存表将NFA状态集合的埃普西隆终止与所述NFA状态集合的哈希值进行映射。
22.根据权利要求21所述的方法,其中,确定进一步包括: 计算所接收的NFA状态集合的哈希值;以及 将所述哈希值与所述EC高速缓存表的哈希值条目进行匹配。
23.根据权利要求22所述的方法,进一步包括: 如果存在匹配,则将映射到所述EC高速缓存表中的匹配的哈希值的所述NFA状态集合设置为所接收的NFA状态集合的所述埃普西隆终止。
24.根据权利要求23所述的方法,进一步包括: 如果不存在匹配,则计算所接收的NFA状态集合的埃普西隆终止; 将新的 条目添加到所述EC高速缓存表,所述新的条目将所接收的NFA状态集合的所述哈希值映射到所接收的NFA状态集合的所述埃普西隆终止。
25.根据权利要求24所述的方法,其中,添加条目包括: 确定是否存在用于添加新的条目的足够的内存; 如果没有足够的内存,则根据替代策略来添加所述新的条目。
26.根据权利要求25所述的方法,其中,所述替代策略通过删除所述EC高速缓存表的最近最少使用的条目来添加所述新的条目。
27.一种用于确定NFA状态集合的埃普西隆终止的方法,所述方法包括: 在耦合到网络的安全设备的处理器中: 接收NFA状态集合,所述NFA状态集合是针对由NFA图形所识别的字母的字符的转换状态;以及 确定所接收的NFA状态集合是否与埃普西隆终止(EC)高速缓存表中的NFA状态集合匹配,所述EC高速缓存表将关联于NFA状态集合的埃普西隆终止的哈希值映射到DFA状态。
28.根据权利要求27所述的方法,其中,确定进一步包括: 计算所接收的NFA状态集合的哈希值;以及 将所述哈希值与所述EC高速缓存表的哈希值条目匹配。
29.根据权利要求27所述的方法,进一步包括: 如果匹配存在,则将与匹配哈希值条目相关联的所述DFA状态设置为关于由NFA图形所识别的字母的输入字符的、从当前DFA状态的转换DFA状态。
30.根据权利要求29所述的方法,进一步包括: 如果匹配不存在,则计算所接收的NFA状态集合的埃普西隆终止; 计算所接收的NFA状态集合的所述埃普西隆终止的哈希值; 将新的条目添加到所述EC高速缓存表,所述新的条目将所接收的NFA状态集合的所述哈希值映射到新的DFA状态;以及将所述新的DFA状态设置为关于由所述NFA图形所识别的所述字母的所述输入字符的、从当前DFA状态的所述转换DFA状态。
31.根据权利要求30所述的方法,其中,添加条目包括: 确定是否存在用于添加新的条目的足够的内存; 如果没有足够的内存,则根据替代策略来添加新的条目。
32.根据权利要求31所述的方法,其中,所述替代策略通过删除所述EC高速缓存表的最近最少使用的条目来添加所述新的条目。
33.根据权利要求1所述的方法,进一步包括: 确定与由NFA图形和DFA图形所识别的字母相关联的给定图样的有效字符;以及创建所述NFA图形和所述DFA图形,以识别图样,所述图样仅由与所述NFA图形和所述DFA图形所识别的所述字母相关联的所述给定图形的有效字符组成。
34.一种耦合到网络的安全设备,所述安全设备包括: 处理器,所述处理器被配置成将用于给定的图样集合的非确定性有限自动机(NFA)图形转换成具有多个状态的确定性有限自动机(DFA)图形;以及编译器,所述编译器被配置成: 将多个DFA状态中的每一个映射到所述NFA图形的一个或多个状态; 计算映射到每个DFA状态的所述NFA图形的所述一个或多个状态的哈希值; 在数据存储库中存储DFA状态表,所述DFA状态表将所述多个DFA状态中的每一个与用于给定图样的所述NFA图形的所述一个或多个状态的所述哈希值相关。
35.根据权利要求34所述的安全设备,其中,所计算的哈希值是加密/完美哈希值。
36.根据权利要求34所述的安全设备,其中,所述编译器进一步被配置成: 确定在所述多个DFA状态内是否存在未标记DFA状态; 选择所述未标记DFA状态中的一个未标记DFA状态; 标记所述未标记DFA状态;以及 确定映射到标记DFA状态的所述NFA图形的所述一个或多个状态到由所述NFA图形所识别的字母的字符的其他NFA状态的转换。
37.根据权利要求36所述的安全设备,其中,所述编译器进一步被配置成:通过将所述其他NFA状态和所述其他NFA状态的埃普西隆终止映射到可能的新的未标记DFA状态来确定转换。
38.根据权利要求37所述的安全设备,其中,所述编译器被配置成,通过下述操作将所述可能的新的 未标记DFA状态映射到所述其他NFA状态的埃普西隆终止:从埃普西隆高速缓存获得所述其他NFA状态的所述埃普西隆终止,并且如果在所述埃普西隆高速缓存内不存在所述其他NFA状态的所述埃普西隆终止,则所述编译器被配置成计算所述其他NFA状态的埃普西隆终止。
39.根据权利要求38所述的安全设备,其中,所述编译器进一步被配置成,如果映射到所述可能的新的未标记DFA状态的所述其他NFA状态和所述其他NFA状态的埃普西隆终止没有映射到所述多个DFA状态的现有DFA状态,则将所述可能的新的未标记DFA状态添加到所述多个DFA状态,并且将所述可能的新的未标记DFA状态存储在所述DFA状态表中。
40.根据权利要求39所述的安全设备,其中,所述编译器被配置成,通过将映射到所述可能的新的未标记DFA状态的所述其他NFA状态的所述埃普西隆终止的哈希值与映射到所述多个DFA状态中的每一个DFA状态的NFA状态的哈希值进行比较来添加所述可能的新的未标记DFA状态。
41.根据权利要求39所述的安全设备,其中,所述编译器被配置成,通过下述操作将所述可能的未标记DFA状态添加到所述多个DFA状态:确定映射到可能的新的未标记状态的所述其他NFA状态的所述埃普西隆终止是否属于最终接受NFA状态,并且如果是,则所述编译器被进一步配置成将可能的未标记状态添加为最终接受DFA状态。
42.根据权利要求39所述的安全设备,其中,所述编译器被进一步配置成,将可能的新的未标记状态添加为针对由所述NFA图形所识别的所述字母的所述字符的、从标记的DFA状态的转换。
43.根据权利要求37所述的安全设备,其中,所述编译器被进一步配置成,用计算的所述其他NFA状态和所述其他NFA状态的埃普西隆终止的哈希值到所述可能的新的未标记的DFA状态的映射来替换所述其他NFA状态和所述其他NFA状态的埃普西隆终止到所述可能的新的未标记的DFA状态的映射。
44.根据权利要求43所述的安全设备,其中,所述编译器被配置成删除所述其他NFA状态和所述其他NFA状态的所述埃普西隆终止。
45.根据权利要求36所述的安全设备,其中,所述编译器被进一步配置成,从所述DFA状态表中删除所述NFA图形的所述一个或多个状态的所述转换。
46.根据权利要求34所述的安全设备,其中,所述编译器被配置成,通过确定DFA开始状态并且将所述DFA开始状态作为未标记状态添加到包括所述多个DFA状态的数据结构来将所述多个DFA状态中的每一个DFA状态映射到所述NFA图形中的一个或多个状态。
47.根据权利要求46所述的安全设备,其中,所述编译器进一步被配置成: 确定NFA开始状态的埃普西隆终止; 计算所述NFA开始状态的所述埃普西隆终止的哈希值;以及 将所述DFA开始状态映射到所述NFA开始状态的所述埃普西隆终止的所述哈希值。
48.根据权利要求46所述的安全设备,其中,所述编译器进一步被配置成: 确定在所述多个DFA状态内是否存在未标记DFA状态; 选择所述未标记DFA状态中的一个未标记DFA状态; 标记所述未标记DFA状态;以及 确定映射到所标记的DFA状态的所述NFA图形的所述一个或多个状态到针对由所述NFA图形所识别的字母的字符的其他NFA状态的转换。
49.根据权利要求48所述的安全设备,其中,所述编译器被配置成通过确定针对由所述NFA图形所识别的所述字母的所述字符的、从所述标记的DFA状态的转换DFA状态来确定转换。
50.根据权利要求49所述的安全设备,其中,所述编译器进一步被配置成: 计算所述NFA图形的所述一个或多个状态的所述转换的哈希值;以及 将所计算的哈希值与埃普西隆终止(EC)高速缓存表中的哈希值条目作比较,所述EC高速缓存表将哈希值映射到DFA状态。
51.根据权利要求50所述的安全设备,其中,所述编译器进一步被配置成:确定计算的哈希值是否匹配所述EC高速缓存表中的所述哈希值条目中的一个;以及如果匹配存在,则将映射到匹配的哈希值的所述DFA状态设置为针对由所述NFA图形所识别的所述字母的所述字符的转换DFA状态。
52.根据权利要求51所述的安全设备,其中,所述编译器进一步被配置成: 如果不存在匹配,则计算所述NFA图形的所述一个或多个状态的所述转换的埃普西隆终止; 计算所述埃普西隆终止的哈希值; 将新的条目添加到所述EC高速缓存表中,所述新的条目将新的DFA状态映射到所述埃普西隆终止的所述哈希值;以及 将所述新的DFA状态设置为针对由所述NFA图形所识别的所述字母的所述字符的所述转换DFA状态。
53.根据权利要求52所述的安全设备,其中,所述编译器进一步被配置成: 从DFA状态表中删除与所述标记的DFA状态相对应的所述NFA图形的所述一个或多个状态的所述转换。
54.一种用于确定NFA状态集合的埃普西隆终止的安全设备,所述安全设备包括: 编译器,所述编译器被配置成: 接收NFA状态集合,所述NFA状态集合是由NFA图形所识别的字母的字符的转换状态;以及 确定所接收的NFA状态集合是否与埃普西隆终止(EC)高速缓存表中的NFA状态集合匹配,所述EC高速缓存表将NFA状态集合的埃普西隆终止与所述NFA状态集合的哈希值进行映射。
55.根据权利要求54所述的安全设备,其中,所述编译器进一步被配置成: 计算所接收的NFA状态集合的哈希值;以及 将所述哈希值与所述EC高速缓存表的哈希值条目进行匹配。
56.根据权利要求55所述的安全设备,其中,所述编译器进一步被配置成: 如果存在匹配,则将映射到所述EC高速缓存表中匹配的哈希值的所述NFA状态集合设置为所接收的NFA状态集合的所述埃普西隆终止。
57.根据权利要求56所述的安全设备,其中,所述编译器进一步被配置成: 如果不存在匹配,则计算所接收的NFA状态集合的埃普西隆终止; 将新的条目添加到所述EC高速缓存表,所述新的条目将所接收的NFA状态集合的所述哈希值映射到所接收的NFA状态集合的所述埃普西隆终止。
58.根据权利要求57所述的安全设备,其中,所述编译器进一步被配置成: 确定是否存在用于添加新的条目的足够的内存; 如果没有足够的内存,则根据替代策略来添加所述新的条目。
59.根据权利要求58所述的安全设备,其中,所述替代策略通过删除所述EC高速缓存表的最近最少使用的条目来添加所述新的条目。
60.一种用于 确定NFA状态集合的埃普西隆终止的安全设备,所述安全设备包括: 编译器,所述编译器被配置成: 接收NFA状态集合,所述NFA状态集合是由NFA图形所识别的字母的字符的转换状态;以及 确定所接收的NFA状态集合是否与埃普西隆终止(EC )高速缓存表中的NFA状态集合匹配,所述EC高速缓存表将关联于NFA状态集合的埃普西隆终止的哈希值映射到DFA状态。
61.根据权利要求60所述的安全设备,其中,所述编译器进一步被配置成: 计算所接收的NFA状态集合的哈希值;以及 将所述哈希值与所述EC高速缓存表的哈希值条目进行匹配。
62.根据权利要求61所述的安全设备,其中,所述编译器进一步被配置成: 如果匹配存在,则将与匹配哈希值条目相关联的所述DFA状态设置为关于由NFA图形所识别的字母的输入字符的、从当前DFA状态的转换DFA状态。
63.根据权利要求62所述的安全设备,其中,所述编译器进一步被配置成: 如果匹配不存在,则计算所接收的NFA状态集合的埃普西隆终止; 计算所接收的NFA状态集合的所述埃普西隆终止的哈希值; 将新的条目添加到所述EC高速缓存表,所述新的条目将所接收的NFA状态集合的所述哈希值映射到新的DFA状态;以及 将所述新的DFA状态设置 为关于由所述NFA图形所识别的所述字母的所述输入字符的、从当前DFA状态的转换DFA状态。
64.根据权利要求63所述的安全设备,其中,所述编译器进一步被配置成: 确定是否存在用于添加新的条目的足够的内存; 如果没有足够的内存,则根据替代策略来添加所述新的条目。
65.根据权利要求64所述的安全设备,其中,所述替代策略通过删除所述EC高速缓存表的最近最少使用的条目来添加所述新的条目。
66.根据权利要求34所述的安全设备,其中,所述编译器进一步被配置成: 确定与由所述NFA图形和DFA图形所识别的字母相关联的给定图样的有效字符;以及 创建所述NFA图形和DFA图形,以识别图样,所述图样仅由与所述NFA图形和DFA图形所识别的所述字母相关联的给定图样的有效字符组成。
【文档编号】H04L29/06GK103733590SQ201280038799
【公开日】2014年4月16日 申请日期:2012年6月20日 优先权日:2011年6月24日
【发明者】R·戈亚尔, S·L·比拉, K·A·布里斯 申请人:凯为公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1