(57)【要約】  本発明の実施形態は、パターン・マッチング・アプリケーション内の状態マシン・アルゴリズムのメモリ要件を最適化し、低減するためのシステムおよび方法に関する。Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムのメモリ要件は、状態表を３つの別々のデータ構造として表すことにより侵入検出システム内で低減される。Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムのメモリ要件は、また、バンド状行スパース・マトリクス技術を状態表の状態遷移表に適用することによっても低減される。侵入検出システムのパターン・マッチング性能は、大文字／小文字を区別しない検索を行うことにより改善される。この場合、試験シーケンスの文字は、文字が読み出された場合に大文字に変換される。試験により、１６ビットの要素を含む状態遷移表の性能が３２ビットの要素を含む状態遷移表の性能より優れていること、およびＡｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムを使用する侵入検出システムの機能を低減しないことが分かった。
2008507789.tif 000002
【特許請求の範囲】
【請求項１】
パターン・マッチング・アプリケーション内の状態マシン・アルゴリズムの状態表を作成するための方法であって、
少なくとも１つの検索パターンを識別するステップと、
検索パターンｔｒｉｅを生成するステップと、
前記検索パターンｔｒｉｅに前記少なくとも１つの検索パターンを付加するステップと、
前記検索パターンｔｒｉｅから非決定性有限オートマトンを形成するステップと、
前記非決定性有限オートマトンから決定性有限オートマトンを形成するステップと、
前記決定性有限オートマトンを、状態遷移表、状態マッチング・パターン・リスト毎のアレイ、および前記非決定性有限オートマトンに対する各状態に対する別々の失敗ポインタ・リストを含む別々のデータ構造に変換するステップと、
前記別々のデータ構造を前記状態表として使用するステップと、
を含む方法。
【請求項２】
前記検索パターンｔｒｉｅが、各状態に対するすべて有効な文字のリストを備え、すべて有効な文字の前記リストの各要素が、有効な文字および次の有効な状態を有し、前記少なくとも１つの検索パターンに一度に１文字が付加され、前記非決定性有限オートマトンが、リスト・フォーマットで前記検索パターンｔｒｉｅを前記非決定性有限オートマトンにより置換し、前記決定性有限オートマトンが、リスト・フォーマットで前記非決定性有限オートマトンを前記決定性有限オートマトンにより置換する請求項１に記載の方法。
【請求項３】
前記少なくとも１つの検索パターンの文字を大文字に変換するステップをさらに含む請求項１に記載の方法。
【請求項４】
各状態に対するすべての有効な文字の前記リストが、各状態に対するすべての有効な大文字のリストを備える請求項１に記載の方法。
【請求項５】
前記状態マシン・アルゴリズムが、Ａｈｏ−Ｃｏｒａｓｉｃｋを有する請求項１に記載の方法。
【請求項６】
前記パターン・マッチング・アプリケーションが、侵入検出システム、パッシブ・ネットワーク監視装置、アクティブ・ネットワーク監視装置、プロトコル・アナライザ、および検索エンジンのうちの１つを有する請求項１に記載の方法。
【請求項７】
前記決定性有限オートマトンを状態遷移表に変換する前記ステップが、
各状態に対して状態ベクトルを割り当てるステップであって、すべての有効な文字の前記リストの各要素に対する状態ベクトルの状態遷移要素を使用するステップと、
すべての有効な文字の前記リストの各要素の次の有効な状態を、前記状態ベクトルの各状態遷移要素内にコピーするステップと、を含む請求項１に記載の方法。
【請求項８】
前記状態ベクトルが２５６状態遷移要素を有する請求項７に記載の方法。
【請求項９】
前記状態ベクトルの各要素が１６ビットである請求項７に記載の方法。
【請求項１０】
前記状態ベクトルの要素が、前記状態ベクトルのフォーマットを識別する請求項７に記載の方法。
【請求項１１】
前記フォーマットが全フォーマットを備える請求項１０に記載の方法。
【請求項１２】
前記状態ベクトルの要素が、前記状態ベクトルがマッチング・パターン状態を有するか否かを識別する請求項７に記載の方法。
【請求項１３】
前記決定性有限オートマトンを状態遷移表に変換する前記ステップが、
すべての有効な文字の前記リストからの第１の非ゼロの次の有効な状態から、すべての有効な文字の前記リストからの最後の非ゼロの次の有効な状態までの要素のリストをバンドとして定義するステップと、
各状態に対して１つの状態ベクトルを割り当てるステップであって、前記バンドの各要素に対する状態ベクトルの状態遷移要素を使用するステップと、
すべての有効な文字の前記リストから第１の非ゼロの次の有効な状態の索引を識別するために、前記状態ベクトルの要素を生成するステップと、
前記バンド内で多数の要素を識別するために前記状態ベクトルの要素を生成するステップと、
前記バンドの各要素の次の有効な状態を前記状態ベクトルの各状態遷移要素内にコピーするステップと、を含む請求項１に記載の方法。
【請求項１４】
前記状態ベクトルの各要素が１６ビットである請求項１３に記載の方法。
【請求項１５】
前記状態ベクトルの要素が前記状態ベクトルの前記フォーマットを識別する請求項１３に記載の方法。
【請求項１６】
前記フォーマットがバンド状フォーマットを備える請求項１５に記載の方法。
【請求項１７】
前記状態ベクトルの要素が、前記状態ベクトルがマッチング・パターン状態を有するか否かを識別する請求項１６に記載の方法。
【請求項１８】
パターン・マッチング・アプリケーション内の状態マシン・アルゴリズムの状態遷移表を使用してテキスト・シーケンスで検索パターンを検索するための方法であって、
前記テキスト・シーケンスから文字を読み出すステップと、
前記文字に対応する前記状態遷移表の現在の状態ベクトルの要素を読み出すステップと、
前記要素が非ゼロの値を有する場合に、マッチング・パターン・フラグに対する現在の状態ベクトルのパターン・マッチング要素をチェックするステップと、
前記マッチング・パターン・フラグがセットされている場合に、パターン・マッチをログするステップと、
前記要素の非ゼロの値に対応する現在の状態ベクトルを選択するステップと、
前記テキスト・シーケンスから次の文字を読み出すステップと、を含む方法。
【請求項１９】
前記文字を大文字に変換するステップをさらに含む請求項１８に記載の方法。
【請求項２０】
フォーマットを識別する前記現在の状態ベクトルの要素をチェックするステップと、
前記フォーマットがバンド状である場合に、バンド内の多数の要素を識別する現在の状態ベクトルの要素から前記文字が前記バンド内に位置するか否かを判定するステップであって、前記現在の状態ベクトルの要素が、前記バンドの第１の要素および前記バンドの複数の要素の索引を識別するステップと、
前記フォーマットがバンド状である場合であって、前記文字が前記バンド内に位置している場合に、前記要素の非ゼロの値に対応する現在の状態ベクトルを選択するステップと、
前記フォーマットがバンド状である場合であって、前記文字がバンド内に位置していな
い場合に、現在の状態ベクトルを初期状態に戻すステップと、
をさらに含む請求項１８に記載の方法。
【請求項２１】
前記マッチング・パターン・フラグがセットされている場合に、前記テキスト・シーケンスからの前記パターン・マッチの大文字／小文字を区別するバージョンを、検索パターンの大文字／小文字を区別するバージョンと比較するステップと、
前記マッチング・パターン・フラグがセットされていて、前記テキスト・シーケンスからのパターン・マッチの前記大文字／小文字を区別するバージョンおよび検索パターンの前記大文字／小文字を区別するバージョンが一致する場合に、前記パターン・マッチの前記大文字／小文字を区別するバージョンをログするステップとをさらに含む請求項１９に記載の方法。
【請求項２２】
前記状態マシン・アルゴリズムが、Ａｈｏ−Ｃｏｒａｓｉｃｋを有する請求項１８に記載の方法。
【請求項２３】
前記パターン・マッチング・アプリケーションが、侵入検出システム、パッシブ・ネットワーク監視装置、アクティブ・ネットワーク監視装置、プロトコル・アナライザ、および検索エンジンのうちの１つを備える請求項１８に記載の方法。
【請求項２４】
パターン・マッチング・アプリケーション内で使用する状態マシン・アルゴリズム用の状態表であって、
状態遷移表と、
状態マッチング・パターン・リスト毎のアレイと、
非決定性有限オートマトンに対する各状態に対する失敗ポインタ・リストと、を有する状態表。
【請求項２５】
前記状態遷移表が、各状態に対する状態ベクトルを有する請求項２４に記載の状態表。
【請求項２６】
前記状態ベクトルが、スパース・ベクトル・フォーマットで格納される請求項２５に記載の状態表。
【請求項２７】
前記スパース・ベクトル・フォーマットが、圧縮スパース・ベクトル・フォーマット、スパース行フォーマット、およびバンド状行フォーマットのうちの１つを備える請求項２５に記載の状態表。
【請求項２８】
前記状態マシン・アルゴリズムが、Ａｈｏ−Ｃｏｒａｓｉｃｋを有する請求項２４に記載の状態表。
【請求項２９】
前記パターン・マッチング・アプリケーションが、侵入検出システム、パッシブ・ネットワーク監視装置、アクティブ・ネットワーク監視装置、プロトコル・アナライザ、および検索エンジンのうちの１つを備える請求項２４に記載の状態表。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、文字列のパターンを効率的に検索するための方法およびシステムに関する。より詳細には、本発明の実施形態は、パターン・マッチング・アプリケーション内の状態マシン・アルゴリズムのメモリ要件を最適化し、低減するためのシステムおよび方法に関する。
【背景技術】
【０００２】
侵入検出システム（ＩＤＳ）は、ネットワーク・トラフィック・パケットをチェックする。ＩＤＳは、パケットのヘッダ内の特定の値を探し、パケットのアプリケーション・データ層内の既知のパターンの検索を行うことにより、侵入したものを検索する。典型的なＩＤＳは、Ａｈｏ−Ｃｏｒａｓｉｃｋマルチパターン検索エンジンに大きく依存している。そのため、Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムの性能特性は、これらＩＤＳの性能全体に有意な影響を有する。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ＩＤＳのパターン検索問題は、多くの問題を考慮しなければならない問題である。ネットワーク・パケットのチェックはリアルタイムで行わなければならないので、現代のネットワークの速度に追随することができるパターン検索エンジンを使用しなければならない。このタイプの検索の場合には２つのタイプのデータが使用される。これら２つのタイプのデータは、パターンおよび検索テキストである。パターンは予め定義されたもので静的なものである。そのため、これらのパターンを任意の所与のパターン・マッチング・アルゴリズムに適している最善の形に前処理することができる。検索テキストは、各ネットワーク・パケットを受信した場合に動的に変化する。そのため、パターン検索を行う前に検索テキストを前処理することはできない。このタイプのパターン検索問題は、シリアル・パターン・サーチとして定義される。Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムは古典的なシリアル・サーチ・アルゴリズムであり、１９７５年に最初に導入されたものである。Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムにより多くの変更が行われたが、最近のＩＤＳは、アルゴリズムの一意の特性のうちのいくつかのためにアルゴリズム内に新たな関心を呼び起こした。
【０００４】
ＩＤＳは、大文字／小文字を区別するものであっても、大文字／小文字を区別しないものであってもよいパターンを検索する。Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムは、元来、大文字／小文字を区別するパターン検索エンジンとして使用されたものである。検索の際に使用するパターンの大きさは、検索アルゴリズムの性能特性に有意に影響を与える場合がある。Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムのような状態マシン・ベースのアルゴリズムは、グループ内の最小または最大のパターンのサイズにより影響を受けない。Ｗｕ−Ｍａｎｂｅｒアルゴリズムおよび文字スキップ機能を使用する他のアルゴリズムのようなスキップをベースとする方法は、最小パターンのサイズにより大きな影響を受ける。検索テキストのスキップ部分の能力は、検索エンジンの性能を大きく改善することができる。しかし、スキップ距離は最小パターンにより制限される。ＩＤＳでの検索パターンは既知の攻撃パターンの一部を表していて、サイズは１から３０またはそれ以上の文字の範囲内で変化することができるが、通常そのサイズは小さい。
【０００５】
パターン・グループのサイズは、通常、ＩＤＳの性能に影響を与える。何故なら、ＩＤＳパターン検索問題は、通常、プロセッサのメモリのキャッシングから利益を受けるからである。小さなパターン・グループは、キャッシュ内に収容することができ、高性能のキ
ャッシュから最も利益を受ける。パターン・グループが大きくなると、小さなパターン・グループしかキャッシュ内に収容することができなくなり、キャッシュ・ミスが多くなる。これにより性能が劣化する。大部分の検索アルゴリズムは、例えば、１，０００のパターンを処理する場合よりも、１０のパターンを処理するほうが処理速度が速くなる。パターン・グループのサイズが増大した場合の各アルゴリズムの性能の劣化は、アルゴリズムにより異なる。スケーラビリティを維持するためには、この劣化が線形に近いことが望ましい。
【０００６】
現在のＩＤＳで使用しているアルファベットのサイズはバイトの大きさにより定義される。８ビット・バイトの値は、０〜２５５の範囲内であり、２５６の文字のアルファベットを含む侵入検出システムを提供する。これらのバイト値は、標準コンピュータ・キーボード上のＡＳＣＩＩおよび制御文字、および他の印刷できない値を表す。例えば、文字「Ａ」は、６５のバイト値を有する。ユニコードのような極端に大きなアルファベットは、複数の対のバイト値により表すことができ、そのためパターン検索エンジンが処理するアルファベットは、依然として２５６文字である。これはパターン・マッチング規格による大きなアルファベットである。英語の辞書のアルファベットは５２の大文字および小文字であり、ＤＮＡ研究は遺伝子配列の際に４文字のアルファベットを使用する。アルファベットのサイズは、どの検索アルゴリズムが最も効率的であり、最も高速なものになるかという点について有意な影響を有する。
【０００７】
侵入者によるアルゴリズム攻撃は、検索アルゴリズムの性能を低減するために、それ自身に対する検索アルゴリズムの特性および挙動を使用しようとする。検索アルゴリズムの性能挙動は、検索アルゴリズムの平均的な場合および最悪の場合の性能を考慮して評価すべきである。有意に異なる最悪の場合の性能および平均的な場合の性能を有する検索アルゴリズムは、侵入者によるアルゴリズム攻撃に弱い。Ｗｕ−Ｍａｎｂｅｒアルゴリズムのようなスキップ・ベースの検索アルゴリズムは、Ｂｏｙｅｒ−Ｍｏｏｒｅアルゴリズムの場合の悪い文字シフトに類似の文字スキップ機能を使用する。スキップ・ベースの検索アルゴリズムは、最小パターンのサイズの影響を受けやすい。何故なら、このようなアルゴリズムは、最小パターンより小さいスキップ・サイズに制限されることを示すことができるからである。１つのバイト・パターンを含むパターン・グループは、１つの文字すらスキップできないし、または１つのバイト・パターンも発見することができない。
【０００８】
Ｗｕ−Ｍａｎｂｅｒアルゴリズムの性能特性は、悪意のあるネットワーク・トラフィックにより有意に低減することができ、その結果、サービス拒否攻撃となる。このタイプの攻撃は、小さな反復するパターンのトラフィックを退化しなければならない。この問題はテキスト検索の場合には起こるものではなく、アルゴリズム攻撃は意図的なものではなく、通常非常に稀である。この問題は、アルゴリズム攻撃が頻繁に行われ意図的であるＩＤＳの場合には重要な問題である。Ｗｕ−Ｍａｎｂｅｒアルゴリズムは、また、典型的なＩＤＳにおいては、その最善の性能レベルを達成できない。何故なら、ＩＤＳ規則は、多くの場合、１〜３文字の非常に小さな検索パターンを含んでいて、文字のシーケンスをスキップする大部分の機会がないからである。
【０００９】
実際には、Ｗｕ−Ｍａｎｂｅｒアルゴリズムを使用するＩＤＳは、平均的な場合、Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムを使用するＩＤＳと比較した場合、性能が若干優れている。しかし、アルゴリズム的に設計された攻撃を受けている場合には、Ｗｕ−Ｍａｎｂｅｒアルゴリズムを使用するＩＤＳは、Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムを使用しているＩＤＳより処理速度が有意に遅くなる場合がある。グループ内のすべてのパターンが大きい場合には、スキップ・ベースのアルゴリズムの強さがはっきりする。スキップ・ベースの検索アルゴリズムは、一度に多くの文字をスキップすることができ、この場合に使用できる最速の平均的な場合の検索アルゴリズムの１つである。Ａｈｏ−Ｃｏｒａｓｉ
ｃｋアルゴリズムは、小さなパターンにより影響を受けない。Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムの最悪の場合および平均的な場合の性能は同じである。そのため、ＩＤＳ用の非常にロバストなアルゴリズムになる。
【００１０】
ＩＤＳで読み出す検索テキストのサイズは、通常、数千バイト以下である。通常、テキストを検索する場合、検索パターンの設定コストおよびキャッシュ内に必要な検索パターン情報を設定するコストは通常一定である。検索がほんの数バイトに対して行われる場合には、これら数バイトに対して設定コストがかかることになり、そのためバイト当たりのコストが高くなる。一方、検索テキストが非常に長い場合には、もっと長い検索テキストに対して設定コストが分散するので、テキストの各バイトの検索に加算されるオーバーヘッド・コストが非常に安くなる。
【００１１】
侵入検出システムでの検索の頻度は、ネットワークの帯域幅、ネットワーク上のトラフィックの量、およびネットワーク・パケットのサイズにより異なる。このことは、パターン検索の頻度および各検索テキストのサイズが、検索中のネットワーク・トラフィックの性質により関連していることを意味する。この場合も、検索テキストのサイズの場合のように、ＩＤＳで検索を頻繁に行うと、もっと少ないもっと長いテキスト検索の場合と比較すると、検索設定コストが有意に高くなる。
【００１２】
上記説明を読めば、ＩＤＳでのパターン検索に関連する多くの問題を考慮し、ＩＤＳの性能全体を改善するための方法およびシステムの開発が実質的に求められていることを理解することができるだろう。
【課題を解決するための手段】
【００１３】
本発明の一実施形態は、パターン・マッチング・アプリケーション内の状態マシン・アルゴリズムの状態表を作成するための方法である。少なくとも１つの検索パターンが識別される。検索パターンｔｒｉｅが生成される。検索パターンｔｒｉｅは、各状態に対するすべて有効な文字のリストからなる。すべて有効な文字のリストの各要素は、有効な文字および次の有効な状態のペアを含む。少なくとも１つの検索パターンが検索パターンｔｒｉｅに付加される。検索パターンは、一度に１つの文字を検索パターンｔｒｉｅに付加される。この場合、各文字は状態を表す。検索パターンｔｒｉｅから非決定性有限オートマトンが形成される。検索パターンｔｒｉｅは、リスト・フォーマットで非決定性有限オートマトンにより置換される。非決定性有限オートマトンから決定性有限オートマトンが形成される。非決定性有限オートマトンは、リスト・フォーマットで決定性有限オートマトンにより置換される。決定性有限オートマトンは、３つの別々のデータ構造に変換される。これら３つのデータ構造は、状態遷移表、状態マッチング・パターン・リスト毎のアレイ、および非決定性有限オートマトンに対する各状態に対する別々の失敗ポインタ・リストを含む。これらの３つのデータ構造が、状態表を形成する。
【００１４】
この方法のもう１つの実施形態は、決定性有限オートマトンの一部を状態遷移表に変換するステップを含む。各状態に対する状態ベクトルが割り当てられる。すべて有効な文字のリストの各要素に対して、状態ベクトルの状態遷移要素が生成される。すべて有効な文字のリストの各要素の次の有効な状態は、状態ベクトルの各状態遷移要素内にコピーされる。この実施形態の場合には、状態遷移要素は全ベクトル形式で格納される。
【００１５】
この方法の他の実施形態の場合には、状態遷移要素はバンド状行形式で格納される。バンドは、すべて有効な文字のリストからの第１の非ゼロ状態からすべて有効な文字のリストからの最後の非ゼロ状態までの要素のグループとして定義される。状態ベクトルが、各状態に割り当てられる。状態ベクトルの状態遷移要素が、バンドの各要素に対して生成される。すべて有効な文字のリストからの第１の非ゼロ状態の索引を識別するために、状態
ベクトルの要素が生成される。バンド内の要素の数を識別するために、状態ベクトルの要素が生成される。バンドの各要素の状態は、状態ベクトルの各状態遷移要素内にコピーされる。
【００１６】
この方法の他の実施形態の場合には、状態ベクトルのフォーマットを識別するために、要素が状態ベクトルに付加される。例示としてのフォーマットは、全ベクトルおよびバンド状ベクトルを含むが、含むことができるものはこれらに限定されない。この方法の他の実施形態の場合には、状態ベクトルがマッチング・パターン状態を含むか否かを識別するために、状態ベクトルに要素が付加される。
【００１７】
本発明の他の実施形態は、パターン・マッチング・アプリケーション内の状態マシン・アルゴリズムの状態表を使用して、テキスト・シーケンスの検索パターンを検索するための方法である。テキスト・シーケンスから文字が読み出される。この文字に対応する状態表の現在の状態ベクトルの要素が読み出される。要素が非ゼロである場合には、マッチング・パターン・フラグに対する現在の状態ベクトルのパターン・マッチング要素がチェックされる。マッチング・パターン・フラグがセットされている場合には、パターン・マッチがログされる。この要素の値に対応する現在の状態ベクトルが選択される。次に、テキスト・シーケンスから次の文字が読み出される。
【００１８】
この方法の他の実施形態の場合には、フォーマットを識別する現在の状態ベクトルの要素がチェックされる。フォーマットがバンド状である場合には、文字がバンド内に位置しているか否かが判定される。この判定は、バンド内の多数の要素を識別する現在の状態ベクトルの要素、バンドの第１の要素の索引を識別する現在の状態ベクトルの要素、およびバンドの要素を使用して行われる。その文字がバンド内に位置している場合には、要素の値に対応する現在の状態ベクトルが選択される。文字がバンド内に位置していない場合には、現在の状態ベクトルは、初期状態にセットされる。
【００１９】
本発明の他の実施形態は、パターン・マッチング・アプリケーション内で使用する状態マシン・アルゴリズムに対する状態表である。状態表は、状態遷移表、状態マッチング・パターン・リスト毎のアレイ、および非決定性有限オートマトンに対する各状態に対する失敗ポインタ・リストを含む。状態遷移表は、各状態に対する状態ベクトルを含む。この状態表の一実施形態の場合には、状態ベクトルは、スパース・ベクトル・フォーマットで格納される。スパース・ベクトル・フォーマットは、圧縮スパース・ベクトル・フォーマットと、スパース行フォーマットと、バンド状行フォーマットとを含むが、含むことができるものはこれらに限定されない。状態マシン・アルゴリズムは、例えば、Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムである。状態表および状態マシン・アルゴリズムは、侵入検出システム、パッシブ・ネットワーク監視装置、アクティブ・ネットワーク監視装置、プロトコル・アナライザ、および検索エンジンを含むが、その他のものも含むことができるパターン・マッチング・アプリケーション内で使用される。
【００２０】
本発明の１つまたは複数の実施形態を詳細に説明する前に、当業者であれば、本発明はその用途において、構造の詳細、構成要素の配置、および下記の詳細な説明または図面に示すステップの配置に制限されないことを理解することができるだろう。本発明は、他の実施形態として実行することもできるし、種々の方法で実施または実行することもできる。また、本明細書で使用する専門語および用語は、説明のためだけのものであって本発明を制限するものでないことを理解されたい。
【発明を実施するための最良の形態】
【００２１】
Ａｈｏ−Ｃｏｒａｓｉｃｋ状態マシン
Ａｈｏ−Ｃｏｒａｓｉｃｋ状態マシンは、特種な有限状態マシンである。有限状態マシ
ンは、システムの許容できる状態の遷移に関する情報と一緒に、システムのすべての可能な状態を示すものである。状態マシンの処理動作は、初期状態で開始し、入力イベントを受け入れ、この入力イベントに基づいて現在の状態から次の正しい状態に移行する。状態マシンを、行が状態を表し列がイベントを表すマトリクスとしてモデル化することができる。マトリクス要素は、入力イベント、および行うべき可能なある種の特定の動作、またはある状態に入りそこから抜け出した場合に処理すべき情報に基づいて移行する次の正しい状態を提供する。例えば、現在の状態が状態１０であり、次の入力イベントがイベント６である場合には、状態遷移を行うために、行１０および列６のところのマトリクス要素がチェックされる。現在の状態１０は、行１０および列６のところのマトリクス要素の値が示す状態に変化する。
【００２２】
Ａｈｏ−Ｃｏｒａｓｉｃｋ状態マシンは、典型的なＩＤＳで決定性有限オートマトン（ＤＦＡ）として実施される。ＤＦＡの一意の特性は、テキスト・ストリーム内の入力文字をチェックする場合、正しい次の状態を発見するために状態マシンの正確に１つの遷移を必要とすることである。このことは、正しい次の状態を発見するために２つ以上の状態遷移を必要とする場合がある非決定性有限オートマトン（ＮＦＡ）とは対照的である。ＤＦＡはＮＦＡより速い速度でデータを処理することができる。何故なら、ＤＦＡの場合には、遷移ステップが少なくてすむからである。ＮＦＡの場合には、データのストリームを検索するためにＤＦＡの最大２倍の遷移を要求することができる。ＤＦＡの状態表マトリクスの構成および構造も、ＮＦＡのそれらよりももっと複雑である。１回のステップですべての状態遷移を実行する方法を決定することができるまで、ＮＦＡ内ですべての可能な状態遷移を予め処理することにより、ＮＦＡからＤＡＦを構成することができる。この手順は、状態表マトリクスのより多くの要素を充填する傾向がある。Ａｈｏ−Ｃｏｒａｓｉｃｋ状態遷移表の物理的表示は、実施毎に異なる。状態表表示の選択が、検索アルゴリズムのメモリおよび性能の折り合いを決定する。
スパース記憶フォーマット
スパース・マトリクスおよびベクトルは、かなりの数のゼロ要素および少数の非ゼロ要素を含む。スパース構造上で効率的に動作するために使用する方法および記憶フォーマットは、線形代数の分野で確実に開発されていて、多くの科学分野で利用されている。その方法および記憶フォーマットは、スパース・データを効率的に格納するのに十分なものではない。記憶フォーマットも、データに高速でランダム・アクセスできるものでなければならない。
【００２３】
以下にサンプルとしてのスパース・マトリクスを示す。このマトリクスは６つの行と４つの列を含む。
０００３
０４０１
０００６
１０００
０２００
００５０
上記マトリクスは、少数の非ゼロ要素を含む一般的な長方形のマトリクスである。圧縮行記憶（ＣＲＳ）フォーマットを使用して、下記のように格納することができる。
【００２４】
値：    ３４１６１２５
列：    ４２４４１２３
行：    １２４５６７
このＣＲＳフォーマットは、非ゼロ・エントリを保持するためだけに３つのベクトルを必要とする。これらベクトルは、値ベクトル、列ベクトルおよび行ベクトルである。列ベクトルは、マトリクス内の値アレイ内の対応する値が属する列を示す。行ベクトルは、各
行が開始する列および値アレイ内の索引を示す。各値および列ベクトル内には７つのエントリが存在する。何故なら、マトリクス内には７つの非ゼロ・エントリが位置するからである。６つの行エントリが存在する。何故なら、マトリクス内には６つの行が存在するからである。例えば、第３の行エントリは、第３の行が列および値ベクトルの第４のエントリのところで開始することを示す。これは、以下に示すようにベクトルとなる１つの行を考慮することにより、ベクトルを処理するためにさらに分割することができるマトリクスのための最も簡単なスパース記憶スキームの１つである。
【００２５】
以下に示すフォーマットは、圧縮スパース・ベクトル・フォーマットと呼ばれる。このフォーマットの各ベクトルは、マトリクスの１つの行に対応する。
ベクトル：０００２４０００６０７０００００００００
値：      ２４６７
索引：    ４５９１１
この圧縮スパース・ベクトル・フォーマットにおいては、索引アレイは、対応する値のベクトル・アレイ索引を示す。４つの非ゼロ値が存在する。何故なら、索引および値アレイ内に４つのエントリが存在するからである。
【００２６】
値および索引アレイを１つの統合アレイに併合すると、下記のフォーマットができる。このフォーマットはスパース行フォーマットと呼ばれる。
スパース行：８４２５４９６１１７
このスパース行フォーマットには、９つのエントリが存在し、第１のエントリは、索引値の順序で数字の４つのペアを表す８つの数が後に続く後続の語の全数である。これは９つのエントリの１つのアレイであり、そのうち８つは索引値の順序で配列されている。これは、それぞれが索引および値エントリを有する４つのＣ言語構造のアレイとして表すこともできる。いずれの場合にも、必要なのは、非ゼロのエントリの数および非ゼロのエントリの１つのアレイだけである。この記憶装置スキームは、スパース・ベクトルの全記憶装置を最小限度に低減する場合にうまく動作し、マトリクス・ベクトル乗算のようなベクトルの各要素に順次触れなければならないアプリケーション内でうまく動作する。しかし、個々のエントリをランダムに探すためには、このフォーマットは、正しい索引を発見するためにアレイ全体を検索しなければならない。
【００２７】
ベクトルの他の表示は、要素を効率的に格納するためにベクトルのバンド状の性質を使用する。この表示の場合も、また、ベクトル要素にランダムにアクセスすることができる。この表示はバンド状行フォーマットと呼ばれる。この表示を以下に示す。
【００２８】
数字の項：      ８
開始索引：      ４
値：            ２４０００６０７
バンド・アレイ：８４２４０００６０７
このバンド状行フォーマットは、第１の非ゼロ値から最後の非ゼロ値までの要素を格納する。格納した項の数は、ベクトルの帯域幅と呼ばれる。狭い帯域幅は大きな記憶セービングに対応する。データへのアクセスを管理するために、データ要素の数およびデータの最初の索引だけが追跡される。このフォーマットを使用すれば、記憶装置要件が緩和され、依然としてデータに高速でランダムにアクセスすることができる。多くの問題が自分自身をバンド状マトリクスの形で表しているが、この場合、マトリクス内の各行に対してバンド状行フォーマットを使用することができる。このタイプのバンド状記憶装置は、ある行のバンド状態を他の行のバンド状態に対応させる方法について何らの要件も課さない。最適化したＡｈｏ−Ｃｏｒａｓｉｃｋ状態マシン
本発明の一実施形態は、ＩＤＳで使用するために設計された最適化したＡｈｏ−Ｃｏｒａｓｉｃｋ状態マシンである。この実施形態の場合には、状態表は、幾分違った方法で管
理され、それにより検索ルーチンをもっと最適な命令の混合体にコンパイルすることができる。最適化していないＡｈｏ−Ｃｏｒａｓｉｃｋ状態マシン・アルゴリズムを使用する典型的なＩＤＳにおいては、状態表内の各エントリは、その状態に対する遷移のベクトル、表のＮＦＡバージョンに対する失敗ポインタ、およびその状態に対するマッチング・パターンのリストを有している。これらのものはすべて１つの構造内に含まれている。この実施形態の場合には、状態表は、状態遷移表、状態マッチング・パターン・リスト当たりのアレイ、およびＮＦＡに対する各状態についての別々の失敗ポインタ・リストに分割される。すなわち、状態表は、３つの別々のデータ構造に分割される。状態表を３つの別々のデータ構造にこのように分割することにより性能が改善される。状態遷移表のサイズが小さくなり、それにより状態遷移表を、主メモリ内ではなく、メモリ・キャッシュ内で操作することができ、それにより状態マシン・アルゴリズムの性能全体が改善する。
【００２９】
状態遷移表は、状態ベクトルへのポインタのリストである。各状態ベクトルは、その状態に対する有効な状態遷移を表す。本発明の他の実施形態の場合には、各ベクトルは、また、行の記憶フォーマットを示す短いヘッダ、およびこの状態で任意のパターンの一致があったか否かを示すブール・フラグを含む。状態遷移データは、ヘッダの後に位置する。この実施形態は、また、性能も改善する。任意のパターンの一致が起こったか否かを示すブール・フラグを含んでいるので、もはやマッチング・パターンのリストを状態遷移の度毎にチェックする必要はない。
【００３０】
本発明の他の実施形態の場合には、状態遷移表の要素のサイズが４バイトから２バイトへと低減している。実験により、典型的なＩＤＳが使用する状態の数は６５，０００の状態を超えないか、または２バイトで表すことができる状態の最大数を超えないことが分かった。以前に、４バイトを使用したが、４０億の状態が可能であった。この場合も、２バイトのベクトル要素を使用すると、メモリの消費量が低減し、性能全体が向上する。
【００３１】
本発明の他の実施形態の場合には、検索前の全入力検索テキストを変換するのではなく、検索中に処理される場合、各入力文字が大文字に変換される。全入力検索テキストを変換するには、大文字検索テキストを主メモリに格納するか、または少なくともキャッシュ・メモリに格納しなければならない。それ故、処理する場合に各入力文字を変換することにより、この実施形態の場合には、大文字検索テキストのためのメモリは必要ない。大文字／小文字の変換は、例えば、コンピュータ・レジスタ内で行われる。そのため、処理時間が短縮する。
【００３２】
試験により、これらの上記実施形態は、典型的なＩＤＳで使用する最適化していないＡｈｏ−Ｃｏｒａｓｉｃｋ状態マシンと比較すると、性能を有意に改善することが分かった。
【００３３】
検索ルーチンは、テキスト・ストリーム内の入力文字に基づいて、ある状態から他の状態に本質的にジャンプするコードの小片である。状態マシンは、現在の状態を維持し、入力イベント（この場合は文字である）を受け入れ、疑似コンピュータ・コードで以下に示すように、現在の状態および入力イベントに基づいて正しい次の許容された状態を発見するために表またはマトリクスを使用することにより動作する。
【００３４】
【表１】
2008507789.tif 000003
下記のＣ言語コードは、本発明のある実施形態による最適化したＡｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムが使用する検索のための基本的なアルゴリズムを示す。
【００３５】
【表２】
2008507789.tif 000004
ＮｅｘｔＳｔａｔｅアレイは、状態表の行ベクトルへのポインタのアレイである。「ｐｓ」変数は、現在の状態の最適化した記憶ベクトルをポイントするために使用される。最適化した記憶ベクトルは、記憶フォーマット・インジケータ、ブール・パターン・マッチ・フラグ、および状態遷移ベクトル情報を含む。「ｐｓ」アレイの最初の２語は、記憶フォーマットおよびブール・マッチ・フラグである。「Ｔ」パラメータは、検索中のテキストであり、「ｘｌａｔｃａｓｅ」は、大文字／小文字独立検索のために１回でテキストの１バイトを大文字に変換する。一致を発見すると、パターンが処理される。現在の状態で任意のパターンが一致しているか否かを判定するために、「ｐｓ」変数を使用してチェックが行われる。パターンが一致していない場合には、状態マシンは次の状態に移行する。パターンが一致している場合には、現在の状態の一致しているすべてのパターンが「ｆｏｒ」ループ内で処理される。
スパース記憶最適化Ａｈｏ−Ｃｏｒａｓｉｃｋ状態マシン
本発明の他の実施形態の場合には、最適化したＡｈｏ−Ｃｏｒａｓｉｃｋ状態マシンでバンド状行スパース記憶フォーマットが使用される。バンド状行フォーマットに対する状態遷移表のベクトルを下記に示す。最初の語は記憶フォーマットを示す。第２の語は、この状態で任意のパターンが一致しているか否かを示す。第３の語は、その行のために格納している項の数を示す。最後に、第４の語は、第１の項の索引を示す。バンド状行フォーマットにより、エントリに直接索引アクセスすることができる。しかし、各索引動作の前に境界チェックを行わなければならない。このアルゴリズムのＣ言語の例は下記の通りである。
【００３６】
【表３】
2008507789.tif 000005
ＮｅｘｔＳｔａｔｅアレイは、状態表の行ベクトルへのポインタのアレイである。「ｐｓ」変数は、現在の状態の最適化した記憶ベクトルをポイントするために使用される。最適化した記憶ベクトルは、記憶フォーマット・インジケータ、ブール・パターン・マッチ・フラグ、および状態遷移ベクトル情報を含む。「ｐｓ」アレイの最初の２語は、記憶フォーマットおよびブール・マッチ・フラグである。「Ｔ」パラメータは、検索中のテキストであり、「ｘｌａｔｃａｓｅ」は、大文字／小文字独立検索のために１回でテキストの１バイトを大文字に変換する。大文字は、バンド状記憶ベクトル内への索引の際に使用する入力索引である。現在の状態で任意のパターンが一致しているか否かを判定するために、「ｐｓ」変数の第２の語を使用してチェックが行われる（索引は、０の索引を有する第１の語で開始する）。パターンが一致していない場合には、状態マシンは次の状態に移行する。次の状態は、最初に境界チェックを行い、次に、所望の「入力索引」の正しいオフセットを計算するために、索引式「索引＝４＋入力索引−開始索引」を適用することにより決まる。パターンが一致している場合には、現在の状態で一致しているすべてのパターンが「ｆｏｒ」ループ内で処理される。
状態表の作成
図１は、本発明のある実施形態によるパターン・マッチング・アプリケーション内の状態マシン・アルゴリズムの状態表を作成するための方法１００を示すフローチャートである。状態マシン・アルゴリズムは、例えば、Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムである。パターン・マッチング・アプリケーションは、侵入検出システム、パッシブ・ネットワーク監視装置、アクティブ・ネットワーク監視装置、プロトコル・アナライザ、および検索エンジンを含むが、含むことができるものはこれらに限定されない。
【００３７】
方法１００のステップ１１０において、少なくとも１つの検索パターンが識別される。この方法の他の実施形態の場合には、検索パターンの文字は、大文字に変換され、そのため最初の検索は大文字／小文字を区別しないで行われる。
【００３８】
ステップ１２０において、検索パターンｔｒｉｅが生成される。検索パターンｔｒｉｅは、各状態に対するすべて有効な文字のリストからなる。すべて有効な文字のリストの各要素は、有効な文字および次の有効な状態のペアを含む。この方法の他の実施形態の場合には、各状態に対するすべての有効な文字のリストは、各状態に対するすべての大文字を
含む。これにより大文字／小文字を区別しないでパターン検索を行うことができる。
【００３９】
ステップ１３０において、少なくとも１つの検索パターンが検索パターンｔｒｉｅに付加される。検索パターンが、一度に１文字づつ検索パターンｔｒｉｅに付加される。この場合、各文字は１つの状態を示す。
【００４０】
ステップ１４０において、ＮＦＡが検索パターンｔｒｉｅから作成される。検索パターンｔｒｉｅは、リスト・フォーマットでＮＦＡにより置換される。ＮＦＡは、検索パターンｔｒｉｅから作成され、周知の方法によりリスト・フォーマットに置かれる。
【００４１】
ステップ１５０において、ＤＦＡがＮＦＡから作成される。ＮＦＡは、リスト・フォーマットでＤＦＡにより置換される。ＤＦＡは、ＮＦＡから作成され、周知の方法によりリスト・フォーマットに置かれる。
【００４２】
ステップ１６０において、ＤＦＡは、３つの別々のデータ構造に変換される。これら３つのデータ構造は、状態遷移表、状態マッチング・パターン・リスト毎のアレイ、およびＮＦＡに対する各状態に対する別々の失敗ポインタ・リストを含む。すでに、状態表の各エントリは、その状態に対する遷移のベクトル、表のＮＦＡバージョンに対する失敗ポインタ、および状態に対するマッチング・パターンのリストを含む。これらすべてのものは１つの構造内に含まれている。
【００４３】
ステップ１７０において、３つのデータ構造は、状態表として使用される。
ＤＦＡのエントリは、状態遷移表に変換される。状態ベクトルは各状態に割り当てられる。この方法の他の実施形態の場合には、状態ベクトルの各要素は１６ビットである。すべての有効な文字のリストの各要素に対して状態ベクトルの状態遷移要素が存在する。すべての有効な文字のリストの各要素の状態が、状態ベクトルの各要素内にコピーされる。この方法の他の実施形態の場合には、状態ベクトル内に２５６の状態遷移要素が存在する。
【００４４】
この方法の他の実施形態の場合には、状態ベクトルの要素は、状態ベクトルのフォーマットを識別する。フォーマットは全およびバンド状を含むが、含むことができるものはこれらに限定されない。この方法の他の実施形態の場合には、状態ベクトルの要素は、状態ベクトルがマッチング・パターン状態を含むか否かを識別する。
【００４５】
この方法の他の実施形態の場合には、状態遷移要素は、バンド状行形式に格納される。バンドは、すべて有効な文字のリストからの第１の非ゼロ状態から、すべて有効な文字のリストからの最後の非ゼロ状態への要素のグループとして定義される。状態ベクトルは、各状態に割り当てられる。この方法の他の実施形態の場合には、状態ベクトルの各要素は１６ビットである。状態ベクトルの状態遷移要素が、バンドの各要素に対して生成される。すべての有効な文字のリストからの第１の非ゼロ状態の索引を識別するために、状態ベクトルの要素が生成される。バンド内の要素の数を識別するために、状態ベクトルの要素が生成される。バンドの各要素の状態が、状態ベクトルの各状態遷移要素にコピーされる。
【００４６】
この方法の他の実施形態の場合には、状態ベクトルの要素は、状態ベクトルのフォーマットを識別する。この方法の他の実施形態の場合には、状態ベクトルの要素は、状態ベクトルがマッチング・パターン状態を含んでいるか否かを識別する。
【００４７】
本発明の一実施形態の場合には、状態ベクトルの全ベクトル・フォーマットは２５８の要素からなる。各要素は１６ビットである。第１の要素は記憶フォーマットを識別する。
これらのフォーマットは全およびバンド状を含むが、含むことができるものはこれらに限定されない。第２の要素は、この状態ベクトルで任意のパターンが一致しているか否かを識別する。残りの２５６の要素は遷移要素である。
【００４８】
本発明の他の実施形態の場合には、状態ベクトルのスパース・バンド状ベクトル・フォーマットは、変えることができる数の要素からなるが、要素の数は３００以下である。各要素は１６ビットである。第１の要素は記憶フォーマットを識別する。これらのフォーマットは全およびバンド状を含むが、含むことができるものはこれらに限定されない。第２の要素は、この状態ベクトルで任意のパターンが一致しているか否かを識別する。第３の要素は、バンド内の要素の数である。第４の要素は、バンド内の第１の要素の索引である。残りの要素は遷移要素である。
【００４９】
本発明の他の実施形態の場合には、状態表は、最初に、パターンのリストに各パターンを付加することにより作成される。各パターンは大文字に変換され、後で使用するために検索エンジン内に格納される。これが、典型的なＡｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムが生成する典型的な大文字／小文字を区別する検索の代わりに、大文字／小文字を区別しない検索を形成する最初のステップである。もとのおよび大文字のパターンはメモリ内に維持されていて、検索段階で両方を使用することができる。パターン・リストからの各パターンは、状態表に追加される。各パターンは、状態表に大文字で一度に１語ずつ付加される。文字は、状態に対するすべての有効な大文字を格納している各状態に対するリストに追加される。リストは、また、各文字に対する次の有効な状態パラメータを含む。次の有効な状態は、検索を次の状態に向けるために使用される。状態表のこのリストは、リスト・フォーマットを使用する検索パターンｔｒｉｅである。
【００５０】
ＮＦＡが、ｔｒｉｅから作成され、リスト・フォーマットでｔｒｉｅリストがＮＦＡにより置換される。ＮＦＡ構造は、ＮＦＡに対する標準Ａｈｏ−Ｃｏｒａｓｉｃｋ構造の後に位置する。ＤＦＡはＮＦＡから作成され、ＮＦＡはリスト・フォーマットでＤＦＡにより置換される。ＤＦＡ構造は、ＤＦＡに対する標準Ａｈｏ−Ｃｏｒａｓｉｃｋ構造の後に位置する。
【００５１】
次に、ＤＦＡは全ベクトル・フォーマットまたはバンド状ベクトル・フォーマットに変換される。全ベクトル・フォーマットの場合には、２５８の要素を含む状態ベクトルが各状態に対して生成される。各状態ベクトルは、フォーマット要素、ブール・パターン・マッチ要素、および２５６の状態遷移要素を保持する。各状態ベクトルの場合には、状態ベクトルのフォーマットは、フォーマット・フィールド値をゼロにセットすることにより満杯になる。状態ベクトルの各遷移要素の場合には、パターンと一致するまたはパターンと一致しないとして、それぞれ１または０を使用して、ブール・パターン・マッチ・フラグがセットされる。２５６の遷移要素が、各状態に対してゼロに初期化される。ＤＦＡからの有効な状態遷移のリストが、状態要素データ・エリア内のその各位置にコピーされる。例えば、文字「Ａ」は、６５の値を有し、「Ａ」に対する状態が、遷移要素の６５番目の位置に置かれる。
【００５２】
バンド状ベクトル・フォーマットの場合には、変更可能な数の要素を含む状態ベクトルが各状態に対して生成される。各状態ベクトルは、フォーマット要素、ブール・パターン・マッチ要素、バンド要素内の多数の要素、バンド内の第１の要素の索引、および状態遷移要素のバンドを保持する。ＤＦＡからの有効な状態遷移のリストがチェックされる。第１の非ゼロ要素から最後の非ゼロ要素への要素はバンドとして定義される。バンドは、状態ベクトルの状態遷移要素にコピーされる。バンド要素内の要素の数およびバンド内の第１の要素の索引も状態ベクトルに格納される。状態ベクトルのフォーマットは、バンド状または１にセットされる。状態ベクトルの各遷移要素の場合には、パターンと一致するま
たはパターンと一致しないとして、それぞれ１または０を使用してブール・パターン・マッチ・フラグがセットされる。
テキスト・シーケンスでの検索パターンに対する検索
図２は、本発明のある実施形態によるパターン・マッチング・アプリケーション内の状態マシン・アルゴリズムの状態表を使用するテキスト・シーケンスで検索パターンを検索するための方法２００を示すフローチャートである。状態マシン・アルゴリズムは、例えば、Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムである。パターン・マッチング・アプリケーションは、侵入検出システム、パッシブ・ネットワーク監視装置、アクティブ・ネットワーク監視装置、プロトコル・アナライザ、および検索エンジンを含むが、含むことができるものはこれらに限定されない。
【００５３】
方法２００のステップ２１０において、テキスト・シーケンスから文字が読み出される。この方法の一実施形態の場合には、文字は大文字に変換される。この変換により大文字／小文字を区別しない検索を行うことができる。
【００５４】
ステップ２２０において、文字に対応する状態表の現在の状態ベクトルの要素が読み出される。
ステップ２３０において、要素が非ゼロである場合には、マッチング・パターン・フラグに対する現在の状態ベクトルのパターン・マッチング要素がチェックされる。
【００５５】
ステップ２４０において、マッチング・パターン・フラグがセットされている場合には、パターン・マッチがログされる。
ステップ２５０において、要素の値に対応する現在の状態ベクトルが選択される。
【００５６】
次に、ステップ２６０において、テキスト・シーケンスから次の文字が読み出される。
この方法の他の実施形態の場合には、フォーマットを識別する現在の状態ベクトルの要素がチェックされる。フォーマットがバンド状である場合には、文字がバンド内に位置するか否かの判定が行われる。この判定は、バンド内の多数の要素を識別する現在の状態ベクトルの要素を使用して行われる。現在の状態ベクトルの要素は、バンドの第１の要素の索引およびバンドの要素を識別する。文字がバンド内に位置している場合には、要素の値に対応する現在の状態ベクトルが選択される。文字がバンド内に位置していない場合には、現在の状態ベクトルは、初期状態にセットされる。
【００５７】
この方法の他の実施形態の場合、マッチング・パターン・フラグがセットされている場合には、テキスト・シーケンスからのパターン・マッチの大文字／小文字を区別するバージョンと検索パターンの大文字／小文字を区別するバージョンとが比較される。テキスト・シーケンスからのパターン・マッチの大文字／小文字を区別するバージョンおよび検索パターンの大文字／小文字を区別するバージョンが一致する場合には、パターン・マッチの大文字／小文字を区別するバージョンがログされる。
状態表
図３は、本発明のある実施形態によるパターン・マッチング・アプリケーションで使用する状態マシン・アルゴリズムのための状態表３００の構成要素の略図である。状態表３００は、状態遷移表３２０、状態マッチング・パターン・リスト毎のアレイ３３０、およびＮＦＡに対する各状態に対する失敗ポインタ・リスト３４０を含む。状態遷移表３２０は、各状態に対する状態ベクトルを含む。状態表３００の一実施形態の場合には、状態ベクトルはスパース・ベクトル・フォーマットに格納される。スパース・ベクトル・フォーマットは、圧縮スパース・ベクトル・フォーマット、スパース行フォーマット、およびバンド状行フォーマットを含むが、含むことができるものはこれらに限定されない。状態マシン・アルゴリズムは、例えば、Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムである。状態表３００および状態マシン・アルゴリズムは、侵入検出システム、パッシブ・ネットワーク
監視装置、アクティブ・ネットワーク監視装置、プロトコル・アナライザ、および検索エンジンを含むが、その他のものも含むことができるパターン・マッチング・アプリケーションで使用される。
性能メトリックス
アルゴリズム的または理論的メトリックスは、ハードウェアまたはソフトウェアから独立しているアルゴリズムの考慮に基づいている。最悪の場合の挙動は、アルゴリズム的メトリックスの一例である。通常、マルチパターン検索エンジンの最悪の場合の性能は、パターンのサイズおよび検索中のデータの長さに比例する。本発明の一実施形態は、ＩＤＳ用のＯ（ｎ）アルゴリズムであり、検索速度の表示は、検索中のデータの長さｎに比例する。
【００５８】
計算メトリックスは、アルゴリズムが、稼働しているコンピュータ・ハードウェアとどのように相互作用するかのチェックに基づいている。考慮対象の有意なメトリックスは、命令の混合体、キャッシング特性およびパターン・グループ・サイズ、および検索テキストの長さである。命令混合体は、アルゴリズムが必要とするハードウェア命令のタイプである。高度な命令混合体は、効率的に動作する特殊目的の機械命令またはハードウェアを必要とするアルゴリズムを示す。本発明のある実施形態は、特殊な命令混合体要件を有していないので、大部分の汎用コンピュータ上でうまく稼働することができる。
【００５９】
アルゴリズムのキャッシング特性が、性能に有意に影響を与える場合がある。キャッシング性能の最も強力なインジケータは、キャッシュ・サイズおよびデータの位置である。データの位置は、アルゴリズムがキャッシュの内外で行うシーケンシャル・アクセス対ランダム・メモリ・アクセスの相対的な量により定義される。本発明のある実施形態は、状態表内である状態から他の状態にジャンプする。これらのジャンプはデータ駆動であり、本質的にランダムなものである。コンピュータ・キャッシュに状態表の小さな部分しか収容できない場合には、多くのキャッシュ・ミスが起こる可能性があり、キャッシュ・ミスは、キャッシュ・ヒットの１０倍のコストがかかる場合がある。それ故、本発明のある実施形態の性能は、キャッシュのサイズ、および状態表をキャッシュに収容できるか否かにより大きく影響を受ける。理想的には、キャッシュは、状態表全体を収容できるほど十分大きく、必要に応じて検索データをキャッシュに収容できるだけの余裕があることが望ましい。この理想的な構成は、通常、状態表が小さい場合またはシステムが非常に大きなキャッシュを備えている場合にのみ達成される。状態表サイズは、検索に含まれるすべてのパターンの文字の全数に比例する。
【００６０】
パターン・マッチング性能を測定する際に考慮すべき最後の問題は、検索の問題の領域である。パターン・マッチャ（ｐａｔｔｅｒｎ  ｍａｔｃｈｅｒ）は、検索テキストのサイズ、パターンの数、および検索の頻度を定義するために適用される。典型的なＩＤＳの問題の領域は、周知の攻撃パターンに対するネットワーク・トラフィックの検索を必要とする。典型的なＩＤＳで使用するパターン・グループ・サイズは、最大１，０００またはそれ以上のパターンである。典型的なＩＤＳは、各検索の際に平均６００〜８００バイトであるネットワーク・パケットを検索し、典型的なＩＤＳは、この検索を毎秒最大２００，０００回行う。パターン検索の間に、典型的なＩＤＳでは、潜在的にキャッシュをフラッシュする他の動作が行われる。パターン検索が開始する度に、各検索の場合に顕著な設定コストを表示することができるキャッシュを再度ロードしなければならない。全く対照的に、このタイプの検索は、非常に長いデータ・ストリームの逐次検索である。このタイプの検索を行うことにより、より高性能のキャッシュしたデータ・アクセスは、全検索性能を大きく改善することができる。辞書試験がこの挙動を実証している。
試験結果
Ｓｎｏｒｔは例示としてのＩＤＳである。Ｓｎｏｒｔですでに使用した標準Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズム、Ｓｎｏｒｔで実施したフルマトリクス記憶装置を使用する
本発明のある実施形態、およびＳｎｏｒｔで実施したバンド状行記憶装置を使用する本発明のある実施形態に対する試験結果を示す。
【００６１】
試験を２つのタイプのパターン検索試験に分割した。パターン検索エンジンの相対的な利点を実証するために辞書試験を行った。検索にテキストの長いストリームを供給するための選択した辞書試験を行い、最善の可能なキャッシュ性能を達成するための機会をソフトウェアに与えた。また、ネットワーク・トラフィック捕捉ファイルが使用され、Ｓｎｏｒｔで実施したＡｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムの３つすべてのバージョンの相対性能を示した。
【００６２】
辞書試験は、オンライン・キング・ジェームス・バイブル全体から１，０００パターンを選択した。約２．３メガバイトのデータである１９０３年版のウェブスター大辞典を検索するために、１０〜１，０００のグループでこれらのパターンを使用した。これにより、多くのパターンがうまく一致したことが確認され、バイト試験およびマッチング・パターン・コードの両方を実行することにより、試験は検索ルーチンを完全にカバーした。
【００６３】
試験したＡｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムの３つのバージョンは、（１）状態表をフルマトリクスとして処理するＳｎｏｒｔですでに使用している標準バージョン、（２）フルマトリクス記憶装置を使用する本発明のある実施形態、（３）バンド状行記憶装置を使用する本発明のある実施形態を含む。
【００６４】
試験する各Ａｈｏ−Ｃｏｒａｓｉｃｋルーチンのいくつかの異なるコンパイルしたバージョンを含む試験ベッドを開発した。使用したコンパイラは、Ｍｉｃｒｏｓｏｆｔ（登録商標）Ｖｉｓｕａｌ  Ｃ＋＋（登録商標）６．０（ＶＣ６０）、Ｉｎｔｅｌ（登録商標）Ｃ６．０およびＣｙｇｗｉｎ  ｇｃｃ  ３．３．１を含んでいた。３つの異なるコンパイラを使用すると、検索アルゴリズムおよび格納方法の性能およびキャッシング挙動をより広く洞察することができる。
【００６５】
すべての結果は、Ａｈｏ−ＣｏｒａｓｉｃｋアルゴリズムのＤＦＡバージョンに対するものである。図４、図５および図６は、３つすべてのコンパイラに対する辞書試験の正確な結果を示す。図７、図８および図９は、標準Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムに対して正規化した結果を示す。図４〜図１０の棒グラフの記号は同じものである。図４に示すように、ＡＣ４１０は、Ｓｎｏｒｔですでに使用しているＡｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムの標準バージョンの結果であり、ＡＣ  ＯＰＴ４２０は、フルマトリクス記憶装置を使用する本発明のある実施形態の結果であり、ＡＣ  ＢＡＮＤ４３０は、バンド状行記憶装置を使用する本発明のある実施形態の結果である。これらの試験は、１ギガバイトのＲＡＭを含むＤｅｌｌ（登録商標）８１００  １．７ＧＨｚシステム上で１６ビットの状態値を使用して行った。
【００６６】
３つすべてのコンパイラによる辞書試験における標準バージョンと比較すると、最適化したバージョンの性能は有意に優れていた。図４、図５および図６のコンパイラの結果を比較すると、生の性能においてはＩｎｔｅｌ（登録商標）コンパイラの性能が最も優れていた。標準Ａｈｏ−Ｃｏｒａｓｉｃｋの場合には、ｇｃｃコンパイラの性能の方がＶＣ６０の性能より優れていたが、フルマトリクス記憶装置を使用する本発明のある実施形態およびバンド状行記憶装置を使用する本発明のある実施形態の場合には、ＶＣ６０コンパイラの性能の方がｇｃｃコンパイラの性能より優れていた。
【００６７】
３つすべてのコンパイラは、類似の性能の傾向を示した。標準Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムと比較すると、フルマトリクス記憶装置を使用する本発明のある実施形態の速度は少なくとも１．４倍に改善した。例外はＶＣ６０コンパイラの場合で、もっと小
さなパターン・グループの場合、２．５倍に速度が改善した。また、フルマトリクス記憶装置を使用する本発明のある実施形態の処理速度が有意に増大する。実際に、バンド状行記憶装置を使用する本発明のある実施形態の性能は、最大のパターン・グループの場合に最も優れていた。３つすべてのコンパイラは、最大５００パターンのすべてのパターン・グループ・サイズに対して、フルマトリクス記憶装置を使用する本発明のある実施形態が、バンド状行記憶装置を使用する本発明のある実施形態より高速であることを示した。１，０００パターンの場合、３つすべてのコンパイラの場合、バンド状行記憶装置を使用する本発明のある実施形態の性能は、フルマトリクス記憶装置を使用する本発明のある実施形態の性能より優れていた。
【００６８】
図１０は、異なるパターン・グループ・サイズに対する記憶装置要件を示し、図１１は、表により結果を示す。これらの結果は１６ビットの状態サイズを反映している。フルマトリクス記憶装置を使用する本発明のある実施形態は、状態値に対して１６ビット語のサイズを使用しているために、標準Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムのメモリの半分しか使用しない。バンド状行記憶装置を使用する本発明のある実施形態は、標準Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムの記憶装置の約１／１５、およびフルマトリクス記憶装置を使用する本発明のある実施形態の記憶装置の約１／７しか使用しない。
【００６９】
フルマトリクス記憶装置を使用する本発明のある実施形態、およびバンド状行記憶装置を使用する本発明のある実施形態は、１６ビットの状態値または３２ビットの状態値を使用することができる。１６ビットの状態値は、２１６または６５０００の状態に制限される。３２ビットの状態値は、２３２または４０億の状態に制限される。１６ビット状態を使用するメリットは、少ないメモリですむことである。図１２、図１３および図１４は、３つのコンパイラに対するフルマトリクス記憶装置を使用する本発明のある実施形態の１６ビット（ＡＣ  ＯＰＴ）および３２ビット（ＡＣ  ＯＰＴ３２）バージョンの性能の比較を示す。図１２〜図１４の棒グラフの記号は同じものである。図１２に示すように、ＡＣ  ＯＰＴ１２１０は、フルマトリクス記憶装置を使用する本発明のある実施形態の１６ビット・バージョンの結果を示し、ＡＣ  ＯＰＴ３２  １２２０は、フルマトリクス記憶装置を使用する本発明のある実施形態の３２ビット・バージョンを示す。図１５、図１６および図１７は、３つのコンパイラに対するバンド状行記憶装置を使用する本発明のある実施形態の１６ビット（ＡＣ  ＢＡＮＤＥＤ）および３２ビット（ＡＣ  ＢＡＮＤＥＤ３２）バージョンの性能の比較を示す。図１５〜図１７の棒グラフの記号は同じものである。図１５に示すように、ＡＣ  ＢＡＮＤＥＤ１５１０は、バンド状行記憶装置を使用する本発明のある実施形態の１６ビット・バージョンの結果を示し、ＡＣ  ＢＡＮＤＥＤ３２
１５２０は、バンド状行記憶装置を使用する本発明のある実施形態の３２ビット・バージョンを示す。
【００７０】
フルマトリクス記憶装置を使用する本発明のある実施形態およびバンド状行記憶装置を使用する本発明のある実施形態両方の１６ビット・バージョンと３２ビット・バージョンの間の違いは僅かなものである。ＶＣ６０コンパイラは、すべてのパターン・サイズ間で最大の違いを示し、３２ビット状態サイズが優れている。
【００７１】
Ｓｎｏｒｔは、パケット当たりのデータが最大１４６０バイトである標準イーサーネット・ベースのネットワーク上でパケットを処理する。このタイプのデータ試験は、もっと小さな検索テキスト上で、また比較的キャッシュに好ましくない環境で、性能を検索し、設定コストを検索する。試験を、Ｓｎｏｒｔ内に前に捕捉したトラフィックを直接再生することにより行った。使用したコンパイラは、Ｌｉｎｕｘ上のＩｎｔｅｌ（登録商標）Ｃ６．０コンパイラであった。選択したテスト・ファイルは、約２ギガバイトのウェブ・セントリック・トラフィックを表していた。Ｓｎｏｒｔを使用した場合には、各ウェブ要求の際にチェックしたトラフィックの量を選択することができるので、このテスト・ファイ
ルを選択した。試験は下記のように行った。各ウェブ・ページ要求の最初の３００バイトをチェックするようにＳｎｏｒｔを構成した。これが典型的なＳｎｏｒｔの構成方法である。ユーザの処理時間を記録しながら、Ｕｎｉｘ時間コマンドを使用し、ファイルを通常の方法で処理した。次に、サーバから要求された場合に、各ウェブ・ページを完全にチェックするようにＳｎｏｒｔを構成した。この場合も、Ｓｎｏｒｔを実行し、ユーザ処理時間を記録した。時間の違いは、余分なデータをパターン・マッチするために必要な正味のパターン・マッチング時間を表していた。この試験は絶対的な性能を測定しなかった。この試験は、付加データの処理の際の各検索エンジンの相対性能の違いを示した。
【００７２】
テスト・ファイル試験を、Ａｈｏ−ＣｏｒａｓｉｃｋアルゴリズムおよびＷｕ−Ｍａｎｂｅｒアルゴリズムの各バージョンと一緒に行った。Ｓｎｏｒｔ内のＷｕ−Ｍａｎｂｅｒアルゴリズムは、通常、平均的に非常に高速なアルゴリズムであるが、最悪の場合に優れたシナリオを有していなかった。このアルゴリズムを内蔵させたのは、Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムと比較した場合、その優れた平均的な場合の性能の相対的な利点を示すためである。
【００７３】
図１８および図１９は、標準Ａｈｏ−Ｃｏｒａｓｉｃｋ上で、時間の違い、計算した速度、および性能が増大することを示す。図１８〜図１９の場合には、ＷＵＭＡＮは、Ｗｕ−Ｍａｎｂｅｒアルゴリズムの結果を示し、ＡＣは、Ｓｎｏｒｔですでに使用しているＡｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムの標準バージョンの結果を示し、ＡＣ  ＯＰＴは、フルマトリクス記憶装置を使用する本発明のある実施形態の結果を示し、ＡＣ  ＢＡＮＤは、バンド状行記憶装置を使用する本発明のある実施形態の結果を示す。１６ビット状態サイズを使用するこれらの試験は、デュアル２．４ＧＨｚ  Ｘｅｏｎ（登録商標）ｃｐｕｓ、および２ギガバイトのＲＡＭを備えるシステム上で行った。
【００７４】
フルマトリクス記憶装置を使用する本発明のある実施形態およびバンド状行記憶装置を使用する本発明のある実施形態は、標準Ａｈｏ−ＣｏｒａｓｉｃｋアルゴリズムおよびＷｕ−Ｍａｎｂｅｒアルゴリズムよりかなり高速である。Ｓｎｏｒｔ内のウェブ規則は、多くの小さな２バイトのパターンを含む。これにより、Ｗｕ−Ｍａｎｂｅｒアルゴリズムが、悪い文字シフト方法から利益を受けるのが防止される。
【００７５】
フルマトリクス記憶装置を使用する本発明のある実施形態は、３１％（８．５／１２．４）高速である。このことは、エンジンが同じ時間内に４６％（１２．４／８．５）多いパターン・マッチングを行うことができ、もとのアルゴリズムのメモリの半分しか必要としないことを意味する。バンド状行記憶装置を使用する本発明のある実施形態は、１７％高速であり、２０％性能が向上し、標準Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムのメモリの約１／４しか使用しない。
【００７６】
本発明のある実施形態によれば、ある方法を実行するためにプロセッサが実行するように構成された命令は、コンピュータ可読媒体上に格納される。コンピュータ可読媒体は、デジタル情報を格納するデバイスであってもよい。例えば、コンピュータ可読媒体は、ソフトウェアを格納するための当業者であれば周知のコンパクト・ディスク読出し専用メモリ（ＣＤ−ＲＯＭ）を含む。コンピュータ可読媒体には、実行するように構成されている命令を実行するのに適しているプロセッサによりアクセスすることができる。「実行するように構成されている命令」という用語、および「実行される命令」という用語は、プロセッサがそのままの形（例えば、機械コード）ですぐに実行することができる、またはプロセッサがすぐに実行することができるように他の操作（例えば、コンパイル、解読またはアクセス・コードを備えていること等）を必要とする任意の命令を含むことを意味する。
【００７７】
本明細書に開示する本発明のある実施形態による方法は、ＩＤＳでのパターン・マッチングの性能を有利に改善することができる。あるパターン・マッチング方法は、性能を有意に改善するＡｈｏ−Ｃｏｒａｓｉｃｋ状態表の最適化したベクトル実施を使用する。他の方法は、メモリ要件を低減するためにスパース・マトリクス記憶装置を使用し、大きなパターン・グループ上での性能をさらに改善する。
【００７８】
本発明の好ましい実施形態の上記開示は、本発明を説明し、記述するためのものである。上記開示はすべてを余さず網羅しているものでもなければ、本発明を開示した正確な形に制限するものでもない。上記開示を読めば、通常の当業者であれば、上記実施形態の多くの変更および修正を思い付くだろう。本発明の範囲は、添付の特許請求の範囲およびその等価物によってだけ定義される。
【００７９】
さらに、本発明の代表的な実施形態を説明する際には、本明細書は本発明の方法および／またはプロセスをステップの特定のシーケンスとして表示することができる。しかし、方法またはプロセスが本明細書に記載するステップの特定の順序に依存しなくなるほど、方法またはプロセスを上記ステップの特定のシーケンスに限定すべきではない。通常の当業者であれば理解できると思うが、ステップは他の順序で使用することもできる。それ故、本明細書に記載するステップの特定の順序は、特許請求の範囲に対する制限であると解釈すべきではない。さらに、本発明の方法および／またはプロセスに関する特許請求の範囲は、記載の順序のそのステップの実行に制限すべきではなく、当業者であれば、このシーケンスは変更することができ、変更しても本発明の精神および範囲に含まれることを容易に理解することができるだろう。
【図面の簡単な説明】
【００８０】
【図１】本発明のある実施形態によるパターン・マッチング・アプリケーション内の状態マシン・アルゴリズムの状態表を作成するための方法を示すフローチャート。
【図２】本発明のある実施形態によるパターン・マッチング・アプリケーション内の状態マシン・アルゴリズムの状態表を使用するテキスト・シーケンスで検索パターンを検索するための方法を示すフローチャート。
【図３】本発明のある実施形態によるパターン・マッチング・アプリケーション内で使用する状態マシン・アルゴリズムのための状態表の構成要素の略図。
【図４】Ｓｎｏｒｔで使用する標準Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムを使用する辞書検索のための例示としての試験結果、フルマトリクス記憶装置を使用する本発明のある実施形態、およびＩｎｔｅｌ（登録商標）Ｃ６．０コンパイラですべてコンパイルしたバンド状行記憶装置を使用する本発明のある実施形態を示す棒グラフ。
【図５】Ｓｎｏｒｔで使用する標準Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムを使用する辞書検索のための例示としての試験結果、フルマトリクス記憶装置を使用する本発明のある実施形態、およびＣｙｇｗｉｎ  ｇｃｃ  ３．３．１コンパイラですべてコンパイルしたバンド状行記憶装置を使用する本発明のある実施形態を示す棒グラフ。
【図６】Ｓｎｏｒｔで使用する標準Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムを使用する辞書検索のための例示としての試験結果、フルマトリクス記憶装置を使用する本発明のある実施形態、およびＭｉｃｒｏｓｏｆｔ（登録商標）Ｖｉｓｕａｌ  Ｃ＋＋（登録商標）６．０コンパイラですべてコンパイルしたバンド状行記憶装置を使用する本発明のある実施形態を示す棒グラフ。
【図７】Ｓｎｏｒｔで使用する標準Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムを使用する辞書検索のための例示としての試験結果、フルマトリクス記憶装置を使用する本発明のある実施形態、およびＩｎｔｅｌ（登録商標）Ｃ６．０コンパイラですべてコンパイルし、Ｓｎｏｒｔで使用する標準Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムの結果に正規化したバンド状行記憶装置を使用する本発明のある実施形態を示す棒グラフ。
【図８】Ｓｎｏｒｔで使用する標準Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムを使用する辞書検索のための例示としての試験結果、フルマトリクス記憶装置を使用する本発明のある実施形態、およびＣｙｇｗｉｎ  ｇｃｃ  ３．３．１コンパイラですべてコンパイルし、Ｓｎｏｒｔで使用する標準Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムの結果に正規化したバンド状行記憶装置を使用する本発明のある実施形態を示す棒グラフ。
【図９】Ｓｎｏｒｔで使用する標準Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムを使用する辞書検索のための例示としての試験結果、フルマトリクス記憶装置を使用する本発明のある実施形態、およびＭｉｃｒｏｓｏｆｔ（登録商標）Ｖｉｓｕａｌ  Ｃ＋＋（登録商標）６．０コンパイラですべてコンパイルし、Ｓｎｏｒｔで使用する標準Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムの結果に正規化したバンド状行記憶装置を使用する本発明のある実施形態を示す棒グラフ。
【図１０】Ｓｎｏｒｔで使用する標準Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムを使用する辞書検索のための例示としての記憶装置要件、フルマトリクス記憶装置を使用する本発明のある実施形態、バンド状行記憶装置を使用する本発明のある実施形態を示す棒グラフ。
【図１１】Ｓｎｏｒｔで使用する標準Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズムを使用する辞書検索のための例示としての記憶装置要件、フルマトリクス記憶装置を使用する本発明のある実施形態、バンド状行記憶装置を使用する本発明のある実施形態を示す表。
【図１２】両方ともＩｎｔｅｌ（登録商標）Ｃ６．０コンパイラでコンパイルされた１６ビットおよび３２ビットの状態値を含むフルマトリクス記憶装置を使用する本発明のある実施形態を使用する辞書検索のための例示としての試験結果を示す棒グラフ。
【図１３】両方ともＣｙｇｗｉｎ  ｇｃｃ  ３．３．１コンパイラでコンパイルした１６ビットおよび３２ビットの状態値を含むフルマトリクス記憶装置を使用する本発明のある実施形態を使用する辞書検索のための例示としての試験結果を示す棒グラフ。
【図１４】両方ともＭｉｃｒｏｓｏｆｔ（登録商標）Ｖｉｓｕａｌ  Ｃ＋＋（登録商標）６．０コンパイラでコンパイルした１６ビットおよび３２ビットの状態値を含むフルマトリクス記憶装置を使用する本発明のある実施形態を使用する辞書検索のための例示としての試験結果を示す棒グラフ。
【図１５】両方ともＩｎｔｅｌ（登録商標）Ｃ６．０コンパイラでコンパイルした１６ビットおよび３２ビットの状態値を含むバンド状行記憶装置を使用する本発明のある実施形態を使用する辞書検索のための例示としての試験結果を示す棒グラフ。
【図１６】両方ともＣｙｇｗｉｎ  ｇｃｃ  ３．３．１コンパイラでコンパイルした１６ビットおよび３２ビットの状態値を含むバンド状行記憶装置を使用する本発明のある実施形態を使用する辞書検索のための例示としての試験結果を示す棒グラフ。
【図１７】両方ともＭｉｃｒｏｓｏｆｔ（登録商標）Ｖｉｓｕａｌ  Ｃ＋＋（登録商標）６．０コンパイラでコンパイルした、１６ビットおよび３２ビットの状態値を含むバンド状行記憶装置を使用する本発明のある実施形態を使用する辞書検索のための例示としての試験結果を示す棒グラフ。
【図１８】Ｗｕ−Ｍａｎｂｅｒアルゴリズムを使用するウェブ・セントリック・ネットワーク・トラフィックの２つのＧ−バイト・ファイルの検索の例示としての試験結果、Ｓｎｏｒｔで使用する標準Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズム、フルマトリクス記憶装置を使用する本発明のある実施形態、およびバンド状行記憶装置を使用する本発明のある実施形態を示す表。
【図１９】Ｗｕ−Ｍａｎｂｅｒアルゴリズムを使用するウェブ・セントリック・ネットワーク・トラフィックの２つのＧ−バイト・ファイルの検索の例示としての試験結果、Ｓｎｏｒｔで使用する標準Ａｈｏ−Ｃｏｒａｓｉｃｋアルゴリズム、フルマトリクス記憶装置を使用する本発明のある実施形態、およびバンド状行記憶装置を使用する本発明のある実施形態を示す棒グラフ。
【図１】
2008507789.tif 000006
【図２】
2008507789.tif 000007
【図３】
2008507789.tif 000008
【図４】
2008507789.tif 000009
【図５】
2008507789.tif 000010
【図６】
2008507789.tif 000011
【図７】
2008507789.tif 000012
【図８】
2008507789.tif 000013
【図９】
2008507789.tif 000014
【図１０】
2008507789.tif 000015
【図１１】
2008507789.tif 000016
【図１２】
2008507789.tif 000017
【図１３】
2008507789.tif 000018
【図１４】
2008507789.tif 000019
【図１５】
2008507789.tif 000020
【図１６】
2008507789.tif 000021
【図１７】
2008507789.tif 000022
【図１８】
2008507789.tif 000023
【図１９】
2008507789.tif 000024