(57)【要約】【課題】より高速な文字列探索処理を実現できる情報処理装置および情報処理プログラムを提供する。【解決手段】処理対象の入力文字列に対して、予め定められた複数のパターンのいずれかと一致する部分文字列を探索する情報処理装置が提供される。情報処理装置は、複数のパターンを順序付けされたノードで示す木構造の探索ルールを保持する記憶部と、探索ルールに含まれるルートおよび一部のノードからなる部分探索ルールを用いて、入力文字列の異なる部分集合に対する探索処理をそれぞれ実行する第１の処理部と、第１の処理部による探索結果を利用しつつ、探索ルールを用いて入力文字列に対する探索処理を実行する第２の処理部とを含む。【選択図】図６
2014026312.tif 000002
【特許請求の範囲】
【請求項１】
処理対象の入力文字列に対して、予め定められた複数のパターンのいずれかと一致する部分文字列を探索する情報処理装置であって、
前記複数のパターンを順序付けされたノードで示す木構造の探索ルールを保持する記憶部と、
前記探索ルールに含まれるルートおよび一部のノードからなる部分探索ルールを用いて、前記入力文字列の異なる部分集合に対する探索処理をそれぞれ実行する第１の処理部と、
前記第１の処理部による探索結果を利用しつつ、前記探索ルールを用いて前記入力文字列に対する探索処理を実行する第２の処理部とを備える、情報処理装置。
【請求項２】
前記第１の処理部は、
隣接する部分集合の間では少なくとも予め定められた文字数を重複させつつ、前記入力文字列に対して複数の部分集合を設定する手段と、
前記複数の部分集合の各々に対する前記部分探索ルールを用いた探索処理を並列実行する手段とを含む、請求項１に記載の情報処理装置。
【請求項３】
前記第２の処理部は、前記第１の処理部による探索処理において、その部分集合のいずれについても前記部分探索ルールと一致しなかった入力文字列について、前記探索ルールを用いた探索処理の対象から除外する、請求項２に記載の情報処理装置。
【請求項４】
前記第１の処理部は、前記入力文字列に対して設定される部分集合の数と少なくとも同数の処理要素を含む、請求項２または３に記載の情報処理装置。
【請求項５】
前記第２の処理部は、前記第１の処理部による探索処理において、前記部分探索ルールと一致した部分文字列の位置を基準として、前記探索ルールを用いた探索処理を実行する、請求項１〜４のいずれか１項に記載の情報処理装置。
【請求項６】
前記第２の処理部は、前記第１の処理部による前記部分探索ルールと一致しなかった前記入力文字列の部分について、前記探索ルールを用いた探索処理をスキップする、請求項１〜４のいずれか１項に記載の情報処理装置。
【請求項７】
前記入力文字列は、ネットワークを転送されるパケットデータを含む、請求項１〜６のいずれか１項に記載の情報処理装置。
【請求項８】
処理対象の入力文字列に対して、探索ルールによって予め定められた複数のパターン、のいずれかと一致する部分文字列を探索する処理情報処理プログラムであって、前記探索ルールは、前記複数のパターンを順序付けされたノードで示す木構造を有し、前記処理情報処理プログラムは、コンピュータに、
前記探索ルールに含まれるルートおよび一部のノードからなる部分探索ルールを用いて、前記入力文字列の異なる部分集合に対する第１の探索処理をそれぞれ実行するステップと、
前記第１の探索処理による探索結果を利用しつつ、前記探索ルールを用いて前記入力文字列に対する探索処理を実行するステップとを実行させる、情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理対象の入力文字列に対して予め定められた複数のパターンのいずれかと一致する部分文字列を探索する情報処理装置および情報処理プログラムに関する。
【背景技術】
【０００２】
従来から、予め定められたパターンと一致する部分文字列を入力文字列（データ列）から探索する処理（以下「文字列探索処理」とも称す。）は様々な分野に応用されている。このような文字列探索処理の実装形態（アルゴリズム）については種々の方法が提案されている。その一つのアルゴリズムとして、非特許文献１に開示されるエイホ−コラシック法（Aho-Corasick algorithm：以下「ＡＣ法」とも称す。）がある。このＡＣ法は、入力文字列に対して、予め定められたパターンの各要素を順次探索する辞書式マッチングアルゴリズムである。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Alfred V. Aho and Margaret J. Corasick, Bell Labs, "Efficient String Matching: An Aid to Bibliographic Search", Communications of the ACM, Volume 18 Number 6, June 1975
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上述のＡＣ法は、他の文字列探索処理のアルゴリズムに比較して高速であるが、より大量の文字列をより高速に処理するためには、さらなる改良が必要である。
【０００５】
そこで、本発明は、かかる問題を解決するためになされたものであり、より高速な文字列探索処理を実現できる情報処理装置および情報処理プログラムを提供することである。
【課題を解決するための手段】
【０００６】
本発明のある局面に従えば、処理対象の入力文字列に対して、予め定められた複数のパターンのいずれかと一致する部分文字列を探索する情報処理装置が提供される。情報処理装置は、複数のパターンを順序付けされたノードで示す木構造の探索ルールを保持する記憶部と、探索ルールに含まれるルートおよび一部のノードからなる部分探索ルールを用いて、入力文字列の異なる部分集合に対する探索処理をそれぞれ実行する第１の処理部と、第１の処理部による探索結果を利用しつつ、探索ルールを用いて入力文字列に対する探索処理を実行する第２の処理部とを含む。
【０００７】
好ましくは、第１の処理部は、隣接する部分集合の間では少なくとも予め定められた文字数を重複させつつ、入力文字列に対して複数の部分集合を設定する手段と、複数の部分集合の各々に対する部分探索ルールを用いた探索処理を並列実行する手段とを含む。
【０００８】
さらに好ましくは、第２の処理部は、第１の処理部による探索処理において、その部分集合のいずれについても部分探索ルールと一致しなかった入力文字列について、探索ルールを用いた探索処理の対象から除外する。
【０００９】
好ましくは、第１の処理部は、入力文字列に対して設定される部分集合の数と少なくとも同数の処理要素を含む。
【００１０】
好ましくは、第２の処理部は、第１の処理部による探索処理において、部分探索ルールと一致した部分文字列の位置を基準として、探索ルールを用いた探索処理を実行する。
【００１１】
好ましくは、第２の処理部は、第１の処理部による部分探索ルールと一致しなかった入力文字列の部分について、探索ルールを用いた探索処理をスキップする。
【００１２】
好ましくは、入力文字列は、ネットワークを転送されるパケットデータを含む。
本発明の別の局面に従えば、処理対象の入力文字列に対して、探索ルールによって予め定められた複数のパターン、のいずれかと一致する部分文字列を探索する処理情報処理プログラムが提供される。探索ルールは、複数のパターンを順序付けされたノードで示す木構造を有する。処理情報処理プログラムは、コンピュータに、探索ルールに含まれるルートおよび一部のノードからなる部分探索ルールを用いて、入力文字列の異なる部分集合に対する第１の探索処理をそれぞれ実行するステップと、第１の探索処理による探索結果を利用しつつ、探索ルールを用いて入力文字列に対する探索処理を実行するステップとを実行させる。
【発明の効果】
【００１３】
本発明によれば、より高速な文字列探索処理を実現できる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施の形態に従う情報処理装置を含むネットワークシステム１の全体構成を示す模式図である。
【図２】本発明の実施の形態に従う情報処理装置の機能構成を示す模式図である。
【図３】本発明の関連技術に従う探索ルールの一例を示す図である。
【図４】本発明の関連技術に従う探索ルールを用いた文字列探索処理の動作例を説明するための図である。
【図５】本発明の実施の形態に従う情報処理装置の装置構成を示す模式図である。
【図６】本発明の実施の形態に従う文字列探索処理のアルゴリズムを説明するための図である。
【図７】本発明の実施の形態に従う文字列探索処理において利用される探索ルールおよび部分探索ルールの一例を示す図である。
【図８】本発明の実施の形態に従う文字列探索処理の前処理を説明するための図である。
【図９】本発明の実施の形態に従う文字列探索処理の処理手順を示すフローチャートである。
【図１０】本発明の実施の形態の変形例に従う並列化を説明するための図である。
【発明を実施するための形態】
【００１５】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰り返さない。
【００１６】
本発明に係る情報処理装置は、様々な分野における文字列探索処理に適用可能であるが、以下に説明する実施の形態においては、ネットワーク上を転送されるパケットデータに対する処理に文字列探索処理を応用した例を説明する。
【００１７】
＜Ａ．全体構成＞
図１は、本発明の実施の形態に従う情報処理装置１０を含むネットワークシステム１の全体構成を示す模式図である。図１を参照して、ネットワークシステム１は、ネットワーク２と、ネットワーク２に接続された情報処理装置１０と、情報処理装置１０に接続されたパーソナルコンピュータ３およびサーバ装置４とを含む。
【００１８】
情報処理装置１０は、典型的には、パーソナルコンピュータ３およびサーバ装置４がネットワーク２に接続された何らかの装置との間でやり取りするパケットデータを解析する。このパケットデータの解析処理としては、（１）コンピュータウィルスの混入やスパムメールの排除といったセキュリティ機能、（２）ネットワーク２のいずれかにおいて発生している異常の検出およびその位置、原因の特定といったネットワーク障害管理機能、（３）ファイアウォール、フィルタリング（ペアレントコントロール）、不正アクセス防御といったアクセス制御機能、ならびに、（４）優先制御、ＱｏＳ（Quality of Service）制御、シェイピングといったトラフィック管理機能、などが挙げられる。
【００１９】
これらのパケット解析では、入来したパケットデータに予め定められたパターンと一致する部分文字列が含まれているか否かに基づいて、それぞれのパケットデータに対して、何らかの処理が必要であるか、および／または、どのような処理が必要であるかが判断される。
【００２０】
＜Ｂ．情報処理装置の機能構成＞
次に、情報処理装置１０の機能構成について説明する。図２は、本発明の実施の形態に従う情報処理装置１０の機能構成を示す模式図である。
【００２１】
図２を参照して、情報処理装置１０は、その機能構成として、パケット分類エンジン１２と、分類定義記憶部１４と、パケット解析エンジン１６と、解析定義記憶部１８とを含む。
【００２２】
パケット分類エンジン１２は、分類定義記憶部１４に記憶されている分類定義ファイル１４ａに記述されている分類定義に従って、入来したパケットデータを分類する。分類定義は、種別毎に含まれるパターン（文字列）を定義する。すなわち、入来したパケットデータが予め定められた複数のパターンのいずれかと一致する部分文字列を含む場合には、対応する分類（種別）の識別情報が付与された後、パケット解析エンジン１６へ転送される。これに対して、入来したパケットデータが予め定められた複数のパターンのいずれとも一致（部分一致）しない場合には、パケット解析エンジン１６へ転送されることなく、廃棄される。
【００２３】
より具体的な一例として、入来したパケットデータのヘッダ情報を用いて分類が行なわれる。例えば、同一の送信先および／または送信元を有する一連のパケットデータを同一のグループに分類するといった具合である。
【００２４】
パケット分類エンジン１２は、後述するような文字列探索処理のアルゴリズムを利用して、入来したパケットデータを分類する。
【００２５】
パケット解析エンジン１６は、解析定義記憶部１８に記憶されている解析定義ファイル１８ａに記述されている解析定義に従って、分類されたパケットデータの別にその内容を解析する。この解析された内容は、解析結果として出力される。解析定義ファイル１８ａは、上述のパケットデータの解析処理を実現するための情報を含む。
【００２６】
＜Ｃ．関連技術＞
本実施の形態に従う文字列探索処理のアルゴリズムについて説明する前に、まず、本発明の関連技術について説明する。より具体的には、主としてＡＣ法について説明する。
【００２７】
ＡＣ法は、処理対象の入力文字列に対して、予め定められた複数のパターンのいずれかと一致する部分文字列を探索する辞書式マッチングアルゴリズムである。より具体的には、予め定められた複数のパターンを順序付けされたノードで示す木構造の探索ルールが使用される。この探索ルールは、順序付き木構造の一種であるトライ（Trie）木構造を用いるとともに、ノードのリンク順序を利用して、探索対象のパターンを定義する。
【００２８】
図３は、本発明の関連技術に従う探索ルール１００の一例を示す図である。図３（ａ）は、探索ルールをオートマトン表現で示し、図３（ｂ）は、図３（ａ）の探索ルールにおけるｆａｉｌｕｒｅ遷移を示す。図３において、丸印の中に記載の数字は遷移の状態値を示す。
【００２９】
図３（ａ）を参照して、探索ルール１００は、ルート１００２と、ルート１００２に繋がる複数のノード１００４を含む。ノード間の矢印に記載の文字が探索対象の文字列の各要素を示す。すなわち、図３（ａ）の探索ルール１００は、｛ａｂ｝，｛ｂａｂ｝，｛ｂｄ｝の３つを探索対象のパターンとして定義する。
【００３０】
ＡＣ法では、処理対象の入力文字列に含まれる各要素との一致／不一致に応じて、探索ルール１００に定義された状態値を順次遷移させる。そして、予め定められた文字列を示すノード（以下、対象ノード）まで遷移できた場合に、対応するパターンと一致する部分文字列が含まれていると判断できる。
【００３１】
例えば、入力文字列に文字列「ａｂ」が含まれている場合には、まず文字「ａ」が発見されて、ルート（状態値「０」）から文字「ａ」に関連付けられた状態値「１」のノードへ遷移する。続いて文字「ｂ」が発見されると、状態値「１」のノードから文字「ｂ」に関連付けられた状態値「２」のノードへ遷移する。この状態値「２」のノードは対象ノードであるので、入力文字列にパターン｛ａｂ｝が含まれていると判断できる。
【００３２】
このようにして、予め定められた複数のパターンのいずれかと一致する部分文字列が入力文字列から順次探索される。
【００３３】
実際の探索ルール１００には、予め定められたパターンとは一致しない場合に、他のノードまたはルートへ遷移するためのリンクが設定される。より具体的には、図３（ｂ）に示すようなｆａｉｌｕｒｅ遷移が定義される（図３（ｂ）において破線で示す矢印）。
【００３４】
例えば、入力文字列に文字列「ａａ」が含まれている場合には、まず文字「ａ」が発見されて、ルート（状態値「０」）から文字「ａ」に関連付けられた状態値「１」のノードへ遷移する。続いて文字「ａ」が発見されると、状態値「１」のノードへは遷移せず、ルートへ遷移する。すなわち、いずれのパターンとも一致しないと判断できる。
【００３５】
次に、図３に示す探索ルール１００を用いた文字列探索処理の動作例について説明する。図４は、本発明の関連技術に従う探索ルール１００を用いた文字列探索処理の動作例を説明するための図である。図４（ａ）は、入力文字列の一例を示し、図４（ｂ）は、図４（ａ）の入力文字列に対応する状態遷移の一例を示し、図４（ｃ）は、図４（ｂ）の状態遷移を時系列に示す。上述したように、｛ａｂ｝，｛ｂａｂ｝，｛ｂｄ｝の３つが探索対象のパターンとして予め定められているとする。
【００３６】
図４（ａ）に示す例では、探索対象のパターン｛ａｂ｝と一致する部分文字列が入力文字列の先頭から１文字目および２文字目に存在し、探索対象のパターン｛ｂａｂ｝と一致する部分文字列が入力文字列の先頭から４文字目〜６文字目に存在し、探索対象のパターン｛ｂｂ｝と一致する部分文字列が入力文字列の先頭から６文字目および７文字目に存在するとする。
【００３７】
図４（ｂ）を参照して、入力文字列の１文字目が文字「ａ」であるので、ルート（状態値「０」）から文字「ａ」に関連付けられた状態値「１」のノードへ遷移する（図４（ｂ）のステップ（１））。続いて、入力文字列の２文字目が文字「ｂ」であるので、状態値「１」のノードから文字「ｂ」に関連付けられた状態値「２」のノードへ遷移する（図４（ｂ）のステップ（２））。この状態値「２」のノードは対象ノードであるので、当該ノードに到達するまでのノードに関連付けられたパターン｛ａｂ｝が入力文字列に含まれていると判断される。
【００３８】
状態値「２」のノードは対象ノードであるので、入力文字列の３文字目が入力されると、状態値「２」のノードから状態値「３」のノードへｆａｉｌｕｒｅ遷移する（図４（ｂ）のステップ（３））。ここで、入力文字列の３文字目が文字「ｃ」であるので、状態値「３」のノードからルート（状態値「０」）へさらにｆａｉｌｕｒｅ遷移する（図４（ｂ）のステップ（４））。
【００３９】
続いて、入力文字列の４文字目が文字「ｂ」であるので、ルート（状態値「０」）から文字「ｂ」に関連付けられた状態値「３」のノードへ遷移する（図４（ｂ）のステップ（５））。続いて、入力文字列の５文字目が文字「ａ」であるので、状態値「３」のノードから文字「ａ」に関連付けられた状態値「４」のノードへ遷移する（図４（ｂ）のステップ（６））。さらに、入力文字列の６文字目が文字「ｂ」であるので、状態値「４」のノードから文字「ｂ」に関連付けられた状態値「５」のノードへ遷移する（図４（ｂ）のステップ（７））。この状態値「５」のノードは対象ノードであるので、当該ノードに到達するまでのノードに関連付けられたパターン｛ｂａｂ｝が入力文字列に含まれていると判断される。
【００４０】
状態値「５」のノードは対象ノードであるので、入力文字列の７文字目が入力されると、状態値「５」のノードから状態値「２」のノードへｆａｉｌｕｒｅ遷移する（図４（ｂ）のステップ（８））。さらに、状態値「２」のノードは対象ノードであるので、状態値「２」のノードから状態値「３」のノードへｆａｉｌｕｒｅ遷移する（図４（ｂ）のステップ（９））。ここで、入力文字列の７文字目が文字「ｄ」であるので、状態値「３」のノードから文字「ｄ」に関連付けられた状態値「６」のノードへ遷移する（図４（ｂ）のステップ（１０））。この状態値「６」のノードは対象ノードであるので、当該ノードに到達するまでのノードに関連付けられたパターン｛ｂｄ｝が入力文字列に含まれていると判断される。
【００４１】
状態値「６」のノードは対象ノードであるので、入力文字列の８文字目が入力されると、状態値「６」のノードからルート（状態値「０」）へｆａｉｌｕｒｅ遷移する（図４（ｂ）のステップ（１１））。ここで、入力文字列の８文字目が文字「ｅ」であるので、ルート（状態値「０」）からの遷移は生じない。
【００４２】
このような一連の遷移動作によって、図４（ｃ）に示すように、予め定められた複数のパターンのいずれかと一致する部分文字列が探索される。図４（ｃ）において、三角印（△）は、パターンと一致する部分文字列の検出位置を示す。
【００４３】
上述のように、ＡＣ法では、予め定められた複数のパターンのマッチングをより高速に一斉探索できる。
【００４４】
しかしながら、ＡＣ法は、文字列探索処理を比較的高速に実行できるものの、より大量の文字列をより高速に処理するためには、さらなる改良が必要である。例えば、ネットワーク上を転送されるパケットデータに対する解析処理に適用しようとすれば、リアルタイム性をより高める必要がある。そこで、本実施の形態に従う情報処理装置は、以下に説明する文字列探索処理のアルゴリズムを採用する。
【００４５】
＜Ｄ．情報処理装置の装置構成＞
まず、本実施の形態に従う情報処理装置１０の装置構成について説明する。情報処理装置１０は、処理対象の入力文字列に対して、予め定められた複数のパターンのいずれかと一致する部分文字列を探索するコンピュータである。以下の説明においては、一例として、処理対象の入力文字列は、ネットワーク上を転送されるパケットデータであるとする。
【００４６】
図５は、本発明の実施の形態に従う情報処理装置１０の装置構成を示す模式図である。図５を参照して、情報処理装置１０は、受信部（Ｒｘ）１０２と、受信キュー１０４と、メイン処理部１１０と、スイッチ１４０と、解析処理部１４２と、送信部（Ｔｘ）１４４とを含む。
【００４７】
受信部１０２は、ネットワーク２に転送されるパケットを受信する。より具体的には、受信部１０２は、ネットワーク２上の信号をデータ列に復調する回路、復調されたデータ列をパケットへデコードする回路、受信できなかったデータ列の再送などを制御する回路を含む。
【００４８】
受信部１０２で受信されたパケットは、受信キュー１０４へ順次記憶される。受信キュー１０４は、受信されたパケットを一時的に記憶するバッファであり、ＦＩＦＯ（First In First Out）形式のメモリが利用される。
【００４９】
メイン処理部１１０は、本実施の形態に従う文字列探索処理を実行する演算主体である。より具体的には、メイン処理部１１０は、主メモリ１１２と、フラッシュメモリ１１４と、前処理部１２０と、後処理部１３０とを含む。これらのコンポーネントは、バス１１８を介して互いにデータ通信可能に接続される。
【００５０】
主メモリ１１２は、前処理部１２０および後処理部１３０でのプログラムの実行に必要なデータを一時的に記憶するワーキングメモリとして機能する。より具体的には、主メモリ１１２には、プロセッサで実行されるプログラムが展開されるとともに、プログラムの実行に必要な各種データが一時的に記憶される。
【００５１】
フラッシュメモリ１１４は、各種データを不揮発的に記憶する。典型的に、フラッシュメモリ１１４は、本実施の形態に従う文字列探索処理を実現するための情報処理プログラム１１６、探索対象のパターンを定義する探索ルール１５０、および探索ルール１５０の部分集合である部分探索ルール１５１を記憶する。すなわち、フラッシュメモリ１１４は、複数のパターンを順序付けされたノードで示す木構造の探索ルール１５０と、探索ルール１５０に含まれるルートおよび一部のノードからなる部分探索ルール１５１を保持する。
【００５２】
情報処理プログラム１１６は、任意の方法で、情報処理装置１０へインストールされる。より具体的には、情報処理装置１０は、各種の記録媒体に格納された情報処理プログラム１１６を対応する機器で読み取り、その読み取った情報処理プログラム１１６をフラッシュメモリ１１４へ記憶する。このような記録媒体としては、一例として、Ｂｌｕ−ｒａｙ（登録商標）ディスク、ＤＶＤ（Digital Versatile Disc）、ＣＤ（Compact Disk）、ＭＤ（Mini Disk）といった光学記録媒体、ＭＯ（Magneto-Optical）ディスクといった光磁気記録媒体、フレキシブルディスクやカセットテープといった磁気記録媒体、ＩＣ（Integrated Circuit）メモリといった半導体記録媒体などを用いることができる。
【００５３】
あるいは、ネットワークを通じて情報処理プログラム１１６を提供してもよい。具体的には、ネットワーク上に設けられたサーバ装置に情報処理プログラム１１６を保持させるとともに、情報処理装置１０からの要求に応答して、情報処理プログラム１１６をダウンロードする。
【００５４】
探索ルール１５０および部分探索ルール１５１についても、情報処理プログラム１１６と同様の方法でインストールまたは更新することができる。情報処理プログラム１１６、探索ルール１５０および部分探索ルール１５１は、単一のパッケージとして記録媒体に格納した上で配布してもよいし、それぞれを単独に配布してもよい。あるいは、探索ルール１５０のみを流通させ、部分探索ルール１５１については探索ルール１５０から動的に生成してもよい。
【００５５】
再度図２を参照して、前処理部１２０は、入力文字列に対して、部分探索ルール１５１を用いた探索処理を並列的に実行する。より具体的には、前処理部１２０は、前処理用の複数の処理要素（Processing Element）１２１，１２２，１２３，１２４と、処理要素１２１，１２２，１２３，１２４にそれぞれ関連付けられた前処理用の複数のメモリ１２５，１２６，１２７，１２８とを含む。図５には、一例として、４つの処理要素を含む構成を例示するが、この処理要素の数については、これに限られることなく、要求される処理速度などに応じて適宜設計すればよい。複数の処理要素を実装する形態としては、複数のコアを含むプロセッサを１または複数実装する形態、単一のコアからなるプロセッサを複数実装する形態、両形態を適宜組み合わせた形態などが考えられる。
【００５６】
後処理部１３０は、入力文字列に対して、探索ルール１５０を用いた探索処理を実行する。具体的には、後処理部１３０は、後処理用の処理要素１３１と、処理要素１３１に関連付けられた後処理用のメモリ１３２とを含む。
【００５７】
スイッチ１４０は、メイン処理部１１０による文字列探索処理の結果に基づいて、入来したパケットのうち、予め定められた複数のパターンのいずれかと一致するものについては、解析処理部１４２へ転送する一方で、いずれのパターンとも一致しないパケットは廃棄するかネットワークへ送る。
【００５８】
解析処理部１４２は、パケットに含まれるパターンに基づいて、各種の解析処理を実行する。文字列探索で解析が足りる場合、解析処理部１４２はなくともよい。
【００５９】
送信部１４４は、解析処理部１４２による解析結果および／またはパケット自体を送信する。より具体的には、送信部１４４は、送信すべきデータをエンコードする回路、エンコードされたデータを変調してネットワーク２へ送信する回路などを含む。
【００６０】
＜Ｅ．アルゴリズム＞
次に、本実施の形態に従う文字列探索処理のアルゴリズムについて説明する。図６は、本発明の実施の形態に従う文字列探索処理のアルゴリズムを説明するための図である。図６を参照して、本実施に従う文字列探索処理では、前処理と後処理とによって予め定められた複数のパターンとの一致が判断される。
【００６１】
概略すると、本実施の形態に従う文字列探索処理では、入力文字列２００を複数の部分集合である部分入力文字列２０１，２０２，２０３，２０４に分割した上で、本来の探索ルール１５０ではなく、その部分集合である部分探索ルール１５１を用いて、これらの部分入力文字列２０１，２０２，２０３，２０４に対する簡易的な探索が並列的に実行される（前処理）。そして、その簡易的な探索の結果に応じて、入力文字列２００の必要な部分に対して、探索ルール１５０を用いた完全な探索が実行される（後処理）。すなわち、多くのリソースを要する探索ルール１５０を用いた完全な探索を、入力文字列２００のうち必要な部分に対してのみ実行するので、探索効率を高めることができる。
【００６２】
なお、図６には、入力文字列２００を４分割する例を示すが、これに限られることなく任意の数に分割した上で探索処理を並列実行すればよい。但し、前処理部１２０（図５）は、入力文字列２００に対して設定される部分集合の数と少なくとも同数の処理要素を含むことが好ましい。言い換えれば、前処理部１２０を構成する処理要素の数以下となるように、入力文字列２００に対して部分集合が設定される。
【００６３】
［ｅ１：前処理］
前処理では、探索ルール１５０に含まれるルートおよび一部のノードからなる部分探索ルール１５１を用いて、入力文字列２００の異なる部分集合に対する探索処理がそれぞれ実行される。より具体的には、前処理は、隣接する部分集合の間では少なくとも予め定められた文字数を重複させつつ、入力文字列２００に対して複数の部分入力文字列２０１，２０２，２０３，２０４を設定する処理と、複数の部分入力文字列２０１，２０２，２０３，２０４の各々に対する部分探索ルール１５１を用いた探索処理を並列実行する処理とを含む。
【００６４】
図７は、本発明の実施の形態に従う文字列探索処理において利用される探索ルール１５０および部分探索ルール１５１の一例を示す図である。図７（ａ）は、探索ルール１５０の一例を示し、図７（ｂ）は、図７（ａ）に示す探索ルール１５０に対応する部分探索ルール１５１の一例を示す。なお、説明の便宜上、図７には最大で３文字（３バイト）のパターンを示すが、パケットデータを解析するような場合には、各々がたとえば５０から２０００文字（５０から２０００バイト）程度のパターンが用いられる。
【００６５】
図７（ａ）の探索ルール１５０は、｛ａｂａ｝，｛ｂａｂ｝，｛ｂｄｂ｝の３つを探索対象のパターンとして定義する。これに対して、図７（ｂ）の部分探索ルール１５１は、探索ルール１５０に含まれるルートおよび一部のノードからなる。図７（ｂ）に示す例では、部分探索ルール１５１は、｛ａｂ｝，｛ｂａ｝，｛ｂｄ｝の３つを探索対象のパターンとして定義する。すなわち、部分探索ルール１５１が定義するそれぞれのパターンは、探索ルール１５０の対応するそれぞれのパターンの部分集合となっている。
【００６６】
前処理部１２０の処理要素１２１，１２２，１２３，１２４（図５）の各々は、図６に示すように、部分探索ルール１５１を用いて、それぞれに割当てられた入力文字列２００の部分入力文字列２０１，２０２，２０３，２０４に対して探索処理を実行する。この探索処理において、部分探索ルール１５１および割当てられた部分入力文字列は、処理要素１２１，１２２，１２３，１２４に関連付けられたメモリ１２５，１２６，１２７，１２８（図５）に一時的に記憶される。
【００６７】
前処理部１２０の処理要素１２１，１２２，１２３，１２４による部分探索ルール１５１を用いた並列的な探索処理の結果についても、それぞれに関連付けられたメモリ１２５，１２６，１２７，１２８に一時的に記憶される。前処理における探索結果は、後処理で利用されるように、出力される。
【００６８】
図８は、本発明の実施の形態に従う文字列探索処理の前処理を説明するための図である。図８（ａ）は、文字列探索処理の前処理における探索処理の一例を示し、図８（ｂ）は、文字列探索処理の前処理における探索結果の出力例を示す。
【００６９】
図８（ａ）に示すように、前処理では、部分入力文字列の別に、部分探索ルール１５１を用いた探索処理が実行される。図８（ａ）に示す例では、部分入力文字列２０１は、部分探索ルール１５１のパターン｛ａｂ｝と一致する部分文字列を含む。前処理において、このパターン｛ａｂ｝と一致する部分文字列が検出されると、部分入力文字列２０１についての探索結果としてその検出された位置が出力される。後処理では、入力文字列２００の全体が探索対象となるので、部分入力文字列２０１，２０２，２０３，２０４の各々の探索結果は、部分入力文字列自身を特定するための情報を含むことが好ましい。
【００７０】
例えば、図８（ｂ）に示すように、部分入力文字列２０１，２０２，２０３，２０４の各々の探索結果は、当該部分入力文字列の開始位置を示すＳｔａｒｔＡｄｄｒと、当該部分入力文字列の終了位置を示すＥｎｄＡｄｄｒと、いずれかのパターンと一致した部分文字列の検出位置を示すＭａｔｃｈＡｄｄｒとを含む。
【００７１】
なお、いずれのパターンとも一致しなかった場合には、ＭａｔｃｈＡｄｄｒとしては、無効値（ｎｕｌｌ値）を応答してもよい。また、同一の部分入力文字列に、いずれかのパターンと一致する部分文字列が複数検出される場合もある。このような場合には、検出結果として、最初に検出された部分文字列のみを出力してもよいし、すべての部分文字列を出力してもよい。最初に検出された部分文字列のみを出力する場合には、いずれかのパターンとの一致が検出された時点で、以後の探索処理を中止してもよい。
【００７２】
さらに、探索結果として、一致したパターンを識別するための情報を追加的に出力してもよい。例えば、図８（ｂ）に示すオートマトン表現における状態値、または検出されたパターン（｛ａｂ｝といった値そのもの）などを出力してもよい。このような一致したパターンを識別するための情報を用いることで、後処理における探索処理をより効率化できる。
【００７３】
ここで、入力文字列２００に対して設定される部分入力文字列２０１，２０２，２０３，２０４の間でオーバラップ（重複）させる文字数について説明する。前処理では、それぞれの部分入力文字列に対して、部分探索ルール１５１を用いた探索処理が互いに独立して並列実行される。そのため、隣接する部分入力文字列の間にまたがって存在する部分文字列についてパターンとの一致を検出できない可能性がある。そこで、入力文字列２００に対して部分入力文字列を設定する場合には、前処理に用いる部分集合の文字数Ｎ−１（Ｎは任意であるが、探索ルール１５０に対して大き過ぎない数）だけオーバラップさせることができる。このように部分入力文字列を設定することで、前処理での探索処理をより確実に実行することができる。
【００７４】
［ｅ２：後処理］
後処理では、前処理による探索結果を利用しつつ、探索ルール１５０を用いて入力文字列２００に対する探索処理が実行される。部分探索ルール１５１を用いた探索処理においていずれかのパターン（探索ルール１５０が定義するパターンの部分集合）と一致する部分文字列を含む部分入力文字列については、探索ルール１５０が定義するパターンと一致する部分文字列を含む可能性がある。言い換えれば、探索ルール１５０の部分集合である部分探索ルール１５１を用いた探索処理においていずれの部分パターンとも一致しなかった部分入力文字列については、探索ルール１５０が定義する完全パターンと一致する部分文字列を含まないと判断できる。また、部分探索ルール１５１を用いた探索処理において、部分探索ルール１５１が定義する部分パターンと一致する部分文字列が検出された部分入力文字列については、その検出された位置より前には、探索ルール１５０が定義する完全パターンと一致する部分文字列が存在しないと判断できる。
【００７５】
そこで、本実施の形態に従う後処理においては、主として、前処理における探索結果を以下のような点で利用することで、探索効率を高める。
【００７６】
（１）  後処理では、前処理での探索処理において、その部分集合である部分入力文字列２０１，２０２，２０３，２０４のいずれについても部分探索ルール１５１とは一致しなかった入力文字列２００については、探索ルール１５０を用いた探索処理（完全な探索）の対象から除外する。
【００７７】
（２）  後処理では、前処理での探索処理において、部分探索ルール１５１と一致した部分文字列の位置を参照して、探索ルール１５０を用いた探索処理（完全な探索）を実行する。言い換えれば、後処理では、前処理部での探索処理において、部分探索ルール１５１と一致しなかった入力文字列２００の部分について、探索ルール１５０を用いた探索処理をスキップする。
【００７８】
なお、これらの利用方法のうち、すべてを採用してもよいし、一方のみを採用するものであってもよい。いずれの場合であっても、探索効率を高めることができる。
【００７９】
上記の（１）の具体的な実装形態としては、図８（ｂ）に示すようなそれぞれの部分入力文字列についての探索結果に含まれるＭａｔｃｈＡｄｄｒの値を参照し、すべてのＭａｔｃｈＡｄｄｒが無効値を有する場合には、当該入力文字列に対する後処理は行なわれず、予め定められた複数のパターンを含まないという結果を出力する。
【００８０】
また、上記の（２）の具体的な実装形態としては、図６に示すように、状態が０（図３のルート１００２）の場合は、探索ルール１５１が定義するいずれかの部分パターンと一致すると判断された部分文字列の検出位置（△印）より前の部分、すなわち部分入力文字列２０１，２０２，２０３，２０４の符号２１１，２１２，２１３，２１４の部分に対する探索処理をそれぞれスキップし、それぞれの検出位置より後の部分、すなわち部分入力文字列２０１，２０２，２０３の符号２２１，２２２，２２３の部分に対してのみ探索ルール１５０を用いた探索処理をそれぞれ実行する。なお、図６に示す例において、部分入力文字列２０４では、部分探索ルール１５１が定義するいずれかの部分パターンと一致する部分文字列は検出されなかったものとする。
【００８１】
後処理部１３０の処理要素１３１は、入力文字列の符号２２１，２２２，２２３に対応する部分についてのみ探索処理（完全な探索）を実行するので、入力文字列２００のすべてについて探索処理（完全な探索）を実行する場合に比較して、その処理時間および処理量を低減できる。
【００８２】
前処理において、部分探索ルール１５１による探索結果として、一致したパターンを識別するための情報が出力される場合には、探索ルール１５０を用いた探索処理（完全な探索）を初期状態（ルート）から開始するのではなく、部分探索ルール１５１を用いた探索処理によって既に検出されている状態値から開始してもよい。
【００８３】
＜Ｆ．処理手順＞
次に、本実施の形態に従う文字列探索処理の処理手順について説明する。図９は、本発明の実施の形態に従う文字列探索処理の処理手順を示すフローチャートである。メイン処理部１１０の前処理部１２０および後処理部１３０が情報処理プログラム１１６（図５）を実行することで、前処理部１２０および後処理部１３０が図９に示す各ステップを実行する。なお、図９に示すステップの一部または全部を専用のハードウェアで実現してもよい。
【００８４】
図９を参照して、メイン処理部１１０は、新たな処理対象の入力文字列２００を受信したか否かを判断する（ステップＳ１００）。新たな処理対象の入力文字列２００を受信していなければ（ステップＳ１００においてＮＯの場合）、ステップＳ１００以下の処理が繰り返される。
【００８５】
新たな処理対象の入力文字列２００を受信していれば（ステップＳ１００においてＹＥＳの場合）、メイン処理部１１０（典型的には、前処理部１２０の処理要素１２１）は、受信した入力文字列２００に対して複数の部分入力文字列２０１，２０２，２０３，２０４を設定する（ステップＳ１０２）。上述したように、部分入力文字列２０１，２０２，２０３，２０４は、互いに重複させて設定される。
【００８６】
続いて、前処理部１２０の処理要素１２１，１２２，１２３，１２４は、部分探索ルール１５１を用いて、それぞれに割当てられた入力文字列２００の部分入力文字列２０１，２０２，２０３，２０４に対して探索処理を実行する（ステップＳ１０４）。なお、部分入力文字列２０１，２０２，２０３，２０４は、処理要素１２１，１２２，１２３，１２４に関連付けられたメモリ１２５，１２６，１２７，１２８にそれぞれ格納される。続いて、前処理部１２０の処理要素１２１，１２２，１２３，１２４は、それぞれの探索結果を格納する（ステップＳ１０６）。ここで、前処理部１２０の処理要素１２１，１２２，１２３，１２４の各々は、割当てられた部分入力文字列から部分探索ルール１５１で定義されるいずれかのパターンと一致する部分文字列を検出すると、その時点で、探索処理を終了してもよい。探索結果としては、上述したように、割当てられた部分入力文字列の開始位置（ＳｔａｒｔＡｄｄｒ）および終了位置（ＥｎｄＡｄｄｒ）と、いずれかのパターンと一致した部分文字列の検出位置（ＭａｔｃｈＡｄｄｒ）とを含む。
【００８７】
メイン処理部１１０（典型的には、後処理部１３０の処理要素１３１）は、前処理部１２０の処理要素１２１，１２２，１２３，１２４からのそれぞれの探索結果を集約し、部分探索ルール１５１が定義するいずれかのパターンと一致する部分文字列が部分入力文字列２０１，２０２，２０３，２０４のいずれかに含まれていたか否かを判断する（ステップＳ１１０）。すべての部分入力文字列２０１，２０２，２０３，２０４において部分探索ルール１５１が定義するパターンと一致する部分文字列が検出されなかった場合（ステップＳ１１０においてＮＯの場合）には、後処理はスキップされる。そして、メイン処理部１１０は、探索ルール１５０が定義する複数のパターンのいずれとも一致しないという探索結果を出力する（ステップＳ１１２）。そして、処理は終了する。
【００８８】
これに対して、部分入力文字列２０１，２０２，２０３，２０４のいずれかにおいて、部分探索ルール１５１が定義するパターンと一致する部分文字列が検出された場合（ステップＳ１１０においてＹＥＳの場合）には、後処理部１３０の処理要素１３１は、前処理の検出結果を集約して、後処理の探索範囲を決定する（ステップＳ１１４）。すなわち、状態が０（図３のルート１００２）の場合は、部分入力文字列２０１，２０２，２０３，２０４のそれぞれについての部分文字列の検出位置から終了位置までの区間が、後処理の探索範囲として決定される。なお、部分探索ルールにつき検出された場合、その時点ですべての並列処理をとめることができる。
【００８９】
続いて、後処理部１３０の処理要素１３１は、探索ルール１５０を用いて、ステップＳ１１４において決定された最初の探索範囲に対して探索処理を実行する（ステップＳ１１６）。そして、後処理部１３０の処理要素１３１は、探索ルール１５０を用いた探索（完全探索）の結果を格納する（ステップＳ１１８）。
【００９０】
続いて、後処理部１３０の処理要素１３１は、ステップＳ１１４において決定されたすべての探索範囲について探索処理が完了しているか否かを判断する（ステップＳ１２０）。探索処理が完了していない探索範囲がある場合（ステップＳ１２０においてＮＯの場合）には、次の探索範囲を探索対象に設定し（ステップＳ１２２）、ステップＳ１１６以下の処理を繰り返す。
【００９１】
これに対して、すべての探索処理について探索処理が完了している場合（ステップＳ１２０においてＹＥＳの場合）には、ステップＳ１１８において格納された探索結果を出力する（ステップＳ１２４）。そして、処理は終了する。
【００９２】
＜Ｇ．利点＞
本実施の形態に従う文字列探索処理のアルゴリズムによれば、前処理において入力文字列の部分集合（部分入力文字列）に対して、探索ルールの部分集合（部分探索ルール）を用いて簡易的な探索が並列的に実行される。そして、この前処理によって、いずれのパターンとも一致しないことが明らかな入力文字列については、探索ルールを用いた探索処理（完全な探索）の対象から除外されるとともに、いずれかのパターンと一致する可能性がある入力文字列については、その可能性がある範囲のみが完全な探索（後処理）の対象となる。
【００９３】
このようなアルゴリズムを採用することで、関連技術として説明した文字列探索処理のアルゴリズムに比較して、より高速な探索を実現できる。これによって、専用のハードウェア回路を用いることなく、汎用的なプロセッサを用いた構成を採用したとしても、ネットワーク上を転送されるパケットに対する解析処理といった、リアルタイム性が要求される装置にも適用可能である。
【００９４】
ここで、本実施の形態に従う文字列探索処理のアルゴリズムによる処理時間を関連技術として説明したアルゴリズムと比較しつつ説明する。
【００９５】
関連技術として説明したアルゴリズムは、本実施の形態における後処理として実行される探索ルール１５０を用いた完全な探索を行なうので、その処理時間は、以下の（１）式のように表すことができる。
【００９６】
処理時間＝Ｔａｆｔｅｒ  …（１）
これに対して、本実施の形態に従う文字列探索処理のアルゴリズムによる処理時間は、以下の（２）式のように表すことができる。
【００９７】
処理時間＝Ｔｐｒｅ＋Ｅ×Ｔａｆｔｅｒ×Ｒ  …（２）
但し、
Ｔｐｒｅ：前処理（部分探索）に要する時間
Ｔａｆｔｅｒ：後処理（完全探索）に要する時間
Ｅ：前処理による後処理における処理量の削減効果
Ｒ：前処理において部分入力文字列がいずれかのパターンと一致する確率
ここで、前処理では、部分入力文字列に対する部分探索ルールを用いた部分探索が並列実行されるので、一般的には、以下の（３）式のような関係が成立する。
【００９８】
Ｔｐｒｅ＜＜Ｔａｆｔｅｒ  …（３）
また、コンピュータウィルスの混入検知などに適用する場合には、多くのパケットデータは、予め定められたパターンのいずれとも一致しないので、前処理のみで終了する可能性も高い。このような場合には、以下の（４）式のような関係が成立する。
【００９９】
Ｅ＜＜１．０
Ｒ＜＜１．０  …（４）
上述の（３）式および（４）式の関係が成立する場合には、以下の（５）式のような関係が成立する。
【０１００】
Ｔｐｒｅ＋Ｅ×Ｔａｆｔｅｒ×Ｒ＜＜Ｔａｆｔｅｒ  …（５）
すなわち、関連技術として説明したアルゴリズムに比較して、より高速に文字列探索処理を行なうことができる。
【０１０１】
＜Ｈ．変形例＞
本実施の形態に従う情報処理装置１０においては、前処理と後処理とは直列的に実行されるので、異なる入力文字列に対して、これらの処理を並列化してもよい。
【０１０２】
図１０は、本発明の実施の形態の変形例に従う並列化を説明するための図である。図１０に示すように、入力文字列１に対して、前処理および後処理が直列的に実行される。後続の入力文字列２に対しては、入力文字列１に対する前処理が完了し、後処理が開始されるのにあわせて、前処理が実行される。すなわち、入力文字列１に対する後処理と入力文字列２に対する前処理とが並列的に実行される。さらに、後続の入力文字列３に対しても同様の手順で処理が実行される。
【０１０３】
このように全体処理を並列化することで、文字列探索処理をより高速に行なうことができる。
【０１０４】
＜Ｉ．適用例＞
本実施の形態に従う情報処理装置１０は、パケット中継装置、ファイヤウォール、パケット監視装置といったネットワークに配置される装置に好適である。但し、このような装置に限定されることなく、文字列を取り扱う処理装置全般に適用可能である。そのため、膨大なデータを蓄積しているデータベースから予め定められたパターンと一致するドキュメントを探索するといった検索エンジン的な処理にも適用できる。また、ネットワーク上を転送されるデータパケットに対するオンライン（リアルタイム）の探索処理だけではなく、オフラインの探索処理にも適用できる。
【０１０５】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１０６】
１  ネットワークシステム、２  ネットワーク、３  パーソナルコンピュータ、４  サーバ装置、１０  情報処理装置、１２  パケット分類エンジン、１４  分類定義記憶部、１４ａ  分類定義ファイル、１６  パケット解析エンジン、１８  解析定義記憶部、１８ａ  解析定義ファイル、１００，１５０  探索ルール、１０２  受信部、１０４  受信キュー、１１０  メイン処理部、１１２  主メモリ、１１４  フラッシュメモリ、１１６  情報処理プログラム、１１８  バス、１２０  前処理部、１２１，１２２，１２３，１２４，１３１  処理要素、１２５，１２６，１２７，１２８，１３２  メモリ、１３０  後処理部、１４０  スイッチ、１４２  解析処理部、１４４  送信部、１５１  部分探索ルール、１００２  ルート、１００４  ノード。
【図１】
2014026312.tif 000003
【図２】
2014026312.tif 000004
【図３】
2014026312.tif 000005
【図４】
2014026312.tif 000006
【図５】
2014026312.tif 000007
【図６】
2014026312.tif 000008
【図７】
2014026312.tif 000009
【図８】
2014026312.tif 000010
【図９】
2014026312.tif 000011
【図１０】
2014026312.tif 000012