專利名稱:基于字母表壓縮的擴展有限自動機構造方法
技術領域:
本發(fā)明涉及電子計算機網(wǎng)絡技術,具體是一種基于字母表壓縮的擴展有限自動機構造方法。
背景技術:
特征匹配算法是深度包檢測的關鍵,它通過掃描數(shù)據(jù)包,識別出與特征規(guī)則集匹配的數(shù)據(jù)包。為了能夠實現(xiàn)在一次掃描中識別出所有匹配的特征,深度包檢測一般采用多模式匹配算法。隨著攻擊越來越復雜,例如躲避攻擊,變型等攻擊的出現(xiàn),精確字符串難以精確描述復雜的攻擊特征。同時,精確字符串會導致網(wǎng)絡入侵檢測系統(tǒng)大量假陽性報警。由于正則表達式具有靈活、高效等特點,目前許多安全產(chǎn)品都已采用正則表達式代替精確字符串表示攻擊特征規(guī)則集。例如開源的Snort、Bro、3Com的TippingPoint X550、Cisco的安全產(chǎn)品系列、以及Citrix防火墻。正則表達式匹配算法實現(xiàn)方式主要基于非確定有限自動機 (Nondeterministic Finite Automaton, NFA)禾口石角定有限自動機(Deterministic Finite Automaton,DFA)。但是,伴隨隨著網(wǎng)絡的高速發(fā)展,正則表達式匹配算法也正在面臨高性能挑戰(zhàn)——如何更好的滿足高速網(wǎng)絡數(shù)據(jù)包處理的要求。然而,基于軟件的正則表達式匹配算法無法達到目前將近10 40(ibpS的數(shù)據(jù)包線速匹配。例如,即使在Sim特殊安全防御應用下的Snort最大吞吐量僅為250Mbps。因此,將正則表達式匹配算法實現(xiàn)在硬件上來加速匹配是目前研究的方向。近年來,研究者利用現(xiàn)代嵌入式存儲器技術,例如專用集成電路(ASIC)、現(xiàn)場可編程門陣列(FPGA)、網(wǎng)絡處理器(NP)和三重內(nèi)容尋址存儲器(TCAM)等,提出了面向硬件實現(xiàn)的正則表達式匹配算法來提高吞吐量。Sindhu等人和Clark等人在FPGA上實現(xiàn)了 NFA來進行正則式表達式匹配,提高了深度包檢測的吞吐量,但無法達到當前高速網(wǎng)絡的處理要求。Moscola等人把DFA實現(xiàn)在FPGA上,與NFA相比在吞吐量上有很大的提高,但是規(guī)則數(shù)受到了限制。Yu等人采用TCAM實現(xiàn)了簡單正則表達式的DFA,但由于TCAM具有價格昂貴, 集成度低等缺點,難以對大規(guī)模規(guī)則集采用。由此研究人員發(fā)現(xiàn)基于傳統(tǒng)的NFA和DFA正則表達式匹配算法都無法滿足高性能需求。而且隨著特征規(guī)則集的快速增長,基于傳統(tǒng)的 NFA和DFA的正則表達式匹配算法缺乏可伸縮性,無法適應高速網(wǎng)絡。因此,高性能深度包檢測的關鍵是設計一種快速且存儲高效的正則表達式匹配算法。又因為NFA的匹配效率無法滿足高速網(wǎng)絡性能要求,所以目前研究如何改變這一狀況的重點主要圍繞DFA而展開。DFA的存儲空間大小是由狀態(tài)個數(shù)和每個狀態(tài)的遷移邊條數(shù)決定的。造成DFA存儲空間大的主要原因是(1)在狀態(tài)方面,由于正則表達式用了許多語義豐富的符號,例如 “*”,“. ”和“ {}”等,DFA需要大量的狀態(tài)來記錄部分匹配結果,導致狀態(tài)空間爆炸;(2)在遷移邊方面,對于ASCII字母表,每個狀態(tài)需要256條遷移邊,導致狀態(tài)的遷移表很大。因此,目前的DFA壓縮算法都從DFA的狀態(tài)和遷移邊這兩個方面來減少DFA的存儲空間需求, 即主要分為兩類基于狀態(tài)壓縮的算法和基于遷移邊壓縮的算法?;跔顟B(tài)壓縮的算法是從整體上減少自動機的狀態(tài)數(shù)目,因此,通過壓縮狀態(tài)可以很大程度上減少存儲空間。而基于遷移表壓縮的算法是通過壓縮每個狀態(tài)的遷移表來減小存儲空間?;跔顟B(tài)壓縮的算法方面,Yu等人提出了分組DFA(mDFA,Multiple DFA),即通過合理劃分正則表達式規(guī)則集,將一個正則表達式規(guī)則集劃分成多組規(guī)則集,然后對每個規(guī)則集分別產(chǎn)生一個DFA的方式來解決DFA狀態(tài)空間爆炸的問題。由于mDFA產(chǎn)生了多個 DFA,因此需要進行多次正則表達式匹配,增加了匹配時間。徐乾等人提出用膨脹率(DR, Distending Rate)來描述正則表達式的膨脹特性,并利用正則表達式組合關系提出一種選擇性分群算法(REGADRJegular Expression Group Algorithm Based on DR),在減少存儲空間需求同時,確保DFA狀態(tài)機的個數(shù)可接受。Becchi等人提出了一種基于狀態(tài)融合DFA 的正則表達式匹配算法,即采用遷移邊標記方法來融合多個非等價狀態(tài),減少了 DFA的存儲空間需求。Kumar等人提出DFA具有健忘癥,即DFA需要大量額外狀態(tài)來記錄部分匹配結果,以及失算癥,即DFA無法記錄相同子串的匹配次數(shù)。因此,提出H-FA和H-cFA來解決 DFA健忘癥和失算癥。但是Kumar等人只提供了一些啟發(fā)策略,并沒有提供系統(tǒng)的構造算法。Smith等人分析了 DFA的狀態(tài)空間爆炸原因,并且提出了擴展有限自動機(XFA,eXtend Finite Automaton),即在DFA中加入某些輔助變量包括比特位和計數(shù)器,使用變量記錄中間的匹配結果,從而減少很多額外狀態(tài)。在正則表達式匹配時,XFA在進行狀態(tài)遷移的同時, 需要執(zhí)行遷移邊或者狀態(tài)上的指令來使變量記錄下匹配結果,因此需要付出一些指令執(zhí)行開銷?;谶w移表壓縮的算法方面,Kumar等人觀察到DFA很多狀態(tài)的遷移表相似,提出了輸入延遲DFA(D2FA,Delayed Input DFA)。D2FA通過使用默認遷移邊,刪除狀態(tài)之間的相同的遷移邊。但是D2FA在進行正則表達式匹配時,由于默認遷移邊鏈過長,一次有效的狀態(tài)遷移需要過多的存儲訪問,導致匹配效率低下。因此,Kumar等人又提出了內(nèi)容尋址 D2FA(CD2FA,Content Adrresing D2FA),即利用狀態(tài)信息的標簽代替狀態(tài)ID,通過哈希來快速定位下一狀態(tài),從而提高匹配效率。Becchi等人發(fā)現(xiàn)DFA的狀態(tài)集對于字母表中的很多字符都有相同的下一狀態(tài),提出了采用單字母表壓縮方式減少DFA的遷移表大小。在進行正則表達式匹配時,首先查詢字母壓縮表(ACT,Alphabet Compress Table),然后找到字母表對應的遷移邊在遷移表的位置,最終找到下一狀態(tài)?;谧帜副韷嚎s的DFA壓縮了存儲空間,但是需要付出查詢字母壓縮表的代價。
發(fā)明內(nèi)容
針對現(xiàn)有技術存在的缺陷,本發(fā)明所要解決的技術問題是,通過減少字母表大小的方式來減少XFA的遷移表大小,采用啟發(fā)式策略合理劃分XFA的狀態(tài)集合,對所劃分的各個狀態(tài)集分別建立一張字母壓縮表,并利用這些字母壓縮表壓縮XFA的遷移表,進一步減少XFA的存儲空間,并確保匹配效率。為解決上述問題,本發(fā)明的技術方案是,基于字母表壓縮的擴展有限自動機構造方法為1)選用合適的規(guī)則集在字母表壓縮的擴展有限自動機中進行驗證試驗;2)讀入規(guī)則集,通過字母表壓縮的擴展有限自動機構造算法構造有限自動機并同時生成狀態(tài)集;
3)通過字母表壓縮的擴展有限自動機匹配算法對每個狀態(tài)集分別進行字母表劃分并壓縮其遷移表。所述驗證試驗中的規(guī)則集來源于Snort中的FTP和HTTP規(guī)則集。通過字母表壓縮的擴展有限自動機構造方法構造有限自動機的步驟為1)將擴展有限自動機的狀態(tài)集劃分成多個狀態(tài)集,使得每個所劃分的狀態(tài)集的字母等價類數(shù)目盡可能少;2)對每個狀態(tài)集進行字母表劃分,構造出多張字母壓縮表,并使用這些字母壓縮表壓縮狀態(tài)的遷移表。本發(fā)明所述方法可以大大減少XFA的存儲空間,并確保匹配效率。是一種快速且存儲高效的正則表達式匹配算法,較已有的正則表達式匹配算法更加適合于高速深度包檢測。
圖1 {· *ab[c-d],· *[b-c]a}對應的 XFA, (a)狀態(tài)圖,(b)遷移表;圖2字母表劃分算法;圖3狀態(tài)集劃分算法;圖4遷移表壓縮算法;圖5 {. *ab [c-d],. * [b_c] a}對應的ACFA的字母壓縮表和遷移表;圖6ACFA的匹配算法;圖7 {· *ab [c-d],· * [b_c] a}對應的 ACFA 的匹配示例;圖8字母壓縮表數(shù)目對ACFA的存儲空間需求和匹配時間的影響,(a)狀態(tài)的品均遷移邊條數(shù),(b)存儲空間大小,(c)匹配時間;圖9FTP規(guī)則集下ACFA和XFA存儲空間相關指標對比,(a)遷移邊條數(shù),(b)存儲空間大小;圖10HTTP規(guī)則集下ACFA和XFA存儲空間相關指標對比,(a)遷移邊條數(shù),(b)存儲空間大??;圖11各規(guī)則集ACFA和XFA匹配時間對比,(a) FTP規(guī)則集,(b)HTTP規(guī)則集。
具體實施例方式為了便于算法描述,首先介紹一些相關定義。當狀態(tài)S對于字母a和b都到達相同下一狀態(tài)時,則稱字母a和b對于狀態(tài)S等價。如圖1所示,狀態(tài)SO對于字母b和c都到達相同下一狀態(tài)S2,因此,字母b和c對于狀態(tài)SO是等價的。狀態(tài)Sl對于字母b和c到達不同的下一狀態(tài),則字母b和c對于狀態(tài)Sl不是等價的。當字母表的某個子集對于某個狀態(tài)集的所有狀態(tài)都等價時,我們稱這個字母表子集為該狀態(tài)集的字母等價類。如圖1所示,字母表子集{B, b,C,c}是狀態(tài)集{SO, S2,S5,S6}的字母等價類。我們可以把XFA的字母表劃分成一個字母等價類集合,生成一張字母壓縮表 (ACT, Alphabet Compression Table)。每個XFA的狀態(tài)對每個字母等價類只需要一條遷移邊,字母壓縮表存放當前字母對應的遷移邊在遷移表中的位置。在查找下一狀態(tài)時,首先查找字母壓縮表獲得所需遷移邊在遷移表中的位置,然后查找遷移表獲得下一狀態(tài)??梢韵胂笞詈们闆r下,XFA的字母表被劃分成一個等價類,這時每個狀態(tài)都只有一條遷移邊;最壞情況下,XFA的字母表被劃分成I Σ I個等價類,那么遷移表大小將沒有任何減小。因此, 字母表等價類數(shù)目越少,XFA所需存儲空間也將越少。通過觀察實際的遷移表,我們發(fā)現(xiàn)從整個XFA的狀態(tài)集出發(fā),難以對字母表劃分, 使得字母等價類數(shù)目較少。但是,對于某一部分的XFA的狀態(tài)集而言,字母等價類的數(shù)目要少的多。如圖1所示,對于所有狀態(tài)進行字母表劃分,將獲得4個字母等價類{{a,A},{b, B},{c,C},{d,D}}。而我們將XFA的狀態(tài)集劃分成狀態(tài)集{SO, S2,S5,S6}和{Si,S3,S4}。 狀態(tài)集{SO, S2,S5,S6}將只有3個字母等價類{{a, A}, {b,B, c, C}, {d,D}},可以進一步減少XFA的存儲空間。因此,我們提出了一種基于字母表壓縮的擴展有限自動機(ACFA,Alphabet Compression Based Finite Automaton),即采用啟發(fā)式策略將XFA的狀態(tài)集進行劃分,使得每個狀態(tài)集在字母表劃分后,都能使對應的字母等價類數(shù)目較少。下面,將詳細介紹基于字母表壓縮的擴展有限自動機的構造算法?;谧帜副韷嚎s的擴展有限自動機構造過程分為兩個步驟(1)將XFA的狀態(tài)集S = {S0, Si,S2,. . . . }劃分成多個狀態(tài)集,使得每個所劃分的狀態(tài)集的字母等價類數(shù)目盡可能少。(2)對每個狀態(tài)集進行字母表劃分,構造出多張字母壓縮表,并使用這些字母壓縮表壓縮狀態(tài)的遷移表。由于狀態(tài)集劃分算法使用字母表劃分算法進行啟發(fā)式劃分,因此,我們首先介紹如何對狀態(tài)集進行字母表劃分。圖2是字母表劃分算法的偽代碼。第1行首先初始化字母等價類集合,此時只有一個字母等價類Σ。然后,每個狀態(tài)將會對當前的字母等價類集合劃分。第5 9行實現(xiàn)了狀態(tài)如何對字母等價類劃分。對于每個字母等價類,當前狀態(tài)會對它創(chuàng)建一個map的映射對象,它是一個<nextState,charGroup>的映射的集合。nextState 表示當前狀態(tài)可達的下一狀態(tài),charGroup表示當前狀態(tài)在輸入charGroup中的字母都將到達next^ate狀態(tài)。字母表在經(jīng)過所有狀態(tài)的劃分之后,所建立的字母等價類對于所有狀態(tài)都將等價。圖1所示的XFA的字母表經(jīng)過所有狀態(tài)的劃分后,所劃分出的字母等價類集合為{(a, A), (b,B),(c,C),(d,D)}。圖3是狀態(tài)集劃分算法的偽代碼。函數(shù)partitior^tatesO的輸入為XFA的狀態(tài)集和需要劃分狀態(tài)集的目標個數(shù)。第2 6行的每個循環(huán)都將調用函數(shù)getEqualClass ParttionO劃分出一個狀態(tài)集。當調用getEqualClassParttion()進行劃分時,首先設置目標狀態(tài)集的個數(shù)為原來的1/2。然后,將對states狀態(tài)集進行字母表劃分,接著通過 11 27行的循環(huán)不斷合并字母等價類的方式來盡量減少目標狀態(tài)集的字母等價類個數(shù)。 第17 22行通過啟發(fā)式策略找出兩個字母等價類bets j和bestk,合并這兩個字母等價類能使從subset中刪除盡量少的狀態(tài),這也意味著可以合并更多個字母等價類,使的subset 狀態(tài)集的字母等價類盡可能少。在每次合并時,StatesCut狀態(tài)集中的狀態(tài)將不支持此次合并,我們將這些狀態(tài)從subset中排除出去。例如狀態(tài)集{S0,Si,S5,S6}的字母等價類為{{a,A},{b,B},{c,C},{d,D}},為了合并等價類{b,B}和{c, C}需要將狀態(tài)Sl排除出去。通過這種策略,所挑選出的每個狀態(tài)集能能產(chǎn)生盡可能少的字母等價類,因此,經(jīng)過壓縮后的遷移表也能盡可能小。圖1所示的XFA經(jīng)過狀態(tài)集劃分后,被劃分成兩個狀態(tài)集{S0,S2,S5,S6}和{Si,S3,S4}。在狀態(tài)集劃分算法中,我們使用啟發(fā)式策略來劃分狀態(tài)集,而每個狀態(tài)集分別使用一張字母壓縮表。我們將通過實驗的方式來確定對于實際的規(guī)則集使用多少張字母壓縮表為最優(yōu),即在保證ACFA匹配效率可接受的條件下,使得存儲空間盡可能小。當劃分好狀態(tài)集后,我們將對每個狀態(tài)集分別進行字母表劃分并壓縮其遷移表。 圖4是ACFA的遷移表壓縮的偽代碼。對于每個狀態(tài)集,第4行首先劃分出狀態(tài)集的字母等價類。而第5 12行對狀態(tài)集的每個狀態(tài)進行遷移表壓縮。在處理一個狀態(tài)集時,對于每個狀態(tài),通過迭代這個狀態(tài)集對應的字母等價類,對每個字母等價類在壓縮遷移表上添加一條遷移邊,同時記錄下這條遷移邊在新的遷移表中的位置。在壓縮完狀態(tài)的遷移表后,第 11行記錄下該狀態(tài)使用的字母壓縮表的編號。圖5是圖1 (b)所示的遷移表經(jīng)過字母表壓縮后的結果??梢钥吹?,狀態(tài)集{S0,S2,S5,S6}使用了字母壓縮表ACTO,而狀態(tài)集{Si,S3, S4}使用了字母壓縮表ACT1。新的遷移表記錄了下一狀態(tài)的信息,而字母壓縮表記錄了目標遷移邊在新的遷移表中的位置信息。經(jīng)過壓縮,我們減少了 32條遷移邊。而在實際的規(guī)則集中,由于ASCII字母表大小為256,因此有更大的壓縮空間。下面,我們將介紹如何利用新的遷移表和字母壓縮表進行正則表達式匹配。通過ACFA構造算法,我們將得到新的遷移表和多張字母壓縮表。ACFA的匹配算法將通過查詢字母壓縮表和新的遷移表得到下一狀態(tài),然后執(zhí)行該狀態(tài)的指令。圖6是基于 ACFA的正則表達式匹配算法的偽代碼。在進行正則表達式匹配之前,ACFA首先將當前狀態(tài) curState設置為初始狀態(tài),并且執(zhí)行初始狀態(tài)的指令。然后,第4 8依次讀入字符進行正則表達式匹配。在進行狀態(tài)遷移時,首先要根據(jù)當前狀態(tài)的字母壓縮表編號和輸入字符找出遷移邊的位置,根據(jù)遷移邊的位置在遷移表中找出下一狀態(tài)。圖7顯示了 ACFA如何進行正則表達式匹配。例如ACFA的當前狀態(tài)為S3,S3使用字母壓縮表ACT1,我們根據(jù)當前輸入c在ACTl中找到所需遷移邊在狀態(tài)S3的遷移表的位置index為2。然后,在S3的遷移表的2號位置找出下一狀態(tài)S5。與XFA相比,ACFA需要比XFA多出字母壓縮表查詢的開銷。在軟件實現(xiàn)下,對每個輸入字母,我們都將首先查詢字母壓縮表,而且壓縮表所占存儲空間不大,因此字母壓縮表一般都將駐留在CPU的高速緩存中,多一次查詢并不會增加太多匹配時間。而在硬件實現(xiàn)上,由于字母壓縮表存儲空間很小,我們可以很容易的把這些字母壓縮表放在片上存儲, 因此也只增加一次片上存儲訪問。為了驗證算法的有效性,我們將在軟件實現(xiàn)下對ACFA的存儲空間和匹配效率做出評估。我們采用C++設計和實現(xiàn)了基于字母表壓縮的擴展有限自動機,實驗運行在CPU 為^itel Core 2 Duo 2. 4GHZ、內(nèi)存為2GB的計算機上。實驗所需的正則表達式規(guī)則集來源于Snort,我們從中提取了其中的FTP規(guī)則集和部分HTTP規(guī)則集作為實驗對象,并且,通過抓取HTTP數(shù)據(jù)包和FTP數(shù)據(jù)包進行數(shù)據(jù)匹配。首先,我們研究字母壓縮表數(shù)目對ACFA的存儲空間和匹配效率的影響,即找出最佳的ACT數(shù)目,在保證ACFA匹配效率可接受條件下,使得ACFA存儲空間最少。然后,我們將應用這一參數(shù),對ACFA和XFA進行評估。在評估ACFA和XFA的存儲空間需求和匹配效率時,我們分別對FTP規(guī)則集和HTTP規(guī)則集中隨機抽取規(guī)則數(shù)比例為1/8,1/4,1/2的規(guī)則集,每個比例抽取50個規(guī)則集。對各個比例的規(guī)則集利用各自算法產(chǎn)生自動機,評估出各個比例規(guī)則集所需的存儲空間和匹配效率。我們采用存儲空間需求和匹配效率兩個方面來評估ACFA和XFA的匹配算法的性能。在存儲空間方面,除了對比遷移邊條數(shù)之外,我們還將根據(jù)自動機的實現(xiàn)估計出XFA和 ACFA所需的存儲空間大小。ACFA壓縮了 XFA的遷移表,在指令方面沒有變化,即所需指令存儲空間和XFA相同。我們通過以下規(guī)則來估計存儲空間大小(I)XFA的遷移表采用對齊的二維表的存儲結構,對于ASCII字母表,每個狀態(tài)有256條遷移邊;(2)ACFA除了遷移表所需存儲空間外,還需字母壓縮表的存儲空間,每張ACT含遷移表狀態(tài)的位置,因此每張ACT 需要256字節(jié)的存儲空間。另外,每個狀態(tài)還需要一個字節(jié)來標識所使用的ACT編號;(3) XFA和ACFA的每條指令包含1字節(jié)操作類型,4字節(jié)操作數(shù)地址,所屬規(guī)則編號需要卩。幽叫字節(jié),M表示規(guī)則數(shù)大小。在匹配效率方面,我們?nèi)圆捎肐GB數(shù)據(jù)所需的匹配時間(s/GByte) 來評估各個算法的匹配效率。通過實驗驗證ACFA的工作效率并通過圖表使統(tǒng)計得出的結果清晰形象,圖8表示的是ACT數(shù)目從0到7依次增長時,ACFA的狀態(tài)的平均遷移邊條數(shù),存儲空間大小和匹配時間變化的結果。當ACT = 0時,此時ACFA就是XFA,遷移表沒有經(jīng)過任何壓縮,狀態(tài)的平均遷移邊條數(shù)為256。隨著ACT數(shù)目增加,ACFA狀態(tài)的平均遷移邊數(shù)目和存儲空間大小都呈下降趨勢。圖8 (a)和(b)表明,當ACT = 1是,存儲空間需求減少最大,并且隨著ACT數(shù)目的增長,存儲空間需求進一步減少。當ACT = 7時,對于FTP規(guī)則集,與XFA相比,ACFA 的遷移邊條數(shù)減少了 88. 6%,存儲空間大小減少了 87. 2% ;而對于HTTP規(guī)則集,與XFA相比,ACFA的遷移邊條數(shù)減少了 75.4%,存儲空間減少了 75.0%。圖8 (c)展示了匹配時間變化結果。對于FTP規(guī)則集,當ACT從0變?yōu)?時,ACFA的匹配時間增加了 25. 0%。但是, 當ACT從1增長到7時,匹配時間并沒有呈現(xiàn)增長的趨勢。因此,對于FTP和HTTP規(guī)則集, 當ACT = 7時,ACFA需要最少的存儲空間,并保證匹配效率。因此,我們將使用ACT = 7作為下面實驗ACFA的參數(shù)。我們還需要分別驗證在不同協(xié)議規(guī)則集下ACFA和XFA存儲空間相關指標。圖9是 FTP規(guī)則集下ACFA和XFA存儲空間相關指標對比。如圖9 (a)所示,當規(guī)則數(shù)比例從1/8增至1時,XFA的遷移邊條數(shù)從106 增至92928,而ACFA的遷移邊條數(shù)僅從464增至10586。 圖9 (a)表明,與XFA相比,ACFA在遷移邊條數(shù)上減少了 88. 6 % 95. 6 %。如圖9 (b)所示, 當規(guī)則數(shù)比例從1/8增至1時,XFA的存儲空間大小從43KB增至376KB,而ACFA的存儲空間大小僅從4KB增至48KB。圖9 (b)表明,與XFA相比,ACFA在存儲空間上減少了 87. 2 0Z0 90. 7%。HTTP規(guī)則集下ACFA和XFA存儲空間相關指標對比如圖10所示。如圖10(a)所示, 當規(guī)則數(shù)比例從1/8增至1時,XFA的遷移邊條數(shù)從189696增至1435136,而ACFA的條數(shù)僅從22721增至35觀06。圖10(a)表明,與XFA相比,ACFA在遷移邊條數(shù)上減少了 75. 4% 88. 0%。如圖10(b)所示,當規(guī)則數(shù)比例從1/8增至1時,XFA的存儲空間大小從759KB增至5764KB,而ACFA的存儲空間大小僅從94KB增至1442KB。圖10 (b)表明,與XFA相比, ACFA在存儲空間上減少了 75. 0% 87. 6%。ACFA和XFA在FTP和HTTP規(guī)則集下匹配時間對比如圖11所示。如圖11(a)所示,當FTP規(guī)則數(shù)比例從1/8增至1時,XFA的匹配時間從9. 5s增至12. 3s,而ACFA的匹配時間從12. 3s增至15. 2s。圖10(a)表明,在FTP規(guī)則集下,與XFA相比,ACFA的匹配時間增加了 23. 6% 四.5%。如圖10(b)所示,當HTTP規(guī)則數(shù)比例從1/8增至1時,XFA的匹配時間從10. Is增至13. ls,而ACFA的匹配時間從12. 6s增至16. Os。圖10(b)表明,在 HTTP規(guī)則集下,與XFA相比,ACFA的匹配時間增加了 24. 8% 29. 9%。本發(fā)明作為一種基于字母表壓縮的擴展有限自動機構造方法,具有一定的通用性,并且可以通過應用該方法的思想直接改進現(xiàn)有的有限自動機??蓱糜谡齽t表達式匹配,深度包檢測,網(wǎng)絡安全檢測等領域。其具體的實施分歸納一個預備步驟和兩個實施步馬聚ο預備步驟選用合適的規(guī)則集在ACFA中進行驗證試驗本發(fā)明的驗證試驗中選用的正則表達式規(guī)則集來源于Snort中的FTP和HTTP的規(guī)則集。步驟1 讀入規(guī)則集,通過ACFA構造方法構造有限自動機并同時生成狀態(tài)集;基于字母表壓縮的擴展有限自動機構造過程分為兩個步驟(1)將XFA的狀態(tài)集劃分成多個狀態(tài)集,使得每個所劃分的狀態(tài)集的字母等價類數(shù)目盡可能少。(2)對每個狀態(tài)集進行字母表劃分,構造出多張字母壓縮表,并使用這些字母壓縮表壓縮狀態(tài)的遷移表。步驟2 通過ACFA匹配方法對每個狀態(tài)集分別進行字母表劃分并壓縮其遷移表;在處理狀態(tài)集時,對于每個狀態(tài),通過迭代這個狀態(tài)集所對應的字母等價類,對每個字母等價類在壓縮遷移表上添加一條遷移邊,同時記錄下這條遷移邊在新的遷移表中的位置。再根據(jù)ACFA構造算法,可以得到新的遷移表和多張字母壓縮表。ACFA的匹配算法將通過查詢字母壓縮表和新的遷移表得到下一狀態(tài),然后執(zhí)行該狀態(tài)的指令。
權利要求
1.一種基于字母表壓縮的擴展有限自動機構造方法,其特征在于,該方法為1)選用合適的規(guī)則集在字母表壓縮的擴展有限自動機中進行驗證試驗;2)讀入規(guī)則集,通過字母表壓縮的擴展有限自動機構造方法構造有限自動機并同時生成狀態(tài)集;3)通過字母表壓縮的擴展有限自動機匹配方法對每個狀態(tài)集分別進行字母表劃分并壓縮其遷移表。
2.根據(jù)權利要求1所述的基于字母表壓縮的擴展有限自動機構造方法,其特征在于, 所述驗證試驗中的規(guī)則集來源于Snort中的FTP和HTTP規(guī)則集。
3.根據(jù)權利要求1所述的基于字母表壓縮的擴展有限自動機構造方法,其特征在于, 通過字母表壓縮的擴展有限自動機構造方法構造有限自動機的步驟為1)將擴展有限自動機的狀態(tài)集劃分成多個狀態(tài)集,使得每個所劃分的狀態(tài)集的字母等價類數(shù)目盡可能少;2)對每個狀態(tài)集進行字母表劃分,構造出多張字母壓縮表,并使用這些字母壓縮表壓縮狀態(tài)的遷移表。
全文摘要
本發(fā)明公開了一種基于字母表壓縮的擴展有限自動機(ACFA,Alphabet Compression Based Extend Finite Automaton)構造方法,該方法為選用合適的規(guī)則集在字母表壓縮的擴展有限自動機中進行驗證試驗;讀入規(guī)則集,通過字母表壓縮的擴展有限自動機構造方法構造有限自動機并同時生成狀態(tài)集;通過字母表壓縮的擴展有限自動機匹配方法對每個狀態(tài)集分別進行字母表劃分并壓縮其遷移表。與擴展有限自動機XFA相比,ACFA在遷移邊上減少95.6%,在存儲空間大小上減少了90.7%,而在匹配時間上僅增加了23.6%。因此,ACFA是一種快速且存儲高效的正則表達式匹配方法,較已有的正則表達式匹配方法更加適合于高速深度包檢測。
文檔編號G06F17/30GK102156748SQ20111010151
公開日2011年8月17日 申請日期2011年4月22日 優(yōu)先權日2011年4月22日
發(fā)明者張大方, 金軍航, 黃昆 申請人:湖南大學