(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023046367
(43)【公開日】2023-04-04
(54)【発明の名称】グルシコフオートマタ生成とハイブリッドマッチングを活用した正規表現式エンジンに関するオートマタ処理装置及び方法
(51)【国際特許分類】
G06F 16/28 20190101AFI20230328BHJP
【FI】
G06F16/28
【審査請求】有
【請求項の数】14
【出願形態】OL
(21)【出願番号】P 2021192583
(22)【出願日】2021-11-26
(31)【優先権主張番号】10-2021-0125933
(32)【優先日】2021-09-23
(33)【優先権主張国・地域又は機関】KR
(71)【出願人】
【識別番号】514274672
【氏名又は名称】延世大学校 産学協力団
【氏名又は名称原語表記】YONSEI UNIVERSITY,UNIVERSITY-INDUSTRY FOUNDATION(UIF)
【住所又は居所原語表記】50,YONSEI-RO, SEODAEMUN-GU, SEOUL 03722, REPUBLIC OF KOREA
(74)【代理人】
【識別番号】110000051
【氏名又は名称】弁理士法人共生国際特許事務所
(72)【発明者】
【氏名】ハン,ヨ ソプ
(72)【発明者】
【氏名】ハン,ジュン ヒョク
(72)【発明者】
【氏名】ソン シ チョル
【テーマコード(参考)】
5B175
【Fターム(参考)】
5B175KA12
5B175KA13
(57)【要約】
【課題】正規式パターンを特定類型の非決定性有限オートマタ(Nondeterministic Finite Automata、NFA)に変換し、非決定性有限オートマタに対して拡張文法の包含の有無によってマッチングアルゴリズムを選択的に適用して、時間的、空間的資源使用を最小化し、ReDoS(Regular expression Denial of Service)攻撃に対して強靭な正規表現式エンジンを提供する。
【解決手段】本発明によれば、オートマタ処理装置によるオートマタ処理方法において、正規式パターンに基づいて特定類型の非決定性有限オートマタを生成するステップと、非決定性有限オートマタに対して文字列に対する受諾経路を確認するマッチングステップとを含むオートマタ処理方法を提供する。
【選択図】
図11
【特許請求の範囲】
【請求項1】
オートマタ処理装置によるオートマタ処理方法において、
正規式パターンに基づいて特定類型の非決定性有限オートマタを生成するステップと、
前記非決定性有限オートマタに対して文字列に対する受諾経路を確認するマッチングステップと、
を含むことを特徴とするオートマタ処理方法。
【請求項2】
前記非決定性有限オートマタを生成するステップは、
各ノードが1つの文字に対応するように変換することを特徴とする請求項1に記載のオートマタ処理方法。
【請求項3】
前記非決定性有限オートマタを生成するステップは、
前記正規式パターンをグルシコフ構造(Glushkov construction)によってグルシコフオートマタに変換することを特徴とする請求項1に記載のオートマタ処理方法。
【請求項4】
前記正規式パターンは、正規表現式または拡張された正規表現式で表現され、
前記拡張された正規表現式は、キャプチャグループ、逆参照、前方探索、またはこれらの組み合わせを含む拡張文法が適用されたことを特徴とする請求項1に記載のオートマタ処理方法。
【請求項5】
前記マッチングステップは、
前記正規式パターンが前記拡張された正規表現式に該当するか否かによって第1のマッチングアルゴリズムまたは第2のマッチングアルゴリズムを選択的に適用することを特徴とする請求項4に記載のオートマタ処理方法。
【請求項6】
前記マッチングステップは、
前記正規式パターンが前記拡張文法を含むと、
開始状態から出発して、各文字を介して移動できる複数の次の状態のうちの1つを選択して経路を探索し、選択しなかった状態は、文字列上の位置とともに別に格納し、先に選択した状態で進んだ経路のうち、受諾経路があれば、マッチングを終了し、受諾経路を探すことができない場合に、最も最近に格納された状態と位置に基づいて新しい経路を探索する前記第1のマッチングアルゴリズムを適用することを特徴とする請求項5に記載のオートマタ処理方法。
【請求項7】
前記マッチングステップは、
前記正規式パターンが前記拡張文法を含まなければ、
開始状態から出発して、各文字を介して移動できる全ての次の状態を同時に考慮し、全ての文字を消費した時点で現在状態が受諾状態を含む場合に受諾経路が存在すると判断する前記第2のマッチングアルゴリズムを適用することを特徴とする請求項5に記載のオートマタ処理方法。
【請求項8】
プロセッサ及び前記プロセッサにより実行されるプログラムを格納するメモリを備えるオートマタ処理装置において、
前記プロセッサは、
正規式パターンに基づいて特定類型の非決定性有限オートマタを生成し、
前記非決定性有限オートマタに対して文字列に対する受諾経路を確認するマッチングを行うことを特徴とするオートマタ処理装置。
【請求項9】
前記プロセッサは、
各ノードが1つの文字に対応するように変換して、前記非決定性有限オートマタを生成することを特徴とする請求項8に記載のオートマタ処理装置。
【請求項10】
前記プロセッサは、
前記正規式パターンをグルシコフ構造(Glushkov construction)によってグルシコフオートマタに変換して、前記非決定性有限オートマタを生成することを特徴とする請求項8に記載のオートマタ処理装置。
【請求項11】
前記正規式パターンは、正規表現式または拡張された正規表現式で表現され、
前記拡張された正規表現式は、キャプチャグループ、逆参照、前方探索、またはこれらの組み合わせを含む拡張文法が適用されたことを特徴とする請求項8に記載のオートマタ処理装置。
【請求項12】
前記プロセッサは、
前記正規式パターンが前記拡張された正規表現式に該当するか否かによって第1のマッチングアルゴリズムまたは第2のマッチングアルゴリズムを選択的に適用してマッチングを行うことを特徴とする請求項11に記載のオートマタ処理装置。
【請求項13】
前記プロセッサは、
前記正規式パターンが前記拡張文法を含むと、
開始状態から出発して、各文字を介して移動できる複数の次の状態のうちの1つを選択して経路を探索し、選択しなかった状態は、文字列上の位置とともに別に格納し、先に選択した状態で進んだ経路のうち、受諾経路があれば、マッチングを終了し、受諾経路を探すことができない場合に、最も最近に格納された状態と位置に基づいて新しい経路を探索する前記第1のマッチングアルゴリズムを適用することを特徴とする請求項12に記載のオートマタ処理装置。
【請求項14】
前記プロセッサは、
前記正規式パターンが前記拡張文法を含まなければ、
開始状態から出発して、各文字を介して移動できる全ての次の状態を同時に考慮し、全ての文字を消費した時点で現在状態が受諾状態を含む場合に受諾経路が存在すると判断する前記第2のマッチングアルゴリズムを適用することを特徴とする請求項12に記載のオートマタ処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、非決定性有限オートマタ処理装置及び方法に関する。
【背景技術】
【0002】
この項目に記載する内容は、単に本発明の背景情報を提供するものであって、従来技術を構成するものではない。
【0003】
正規表現式(regular expression)は、特定の規則を有した文字列の集合を表現するのに使用される形式言語である。コンピュータをはじめとする演算装置において、文字列を比較するか、または検索するときに探そうとする文字列を表現する用途で多用される。
【0004】
正規表現式は、何らの内容もない文字列を意味するε(イプシロン)と、1つの文字のみからなる正規表現式(例えば、a、b、c等)を基本とし、継ぎ合わせ(abc、bbbb、baba等)、選択(ab|c、ab|ba等)、繰り返し(c*等)のような演算子を用いて基本的な正規表現式を組み合わせて様々なパターンの文字列を表す。
【0005】
正規表現式があまり長くなるか、または複雑になる場合が発生しうるため、使用上の便宜のために、様々な拡張文法を付け加えた形態の正規表現式も存在する。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】国際公開第2012/133976号
【特許文献2】米国特許第9563399号明細書
【特許文献3】韓国登録特許第10-1222486号公報
【特許文献4】韓国登録特許第10-1645890号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
本発明は、上記従来技術に鑑みてなされたものであって、本発明の目的は、正規式パターンを特定類型の非決定性有限オートマタ(Nondeterministic Finite Automata、NFA)に変換し、非決定性有限オートマタに対して拡張文法の包含の有無によってマッチングアルゴリズムを選択的に適用して、時間的、空間的資源の使用を最小化し、ReDoS(Regular expression Denial of Service)攻撃に対して強靭な正規表現式エンジンを提供することにある。
【課題を解決するための手段】
【0008】
上記目的を達成するためになされた本発明の一態様によるオートマタ処理方法は、オートマタ処理装置によるオートマタ処理方法において、正規式パターンに基づいて特定類型の非決定性有限オートマタを生成するステップと、前記非決定性有限オートマタに対して文字列に対する受諾経路を確認するマッチングステップと、を含むことを特徴とする。
【0009】
前記非決定性有限オートマタを生成するステップは、各ノードが1つの文字に対応するように変換することができる。
【0010】
前記非決定性有限オートマタを生成するステップは、前記正規式パターンをグルシコフ構造(Glushkov construction)によってグルシコフオートマタに変換することができる。
【0011】
前記正規式パターンは、正規表現式または拡張された正規表現式で表現され、前記拡張された正規表現式は、キャプチャグループ、逆参照、前方探索、またはこれらの組み合わせを含む拡張文法が適用され得る。
【0012】
前記マッチングステップは、前記正規式パターンが前記拡張された正規表現式に該当するか否かによって第1のマッチングアルゴリズムまたは第2のマッチングアルゴリズムを選択的に適用し得る。
【0013】
前記マッチングステップは、前記正規式パターンが前記拡張文法を含むと、開始状態から出発して、各文字を介して移動できる種々の次の状態のうちの1つを選択して経路を探索し、選択しなかった状態は、文字列上の位置とともに別に格納し、先に選択した状態で進んだ経路のうち、受諾経路があれば、マッチングを終了し、受諾経路を探すことができない場合に、最も最近に格納された状態と位置に基づいて新しい経路を探索する前記第1のマッチングアルゴリズムを適用し得る。
【0014】
前記マッチングステップは、前記正規式パターンが前記拡張文法を含まなければ、開始状態から出発して、各文字を介して移動できる全ての次の状態を同時に考慮し、全ての文字を消費した時点で現在状態が受諾状態を含む場合に受諾経路が存在すると判断する前記第2のマッチングアルゴリズムを適用し得る。
【0015】
上記目的を達成するためになされた本発明の一態様によるオートマタ処理装置は、プロセッサ及び前記プロセッサにより実行されるプログラムを格納するメモリを備えるオートマタ処理装置において、前記プロセッサは、正規式パターンに基づいて特定類型の非決定性有限オートマタを生成し、前記非決定性有限オートマタに対して文字列に対する受諾経路を確認するマッチングを行うことを特徴とする。
【0016】
前記プロセッサは、各ノードが1つの文字に対応するように変換して、前記非決定性有限オートマタを生成し得る。
【0017】
前記プロセッサは、前記正規式パターンをグルシコフ構造(Glushkov construction)によってグルシコフオートマタに変換して、前記非決定性有限オートマタを生成し得る。
【0018】
前記正規式パターンは、正規表現式または拡張された正規表現式で表現され、前記拡張された正規表現式は、キャプチャグループ、逆参照、前方探索、またはこれらの組み合わせを含む拡張文法が適用され得る。
【0019】
前記プロセッサは、前記正規式パターンが前記拡張された正規表現式に該当するか否かによって第1のマッチングアルゴリズムまたは第2のマッチングアルゴリズムを選択的に適用してマッチングを行い得る。
【0020】
前記プロセッサは、前記正規式パターンが前記拡張文法を含むと、開始状態から出発して、各文字を介して移動できる種々の次の状態のうちの1つを選択して経路を探索し、選択しなかった状態は、文字列上の位置とともに別に格納し、先に選択した状態で進んだ経路のうち、受諾経路があれば、マッチングを終了し、受諾経路を探すことができない場合に、最も最近に格納された状態と位置に基づいて新しい経路を探索する前記第1のマッチングアルゴリズムを適用し得る。
【0021】
前記プロセッサは、前記正規式パターンが前記拡張文法を含まなければ、開始状態から出発して、各文字を介して移動できる全ての次の状態を同時に考慮し、全ての文字を消費した時点で現在状態が受諾状態を含む場合に受諾経路が存在すると判断する前記第2のマッチングアルゴリズムを適用し得る。
【発明の効果】
【0022】
以上で説明したように、本発明によれば、正規式パターンを特定類型の非決定性有限オートマタ(Nondeterministic Finite Automata、NFA)に変換し、非決定性有限オートマタに対して拡張文法の包含の有無によってマッチングアルゴリズムを選択的に適用して、時間的、空間的資源使用を最小化し、ReDoS(Regular expression Denial of Service)を防止できるという効果を奏する。
【0023】
ここで明示的に言及されていない効果といえども、本発明の技術的特徴により期待される以下の明細書において記載された効果及びその暫定的な効果は、本発明の明細書に記載されたものと同様に取り扱われる。
【図面の簡単な説明】
【0024】
【
図1】本発明の一実施形態によるオートマタ処理装置の一例を示すブロック図である。
【
図2】拡張文法が含まれたトンプソンオートマトン(Tohmpson automaton)の一例を示す図である。
【
図3】本発明の一実施形態によるオートマタ処理装置が処理する拡張文法が含まれたグルシコフオートマトン(Glushkov automaton)の一例を示す図である。
【
図4】本発明の一実施形態によるオートマタ処理装置が処理する拡張文法が含まれなかったグルシコフオートマトン(Glushkov automaton)の一例を示す図である。
【
図5a】
図2のトンプソンオートマトンにスペンサー(Spencer)アルゴリズムを適用した結果をツリー形態で示した図である。
【
図5b】
図2のトンプソンオートマトンにスペンサーアルゴリズムを適用した結果をツリー形態で示した図である。
【
図5c】
図2のトンプソンオートマトンにスペンサーアルゴリズムを適用した結果をツリー形態で示した図である。
【
図6】
図3のグルシコフオートマトンにスペンサー(Spencer)アルゴリズムを適用して文字列一致を確認する過程を示した図である。
【
図7a】
図3のグルシコフオートマトンにスペンサー(Spencer)アルゴリズムを適用した結果をツリー形態で示した図である。
【
図7b】
図3のグルシコフオートマトンにスペンサーアルゴリズムを適用した結果をツリー形態で示した図である。
【
図7c】
図3のグルシコフオートマトンにスペンサーアルゴリズムを適用した結果をツリー形態で示した図である。
【
図8a】
図4のグルシコフオートマトンにスペンサー(Spencer)アルゴリズムを適用した結果をツリー形態で示した図である。
【
図8b】
図4のグルシコフオートマトンにスペンサーアルゴリズムを適用した結果をツリー形態で示した図である。
【
図8c】
図4のグルシコフオートマトンにスペンサーアルゴリズムを適用した結果をツリー形態で示した図である。
【
図9】
図4のグルシコフオートマトンにクラシカルマッチング(Classical matching)アルゴリズムを適用して文字列一致を確認する過程を示した図である。
【
図10a】
図4のグルシコフオートマトンにクラシカルマッチング(Classical matching)アルゴリズムを適用した結果をツリー形態で示した図である。
【
図10b】
図4のグルシコフオートマトンにクラシカルマッチングアルゴリズムを適用した結果をツリー形態で示した図である。
【
図10c】
図4のグルシコフオートマトンにクラシカルマッチングアルゴリズムを適用した結果をツリー形態で示した図である。
【
図11】本発明の他の実施形態によるオートマタ処理方法の一例を示すフローチャートである。
【発明を実施するための形態】
【0025】
以下、本発明を説明するにあたり、関連する公知機能に対してこの分野の技術者に自明な事項であって、本発明の要旨を不要に曖昧にする恐れがあると判断される場合には、その詳細な説明を省略し、本発明の一部実施形態を例示的な図面を介して詳細に説明する。
【0026】
正規表現式エンジンを使用するサービス提供者が有害な正規式パターンを使用する場合、エンジンは、DoS(Denial of Service)攻撃の媒介体として使用され得る。これをReDoS(Regular expression Denial of Service)という。ReDoSは、エンジンが有害なパターンと文字列とが一致するか否かを確認するのに必要な時間的、空間的資源が文字列の長さに比べて過度に(指数的に)大きいために発生する。現存する多くのプログラムは、正規表現式エンジンを使用しており、このため、ReDoS攻撃の危険に晒されている。
【0027】
本明細書では、既存の方式よりもさらに少ない時間的、空間的資源を要求する新しい正規表現式エンジンを提案する。より速い正規式パターン一致を確認可能にし、一層安定化したプログラムを作成することができる。
【0028】
本実施形態によるオートマタ処理装置は、クラシカルマッチング(Classical matching)アルゴリズムを適用してReDoSを根本的に遮断し、拡張文法が適用された正規表現式に対してスペンサー(Spencer)アルゴリズムを使用すべき場合にも、グルシコフ(Glushkov)オートマタを介してReDoSを防止する。
【0029】
本実施形態によるオートマタ処理装置は、グルシコフ(Glushkov)オートマタに該当する非決定性有限オートマタ(Nondeterministic Finite Automata、NFA)を生成し、拡張文法の包含の有無によってスペンサー(Spencer)アルゴリズムまたはクラシカルマッチング(Classical matching)アルゴリズムを選択的に適用する。
【0030】
本実施形態によるオートマタ処理装置が処理する正規式パターンは、正規表現式、あるいは拡張された正規表現式で表現された文字列のパターンを意味する。正規表現式エンジンは、正規式パターンと文字列が一致するか否かを確認するために使用され、これは、正規式パターンに該当する非決定性有限オートマトン(Nondeterministic finite state automaton、NFA)を作るNFA生成過程と、当該NFAに文字列に対する受諾経路があるか否かを確認するマッチング過程とを含む。
【0031】
オートマタ処理装置は、NFA生成過程で、正規式パターンをマッチングに効率的な形態のNFAであるグルシコフオートマタに変換する。正規式パターンによってスペンサーアルゴリズムとクラシカルマッチングアルゴリズムとを選択的に適用するハイブリッドマッチング過程を行う。トンプソンオートマタ、スペンサーアルゴリズムを使用する従来技術と比較して、速い時間内に正規式パターン一致を確認することができる。
【0032】
任意の文字σは、正規表現式であり、正規表現式r1、r2に対して(r1r2)、(r1|r2)、(r1
*)も正規表現式である。正規表現式rが表す言語L(r)は、次のように定義される。
(1)L(σ)={σ}
(2)L(r1r2)=L(r1)L(r2)
(3)L(r1│r2)=L(r1)∪L(r2)
(4)L(r1
*)=L(r1)*
【0033】
このように定義された正規表現式は、実生活の適用のために、キャプチャグループ、逆参照、及び前方探索という概念を活用して文法を拡張する。
【0034】
正規表現式の使用によって正規表現式を正規式パターンまたはパターンと称する。
【0035】
キャプチャグループ(n)nと逆参照\nは、正規表現式の一部に一致した部分文字列を再使用しようとするときに使用される。キャプチャグループは、グループ内部の正規表現式に一致した部分文字列を格納し、逆参照は、キャプチャグループで格納された部分文字列に一致する。例えば、(1ab|ba)1\1をababと一致させる場合、キャプチャグループ(1)1は、ababの先に出たabにab|baが一致することを確認し、abを格納する。その後、逆参照\1は、キャプチャグループ(1)1が格納したabを参照してababの後方のabを一致させる。同様に、当該パターンは、ababとbabaには一致するが、abbaやbaabには、逆参照で参照する文字列と実際一致を試みる文字列とが異なる。すなわち、パターン(1ab|ba)1\1は、abbaとbaabの文字列と一致しない。
【0036】
前方探索(?=)は、以後に出る文字列の前部が前方探索内部のパターンに一致するか否かを判断するためにのみ使用され、実際に一致させることではない。例えば、パターンa(?=b)(a│b)*で(?=b)は前方探索であり、当該前方探索内部のパターンはbである。パターンa(?=b)(a│b)*をabaに一致させる場合、パターンのaと文字列のaとを一致させた後、前方探索(?=b)は、残った文字列であるbaの前部が正規表現式bと一致するか判断する。前方探索は、これを確認した後、実際に一致させることではないので、後部の正規表現式(a│b)*は、文字列aでないbaと一致を試みる。この2つが一致するので、パターンa(?=b)(a│b)*全体は、全体文字列abaと一致する。同様に、当該パターンは、abaとabbには一致する。これとは異なり、aabやaaaのような文字列は、前方探索(?=b)でbと一致しないので、全体パターンa(?=b)(a│b)*に一致しない。
【0037】
キャプチャグループ、逆参照、前方探索などを拡張文法といい、これらを含む正規表現式を拡張された正規表現式という。本発明は、拡張された正規表現式を支援し、効率的に文字列と正規式パターンの一致を判断する正規表現式エンジンである。
【0038】
図1は、本発明の一実施形態によるオートマタ処理装置の一例を示すブロック図である。
図2は、拡張文法が含まれたトンプソン(Tohmpson)オートマトンの一例を示す図であり、
図3は、本発明の一実施形態によるオートマタ処理装置が処理する拡張文法が含まれたグルシコフ(Glushkov)オートマトンの一例を示す図であり、
図4は、本発明の一実施形態によるオートマタ処理装置が処理する拡張文法が含まれなかったグルシコフ(Glushkov)オートマトンの一例を示す図である。
【0039】
オートマタ処理装置110は、少なくとも1つのプロセッサ120、コンピュータ読み取り可能な格納媒体130、及び通信バス170を備える。
【0040】
プロセッサ120は、オートマタ処理装置110で動作するように制御する。例えば、プロセッサ120は、コンピュータ読み取り可能な格納媒体130に格納された1つ以上のプログラムを実行する。1つ以上のプログラムは、1つ以上のコンピュータで実行可能な命令語を含み、コンピュータで実行可能な命令語は、プロセッサ120により実行される場合、オートマタ処理装置110をして例示的な実施形態による動作を行うように構成される。
【0041】
コンピュータ読み取り可能な格納媒体130は、コンピュータで実行可能な命令語ないしプログラムコード、プログラムデータ、及び/又は他の適した形態の情報を格納するように構成される。コンピュータで実行可能な命令語ないしプログラムコード、プログラムデータ、及び/又は他の適した形態の情報は、入出力インターフェース150や通信インターフェース160を介しても与えられる。コンピュータ読み取り可能な格納媒体130に格納されたプログラム140は、プロセッサ120により実行可能な命令語の集合を含む。一実施形態において、コンピュータ読み取り可能な格納媒体130は、メモリ(ランダムアクセスメモリのような揮発性メモリ、不揮発性メモリ、またはこれらの適切な組み合わせ)、1つ以上の磁気ディスク格納デバイス、光学ディスク格納デバイス、フラッシュメモリデバイス、その他、オートマタ処理装置110によりアクセスされ、所望の情報を格納可能な他の形態の格納媒体、またはこれらの適切な組み合わせである。
【0042】
通信バス170は、プロセッサ120、コンピュータ読み取り可能な格納媒体130、及びオートマタ処理装置110の他の様々なコンポーネントを相互連結する。
【0043】
オートマタ処理装置110は、さらに、1つ以上の入出力装置のためのインターフェースを提供する1つ以上の入出力インターフェース150及び1つ以上の通信インターフェース160を備える。入出力インターフェース150及び通信インターフェース160は、通信バス170に連結される。入出力装置(図示せず)は、入出力インターフェース150を介してオートマタ処理装置110の他のコンポーネントに連結される。
【0044】
オートマタ処理装置は、拡張された正規表現式に対する効率的な一致確認のために、パターンに対するグルシコフオートマタというNFAを生成し、一致確認は、クラシカルマッチングアルゴリズムとスペンサーアルゴリズムの中で、与えられた正規式パターンによって効率的なアルゴリズムを使用するハイブリッドマッチングアルゴリズムである。核心になる正規式パターンに対するNFAの生成過程と、パターンと文字列との一致を確認する過程を行う。
【0045】
プロセッサは、正規式パターンに基づいて特定類型の非決定性有限オートマタを生成し、非決定性有限オートマタに対して文字列に対する受諾経路を確認するマッチングを行う。
【0046】
プロセッサは、各ノードが1つの文字に対応するように変換して非決定性有限オートマタを生成する。プロセッサは、正規式パターンをグルシコフ構造(Glushkov construction)によってグルシコフオートマタに変換して非決定性有限オートマタを生成する。
【0047】
NFA生成過程は、正規式パターンをNFAに変換する。正規式パターンは、正規表現式または拡張された正規表現式で表現され、拡張された正規表現式は、キャプチャグループ、逆参照、前方探索、またはこれらの組み合わせを含む拡張文法が適用され得る。
【0048】
与えられた正規式パターンに対してグルシコフ構造を使用してNFAを生成する。グルシコフ構造を介して生成されたNFAをグルシコフオートマタという。
【0049】
図3を参照すると、拡張された正規表現式(
1a|ab)
1(\w
*)
*\1に対するグルシコフオートマトンを示し、
図4を参照すると、拡張文法が含まれなかった正規式パターン(a│\w)
*bに対するグルシコフオートマトンを示す。このとき、\wは、全てのアルファベットに一致する特殊文字である。
【0050】
マッチング過程は、文字列が与えられた場合、一致するか否かを確認する。
【0051】
正規式パターンに対する文字列の一致確認過程をマッチング過程といい、このために、生成されたNFAを活用して、NFAの開始状態で当該文字列の文字を順に全て消費して、受諾状態に到達する経路が存在するか確認する。
【0052】
図4において文字列aabを受けたとき、NFAは、開始状態である0から始めてaを読み、状態1に進む。その次の文字であるaを読み、再度状態1で、最後の文字であるbを読み、受諾状態である状態3に進む。このような経路を文字列に対する経路といい、状況に応じて2個以上の経路が存在し得る。
【0053】
文字列の経路のうち、受諾状態に到達する経路を受諾経路という。受諾経路が存在するならば、正規式パターンと文字列とが一致し、そうでない場合、パターンと文字列とは一致しない。
【0054】
本実施形態は、正規式パターンが拡張文法を含むか否かによって次の2つのアルゴリズムのうちの1つを選んで適用する。クラシカルマッチング(Classical matching)アルゴリズムは、スペンサー(Spencer)アルゴリズムと比較して実行時間の分散が小さいが、正規表現式の拡張文法に対して(e.g.、逆参照、前方探索)適用不可能な場合がある。したがって、拡張された正規表現式に対してスペンサー(Spencer)アルゴリズムを適用する。
【0055】
プロセッサは、正規式パターンが拡張された正規表現式に該当するか否かによって第1のマッチングアルゴリズムまたは第2のマッチングアルゴリズムを選択的に適用してマッチングを行う。第1のマッチングアルゴリズムは、スペンサーアルゴリズムに対応し、第2のマッチングアルゴリズムは、クラシカルマッチングアルゴリズムに対応する。
【0056】
プロセッサは、正規式パターンが拡張文法を含むと、開始状態から出発して、各文字を介して移動できる種々の次の状態(言い換えると、各文字を介して移動可能な複数の次の状態)のうちの1つを選択して経路を探索し、選択しなかった状態は、文字列上の位置とともに別に格納し、先に選択した状態で進んだ経路のうちに、受諾経路があれば、マッチングを終了し、受諾経路を探すことができない場合に、最も最近に格納された状態と位置に基づいて新しい経路を探索する第1のマッチングアルゴリズムを適用する。
【0057】
プロセッサは、正規式パターンが拡張文法を含まなければ、開始状態から出発して、各文字を介して移動できる全ての次の状態を同時に考慮し、全ての文字を消費した時点で現在状態が受諾状態を含む場合に受諾経路が存在すると判断する第2のマッチングアルゴリズムを適用する。
【0058】
既存のエンジン(例えば、JAVA(登録商標)、Pythonなど)は、トンプソン(Thompson)オートマタを基盤とし、表現式内の文字等と演算子に対して再帰的にNFAを生成する方式を適用する。これは、NFAの形態が直観的であり、実現が簡単であるという長所を有するが、文字を消費しない幹線を有し、これは、一致判定を行うのに非効率的な形態である。
【0059】
図2を参照すると、
図3と同じ正規表現式に該当するトンプソン(Thompson)オートマトンを示す。すなわち、拡張文法が含まれた場合のトンプソンオートマトンを示す。一部ノードは、可読性のために省略する。
【0060】
本実施形態は、グルシコフオートマタを基盤とし、これは、各ノードが1つの文字に対応する。結果的に、トンプソンオートマタで表れる1つ以上のノードがグルシコフオートマトンで1つのノードに縮約される。
【0061】
このような縮約の具体的な例は、
図2のトンプソンオートマトンで長方形に表示された領域1、2、3のノードが、
図3のグルシコフオートマトンで各々ノード1、6、7に縮約されることによって確認することができる。
【0062】
NFAは、特定入力シンボルに対応する次の状態が複数個であり得る。εは、ストリングの長さが0であることを意味するシンボルに該当し、イプシロン(epsilon)という。ε変換は、εを見てから行くことができる状態が存在するということを意味する。入力シンボルが入らなくても状態転移が可能である。
【0063】
グルシコフ構造は、ε変換がない。開始状態は内変換がない。各状態の全ての内変換は、同じラベルを有する。状態の数は、正規表現式の記号数より1つがさらに多い。
【0064】
グルシコフ構造は、正規表現式の形態類型によって再帰的に定義されたnull、first、last、及びfollowの4つの関数を反復的に適用して得ることができる。
【0065】
A.Bruggemann-Klein、「Regular expressions into finite automata」、Theoretical Computer Science、1993.を参照すると、グルシコフ(Glushkov)オートマタ生成に関する内容を確認することができる。
【0066】
図5a~
図5cは、
図2のトンプソンオートマトンにスペンサー(Spencer)アルゴリズムを適用した結果をツリー形態で示した図である。
【0067】
パターンからNFAを生成した後、既存のエンジンは、マッチング過程においてスペンサーアルゴリズムに基づいて一致確認を行うことができる。スペンサーアルゴリズムの全ての経路を探索するという特徴は、拡張文法を支援するために必須であるが、そうでない場合、種々の経路で共通する部分を重複して確認する結果を引き起こす。
【0068】
図5を参照すると、拡張文法を含むトンプソンオートマトンに文字列(a)a0、(b)aa0、(c)aaa0に対するスペンサーアルゴリズムを行った結果を各々ツリー形態で表現したものであり、観察を介してトンプソンオートマトンでは、ReDoSの原因になる一致確認時間の指数的増加が表れることを確認することができる。
【0069】
スペンサーアルゴリズムが同じ経路を重複して探索する具体的な例は、
図5aないし
図5cにおいてTで表記された過程が繰り返されることによって確認することができる。すなわち、拡張文法が含まれた有害パターンによる従来トンプソンオートマトンとスペンサーアルゴリズムでのReDoS発生を確認することができる。
【0070】
本実施形態は、拡張文法を使用しない場合、クラシカルマッチングアルゴリズムを使用してこれを防止する。
【0071】
図6は、
図3のグルシコフオートマトンにスペンサー(Spencer)アルゴリズムを適用して文字列一致を確認する過程を示した図である。
【0072】
正規表現式が拡張文法を含んでいる場合、スペンサーアルゴリズムを使用してマッチングを行う。当該アルゴリズムは、開始状態から出発して、各文字を介して移動できる種々の次の状態のうちの1つを選択して経路を探索する。このとき、選択しなかった状態は、文字列上の位置とともに別に格納する。先に選択した状態で進んだ経路のうち、受諾経路があれば、マッチングを終了する。受諾経路を探すことができない場合、最も最近に格納された状態と位置に基づいて新しい経路を探索する。
【0073】
図6を参照すると、拡張文法を含むNFAに基づいて文字列ababと一致を確認する過程を確認することができる。
【0074】
図7a~
図7cは、
図3のグルシコフオートマトンにスペンサー(Spencer)アルゴリズムを適用した結果をツリー形態で示した図である。
【0075】
図7は、拡張文法を含むグルシコフオートマトンで行ったことを表現したものであって、グルシコフオートマトンでは、一致確認時間の指数的増加が表れないことを確認することができる。
図2及び
図3に示す2つのオートマトンは共に拡張文法が含まれた正規式パターン(
1a|ab)
1(\w
*)
*\1に該当するNFAであり、従来技術では有害性を含んでいたパターンが、本実施形態では有害性を含まない。すなわち、グルシコフオートマトンを介してのパターンの有害性解消を確認することができる。
【0076】
図8a~
図8cは、
図4のグルシコフオートマトンにスペンサー(Spencer)アルゴリズムを適用した結果をツリー形態で示した図である。
【0077】
図8を参照すると、拡張文法を含まないグルシコフオートマトンに文字列(a)a0、(b)aa0、(c)aaa0に対するスペンサーアルゴリズムを行った結果を表現したものであり、観察を介してReDoSの原因になる一致確認時間の指数的増加が表れることを確認することができる。すなわち、拡張文法が含まれなかった有害パターンによるReDoS発生を確認することができる。
【0078】
図9は、
図4のグルシコフオートマトンにクラシカルマッチング(Classical matching)アルゴリズムを適用して文字列一致を確認する過程を示した図である。
【0079】
正規表現式が拡張文法を含んでいない場合、クラシカルマッチングアルゴリズムを使用する。当該アルゴリズムは、開始状態から出発して、各文字を介して移動できる全ての次の状態を同時に考慮する。全ての文字を消費した時点で現在状態が受諾状態を含む場合、受諾経路が存在すると判断する。
【0080】
図9を参照すると、拡張文法を含まないNFAに基づいてababと一致を確認する過程を確認することができる。
【0081】
図10a~
図10cは、
図4のグルシコフオートマトンにクラシカルマッチング(Classical matching)アルゴリズムを適用した結果をツリー形態で示した図である。
【0082】
拡張文法を含まないオートマトンと文字列に対してクラシカルマッチングアルゴリズムを行った結果を示したものであって、これを介してクラシカルマッチングアルゴリズムが一致確認時間の指数的増加を遮断することを確認することができる。すなわち、クラシカルマッチングを介してのパターンの有害性解消を確認することができる。
【0083】
図11は、本発明の他の実施形態によるオートマタ処理方法の一例を示すフローチャートである。
【0084】
オートマタ処理方法は、オートマタ処理装置により行われる。
【0085】
ステップS10では、正規式パターンに基づいて特定類型の非決定性有限オートマタを生成する。
【0086】
ステップS20では、非決定性有限オートマタに対して文字列に対する受諾経路を確認するマッチングを行う。
【0087】
非決定性有限オートマタを生成するステップ(S10)は、各ノードが1つの文字に対応するように変換する。非決定性有限オートマタを生成するステップ(S10)は、正規式パターンをグルシコフ構造(Glushkov construction)によってグルシコフオートマタに変換する。
【0088】
正規式パターンは、正規表現式または拡張された正規表現式で表現され、拡張された正規表現式は、キャプチャグループ、逆参照、前方探索、またはこれらの組み合わせを含む拡張文法が適用され得る。
【0089】
マッチングステップ(S20)は、正規式パターンが拡張された正規表現式に該当するか否かによって第1のマッチングアルゴリズムまたは第2のマッチングアルゴリズムを選択的に適用する。
【0090】
マッチングステップ(S20)は、正規式パターンが拡張文法を含むと、開始状態から出発して、各文字を介して移動できる種々の次の状態のうちの1つを選択して経路を探索し、選択しなかった状態は、文字列上の位置とともに別に格納し、先に選択した状態で進んだ経路のうち、受諾経路があれば、マッチングを終了し、受諾経路を探すことができない場合に、最も最近に格納された状態と位置に基づいて新しい経路を探索する第1のマッチングアルゴリズムを適用する。
【0091】
マッチングステップ(S20)は、正規式パターンが拡張文法を含まなければ、開始状態から出発して、各文字を介して移動できる全ての次の状態を同時に考慮し、全ての文字を消費した時点で現在状態が受諾状態を含む場合に受諾経路が存在すると判断する第2のマッチングアルゴリズムを適用する。
【0092】
オートマタ処理装置は、ハードウェア、ファームウェア、ソフトウェア、またはこれらの組み合わせによりロジック回路内で実現され、汎用または特定目的コンピュータを用いて実現され得る。装置は、固定配線型(Hardwired)機器、フィールドプログラム可能なゲートアレイ(Field Programmable Gate Array、FPGA)、注文型半導体(Application Specific Integrated Circuit、ASIC)などを利用して実現される。また、装置は、1つ以上のプロセッサ及びコントローラを含むシステムオンチップ(System on Chip、SoC)で実現され得る。
【0093】
オートマタ処理装置は、ハードウェア的要素が設けられたコンピューティングデバイスまたはサーバにソフトウェア、ハードウェア、またはこれらを組み合わせる形態で搭載される。コンピューティングデバイスまたはサーバは、各種機器または有線/無線通信網と通信を行うための通信モデムなどの通信装置、プログラムを実行するためのデータを格納するメモリ、プログラムを実行して演算及び命令するためのマイクロプロセッサなどを全部または一部備えた様々な装置を意味する。
【0094】
図11では、それぞれの過程を順次実行することを記載しているが、これは、例示的に説明したものに過ぎず、この分野の技術者であれば、本発明の実施形態の本質的な特性から逸脱しない範囲で
図11に記載された順序を変更して実行するか、または1つ以上の過程を並列的に実行するか、他の過程を追加することと様々に修正及び変形して適用可能である。
【0095】
本実施形態等による動作は、様々なコンピュータ手段を介して行われるプログラム命令形態で実現されて、コンピュータ読み取り可能な媒体に記録される。コンピュータ読み取り可能な媒体は、実行のためにプロセッサに命令語を提供するのに参加した任意の媒体を表す。コンピュータ読み取り可能な媒体は、プログラム命令、データファイル、データ構造、またはこれらの組み合わせを含む。例えば、磁気媒体、光記録媒体、メモリなどがある。コンピュータプログラムは、ネットワークで連結されたコンピュータシステム上に分散されて、分散方式にてコンピュータが読み取ることのできるコードが格納され、実行される。本実施形態を実現するための機能的な(Functional)プログラム、コード、及びコードセグメントは、本実施形態が属する技術分野のプログラマー達により容易に推論され得る。
【0096】
本実施形態等は、本発明の技術思想を説明するためのものであって、このような実施形態によって本発明の技術思想の範囲が限定されるものではない。本発明と同等な範囲内にあるあらゆる技術思想は、本発明の技術範囲に含まれるものと解釈されるべきである。
【符号の説明】
【0097】
110 オートマタ処理装置
120 プロセッサ
130 コンピュータ読み取り可能な格納媒体
140 プログラム
150 入出力インターフェース
160 通信インターフェース
170 通信バス
【手続補正書】
【提出日】2021-12-21
【手続補正1】
【補正対象書類名】明細書
【補正対象項目名】0025
【補正方法】変更
【補正の内容】
【0025】
本発明は、下記の研究課題をもって支援を受けて出願されました。
〔この発明を支援した国家研究開発事業〕
[課題固有番号] 1711126002
[課題番号] 2018-0-00276-004
[省庁名] 科学技術情報通信部
[課題管理(専門)機関名] 情報通信企画評価院
[研究事業名] 情報通信放送研究開発事業
[研究課題名] ディープラーニングに基づく悪性コードパターンルール
セット生成自動化源泉技術開発(4/5)
[寄与率] 1/2
[課題実行機関名] 延世大学校産学協力団
[研究期間] 2021.01.01~2021.12.31
〔この発明を支援した国家研究開発事業〕
[課題固有番号] 1711126082
[課題番号] 2020-0-01361-002
[省庁名] 科学技術情報通信部
[課題管理(専門)機関名] 情報通信企画評価院
[研究事業名] 情報通信放送研究開発事業
[研究課題名] 人工知能大学院支援事業(1段階)(2/5)
[寄与率] 1/2
[課題実行機関名] 延世大学校産学協力団
[研究期間] 2021.01.01~2021.12.31
以下、本発明を説明するにあたり、関連する公知機能に対してこの分野の技術者に自明な事項であって、本発明の要旨を不要に曖昧にする恐れがあると判断される場合には、その詳細な説明を省略し、本発明の一部実施形態を例示的な図面を介して詳細に説明する。