欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于正則表達(dá)式的編譯器的制造方法

文檔序號:7991460閱讀:297來源:國知局
用于正則表達(dá)式的編譯器的制造方法
【專利摘要】一種方法和相應(yīng)的裝置涉及將用于給定的圖樣集合的非確定性有限自動機(NFA)圖轉(zhuǎn)換成具有多個狀態(tài)的確定性有限自動機(DFA)圖形。DFA狀態(tài)中的每一個被映射成NFA圖形的一個或多個狀態(tài)。計算映射到每個DFA狀態(tài)的NFA的圖形的一個或多個狀態(tài)的哈希值。對于給定圖樣,DFA狀態(tài)表將多個DFA狀態(tài)中的每一個與NFA圖形的一個或多個狀態(tài)的哈希值相關(guān)。
【專利說明】用于正則表達(dá)式的編譯器
[0001]相關(guān)申請
[0002]本申請是2011年6月24日提交的美國申請N0.13/168,450的繼續(xù)并且要求其優(yōu)先權(quán)。上述申請的全部教導(dǎo)通過引用合并于此。
【背景技術(shù)】
[0003]開放系統(tǒng)互連(OSI)參考模型定義了用于通過傳輸介質(zhì)進(jìn)行通信的7個網(wǎng)絡(luò)協(xié)議層(L1-L7)。上層(L4-L7)表示端對端通信并且下層(L1-L3)表示本地通信。
[0004]聯(lián)網(wǎng)應(yīng)用感知系統(tǒng)需要處理、濾波和切換L3到L7網(wǎng)絡(luò)協(xié)議層的范圍,例如,L7網(wǎng)絡(luò)協(xié)議層諸如超文本傳輸協(xié)議(HTTP)和簡單郵件傳輸協(xié)議(SMTP),以及L4網(wǎng)絡(luò)協(xié)議層諸如傳輸控制協(xié)議(TCP)。除了處理網(wǎng)絡(luò)協(xié)議層,聯(lián)網(wǎng)應(yīng)用感知系統(tǒng)需要通過L4-L7網(wǎng)絡(luò)協(xié)議層來同時確保這些協(xié)議對基于訪問和內(nèi)容的安全性,包括防火墻、虛擬專用網(wǎng)(VPN)、安全套接字層(SSL)、入侵檢測系統(tǒng)(TDS)、因特網(wǎng)協(xié)議安全(IPSec)、線速度的防病毒(AV)和防垃圾郵件功能。
[0005]網(wǎng)絡(luò)處理器可用于高吞吐量L2和L3網(wǎng)絡(luò)協(xié)議處理,即執(zhí)行分組處理以線速度轉(zhuǎn)發(fā)分組。通常,通用處理器用于處理需要更多智能處理的L4-L7網(wǎng)絡(luò)協(xié)議。雖然通用處理器可以執(zhí)行計算密集型任務(wù),但是沒有足夠用于處理數(shù)據(jù)使得其能夠被以線速轉(zhuǎn)發(fā)的性能。
[0006]內(nèi)容感知聯(lián)網(wǎng)需要以“線速度”的對分組內(nèi)容的檢查。可以對內(nèi)容進(jìn)行分析,以確定是否存在安全漏洞或入侵。應(yīng)用大量正則表示式形式的圖樣和規(guī)則以確保所有的安全漏洞或入侵被檢測到。正則表示式是用于描述字符串的圖樣的緊湊型方法。由正則表示式所匹配的最簡單圖樣是單個字符或字符串,例如,/c/或/cat/。正則表示式還包括具有特殊含義的運算符和元字符。
[0007]通過使用元字符,正則表示式可以用于更復(fù)雜的搜索,諸如“abc.*Xyz”。也就是說,在不限制“abc”和“xyz”之間的字符數(shù)目的情況下,找到字符串“abc”,之后是字符串“xyz”。另一示例是正則表示式“abc..abc.*xyz ; ”,也就是找到字符串“abc”,后面兩個字符,然后是“abc”并且在不限制個數(shù)的字符后由串“xyz”跟隨。
[0008]入侵檢測系統(tǒng)(IDS)應(yīng)用檢查所有流過網(wǎng)絡(luò)的獨立分組的內(nèi)容,并且識別可能指示嘗試闖入或威脅系統(tǒng)的可疑圖樣??梢蓤D樣的一個示例可以是分組中的特定文本串,該特定文本串在100個字符以后跟隨另一特定文本串。
[0009]通常使用搜索算法來執(zhí)行內(nèi)容搜索以處理正則表示式,搜索算法諸如確定性有限自動機(DFA)或者非確定性有限自動機(NFA)。

【發(fā)明內(nèi)容】

[0010]一種方法和相應(yīng)的裝置,涉及將用于給定的圖樣集合的非確定性有限自動機(NFA)圖形轉(zhuǎn)換成具有多個狀態(tài)的確定性有限自動機(DFA)圖形。DFA狀態(tài)中的每一個被映射成NFA圖形的一個或多個狀態(tài)。計算映射成每個DFA狀態(tài)的NFA圖形的一個或多個狀態(tài)的哈希值。對于給定圖樣,DFA狀態(tài)表將多個DFA狀態(tài)中的每一個與NFA圖形的一個或多個狀態(tài)的哈希值相關(guān)。
[0011]可以確定與由NFA圖形和DFA圖形所識別的字母相關(guān)聯(lián)的給定圖樣的有效字符?;谠摯_定,該方法壓縮NFA圖形和DFA圖形以識別圖樣,該圖樣僅由與NFA圖形和DFA圖形所識別的字母相關(guān)聯(lián)的給定圖樣的有效字符組成。
【專利附圖】

【附圖說明】
[0012]從如在附圖中所示的本發(fā)明的示例性實施例的以下更具體的描述中,前述內(nèi)容將顯而易見,在附圖中相同的附圖標(biāo)記指代所有不同視圖中的相同部件。附圖不一定按比例,而是著重于圖示本發(fā)明的實施例。
[0013]圖1是圖示系統(tǒng)的框圖,在該系統(tǒng)中操作安全設(shè)備以保護(hù)專用網(wǎng)絡(luò)。
[0014]圖2是可以由本發(fā)明使用的安全設(shè)備的框圖。
[0015]圖3是示例NFA的NFA圖形。
[0016]圖4是示例DFA的DFA圖形。
[0017]圖5A-G是圖示圖形爆炸的原理的NFA和DFA圖形和表。
[0018]圖6A-B是將NFA圖形轉(zhuǎn)換成DFA圖形的方法的流程圖。
[0019]圖7是用于確定NFA圖形中的狀態(tài)的埃普西隆終止的方法的流程圖。
[0020]圖8A-C是用于將NFA圖形轉(zhuǎn)換成DFA圖形的方法的流程圖。
[0021]圖9是用于確定NFA圖形中的狀態(tài)的埃普西隆終止的方法的流程圖。
[0022]圖9A-9B是用于將NFA圖形轉(zhuǎn)換成DFA圖形的方法的流程圖。
[0023]圖9C是用于確定用于一組NFA狀態(tài)的埃普西隆終止的流程圖。
[0024]圖10圖示了用于使用Aho-Corasik算法來搜索例如圖樣“她的”、“他的”和“她”的圖樣匹配機制。
[0025]圖1lA圖示了圖樣匹配機制的每個狀態(tài)的故障值。
[0026]圖1lB圖示了圖樣匹配機制的狀態(tài)的輸出函數(shù)值。
[0027]圖12圖示了例如錨定的圖樣“幫助”和“貝殼”的狀態(tài)樹。
[0028]圖12A圖示了圖12的狀態(tài)樹的每個狀態(tài)的故障值。
[0029]圖12B圖示了圖12的狀態(tài)樹的狀態(tài)14和19的輸出函數(shù)值。
[0030]圖13A圖示了圖12中的狀態(tài)樹的每個狀態(tài)的故障值。
[0031]圖13B圖示了圖12的狀態(tài)樹的狀態(tài)12、14、17和19的輸出函數(shù)值。
【具體實施方式】
[0032]在詳細(xì)描述本發(fā)明的示例性實施例之前,以下馬上描述其中可以實現(xiàn)實施例的示例安全應(yīng)用以及使用DFA和NFA的典型處理,以有助于讀者理解本發(fā)明的發(fā)明特征。
[0033]正則表示式(Regex)處理在許多分組處理系統(tǒng)中變得普遍。Regex處理可以應(yīng)用于傳統(tǒng)的安全系統(tǒng)(例如,入侵防止系統(tǒng)(IPS)、防火墻和統(tǒng)一威脅管理(UTM)設(shè)備)、較新的安全系統(tǒng)(例如,防惡意軟件、反間諜軟件、零日附加檢測)、在有線/無線網(wǎng)絡(luò)中用于計費,服務(wù)質(zhì)量(QoS)和網(wǎng)絡(luò)監(jiān)控系統(tǒng)的新興的協(xié)議/應(yīng)用識別系統(tǒng)。
[0034]正則表示式處理可以被細(xì)分為兩個階段i)將簽名/圖樣編譯成二進(jìn)制數(shù)據(jù)結(jié)構(gòu),諸如DFA圖形或NFA圖形,以及ii)根據(jù)編譯的圖形處理接收到的分組。[0035]存儲與性能的折衷要求在正則表示式處理的兩個階段均發(fā)生。分配有大的運行時間內(nèi)存占用的編譯器能夠以較高的速度和效率來編譯圖樣。類似地,相對于緊湊圖,用于分組檢查的較大的圖或等效二進(jìn)制數(shù)據(jù)結(jié)構(gòu)可以給出更好的分組檢查性能。
[0036]而在實踐中,期望編譯器以盡可能少的內(nèi)存占用來非??焖俚鼐幾g規(guī)則。一個原因是,在網(wǎng)絡(luò)設(shè)備仍然在運行(例如檢查/轉(zhuǎn)發(fā)分組)時在網(wǎng)絡(luò)設(shè)備(例如,路由器、交換機、UTM等)的字段中更新圖樣。因此,需要使用在嵌入的路由器設(shè)備中的有限內(nèi)存來編譯規(guī)則。因為規(guī)則/圖樣用于防止對系統(tǒng)的攻擊或停止被病毒感染的業(yè)務(wù),所以需要盡可能早地應(yīng)用規(guī)則/圖樣以便于優(yōu)化系統(tǒng)的安全性。因此,編譯器應(yīng)當(dāng)能夠非??斓貙⒁?guī)則編譯成二進(jìn)制數(shù)據(jù)結(jié)構(gòu)。
[0037]—般的方法在中央服務(wù)器上將新的圖樣或簽名編譯成圖形,該中央服務(wù)器然后向路由器傳送編譯了的圖形。然后,路由器通過使分組經(jīng)過每個圖形來根據(jù)接收到的圖形檢查到達(dá)的分組。高效的編譯器需要足夠的內(nèi)存資源。如果編譯器沒有足夠的資源,那么編譯器性能很慢。因此,簡單方法不在路由器上編譯新的圖樣或特征,因為路由器通常沒有足夠的資源(即,隨機存取存儲器(RAM)和CPU計算)。
[0038]本發(fā)明的實施例在路由器上將新的圖樣/簽名編譯成圖形,同時保持中央服務(wù)器編譯器的性能水平。
[0039]圖1是圖示系統(tǒng)100的框圖,該系統(tǒng)包括安全設(shè)備110、受保護(hù)的網(wǎng)絡(luò)115和公共網(wǎng)絡(luò)105。公共網(wǎng)絡(luò)105可以包括不安全的廣域網(wǎng)(WAN),諸如因特網(wǎng)、無線網(wǎng)絡(luò)、局域網(wǎng)或者其他類型的網(wǎng)絡(luò)。受保護(hù)的網(wǎng)絡(luò)115可以包括安全的計算機網(wǎng)絡(luò),諸如辦公室或數(shù)據(jù)中心的局域網(wǎng)。如所示,局域網(wǎng)可以是包括多個工作站125的企業(yè)網(wǎng)絡(luò)120。多個工作站125可操作地耦合到數(shù)據(jù)庫130、FTP (文件傳輸協(xié)議)服務(wù)器135和內(nèi)聯(lián)網(wǎng)服務(wù)器140。
[0040]在系統(tǒng)100中,安全設(shè)備110連接到公共網(wǎng)絡(luò)105和受保護(hù)的網(wǎng)絡(luò)115,使得從公共網(wǎng)絡(luò)105流動到受保護(hù)網(wǎng)絡(luò)115的網(wǎng)絡(luò)業(yè)務(wù)首先流動到安全設(shè)備110。安全設(shè)備110可以是獨立的網(wǎng)絡(luò)設(shè)備(例如,路由器)、另一網(wǎng)絡(luò)設(shè)備(例如,防火墻設(shè)備)的組件、在網(wǎng)絡(luò)設(shè)備上執(zhí)行的軟件模塊或其它配置。通常,安全設(shè)備檢查來自公共網(wǎng)絡(luò)105的網(wǎng)絡(luò)業(yè)務(wù),并且確定網(wǎng)絡(luò)業(yè)務(wù)是否包括任何計算機安全威脅。計算機安全威脅是獲取對敏感信息的訪問的嘗試、破壞組織的操作的嘗試或其他類型的攻擊。示例計算機安全威脅包括計算機病毒、間諜軟件、流氓軟件(rootkit)、猜測密碼的嘗試、釣魚郵件、與拒絕服務(wù)添加相關(guān)聯(lián)的請求以及其他類型的攻擊。
[0041]計算機安全威脅可以與一個或多個符號圖樣相關(guān)聯(lián),該一個或多個符號圖樣識別計算機安全威脅,但不識別無害的數(shù)據(jù)。與計算機安全威脅相關(guān)聯(lián)的符號圖樣在本文中被稱為“威脅簽名”。例如,特定的病毒可能總是包括指令序列中,當(dāng)被執(zhí)行時該指令序列執(zhí)行惡意操作。
[0042]如果安全設(shè)備110確定了給定的網(wǎng)絡(luò)業(yè)務(wù)流不包括任何計算機安全威脅,則安全設(shè)備Iio可以將網(wǎng)絡(luò)業(yè)務(wù)流傳遞到受保護(hù)的網(wǎng)絡(luò)115。否則,如果安全設(shè)備110確定了該流包括一個或多個計算機安全威脅,則安全設(shè)備110可以丟棄該網(wǎng)絡(luò)業(yè)務(wù)、記錄該網(wǎng)絡(luò)業(yè)務(wù)、將該業(yè)務(wù)轉(zhuǎn)發(fā)到業(yè)務(wù)分析器以用于進(jìn)一步分析,和/或執(zhí)行關(guān)于該網(wǎng)絡(luò)業(yè)務(wù)的一些其他動作。以該方式,安全設(shè)備110可以防止包括計算機安全威脅的網(wǎng)絡(luò)業(yè)務(wù)到達(dá)受保護(hù)的網(wǎng)絡(luò)115。[0043]為了檢測與一個或多個符號圖樣相關(guān)聯(lián)的安全威脅,安全設(shè)備110從安全數(shù)據(jù)中心140接收在來自公共網(wǎng)絡(luò)105的到達(dá)數(shù)據(jù)業(yè)務(wù)中要被監(jiān)測的給定的圖形或符號序列。一旦安全設(shè)備接收到要監(jiān)測的給定圖樣,安全設(shè)備就針對要監(jiān)測的每個給定的圖樣創(chuàng)建有限狀態(tài)機。安全設(shè)備110使接收到的數(shù)據(jù)分組經(jīng)過有限狀態(tài)機,以確定到達(dá)的數(shù)據(jù)分組是否包括潛在的安全威脅。
[0044]圖2是可以和本發(fā)明一起使用的示例性安全設(shè)備200的高層框圖。安全設(shè)備包括經(jīng)由存儲器總線245耦合到處理器225的存儲器210以及經(jīng)由輸入/輸出(I/O)總線250耦合到處理器的存儲設(shè)備230和網(wǎng)絡(luò)接口 240。應(yīng)當(dāng)注意,安全設(shè)備可以包括其他設(shè)備,諸如鍵盤、顯示單元等。網(wǎng)絡(luò)接口 240將安全設(shè)備與安全網(wǎng)絡(luò)115、公共網(wǎng)絡(luò)105和安全數(shù)據(jù)中心140對接,并且使得數(shù)據(jù)(例如,分組)能夠在安全設(shè)備和系統(tǒng)100中的其他節(jié)點之間進(jìn)行傳送。為此,網(wǎng)絡(luò)接口 240包括常規(guī)電路,包含信號、電氣和機械特征,以及交換電路,需要該交換電路以與系統(tǒng)100的物理介質(zhì)和在該介質(zhì)上運行的協(xié)議對接。
[0045]存儲器210是實施為RAM的計算機可讀介質(zhì),包括諸如DRAM設(shè)備和/或閃存設(shè)備的RAM設(shè)備。存儲器210包含各種軟件以及由處理器225使用的數(shù)據(jù)結(jié)構(gòu),包括實施本發(fā)明的各方面的數(shù)據(jù)結(jié)構(gòu)。具體地,存儲器210包括操作系統(tǒng)215和圖樣匹配/編譯服務(wù)220。操作系統(tǒng)215在功能上通過調(diào)用支持軟件處理的操作和在安全設(shè)備200上執(zhí)行的服務(wù)來組織安全設(shè)備200,諸如圖樣匹配/編譯服務(wù)220。如下面將要描述的,圖樣匹配/編譯服務(wù)220包括計算機可執(zhí)行指令,用于從給定圖樣編譯有限狀態(tài)機圖形和/或使到達(dá)的數(shù)據(jù)分組經(jīng)過編譯的圖形。
[0046]存儲設(shè)備230是常規(guī)的存儲設(shè)備(例如,磁盤或更可能的DRAM),其包括圖樣匹配數(shù)據(jù)庫(DB) 235,該圖樣匹配數(shù)據(jù)庫(DB) 235是配置成保持用于從給定圖樣編譯有限狀態(tài)機的各種信息的數(shù)據(jù)結(jié)構(gòu)。信息可以包括簽名圖樣、有限狀態(tài)機圖形(例如,DFA圖形和NFA圖形)、埃普西隆終止(EC)高速緩存表以及DFA狀態(tài)哈希表。
[0047]通常,內(nèi)容感知應(yīng)用處理使用確定性有限自動機(DFA)或非確定性有限自動機(NFA)來識別在接收到的分組的內(nèi)容中的圖樣。DFA和NFA都是有限狀態(tài)機,即計算模型,計算模型中的每一個都包括狀態(tài)集合、開始狀態(tài)、輸入字母(所有可能的符號集合)和轉(zhuǎn)換函數(shù)。計算在啟動狀態(tài)中開始,并且根據(jù)轉(zhuǎn)換函數(shù)而改變?yōu)樾碌臓顟B(tài)。
[0048]圖樣通常使用正則表示式來表述,正則表示式包括基本元素,例如,諸如A-Z、0_9的正常文本字符以及諸如*、'和|的元字符。正則表示式的基本元素是要被匹配的符號(單個字符)。這些與允許級聯(lián)(+)、替換(|)和克林星號(*)元字符組合。用于級聯(lián)的元字符用于從單個字符(或子串)創(chuàng)建多個字符匹配模式,而用于替換(|)的元字符用于創(chuàng)建可以匹配兩個或更多個子串中任何一個的正則表示式。元字符克林星號(*)允許圖樣匹配任何數(shù)目,包括不出現(xiàn)前面字符或字符串。結(jié)合不同的運算符和單個字符允許構(gòu)建復(fù)雜的表示式。例如,表示式(th (is | at) *)將匹配以下字符串:th, this, that, thisis, thisat,thatis 或 thatato
[0049]字符類結(jié)構(gòu)[...]允許列出要搜索的字符的列表,例如gr[ea]y查找grey和gray。破折號指示字符的范圍,例如[A_Z]。元字符”匹配任何一個字符。
[0050]對DFA或NFA狀態(tài)機的輸入通常是(8位)字節(jié)的串,即,字母是單個字節(jié)(一個字符或符號)。輸入流中的每個字節(jié)產(chǎn)生從一個狀態(tài)到另一狀態(tài)的轉(zhuǎn)換。[0051]DFA或NFA狀態(tài)機的狀態(tài)和轉(zhuǎn)換函數(shù)可以通過圖來解釋,其中圖中的每個節(jié)點表示狀態(tài),并且圖中的圓弧表示狀態(tài)轉(zhuǎn)換。狀態(tài)機的當(dāng)前狀態(tài)由選擇特定圖形節(jié)點的節(jié)點識別符來表示。
[0052]使用DFA來處理正則表示式并且找到字符的輸入流中由正則表示式描述的一個或多個圖樣的特征在于:
[0053]I)確定的運行時間性能:DFA的下一個狀態(tài)可以從輸入字符(或符號)以及DFA的當(dāng)前狀態(tài)來確定。換言之,每DFA狀態(tài)僅存在一次狀態(tài)轉(zhuǎn)換。這樣,DFA的運行時間性能被認(rèn)為是確定的并且行為可以從輸入完全預(yù)測。
[0054]2)支持跨多個分組匹配所需要的較小的每流上下文(例如,狀態(tài)或節(jié)點指針):在搜索跨越構(gòu)成流的若干分組的輸入的圖樣中,搜索可能在一個分組處停止,并且然后在另一個分組處恢復(fù)。通常,確定要恢復(fù)搜索的狀態(tài)需要跟蹤、記住或以其他方式存儲(例如,作為狀態(tài)指針)直至搜索停止時所經(jīng)歷的所有狀態(tài)。然而,在DFA中,為了恢復(fù)搜索,僅需要記錄搜索停止時的狀態(tài)。這樣,可以說,DFA被特征化為需要較小的每流上下文,以支持跨多個輸入分組的圖樣匹配,例如,以幾字節(jié)的量級存儲狀態(tài)或節(jié)點指針。
[0055]3)節(jié)點的數(shù)目(或圖形大小)隨著圖樣的大小呈指數(shù)增長的圖形。
[0056]相比之下,使用NFA來處理正則表示式并且找到由字符的輸入流中的正則表示式描述的圖樣的特征在于:
[0057]I)非確定的運行時間性能:給定輸入字符(或符號)和NFA的當(dāng)前狀態(tài),可能存在要轉(zhuǎn)換到的多于一個NFA的下一狀態(tài)。換言之,NFA的下一狀態(tài)不能從NFA的輸入和當(dāng)前狀態(tài)來確定。這樣,NFA的運行時間性能被認(rèn)為是不確定的,并且行為不能完全從輸入預(yù)測。
[0058]2)支持跨多個分組匹配所需要的較大的每流上下文(例如,狀態(tài)或節(jié)點指針):如前所述,圖樣跨多個輸入分組匹配,其中搜索在一個分組處停止,然后在另一分組處恢復(fù),需要跟蹤直至在分組停止時所經(jīng)歷的所有狀態(tài)。在NFA中,越多輸入被匹配,經(jīng)歷的狀態(tài)和需要跟蹤的狀態(tài)的數(shù)目就越多。這樣,可以說,與DFA相比,NFA被特征化為需要較大的每流上下文,以支持跨多個輸入分組的圖樣匹配。
[0059]3)節(jié)點的數(shù)目(或圖形大小)隨著圖樣的大小呈線性增長的圖形。
[0060]進(jìn)一步參考附圖3、4和5-G來討論上述DFA和NFA的特征。應(yīng)當(dāng)注意,為簡單起見,對于附圖中所示的所有DFA圖形,沒有示出到節(jié)點(狀態(tài))0的弧(狀態(tài)轉(zhuǎn)換),并且也沒有示出對于相同字符的到與由節(jié)點O指向的節(jié)點相同的節(jié)點的弧。
[0061]圖3 不出了 用于搜索圖樣 “cavium.*networks”、“nitrox[~\r\n\t\v\s] {3}octeon” 和 “purevu.{5, 10} videochips” 的不例 NFA 的 NFA 圖形 300。圖 4 不出了用于搜索相同的圖樣集合的示例DFA的DFA圖形400。如上所述,應(yīng)當(dāng)注意,DFA圖形400和本文中所提供的其他DFA圖形是出于繪制的目的而被“簡化”的。在附圖中沒有示出表示到DFA狀態(tài)O的狀態(tài)轉(zhuǎn)換的到節(jié)點O的弧。在附圖中也沒有示出對于相同字符的到與由節(jié)點O指向的節(jié)點相同的節(jié)點的弧。
[0062]對于相同的圖樣集合,圖3的NFA圖形300具有69個節(jié)點,表示69個狀態(tài),而圖4的DFA圖形400具有931個節(jié)點(在圖4中僅示出了其中的一部分),表示931個狀態(tài)。如示,對于給定的一個或多個圖樣,DFA狀態(tài)的數(shù)目可以大于NFA狀態(tài)的數(shù)目,通常多了幾百或幾千量級的狀態(tài)的。這是“圖形爆炸”的示例,這是DFA的標(biāo)志性特征。[0063]為了進(jìn)一步描述“圖形爆炸”的概念,考慮分別示出了對于圖樣“.*a[~\n]”、“.*a[~\n] [\η] ”、“.*a[~\n] [\η] [\η] ” 的 NFA 圖形的圖 5Α、圖 5Β 和圖 5C,以及示出了對于相同圖樣的DFA圖形的圖5D、圖5Ε和圖5F。如圖5A-5F中所示以及由圖5G的表所總結(jié)的,對于一些圖樣,NFA可以線性增長,而DFA可以指數(shù)地增長而產(chǎn)生圖形爆炸。
[0064]返回圖3,使用圖形300表不的NFA來搜索輸入流“purevuchips arevideo chips”中的圖樣,NFA處理或匹配開始于NFA的開始狀態(tài)0、2、19和36,由節(jié)點305a_d表示并且簡寫為NFA START STATES={0,2,19,36}。關(guān)于輸入流的字符“p”,NFA轉(zhuǎn)換到狀態(tài)37 (由節(jié)點310表示)并且跟蹤狀態(tài)0、2和19 (簡寫為對“p” = {0,2,19,37}),并且繼續(xù)如下:
[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開始狀態(tài)0,由節(jié)點405表示并且簡寫為DFA START STATES= {O}。對于輸入流的字符“P”,DFA轉(zhuǎn)換到狀態(tài)3,由節(jié)點410表示并且簡寫為對“P” = {3},并且繼續(xù)如下:
[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個數(shù)目的NFA狀態(tài)要跟蹤,其中η是要搜索的圖樣的數(shù)目(例如,在要搜索3個圖樣的情況下,存在至少4個要跟蹤的狀態(tài))。與此相反,在DFA中,每個輸入字符僅存在一個狀態(tài)要跟蹤。為了說明的目的,現(xiàn)在假定輸入流(stream)或流(flow) “purevuchips are video chips”跨越多個分組,其中第一分組以“purevuchips”的“h”結(jié)束,并且第二分組以“purevuchips”的“i”開始。在NFA中,搜索在“h”(第一分組的結(jié)束)停止,具有四種狀態(tài)要跟蹤(即,狀態(tài)0,2,19和45)。為了在“i”恢復(fù)搜索(第二分組的開始),需要記住這四個狀態(tài)。相反,在DFA中,搜索在“h”(第一分組的結(jié)束)停止,具有一個狀態(tài)被跟蹤(即,狀態(tài)41)。為了在“i”恢復(fù)搜索(第二分組的開始),需要記住這一個狀態(tài)。該示例示出,在NFA中,支持跨多個分組的匹配需要的的每流上下文是四個狀態(tài)(例如,通過存儲四個狀態(tài)指針),而在DFA中,每流上下文是一個狀態(tài)。因此,NFA需要的每流上下文比相同圖樣的DFA所需要的每流上下文更大。類似地,DFA需要的每流上下文比相同圖樣的NFA所需要的每流上下文更小。
[0085]對于每個非確定性有限自動機,存在等效的確定性有限自動機。這兩者之間的等效以語言接受來定義。因為NFA是有限自動機,其中,對于輸入符號允許O、I或多次轉(zhuǎn)換,所以等效的DFA可以被構(gòu)造為模擬關(guān)于特定輸入符號的并行的NFA的所有移動。
[0086]由于NFA的DFA等效模擬(并行)NFA的移動,DFA的每個狀態(tài)是NFA的一個或多個狀態(tài)的組合。因此,DFA的每個狀態(tài)將由NFA的狀態(tài)集合的某個子集來表示;并且因此,從NFA到DFA的轉(zhuǎn)換通常被稱為“構(gòu)建”子集。因此,如果給定的NFA具有η個狀態(tài),則等效的DFA可以具有2η數(shù)目的狀態(tài),其中初始狀態(tài)對應(yīng)于子集{qd。因此,從NFA到DFA的轉(zhuǎn)換涉及找到NFA的狀態(tài)集合的所有可能的子集,考慮每個子集是DFA的狀態(tài),并且然后找到對于每個輸入符號從該狀態(tài)的轉(zhuǎn)換。
[0087]如上所述,由于NFA的多個可能的轉(zhuǎn)換,由計算機系統(tǒng)對NFA圖形進(jìn)行處理是困難的,因此NFA到DFA的轉(zhuǎn)換發(fā)生。
[0088]圖6A-B是用于將NFA圖形轉(zhuǎn)換為DFA圖形的方法600的流程圖。該方法600開始于605。在該階段,DFA狀態(tài)集合“Sd”為空。在610,DFA的開始狀態(tài)被確定并添加到DFA狀態(tài)集合“Sd”作為未標(biāo)記的狀態(tài)。DFA的開始狀態(tài)被確定為NFA圖形的開始狀態(tài)的埃普西隆終止。以下參考圖7來進(jìn)一步描述確定NFA狀態(tài)集合的埃普西隆終止的方法。
[0089]在615,確定DFA狀態(tài)集合“Sd”是否包括未標(biāo)記的DFA狀態(tài)。如果該DFA狀態(tài)集合“Sd”的未標(biāo)記的DFA狀態(tài)存在,則在620,未標(biāo)記的狀態(tài)” S”被選擇并標(biāo)記。在625,由NFA圖形所識別的語言“A”的字母(例如,文字)被選擇。在步驟630,DFA狀態(tài)“S”的NFA狀態(tài)“s”被選擇。此外,步驟630之前,用于保持NFA狀態(tài)集合的數(shù)據(jù)結(jié)構(gòu)“St”被設(shè)置為“空”。在635,轉(zhuǎn)換函數(shù)“TTn= (s,a)”被使用字母“a”應(yīng)用于NFA狀態(tài)“S”。如果接收到“a”的輸入,轉(zhuǎn)換函數(shù)確定從NFA狀態(tài)“s”到達(dá)的所有NFA狀態(tài)。然后,確定的NFA的狀態(tài)被添加到該數(shù)據(jù)結(jié)構(gòu)“St”。在644,確定DFA狀態(tài)“s”是否包括其他的NFA狀態(tài)。如果是,則該方法重復(fù)步驟630和635,直到DFA狀態(tài)“s”的所有NFA狀態(tài)“s”已經(jīng)被處理。如果已經(jīng)處理了所有的NFA狀態(tài),則該方法在步驟640繼續(xù)。在640,在數(shù)據(jù)結(jié)構(gòu)“St”中的所有NFA狀態(tài)“s”的埃普西隆終止被確定并且被添加到數(shù)據(jù)結(jié)構(gòu)“St”。
[0090]在步驟645,將數(shù)據(jù)結(jié)構(gòu)“St”與所有現(xiàn)有的DFA狀態(tài)“s”作比較,以確定DFA狀態(tài)“S”是否已經(jīng)包括數(shù)據(jù)結(jié)構(gòu)“St”中的所有NFA狀態(tài)“S”。當(dāng)前的方法存儲與數(shù)據(jù)結(jié)構(gòu)中的每個DFA狀態(tài)“S”相關(guān)聯(lián)的每個NFA狀態(tài)“S”。為了確定數(shù)據(jù)結(jié)構(gòu)“St”中的NFA狀態(tài)是否已經(jīng)與DFA狀態(tài)“S”相關(guān)聯(lián),數(shù)據(jù)結(jié)構(gòu)“St”的“每個NFA狀態(tài)“s”必須與每個DFA狀態(tài)“S”每個NFA狀態(tài)“s”作比較。因此,這樣的比較需要大量的時間和內(nèi)存。
[0091]以下表1說明了將DFA狀態(tài)數(shù)與NFA狀態(tài)集合相關(guān)聯(lián)的示例DFA狀態(tài)表。NFA狀態(tài)集合可以針對每個DFA狀態(tài)數(shù)被存儲在數(shù)據(jù)結(jié)構(gòu)中,如上所述。
[0092]表1
[0093]
【權(quán)利要求】
1.一種方法,包括: 在耦合到網(wǎng)絡(luò)的安全設(shè)備的處理器中: 將用于給定的圖樣集合的非確定性有限自動機(NFA)圖形轉(zhuǎn)換成具有多個狀態(tài)的確定性有限自動機(DFA)圖形,轉(zhuǎn)換所述NFA圖形包括: 將多個DFA狀態(tài)中的每一個狀態(tài)映射到所述NFA圖形的一個或多個狀態(tài); 計算映射到每個DFA狀態(tài)的所述NFA圖形的所述一個或多個狀態(tài)的哈希值; 存儲DFA狀態(tài)表,所述DFA狀態(tài)表將所述多個DFA狀態(tài)中的每一個狀態(tài)與用于所述給定的圖樣的所述NFA圖形的所述一個或多個狀態(tài)的所述哈希值相關(guān)。
2.根據(jù)權(quán)利要求1所述的方法,其中,所計算的哈希值是加密/完美哈希值。
3.根據(jù)權(quán)利要求1所述的方法,其中,映射包括: 確定在所述多個DFA狀態(tài)內(nèi)是否存在未標(biāo)記DFA狀態(tài); 選擇所述未標(biāo)記DFA狀態(tài)中的一個; 標(biāo)記所述未標(biāo)記DFA狀態(tài);以及 針對由所述NFA圖形所識別的字母的字符,確定映射到標(biāo)記的DFA狀態(tài)的所述NFA圖形的所述一個或多個狀態(tài)到其他NFA狀態(tài)的轉(zhuǎn)換。
4.根據(jù)權(quán)利要求3所述的方法,其中,確定轉(zhuǎn)換包括:將所述其他NFA狀態(tài)和所述其他NFA狀態(tài)的埃普西隆終止映射到可能的新的未標(biāo)記DFA狀態(tài)。
5.根據(jù)權(quán)利要求4所述的方法,其中,將可能的新的未標(biāo)記DFA狀態(tài)映射到所述其他NFA狀態(tài)的埃普西隆終止包括:從埃普西隆高速緩存獲得所述其他NFA狀態(tài)的所述埃普西隆終止,并且如果在所述埃普西隆高速緩存內(nèi)不存在所述其他NFA狀態(tài)的所述埃普西隆終止,則計算所述其他NFA狀態(tài)的所述埃普西隆終止。
6.根據(jù)權(quán)利要求5所述的方法,進(jìn)一步包括:如果映射到所述可能的新的未標(biāo)記DFA狀態(tài)的所述其他NFA狀態(tài)和所述其他NFA狀態(tài)的所述埃普西隆終止沒有被映射到所述多個DFA狀態(tài)的現(xiàn)有DFA狀態(tài),則將所述可能的新的未標(biāo)記DFA狀態(tài)添加到所述多個DFA狀態(tài),并且將所述可能的新的未標(biāo)記DFA狀態(tài)存儲在所述DFA狀態(tài)表中。
7.根據(jù)權(quán)利要求6所述的方法,其中,添加所述可能的新的未標(biāo)記DFA狀態(tài)包括: 將映射到所述可能的新的未標(biāo)記DFA狀態(tài)的所述其他NFA狀態(tài)的所述埃普西隆終止的哈希值與映射到所述多個DFA狀態(tài)中的每一個狀態(tài)的NFA狀態(tài)的哈希值作比較。
8.根據(jù)權(quán)利要求6所述的方法,其中,將所述可能的新的未標(biāo)記DFA狀態(tài)添加到所述多個DFA狀態(tài)進(jìn)一步包括:確定映射到所述可能的新的未標(biāo)記狀態(tài)的所述其他NFA狀態(tài)的所述埃普西隆終止是否屬于最終接受NFA狀態(tài),并且如果是,則將可能的未標(biāo)記狀態(tài)添加為最終接受DFA狀態(tài)。
9.根據(jù)權(quán)利要求6所述的方法,進(jìn)一步包括:將所述可能的新的未標(biāo)記狀態(tài)添加為針對由所述NFA圖形所識別的所述字母的所述字符、從標(biāo)記的DFA狀態(tài)的轉(zhuǎn)換。
10.根據(jù)權(quán)利要求4所述的方法,進(jìn)一步包括:用計算的所述其他NFA狀態(tài)和所述其他NFA狀態(tài)的埃普西隆終止的哈希值到所述可能的新的未標(biāo)記DFA狀態(tài)的映射來替換所述其他NFA狀態(tài)和所述其他NFA狀態(tài)的所述埃普西隆終止到所述可能的新的未標(biāo)記DFA狀態(tài)的映射。
11.根據(jù)權(quán)利要求10所述的方法,其中,替換包括刪除所述其他NFA狀態(tài)和所述其他NFA狀態(tài)的所述埃普西隆終止。
12.根據(jù)權(quán)利要求3所述的方法,進(jìn)一步包括:從所述DFA狀態(tài)表中刪除所述NFA圖形的一個或多個狀態(tài)的所述轉(zhuǎn)換。
13.根據(jù)權(quán)利要求1所述的方法,其中,映射包括: 確定DFA開始狀態(tài);以及 將DFA開始狀態(tài)作為未標(biāo)記狀態(tài)添加到包括所述多個DFA狀態(tài)的數(shù)據(jù)結(jié)構(gòu)。
14.根據(jù)權(quán)利要求13所述的方法,其中,確定DFA開始狀態(tài)包括: 確定NFA開始狀態(tài)的埃普西隆終止; 計算所述NFA開始狀態(tài)的所述埃普西隆終止的哈希值;以及 將所述DFA開始狀態(tài)映射到所述NFA開始狀態(tài)的所述埃普西隆終止的所述哈希值。
15.根據(jù)權(quán)利要求13所述的方法,其中,映射包括: 確定在所述多個DFA狀態(tài)內(nèi)是否存在未標(biāo)記DFA狀態(tài); 選擇所述未標(biāo)記DFA狀態(tài)中的一個未標(biāo)記DFA狀態(tài); 標(biāo)記所述未標(biāo)記DFA狀態(tài);以及` 針對由所述NFA圖形所識別的字母的字符,確定映射到標(biāo)記的DFA狀態(tài)的所述NFA圖形的一個或多個狀態(tài)到其他NFA狀態(tài)的轉(zhuǎn)換。
16.根據(jù)權(quán)利要求15所述的方法,其中,確定轉(zhuǎn)換包括: 針對由所述NFA圖形所識別的所述字母的所述字符、確定從所述標(biāo)記的DFA狀態(tài)的轉(zhuǎn)換DFA狀態(tài)。
17.根據(jù)權(quán)利要求16所述的方法,其中,確定所述轉(zhuǎn)換DFA狀態(tài)包括: 計算所述NFA圖形的所述一個或多個狀態(tài)的所述轉(zhuǎn)換的哈希值;以及 將計算的哈希值與埃普西隆終止(EC)高速緩存表中的哈希值條目作比較,所述EC高速緩存表將哈希值映射到DFA狀態(tài)。
18.根據(jù)權(quán)利要求17所述的方法,進(jìn)一步包括: 確定計算的哈希值是否匹配所述EC高速緩存表中的所述哈希值條目中的一個哈希值條目;以及 如果匹配存在,則將映射到匹配哈希值的所述DFA狀態(tài)設(shè)置為針對由所述NFA圖形所識別的所述字母的所述字符的轉(zhuǎn)換DFA狀態(tài)。
19.根據(jù)權(quán)利要求18所述的方法,進(jìn)一步包括: 如果不存在匹配,則計算所述NFA圖形的所述一個或多個狀態(tài)的所述轉(zhuǎn)換的埃普西隆終止; 計算所述埃普西隆終止的哈希值; 將新的條目添加到所述EC高速緩存表中,所述新的條目將新的DFA狀態(tài)映射到所述埃普西隆終止的所述哈希值;以及 將所述新的DFA狀態(tài)設(shè)置為針對由所述NFA圖形所識別的所述字母的所述字符的所述轉(zhuǎn)換DFA狀態(tài)。
20.根據(jù)權(quán)利要求19所述的方法,進(jìn)一步包括: 從所述DFA狀態(tài)表中刪除與所述標(biāo)記的DFA狀態(tài)相對應(yīng)的所述NFA圖形的所述一個或多個狀態(tài)的所述轉(zhuǎn)換。
21.一種用于確定NFA狀態(tài)集合的埃普西隆終止的方法,所述方法包括: 在耦合到網(wǎng)絡(luò)的安全設(shè)備的處理器中: 接收NFA狀態(tài)集合,所述NFA狀態(tài)集合是針對由NFA圖形所識別的字母的字符的轉(zhuǎn)換狀態(tài);以及 確定所接收的NFA狀態(tài)集合是否與埃普西隆終止(EC)高速緩存表中的NFA狀態(tài)集合匹配,所述EC高速緩存表將NFA狀態(tài)集合的埃普西隆終止與所述NFA狀態(tài)集合的哈希值進(jìn)行映射。
22.根據(jù)權(quán)利要求21所述的方法,其中,確定進(jìn)一步包括: 計算所接收的NFA狀態(tài)集合的哈希值;以及 將所述哈希值與所述EC高速緩存表的哈希值條目進(jìn)行匹配。
23.根據(jù)權(quán)利要求22所述的方法,進(jìn)一步包括: 如果存在匹配,則將映射到所述EC高速緩存表中的匹配的哈希值的所述NFA狀態(tài)集合設(shè)置為所接收的NFA狀態(tài)集合的所述埃普西隆終止。
24.根據(jù)權(quán)利要求23所述的方法,進(jìn)一步包括: 如果不存在匹配,則計算所接收的NFA狀態(tài)集合的埃普西隆終止; 將新的 條目添加到所述EC高速緩存表,所述新的條目將所接收的NFA狀態(tài)集合的所述哈希值映射到所接收的NFA狀態(tài)集合的所述埃普西隆終止。
25.根據(jù)權(quán)利要求24所述的方法,其中,添加條目包括: 確定是否存在用于添加新的條目的足夠的內(nèi)存; 如果沒有足夠的內(nèi)存,則根據(jù)替代策略來添加所述新的條目。
26.根據(jù)權(quán)利要求25所述的方法,其中,所述替代策略通過刪除所述EC高速緩存表的最近最少使用的條目來添加所述新的條目。
27.一種用于確定NFA狀態(tài)集合的埃普西隆終止的方法,所述方法包括: 在耦合到網(wǎng)絡(luò)的安全設(shè)備的處理器中: 接收NFA狀態(tài)集合,所述NFA狀態(tài)集合是針對由NFA圖形所識別的字母的字符的轉(zhuǎn)換狀態(tài);以及 確定所接收的NFA狀態(tài)集合是否與埃普西隆終止(EC)高速緩存表中的NFA狀態(tài)集合匹配,所述EC高速緩存表將關(guān)聯(lián)于NFA狀態(tài)集合的埃普西隆終止的哈希值映射到DFA狀態(tài)。
28.根據(jù)權(quán)利要求27所述的方法,其中,確定進(jìn)一步包括: 計算所接收的NFA狀態(tài)集合的哈希值;以及 將所述哈希值與所述EC高速緩存表的哈希值條目匹配。
29.根據(jù)權(quán)利要求27所述的方法,進(jìn)一步包括: 如果匹配存在,則將與匹配哈希值條目相關(guān)聯(lián)的所述DFA狀態(tài)設(shè)置為關(guān)于由NFA圖形所識別的字母的輸入字符的、從當(dāng)前DFA狀態(tài)的轉(zhuǎn)換DFA狀態(tài)。
30.根據(jù)權(quán)利要求29所述的方法,進(jìn)一步包括: 如果匹配不存在,則計算所接收的NFA狀態(tài)集合的埃普西隆終止; 計算所接收的NFA狀態(tài)集合的所述埃普西隆終止的哈希值; 將新的條目添加到所述EC高速緩存表,所述新的條目將所接收的NFA狀態(tài)集合的所述哈希值映射到新的DFA狀態(tài);以及將所述新的DFA狀態(tài)設(shè)置為關(guān)于由所述NFA圖形所識別的所述字母的所述輸入字符的、從當(dāng)前DFA狀態(tài)的所述轉(zhuǎn)換DFA狀態(tài)。
31.根據(jù)權(quán)利要求30所述的方法,其中,添加條目包括: 確定是否存在用于添加新的條目的足夠的內(nèi)存; 如果沒有足夠的內(nèi)存,則根據(jù)替代策略來添加新的條目。
32.根據(jù)權(quán)利要求31所述的方法,其中,所述替代策略通過刪除所述EC高速緩存表的最近最少使用的條目來添加所述新的條目。
33.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括: 確定與由NFA圖形和DFA圖形所識別的字母相關(guān)聯(lián)的給定圖樣的有效字符;以及創(chuàng)建所述NFA圖形和所述DFA圖形,以識別圖樣,所述圖樣僅由與所述NFA圖形和所述DFA圖形所識別的所述字母相關(guān)聯(lián)的所述給定圖形的有效字符組成。
34.一種耦合到網(wǎng)絡(luò)的安全設(shè)備,所述安全設(shè)備包括: 處理器,所述處理器被配置成將用于給定的圖樣集合的非確定性有限自動機(NFA)圖形轉(zhuǎn)換成具有多個狀態(tài)的確定性有限自動機(DFA)圖形;以及編譯器,所述編譯器被配置成: 將多個DFA狀態(tài)中的每一個映射到所述NFA圖形的一個或多個狀態(tài); 計算映射到每個DFA狀態(tài)的所述NFA圖形的所述一個或多個狀態(tài)的哈希值; 在數(shù)據(jù)存儲庫中存儲DFA狀態(tài)表,所述DFA狀態(tài)表將所述多個DFA狀態(tài)中的每一個與用于給定圖樣的所述NFA圖形的所述一個或多個狀態(tài)的所述哈希值相關(guān)。
35.根據(jù)權(quán)利要求34所述的安全設(shè)備,其中,所計算的哈希值是加密/完美哈希值。
36.根據(jù)權(quán)利要求34所述的安全設(shè)備,其中,所述編譯器進(jìn)一步被配置成: 確定在所述多個DFA狀態(tài)內(nèi)是否存在未標(biāo)記DFA狀態(tài); 選擇所述未標(biāo)記DFA狀態(tài)中的一個未標(biāo)記DFA狀態(tài); 標(biāo)記所述未標(biāo)記DFA狀態(tài);以及 確定映射到標(biāo)記DFA狀態(tài)的所述NFA圖形的所述一個或多個狀態(tài)到由所述NFA圖形所識別的字母的字符的其他NFA狀態(tài)的轉(zhuǎn)換。
37.根據(jù)權(quán)利要求36所述的安全設(shè)備,其中,所述編譯器進(jìn)一步被配置成:通過將所述其他NFA狀態(tài)和所述其他NFA狀態(tài)的埃普西隆終止映射到可能的新的未標(biāo)記DFA狀態(tài)來確定轉(zhuǎn)換。
38.根據(jù)權(quán)利要求37所述的安全設(shè)備,其中,所述編譯器被配置成,通過下述操作將所述可能的新的 未標(biāo)記DFA狀態(tài)映射到所述其他NFA狀態(tài)的埃普西隆終止:從埃普西隆高速緩存獲得所述其他NFA狀態(tài)的所述埃普西隆終止,并且如果在所述埃普西隆高速緩存內(nèi)不存在所述其他NFA狀態(tài)的所述埃普西隆終止,則所述編譯器被配置成計算所述其他NFA狀態(tài)的埃普西隆終止。
39.根據(jù)權(quán)利要求38所述的安全設(shè)備,其中,所述編譯器進(jìn)一步被配置成,如果映射到所述可能的新的未標(biāo)記DFA狀態(tài)的所述其他NFA狀態(tài)和所述其他NFA狀態(tài)的埃普西隆終止沒有映射到所述多個DFA狀態(tài)的現(xiàn)有DFA狀態(tài),則將所述可能的新的未標(biāo)記DFA狀態(tài)添加到所述多個DFA狀態(tài),并且將所述可能的新的未標(biāo)記DFA狀態(tài)存儲在所述DFA狀態(tài)表中。
40.根據(jù)權(quán)利要求39所述的安全設(shè)備,其中,所述編譯器被配置成,通過將映射到所述可能的新的未標(biāo)記DFA狀態(tài)的所述其他NFA狀態(tài)的所述埃普西隆終止的哈希值與映射到所述多個DFA狀態(tài)中的每一個DFA狀態(tài)的NFA狀態(tài)的哈希值進(jìn)行比較來添加所述可能的新的未標(biāo)記DFA狀態(tài)。
41.根據(jù)權(quán)利要求39所述的安全設(shè)備,其中,所述編譯器被配置成,通過下述操作將所述可能的未標(biāo)記DFA狀態(tài)添加到所述多個DFA狀態(tài):確定映射到可能的新的未標(biāo)記狀態(tài)的所述其他NFA狀態(tài)的所述埃普西隆終止是否屬于最終接受NFA狀態(tài),并且如果是,則所述編譯器被進(jìn)一步配置成將可能的未標(biāo)記狀態(tài)添加為最終接受DFA狀態(tài)。
42.根據(jù)權(quán)利要求39所述的安全設(shè)備,其中,所述編譯器被進(jìn)一步配置成,將可能的新的未標(biāo)記狀態(tài)添加為針對由所述NFA圖形所識別的所述字母的所述字符的、從標(biāo)記的DFA狀態(tài)的轉(zhuǎn)換。
43.根據(jù)權(quán)利要求37所述的安全設(shè)備,其中,所述編譯器被進(jìn)一步配置成,用計算的所述其他NFA狀態(tài)和所述其他NFA狀態(tài)的埃普西隆終止的哈希值到所述可能的新的未標(biāo)記的DFA狀態(tài)的映射來替換所述其他NFA狀態(tài)和所述其他NFA狀態(tài)的埃普西隆終止到所述可能的新的未標(biāo)記的DFA狀態(tài)的映射。
44.根據(jù)權(quán)利要求43所述的安全設(shè)備,其中,所述編譯器被配置成刪除所述其他NFA狀態(tài)和所述其他NFA狀態(tài)的所述埃普西隆終止。
45.根據(jù)權(quán)利要求36所述的安全設(shè)備,其中,所述編譯器被進(jìn)一步配置成,從所述DFA狀態(tài)表中刪除所述NFA圖形的所述一個或多個狀態(tài)的所述轉(zhuǎn)換。
46.根據(jù)權(quán)利要求34所述的安全設(shè)備,其中,所述編譯器被配置成,通過確定DFA開始狀態(tài)并且將所述DFA開始狀態(tài)作為未標(biāo)記狀態(tài)添加到包括所述多個DFA狀態(tài)的數(shù)據(jù)結(jié)構(gòu)來將所述多個DFA狀態(tài)中的每一個DFA狀態(tài)映射到所述NFA圖形中的一個或多個狀態(tài)。
47.根據(jù)權(quán)利要求46所述的安全設(shè)備,其中,所述編譯器進(jìn)一步被配置成: 確定NFA開始狀態(tài)的埃普西隆終止; 計算所述NFA開始狀態(tài)的所述埃普西隆終止的哈希值;以及 將所述DFA開始狀態(tài)映射到所述NFA開始狀態(tài)的所述埃普西隆終止的所述哈希值。
48.根據(jù)權(quán)利要求46所述的安全設(shè)備,其中,所述編譯器進(jìn)一步被配置成: 確定在所述多個DFA狀態(tài)內(nèi)是否存在未標(biāo)記DFA狀態(tài); 選擇所述未標(biāo)記DFA狀態(tài)中的一個未標(biāo)記DFA狀態(tài); 標(biāo)記所述未標(biāo)記DFA狀態(tài);以及 確定映射到所標(biāo)記的DFA狀態(tài)的所述NFA圖形的所述一個或多個狀態(tài)到針對由所述NFA圖形所識別的字母的字符的其他NFA狀態(tài)的轉(zhuǎn)換。
49.根據(jù)權(quán)利要求48所述的安全設(shè)備,其中,所述編譯器被配置成通過確定針對由所述NFA圖形所識別的所述字母的所述字符的、從所述標(biāo)記的DFA狀態(tài)的轉(zhuǎn)換DFA狀態(tài)來確定轉(zhuǎn)換。
50.根據(jù)權(quán)利要求49所述的安全設(shè)備,其中,所述編譯器進(jìn)一步被配置成: 計算所述NFA圖形的所述一個或多個狀態(tài)的所述轉(zhuǎn)換的哈希值;以及 將所計算的哈希值與埃普西隆終止(EC)高速緩存表中的哈希值條目作比較,所述EC高速緩存表將哈希值映射到DFA狀態(tài)。
51.根據(jù)權(quán)利要求50所述的安全設(shè)備,其中,所述編譯器進(jìn)一步被配置成:確定計算的哈希值是否匹配所述EC高速緩存表中的所述哈希值條目中的一個;以及如果匹配存在,則將映射到匹配的哈希值的所述DFA狀態(tài)設(shè)置為針對由所述NFA圖形所識別的所述字母的所述字符的轉(zhuǎn)換DFA狀態(tài)。
52.根據(jù)權(quán)利要求51所述的安全設(shè)備,其中,所述編譯器進(jìn)一步被配置成: 如果不存在匹配,則計算所述NFA圖形的所述一個或多個狀態(tài)的所述轉(zhuǎn)換的埃普西隆終止; 計算所述埃普西隆終止的哈希值; 將新的條目添加到所述EC高速緩存表中,所述新的條目將新的DFA狀態(tài)映射到所述埃普西隆終止的所述哈希值;以及 將所述新的DFA狀態(tài)設(shè)置為針對由所述NFA圖形所識別的所述字母的所述字符的所述轉(zhuǎn)換DFA狀態(tài)。
53.根據(jù)權(quán)利要求52所述的安全設(shè)備,其中,所述編譯器進(jìn)一步被配置成: 從DFA狀態(tài)表中刪除與所述標(biāo)記的DFA狀態(tài)相對應(yīng)的所述NFA圖形的所述一個或多個狀態(tài)的所述轉(zhuǎn)換。
54.一種用于確定NFA狀態(tài)集合的埃普西隆終止的安全設(shè)備,所述安全設(shè)備包括: 編譯器,所述編譯器被配置成: 接收NFA狀態(tài)集合,所述NFA狀態(tài)集合是由NFA圖形所識別的字母的字符的轉(zhuǎn)換狀態(tài);以及 確定所接收的NFA狀態(tài)集合是否與埃普西隆終止(EC)高速緩存表中的NFA狀態(tài)集合匹配,所述EC高速緩存表將NFA狀態(tài)集合的埃普西隆終止與所述NFA狀態(tài)集合的哈希值進(jìn)行映射。
55.根據(jù)權(quán)利要求54所述的安全設(shè)備,其中,所述編譯器進(jìn)一步被配置成: 計算所接收的NFA狀態(tài)集合的哈希值;以及 將所述哈希值與所述EC高速緩存表的哈希值條目進(jìn)行匹配。
56.根據(jù)權(quán)利要求55所述的安全設(shè)備,其中,所述編譯器進(jìn)一步被配置成: 如果存在匹配,則將映射到所述EC高速緩存表中匹配的哈希值的所述NFA狀態(tài)集合設(shè)置為所接收的NFA狀態(tài)集合的所述埃普西隆終止。
57.根據(jù)權(quán)利要求56所述的安全設(shè)備,其中,所述編譯器進(jìn)一步被配置成: 如果不存在匹配,則計算所接收的NFA狀態(tài)集合的埃普西隆終止; 將新的條目添加到所述EC高速緩存表,所述新的條目將所接收的NFA狀態(tài)集合的所述哈希值映射到所接收的NFA狀態(tài)集合的所述埃普西隆終止。
58.根據(jù)權(quán)利要求57所述的安全設(shè)備,其中,所述編譯器進(jìn)一步被配置成: 確定是否存在用于添加新的條目的足夠的內(nèi)存; 如果沒有足夠的內(nèi)存,則根據(jù)替代策略來添加所述新的條目。
59.根據(jù)權(quán)利要求58所述的安全設(shè)備,其中,所述替代策略通過刪除所述EC高速緩存表的最近最少使用的條目來添加所述新的條目。
60.一種用于 確定NFA狀態(tài)集合的埃普西隆終止的安全設(shè)備,所述安全設(shè)備包括: 編譯器,所述編譯器被配置成: 接收NFA狀態(tài)集合,所述NFA狀態(tài)集合是由NFA圖形所識別的字母的字符的轉(zhuǎn)換狀態(tài);以及 確定所接收的NFA狀態(tài)集合是否與埃普西隆終止(EC )高速緩存表中的NFA狀態(tài)集合匹配,所述EC高速緩存表將關(guān)聯(lián)于NFA狀態(tài)集合的埃普西隆終止的哈希值映射到DFA狀態(tài)。
61.根據(jù)權(quán)利要求60所述的安全設(shè)備,其中,所述編譯器進(jìn)一步被配置成: 計算所接收的NFA狀態(tài)集合的哈希值;以及 將所述哈希值與所述EC高速緩存表的哈希值條目進(jìn)行匹配。
62.根據(jù)權(quán)利要求61所述的安全設(shè)備,其中,所述編譯器進(jìn)一步被配置成: 如果匹配存在,則將與匹配哈希值條目相關(guān)聯(lián)的所述DFA狀態(tài)設(shè)置為關(guān)于由NFA圖形所識別的字母的輸入字符的、從當(dāng)前DFA狀態(tài)的轉(zhuǎn)換DFA狀態(tài)。
63.根據(jù)權(quán)利要求62所述的安全設(shè)備,其中,所述編譯器進(jìn)一步被配置成: 如果匹配不存在,則計算所接收的NFA狀態(tài)集合的埃普西隆終止; 計算所接收的NFA狀態(tài)集合的所述埃普西隆終止的哈希值; 將新的條目添加到所述EC高速緩存表,所述新的條目將所接收的NFA狀態(tài)集合的所述哈希值映射到新的DFA狀態(tài);以及 將所述新的DFA狀態(tài)設(shè)置 為關(guān)于由所述NFA圖形所識別的所述字母的所述輸入字符的、從當(dāng)前DFA狀態(tài)的轉(zhuǎn)換DFA狀態(tài)。
64.根據(jù)權(quán)利要求63所述的安全設(shè)備,其中,所述編譯器進(jìn)一步被配置成: 確定是否存在用于添加新的條目的足夠的內(nèi)存; 如果沒有足夠的內(nèi)存,則根據(jù)替代策略來添加所述新的條目。
65.根據(jù)權(quán)利要求64所述的安全設(shè)備,其中,所述替代策略通過刪除所述EC高速緩存表的最近最少使用的條目來添加所述新的條目。
66.根據(jù)權(quán)利要求34所述的安全設(shè)備,其中,所述編譯器進(jìn)一步被配置成: 確定與由所述NFA圖形和DFA圖形所識別的字母相關(guān)聯(lián)的給定圖樣的有效字符;以及 創(chuàng)建所述NFA圖形和DFA圖形,以識別圖樣,所述圖樣僅由與所述NFA圖形和DFA圖形所識別的所述字母相關(guān)聯(lián)的給定圖樣的有效字符組成。
【文檔編號】H04L29/06GK103733590SQ201280038799
【公開日】2014年4月16日 申請日期:2012年6月20日 優(yōu)先權(quán)日:2011年6月24日
【發(fā)明者】R·戈亞爾, S·L·比拉, K·A·布里斯 申請人:凱為公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
阳泉市| 乐亭县| 英超| 通化市| 镇雄县| 伊吾县| 铜山县| 威信县| 永昌县| 石柱| 千阳县| 中宁县| 宁陵县| 云梦县| 当阳市| 万安县| 芮城县| 河南省| 环江| 游戏| 两当县| 固安县| 连城县| 大同市| 望奎县| 兴业县| 涿州市| 乾安县| 多伦县| 高阳县| 三原县| 隆安县| 壶关县| 和硕县| 云梦县| 错那县| 凯里市| 台南市| 锡林郭勒盟| 寻乌县| 烟台市|