(57)【特許請求の範囲】
【請求項１】
あらかじめ想定されるデータパターンから所定の演算式に基づき算出される値を記憶するパターンデータメモリと、
入力されるデータをバッファリングするバッファメモリと、
前記演算式に基づき当該バッファメモリの内容から前記値を算出する算出回路と、
前記算出回路の出力を前記パターンデータメモリの値と照合する照合回路とを備え、
前記算出回路は、
データを廃棄するときに、アキュムレータレジスタ（値をＡｎとする）で破棄データの前記演算式の逆演算を行い、Ａｎ'を算出する第１のステップ、及び
新たなデータｄが入力されるときに、前記アキュムレータレジスタの値（Ａｎ'）及び当該入力データｄを用いて前記演算式により正演算を行い、（Ａｎ＋１）を算出する第２ステップ、
を繰り返すことを特徴とするコンピュータウイルス検査装置。
【請求項２】
コンピュータウイルスを含む可能性のあるビット列を外部から受信する手段と、
コンピュータウイルスを識別するためのパターンデータを記憶するパターンデータメモリと、
前記ビット列と前記パターンデータを照合し、一致するパターンがあるか否かを判定する一つ以上のパターンマッチング回路と、
前記パターンマッチング回路の判定結果をホストＣＰＵに通知する手段と、
を備え、
前記パターンマッチング回路は、
パターンデータメモリから所定のパターンを受けてこれを記憶する照合パターンメモリと、
検査対象データを記憶する被照合バッファメモリと、
前記照合パターンメモリのバイト列を前記被照合バッファメモリのバイト列と照合する照合回路とを備え、前記照合回路は下記（ア）乃至（ウ）の少なくともいずれかの処理を行うものであることを特徴とするコンピュータウイルス検査装置。
（ア）前記照合パターンメモリはビット長Ｎ＋Ｆのバイト列を記憶し、前記被照合バッファメモリはビット長Ｎのバイト列を記憶し、前記照合回路は、Ｆに含まれる所定のビットが所定の値であるとき、当該バイトを無条件に合致と見なす
（イ）前記照合パターンメモリはビット長Ｎ＋Ｄのバイト列を記憶し、前記被照合バッファメモリはビット長Ｎのバイト列を記憶し、前記照合回路は、あるアドレスにおける前記照合パターンメモリと前記被照合バッファメモリの複数のバイト列を照合するとき、Ｄに対応するバイト数のデータビットが連続しているとみなす
（ウ）前記照合パターンメモリはビット長Ｎ＋Ｍのバイト列を記憶し、前記被照合バッファメモリはビット長Ｎのバイト列を記憶し、前記照合回路は、あるアドレスにおける前記照合パターンメモリと前記被照合バッファメモリの複数のバイト列を照合するとき、前記被照合バッファメモリの対応するバイトとマスクパターンＭとの論理積をもとめ、これを前記照合パターンメモリの対応するバイトと照合する
【請求項３】
被照合データ列の格納先アドレスを記憶するレジスタと、
コンピュータウイルスを識別するためのパターンデータを記憶するパターンデータメモリと、
前記レジスタにより特定される被照合データ列と前記パターンデータを照合し、一致するパターンがあるか否かを判定する一つ以上のパターンマッチング回路と、
ホストＣＰＵから信号を受け前記パターンマッチング回路を始動する回路と、
前記パターンマッチング回路の判定結果をホストＣＰＵに通知する手段と、
を備え、
前記パターンマッチング回路は、
パターンデータメモリから所定のパターンを受けてこれを記憶する照合パターンメモリと、
検査対象データを記憶する被照合バッファメモリと、
前記照合パターンメモリのバイト列を前記被照合バッファメモリのバイト列と照合する照合回路とを備え、前記照合回路は下記（ア）乃至（ウ）の少なくともいずれかの処理を行うものであることを特徴とするコンピュータウイルス検査装置。
（ア）前記照合パターンメモリはビット長Ｎ＋Ｆのバイト列を記憶し、前記被照合バッファメモリはビット長Ｎのバイト列を記憶し、前記照合回路は、Ｆに含まれる所定のビットが所定の値であるとき、当該バイトを無条件に合致と見なす
（イ）前記照合パターンメモリはビット長Ｎ＋Ｄのバイト列を記憶し、前記被照合バッファメモリはビット長Ｎのバイト列を記憶し、前記照合回路は、あるアドレスにおける前記照合パターンメモリと前記被照合バッファメモリの複数のバイト列を照合するとき、Ｄに対応するバイト数のデータビットが連続しているとみなす
（ウ）前記照合パターンメモリはビット長Ｎ＋Ｍのバイト列を記憶し、前記被照合バッファメモリはビット長Ｎのバイト列を記憶し、前記照合回路は、あるアドレスにおける前記照合パターンメモリと前記被照合バッファメモリの複数のバイト列を照合するとき、前記被照合バッファメモリの対応するバイトとマスクパターンＭとの論理積をもとめ、これを前記照合パターンメモリの対応するバイトと照合する
【請求項４】
インデックスＩ及びこれに対応するパターンの存在情報をもつルックアップテーブルを備え、
前記被照合バッファメモリの一部のデータに基づき前記ルックアップテーブルが検索され、前記パターンの存在情報が出力され、
前記照合回路は、前記被照合バッファメモリの内容を前記パターンの存在情報に基づき選択されたパターンと照合することを特徴とする請求項２又は請求項３記載のコンピュータウイルス検査装置。
【請求項５】
テキストデータからホワイトスペースを取り除くホワイトスペース除去回路を備え、
前記ホワイトスペース除去回路は、前記被照合バッファメモリの前段に設けられていることを特徴とする請求項２又は請求項３記載のコンピュータウイルス検査装置。
【請求項６】
請求項１乃至請求項５いずれかに記載のコンピュータウイルス検査装置を、ワンチップに集積してなる半導体集積回路。
【請求項７】
所定の文字列並びにＵＲＬなどネットワーク上のアドレスから所定の演算式に基づき算出される値を記憶するパターンデータメモリと、
入力されるデータをバッファリングするバッファメモリと、
前記演算式に基づき当該バッファメモリの内容から前記値を算出する算出回路と、
前記算出回路の出力を前記パターンデータメモリの値と照合する照合回路とを備え、
前記所定の文字列並びに前記ネットワーク上のアドレスを含むウェブサイト及び電子メールの中継を遮断するアクセス制限装置であって、
前記算出回路は、
データを廃棄するときに、アキュムレータレジスタ（値をＡｎとする）で破棄データの前記演算式の逆演算を行い、Ａｎ'を算出する第１のステップ、及び
新たなデータｄが入力されるときに、前記アキュムレータレジスタの値（Ａｎ'）及び当該入力データｄを用いて前記演算式により正演算を行い、（Ａｎ＋１）を算出する第２ステップ、
を繰り返すことを特徴とするアクセス制限装置。
【請求項８】
ビット列を外部から受信する手段と、
パターンデータを予め記憶するパターンデータメモリと、
前記ビット列と前記パターンデータを照合し、一致するパターンがあるか否かを判定する一つ以上のパターンマッチング回路と、
前記パターンマッチング回路の判定結果をホストＣＰＵに通知する手段と、
を備え、
所定の文字列並びにネットワーク上のアドレスを含むウェブサイト及び電子メールの中継を遮断するアクセス制限装置であって、
前記パターンマッチング回路は、
パターンデータメモリから所定のパターンを受けてこれを記憶する照合パターンメモリと、
検査対象データを記憶する被照合バッファメモリと、
前記照合パターンメモリのバイト列を前記被照合バッファメモリのバイト列と照合する照合回路とを備え、前記照合回路は下記（ア）乃至（ウ）の少なくともいずれかの処理を行うものであることを特徴とするアクセス制限装置。
（ア）前記照合パターンメモリはビット長Ｎ＋Ｆのバイト列を記憶し、前記被照合バッファメモリはビット長Ｎのバイト列を記憶し、前記照合回路は、Ｆに含まれる所定のビットが所定の値であるとき、当該バイトを無条件に合致と見なす
（イ）前記照合パターンメモリはビット長Ｎ＋Ｄのバイト列を記憶し、前記被照合バッファメモリはビット長Ｎのバイト列を記憶し、前記照合回路は、あるアドレスにおける前記照合パターンメモリと前記被照合バッファメモリの複数のバイト列を照合するとき、Ｄに対応するバイト数のデータビットが連続しているとみなす
（ウ）前記照合パターンメモリはビット長Ｎ＋Ｍのバイト列を記憶し、前記被照合バッファメモリはビット長Ｎのバイト列を記憶し、前記照合回路は、あるアドレスにおける前記照合パターンメモリと前記被照合バッファメモリの複数のバイト列を照合するとき、前記被照合バッファメモリの対応するバイトとマスクパターンＭとの論理積をもとめ、これを前記照合パターンメモリの対応するバイトと照合する
【請求項９】
被照合データ列の格納先アドレスを記憶するレジスタと、
パターンデータを予め記憶するパターンデータメモリと、
前記レジスタにより特定される被照合データ列と前記パターンデータを照合し、一致するパターンがあるか否かを判定する一つ以上のパターンマッチング回路と、
ホストＣＰＵから信号を受け前記パターンマッチング回路を始動する回路と、
前記パターンマッチング回路の判定結果をホストＣＰＵに通知する手段と、
を備え、
所定の文字列並びにネットワーク上のアドレスを含むウェブサイト及び電子メールの中継を遮断するアクセス制限装置であって、
前記パターンマッチング回路は、
パターンデータメモリから所定のパターンを受けてこれを記憶する照合パターンメモリと、
検査対象データを記憶する被照合バッファメモリと、
前記照合パターンメモリのバイト列を前記被照合バッファメモリのバイト列と照合する照合回路とを備え、前記照合回路は下記（ア）乃至（ウ）の少なくともいずれかの処理を行うものであることを特徴とするアクセス制限装置。
（ア）前記照合パターンメモリはビット長Ｎ＋Ｆのバイト列を記憶し、前記被照合バッファメモリはビット長Ｎのバイト列を記憶し、前記照合回路は、Ｆに含まれる所定のビットが所定の値であるとき、当該バイトを無条件に合致と見なす
（イ）前記照合パターンメモリはビット長Ｎ＋Ｄのバイト列を記憶し、前記被照合バッファメモリはビット長Ｎのバイト列を記憶し、前記照合回路は、あるアドレスにおける前記照合パターンメモリと前記被照合バッファメモリの複数のバイト列を照合するとき、Ｄに対応するバイト数のデータビットが連続しているとみなす
（ウ）前記照合パターンメモリはビット長Ｎ＋Ｍのバイト列を記憶し、前記被照合バッファメモリはビット長Ｎのバイト列を記憶し、前記照合回路は、あるアドレスにおける前記照合パターンメモリと前記被照合バッファメモリの複数のバイト列を照合するとき、前記被照合バッファメモリの対応するバイトとマスクパターンＭとの論理積をもとめ、これを前記照合パターンメモリの対応するバイトと照合する
【請求項１０】
請求項７乃至請求項９いずれかに記載のアクセス制限装置を、ワンチップに集積してなる半導体集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータウイルスを検査するためのコンピュータウイルス検査装置及びアクセス制限装置並びに半導体集積回路に関する。
【背景技術】
【０００２】
ＷＯ９７／１２３２１及びＷＯ９７／３９３９９は、コンピュータウイルスを検査もしくは除去するためのコンピュータウイルス検査プログラムを開示する。これら従来のプログラムには次のような問題があった。
【０００３】
問題（Ａ）
パターンマッチング処理をホストＣＰＵで処理していたため処理中のＣＰＵ負荷が高かった。しかも、一つのＣＰＵにつき同時に瞬間的には一つの処理しかできず、処理に時間がかかるとともに、当ＣＰＵが処理する他のプロセスに大きな影響を与えた。コンピュータウイルス検出のためのパターンマッチング処理は、通常、大量のデータ同士の照合処理であるため、データ量（発見すべきウイルスパターンの数）に応じて処理時間が増大する。
【０００４】
問題（Ｂ）
前記のパターンデータおよびパターンマッチングプログラムを、処理を高速化するためにメインメモリ上に常駐させておく必要があり、メインメモリを大量に消費した。
【０００５】
問題（Ｃ）
前記のパターンデータおよびパターンマッチングプログラムが書き換えの容易なメインメモリ上に存在するため、コンピュータウイルスによるコンピュータウイルス検査プログラムやパターンデータの破壊行為に対して非常に脆弱であった。
日本特開平８−１７９９４２は、上記課題（Ａ）（Ｂ）（Ｃ）に対する回避方法を開示する。しかしながら、この先行技術による方法には次のような問題がある。
【０００６】
問題（Ｄ）
先行技術の外付けの第２のＣＰＵは、従来の方法においてホストＣＰＵが行っていたパターンマッチングプログラムの実行を単に代行しているにすぎず、全体としての処理速度はほとんど改善しない。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】ＷＯ９７／１２３２１公報
【特許文献２】ＷＯ９７／３９３９９公報
【特許文献３】特開平８−１７９９４２公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明は、前記（Ａ）から（Ｄ）の問題を同時に解決し、コンピュータウイルスの検査を高速に行うための手段を提供することを目的とする。
【課題を解決するための手段】
【０００９】
この発明に係るコンピュータウイルス検査装置は、データを含むファイルを一意に特定するファイル情報を受け、これを保持するタスクキューメモリと、前記タスクキューメモリの前記ファイル情報によって特定されるファイルを取得して記憶するファイルバッファメモリと、コンピュータウイルスを識別するためのパターンデータを記憶するパターンデータメモリと、前記ファイルバッファメモリに記憶されたファイルと前記パターンデータを照合し、一致するパターンがあるか否かを判定する一つ以上のパターンマッチング回路と、前記タスクキューメモリの前記ファイル情報に基づいて少なくとも一つの前記パターンマッチング回路を起動するスケジューラと、前記パターンマッチング回路の判定結果を前記ファイル情報に関連づけて通知する通知手段と、を備える。
【図面の簡単な説明】
【００１０】
【図１】図１は、本発明の実施の形態１に係る装置の機能ブロック図である。
【図２】図２は、ファイル等を識別するために用いられるテーブルの一例である。
【図３】図３は、本装置を複数搭載したプロキシサーバの実施例を示す概念図である。
【図４】図４は、負荷分散を行うために用いられるテーブルの一例である。
【図５】図５は、本発明の実施の形態２における回路構成を示す模式図である。
【図６】図６は、本発明の実施の形態２に係る変形例１における回路構成を示す模式図である。
【図７】図７は、本発明の実施の形態２に係る変形例２における回路構成を示す模式図である。
【図８】図８は、本発明の実施の形態３における回路構成を示す模式図である。
【図９】図９は、ホワイトスペース除去回路の１例を示す模式図である。
【図１０Ａ】図１０Ａは、本発明の実施の形態４を示す模式図である。
【図１０Ｂ】図１０Ｂは、本発明の実施の形態４の概略フローチャートである。
【図１１】図１１は、本発明の実施の形態５の装置構成を表す模式図である。
【図１２】図１２は、インデックスファイルのデータ構造を示す一例である。
【図１３】図１３は、発明の実施の形態５の動作フローチャートである。
【図１４】図１４は、発明の実施の形態５の動作フローチャート（続き）である。
【発明を実施するための最良の形態】
【００１１】
発明の実施の形態１．
図１を用いて本発明の実施形態を説明する。ホストＣＰＵ１０１，メインメモリ１０２を備えるコンピュータはネットワークに接続されている。このコンピュータはバスインターフェース２０１を通してコンピュータウイルス検査装置１（以下、本装置という）に接続される。
【００１２】
ホストＣＰＵ１０１により実行される通信ソフトウェアによりネットワークから受信されたデータは、一旦メインメモリ１０２上に記憶される。データサイズの大きい場合、そのデータの一部または全部を、ホストＣＰＵ１０１からアクセス可能な図示しない外部記憶装置に一時的に記憶することもある。
【００１３】
メインメモリ１０２上に記憶されたデータは、通信のセッション単位、パケット単位、ないしはファイル単位などあらかじめ決められた単位（単位が複数種類に渡っても良い）で一つないしは複数のデータブロックを構成する。ここでは一例としてファイル単位で取り扱う場合を述べる。
【００１４】
ファイル単位でメインメモリ１０２に記憶されたデータブロックの開始アドレスとデータ長は図２に示すメインメモリ上のテーブルに記憶される。ホストＣＰＵにより実行されるプログラムをホストプロセスと呼ぶ。メインメモリ１０２に記憶されたデータブロックはホストプロセス１０４により記述される。以下、前記テーブルの情報を「タスク情報」と呼ぶ。
【００１５】
前記データブロックの一部ないしは全部が外部記憶装置に記憶される場合、開始アドレスが不定になる可能性があるため、開始アドレスの代わりにＩＤ（任意の識別文字列）を定義し、前記開始アドレスの代替としてＩＤを用いてデータブロックを一意に定義しても良い。
【００１６】
前記テーブルにデータブロックが定義されると、ホストプロセス１０４は本装置のタスクキュー２０２に前記テーブルの内容の一部または全部をバスインターフェース２０１を介して転送する。なお、タスクキューは一般にはＦＩＦＯ（ＦＩＲＳＴ  ＩＮ  ＦＩＲＳＴ  ＯＵＴ）形式のメモリまたはレジスタセットにより構成される。
【００１７】
タスクキュー２０２にタスク情報が転送されたことを検知したスケジューラ２０３は、本装置のＤＭＡ回路２０４を起動する。ＤＭＡコントローラ２０４は、タスク情報に基づいてメインメモリ１０２上のデータブロックを取得して、これを本装置のファイルバッファメモリ２０５上に置くとともに、スケジューラ２０３にファイルバッファメモリ２０５の準備完了状態を通知する。
【００１８】
前記手順において、本装置のファイルバッファメモリ２０５に十分な余裕があるときは、一度に複数のデータブロックを同時にＤＭＡ転送してもよい。
【００１９】
起動されたスケジューラ２０３は、パターンマッチング回路２０６を起動するとともに、これにファイルバッファメモリ２０５中のアドレスとデータ長を渡す。パターンマッチング回路が複数ある場合には、その一部又は全部をあらかじめ決められた手順で選定する。
【００２０】
スケジューラ２０３及びパターンマッチング回路２０６は論理回路、あるいは、これと等価なコンピュータプログラム、プロセッサ（ホストＣＰＵ１０１が兼ねてもよい）及びメモリで構成される。
【００２１】
起動されたパターンマッチング回路２０６は、パターンデータメモリ２１０からパターンデータを読み出すとともに、これとデータブロックを照合する。回路２０６は、一致するパターンを検出したとき，フラグ２０７を立てる（フラグレジスタの所定のビットをオンにする）。
【００２２】
フラグ２０７の変化を検出した検知回路（ＮＯＴＩＦＩＥＲ）２０８は、バスインターフェース２０１を介してホストプロセス１０４に通知する。ホストプロセス１０４（またはホストプロセスと並列に実行される検知プログラム１０５）は、例えば前記検知回路２０８のレジスタをバスインターフェース２０１を介して定期的にポーリングすることによってフラグ２０７の変化を検出し、変化があれば表示装置に注意を促すメッセージを表示して操作者にコンピュータウイルスと合致するパターンを検知したことを示す警告を行う。
【００２３】
検知回路２０８自身が発光ダイオードや発音装置などを備えるインジケータ２０９を起動し、コンピュータウイルスと合致するパターンを検知したことをホストプロセスとは無関係に知らせるようにしてもよい。
【００２４】
前記パターンデータメモリ２１０の内容は、パターン更新装置２１１により定期的に、あるいはユーザによる操作によって更新される。パターン更新装置２１１は、パターン更新プログラムとそれを実行するプロセッサ及びメモリを備える。パターン更新プログラムはメインメモリ上にあってもよく（図１の１０３）、また、前記プロセッサはホストＣＰＵ１０１が兼ねてもよい。更新データはインターネット等のネットワーク上のファイルサーバから取得し更新する。そのための方法として、パターン更新装置２１１がネットワーク接続手段を備え、装置２１１により前記ファイルサーバに接続する方法と、ネットワーク接続機能を備えたコンピュータがファイルサーバに接続し、取得した更新データをバスインターフェース２０１を介してパターンデータメモリ２１０に書き込む方法が考えられる。
【００２５】
図１において、複数のパターンマッチング回路２０６が並列に接続されている。スケジューラ２０３はファイルバッファメモリ２０５上の複数のデータブロックをそれぞれのパターンマッチング回路２０６に分散して起動する。
【００２６】
分散して起動するとは、例えば、第１のパターンマッチング回路に一つ目のデータブロックの情報（開始アドレス、データ長など）を渡した後、第１のパターンマッチング回路の実行完了を待つことなく第２のパターンマッチング回路に２つ目のデータブロックの情報を渡すことである。
【００２７】
例えば、データブロックの先頭アドレスを第１のパターンマッチング回路２０６に渡すと共に、例えばデータブロックの先頭に１０２４を加えたアドレスを第２のパターンマッチング回路に渡すことによって、１０２４バイトを超えるデータブロックを分散して処理する。ただし、この方法はマッチングすべき全てのパターンデータのサイズが１０２４バイト未満であることが必要になり、全ての場合に利用できるわけではない。
【００２８】
他のやり方として、パターンデータメモリに２つ以上の照合されるべきパターンデータが存在する場合、そのうちの少なくとも１つのパターンデータを第１のパターンマッチング回路へ渡し、残りの少なくとも１つのパターンデータを第２のパターンマッチング回路へ渡すことにより、１つのファイルを多数のパターンデータと照合する場合の合計処理時間を短縮できる。
【００２９】
図１に示す回路のうち、バスインターフェース２０１を含む本装置の一部ないしは全部はワンチップの半導体集積回路による実装が可能である。
【００３０】
次に、図１の本装置を複数搭載したコンピュータの制御プログラム及び本装置を搭載したプロキシサーバに関して説明する。
【００３１】
以下、図３に示すように、本装置４０２（図１の符号１に相当）を４０２Ａ、４０２Ｂの２つ備えるコンピュータをプロキシサーバ４０１として用いる場合について説明する。本装置４０２の搭載台数は２つに限定されない。図３では、インターネットとの接続にネットワークインターフェースカード４０４を備え、ＬＡＮ（ＬＯＣＡＬ  ＡＲＥＡ  ＮＥＴＷＯＲＫ）との接続に同４０３を備えている。
【００３２】
これらの複数のコンピュータをネットワーク上で識別するために、ＩＰ（ＩＮＴＥＲＮＥＴ  ＰＲＯＴＯＣＯＬ）アドレスを付与したパケットデータをネットワーク上に流す。これにより発信元及び送付先コンピュータを識別する。プロキシサーバは複数のＩＰアドレスによって識別されるパケットデータの中継を行う。
【００３３】
４０２Ａおよび４０２Ｂのそれぞれに対し、負荷を分配する方法はいくつか考えられるが、一例としてＩＰアドレスにより分配することを考える。つまり、Ｐ１およびＰ３というＩＰアドレスはＡに処理を行わせ、Ｐ２というＩＰアドレスはＢに処理を行わせるように定義する。ＩＰアドレスに加えて、ポート番号を利用してもよい。この定義値は、図４に示すメインメモリ１０２内のテーブルに記憶される。メインメモリの代わりにＣＡＭ（Content Addressable Memory：連想メモリ）を利用してもよい。
【００３４】
図３において、図４のテーブルの記述に従い、受信したパケットデータを４０２Ａまたは４０２Ｂのどちらに処理させるかが決められる。このとき、図４のテーブル中の処理カウンタ５０１をカウントアップし、これらカウント値を監視して４０２Ａおよび４０２Ｂの処理カウンタ５０１がほぼ同じになるように配分を行うことによって、ある程度均一な負荷分散を実現できる。また、Ｐ１〜Ｐ３のどちらでもない新たなＩＰアドレスＰｘを受信したときは、４０２Ａまたは４０２Ｂのうちカウンタ値の小さい方に処理をさせるとともに、Ｐｘをテーブルに追記する。これにより、新たなＩＰアドレスを持つパケットデータを適切に分配できる。
【００３５】
次に、ネットワークインターフェース回路をともなうコンピュータウイルス検査装置について図１を用いて説明する。これはＭＡＣ３０１並びにＰＨＹ３０２を備え、本装置全体がネットワークインターフェース装置（ＮＩＣ）の役目を兼ねる。
【００３６】
このようにすることにより無駄なデータ転送を省くことができる。例えば、図３に示すようにＮＩＣ４０４が本装置４０２と独立している場合、インターネットから受信したデータが４０４からホストバス１０５を経由してメインメモリ１０２へ転送され、その後メインメモリ１０２から本装置４０２へと転送される。つまりホストバス１０５を２回経由する。これに対し、図１の装置においてＮＩＣ４０４と本装置４０２が同一装置を構成するため、これを図３に適用するとホストバス１０５を経由する回数が１回少なくなり、無駄なデータ転送を省くことができる。
【００３７】
なお、ＭＡＣ３０１はメディアアクセスコントローラと呼ばれ、イーサネット（登録商標）・ネットワークで接続された相互機器間のネゴシエーションやハンドシェイクなどの通信手順を管理するデバイスである。また、ＰＨＹ３０２は物理レイヤーと呼ばれ、ネットワークを接続するケーブル等の種類によって適切な物を選んで装備するデバイスである。例えば１０ＢＡＳＥ−Ｔ規格のイーサネット（登録商標）であればツイストペアケーブルを用いるので、バイトデータからシリアルデータへの変換、ビット列から電圧信号への変換などを行う。
【００３８】
この装置において、コンピュータウイルス検査がオフ（無効）の状態であれば、ネットワークからの受信データはＰＨＹ３０２からＭＡＣ３０１を経由してファイルバッファメモリ２０５へ一時的にバッファされ、バスインターフェース２０１を介してメインメモリ１０２に転送される。
【００３９】
ここで、コンピュータウイルス検査のオン・オフの設定は、例えばファイルバッファメモリ２０５に設定変数を設け、当該変数をホストＣＰＵ１０１によって実行されるコンピュータプログラムから設定してやればよい。あるいは、当該フラグのオン・オフを切り替える電気接点スイッチを直接本装置上に設けてもよい
【００４０】
コンピュータウイルス検査がオン（有効）の状態であれば、ファイルバッファメモリ２０５に受信データが一時的にバッファされたのち、デコーダ３０３（ＭＩＭＥデコーダを含む）が起動されファイルバッファメモリ中の受信データをファイル形式のデータブロックにデコードする。デコードが開始された後、パターンマッチング回路２０６が起動され、デコードが完了した部分のデータについてコンピュータウイルス検査を開始する。コンピュータウイルスが検出されなかったときに限り、ＤＭＡ２０４を起動して一時的にバッファされていた受信データをメインメモリ１０２に転送する。例えば、ファイルバッファメモリ２０５に設定変数を設け、これに基づきデコード前のデータ、または、デコード後のデータのいずれかを選択して転送する。
【００４１】
データを送信する場合、データを受信する場合と同様の処理を行うことができる。ファイルバッファメモリ２０５に送信すべきデータがバッファされたとき、これをデコーダ３０３に入力する。デコーダ３０３を通したデータはパターンマッチング回路２０６に入力される。コンピュータウイルスが検出されなかったときに限り、ファイルバッファメモリ２０５からＭＡＣ３０１へのデータ転送が実行され、ＰＨＹ３０２を経由して外部に送信される。
【００４２】
この発明の実施の形態１によれば、多大な計算負荷を掛けるコンピュータウイルス検査処理を、ホストＣＰＵとは別のハードウェアで処理するので、ホストＣＰＵの負荷を軽減できる。
【００４３】
更に、主要な機能のほとんどがホストＣＰＵとは別のハードウェアとして構成されているので、他のソフトウェアへの干渉による動作不良等の影響を軽減できる。
【００４４】
発明の実施の形態２．
この発明の実施の形態２は、パターンマッチング回路２０６に含まれるデータ照合回路、特にワイルドカード指定方法及びその回路に関する。図５は発明の実施の形態２に係る回路の模式図である。
【００４５】
この回路は、照合パターンメモリＡ（１１０１）、被照合バッファメモリＢ（１１０２）及び照合回路１２０１を備える。図では簡単のため、被照合メモリＢ（１１０２）側にシフトレジスタを用いてＦＩＦＯ（ＦＩＲＳＴ  ＩＮ  ＦＩＲＳＴ  ＯＵＴ）型バッファとしているが、照合パターンメモリＡ（１１０１）の側にシフトレジスタ機能を備えても良い。図５ではＦビットは１ビットとし、Ｆ＝１のときにワイルドカードとして認識するよう定義しているが、Ｆビットは２ビット以上であってもよい。図５の例では、Ｆ＝１であれば照合回路２０１では当該バイト部分について無条件にＡ＝Ｂと見なし、Ｆ＝０であればＡとＢの排他的論理和（ＸＯＲ）を算出してＸＯＲ値がゼロであれば合致と見なす。
【００４６】
また、Ｆビットの代わりにＤビット（２ビット以上）を用い、Ｄ＞０の時は下位Ｎビットと同一バイトがＤバイトだけ連続するものとして扱うようにしてもよい。Ｆビットフラグを合わせて用いればＤバイト連続するワイルドカードも定義することが出来る。
【００４７】
発明の実施の形態２の変形例１．
図６はマスクビットを持つ形態の一実施形態である。
図６の照合回路は、照合パターンメモリＡ（１１０１）のＮビットの照合データ値の上位にＭビット（図では一例として３２ビット）のマスクビットを備える。まず、マスクビットＭの値と被照合バッファメモリＢ（１１０２）の値から照合回路（１２０１）にて論理積（ＡＮＤ）を算出し、当該出力に対してＮビット部分の排他的論理和（ＸＯＲ）を算出する。これにより、マスクビットが０となっているビットに対してワイルドカード（無条件合致）が行われる。また、マスクビットが全ビットゼロである場合は被照合バッファメモリＢ（１１０２）との論理積がゼロになるので、Ｎビットの全部がワイルドカードとして扱われる。
【００４８】
発明の実施の形態２の変形例２．
図７はこの変形例２を示す。
連続したデータストリームは被照合バッファメモリＢ（１１０２）の終端より入力される。このバッファメモリは照合すべきパターンのうち最大長のものより、大きなサイズを記憶できるようになっている。また、このレジスタ群にはパターンを照合する位置をずらすのに必要なレジスタシフト機能が備わっていても良い。
【００４９】
一方、被照合バッファメモリＢ（１１０２）の先頭ＫバイトをインデックスＩとしてアクセスすることが可能なルックアップテーブル（１３０１）が備えられている。ルックアップテーブルには、その先頭ＫバイトがインデックスＩであるパターンが存在するかどうかを示す値が書き込まれる。図７では一例としてパターンリストの先頭アドレスを示すポインタが納められている。あるいは先頭ＮバイトがインデックスＩであるパターンの個数を書き込んでも良い。その場合、ルックアップテーブルのビット幅で保持できる最大値ｍを定め、先頭ＫバイトがインデックスＩであるパターン数がｍ個以上である場合には、ルックアップテーブルにｍを超過したことを意味する特定値を書き込むように定めても良い。
【００５０】
インデックスＩを用いてルックアップテーブル（１３０１）にアクセスして、そのインデックスＩに対応するパターンの数が０であることが判明した場合は、パターン照合を終える。この際、終了信号を出すことにより、入力バッファのレジスタシフト機能をトリガーして、次のパターン照合を行っても良い。インデックスＩの値に対応した位置にルックアップテーブルの値Ｐが、後述するパターン照合回路の入力の一つとなる。
【００５１】
ルックアップテーブル（１３０１）に書き込む値の決め方は次のとおりである。まずルックアップテーブルの全ての値を初期値Ｚにする。次に照合すべきパターン全部に対して順番にインデックスの計算を行う。パターンの長さが入力バッファの長さより小さい場合は、不足している部分にはワイルドカードであることを示す値を入れておく。このときインデックスの計算に必要な特定位置の内、もっとも後方にある位置に至る長さの分だけ最低限書き込めばよい。インデックスの算出に必要な特定位置のバイトの値を読み込み、その値を連結あるいは予め決めておいた計算式を使用してインデックスＩを算出する。次にルックアップテーブルのインデックスＩに対応する場所の値を増加させる。予め定めておいた最大値ｍを超える場合には、最大値ｍより変化させない。なおこの値の算出は予めこの回路の使用前に行い、ルックアップテーブルには最終的な値のみ書き込んでも良いし、この初期化ルールを初期化回路として組み込んでも良い。
【００５２】
一方、パターン照合回路（１２０１）は、前述のルックアップテーブルの値Ｐを受ける。値Ｐが対応するパターンが存在しないことを示す値である場合は、パターン照合動作を行わない。値Ｐが対応するパターンが存在することを示す値である場合には、照合パターンメモリＡ（１１０１）の中の、インデックスＩに対応する複数のパターンを記憶したパターンリストにアクセスする。このパターンリストはルックアップテーブルの値Ｐと連続した位置に存在しても良いし、別のルックアップテーブルを参照する形になっていても良いし、ルックアップテーブルにはパターンリストへのポインタが書き込まれており、そのポインタを利用して参照する形になっていても良い。
【００５３】
パターンリストはパターンの内、インデックスＩの算出に利用した以外の部分が記憶されたものである。インデックスＩの算出に利用した部分も記憶しておいてパターン照合の対象としても良いが、回路が冗長となるので予め省いておく。またパターンといっしょに、そのパターンのパターン番号を組として記憶し、どのパターンに合致したかが判別できるように構成しておいても良い。
【００５４】
このパターン照合回路の出力は合致するパターンが存在したかどうかである。また必要であれば合致したパターン番号も出力する。パターンが可変長である場合には、残りパターン長を記憶する方式と、照合回路が参照する長さに不足する部分に任意のデータと合致するワイルドカードをパターンの一部として持つ方式がある。前者の場合は、パターン長より後方のバイトに関しては常に合致すると判断し、後者の場合は照合回路がワイルドカードを任意のバイトと合致すると判断する。
【００５５】
発明の実施の形態２、その変形例１及び変形例２は、互いに組み合わせて用いることもできる。
【００５６】
発明の実施の形態２によれば、照合パターンのバイトにワイルドカードを指定できるので、検索の効率を改善し使用するメモリの消費を抑えることができる。また、変形例２によれば、パターンの一部をインデックスにしてルックアップテーブルを参照しているため、線形探索処理を減らし照合の速度を上げることが出来る。これにより、照合に要する時間の、パターン数や種類への依存度を減らし、より偏差の少ない処理時間でパターン照合を実現することができる。
【００５７】
発明の実施の形態３．
この発明の実施の形態２は、パターンマッチング回路２０６に含まれるホワイトスペース処理回路に関する。図８は発明の実施の形態３に係る回路のブロック図を示す。
【００５８】
入力されたデータ（ホワイトスペースを含む文字列データ等）は、まず入力データバッファ２１０１に入力される。入力データバッファ２１０１はＦＩＦＯ（ＦＩＲＳＴ  ＩＮ  ＦＩＲＳＴ  ＯＵＴ）形式のメモリで構成され、過度の入力があった場合に入力を一時的に吸収し後段にデータを引き継ぐ役目を持っている。
【００５９】
入力データバッファ２１０１に入力されたデータは、ＦＩＦＯ先端から順次マルチバイト文字判定回路２１０２に入力される。本回路はＡＳＣＩＩ文字など、マルチバイトを取り扱わないことが明らかなデータであれば省略することも可能である。マルチバイト文字判定回路２１０２は、例えばシフトＪＩＳコード体系であれば、各入力されたマルチバイト文字列の１バイト目をＣとして、以下のように比較回路と論理回路を組み合わせて実現可能である。
（（０ｘ８１≦Ｃ）ＡＮＤ（Ｃ≦０ｘ９Ｆ））ＯＲ（（０ｘＥ０≦Ｃ）ＡＮＤ（Ｃ≦０ｘＥＦ））
【００６０】
ここで０ｘは１６進数を示し、上記演算式の結果が真ならばマルチバイト文字、偽ならばシングルバイト文字とみなす。マルチバイト文字の非先頭バイト（２バイト目以降）と識別された文字コードは、続く処理をバイパスされ被照合データバッファメモリ２１１０に直接入力される。同時にマルチバイト文字判定回路２１０２では、入力データバッファから続く１バイトを取得し、無条件で被照合データバッファメモリ２１１０に転記することにより２バイト文字等を処理する。
【００６１】
なお、マルチバイト文字判定回路２１０２は設定レジスタ２２０１によりバイパス（無効化）設定が可能である。
【００６２】
一方、ＪＩＳコードのようなシフトイン（Ｋイン）、シフトアウトコード（Ｋアウト）から構成される文字体系の場合、シフトインコードをマルチバイト文字判定回路２１０２が検出した場合はマルチバイトステータスレジスタ２２０３を利用してシフトステータスの保持を行う。例えばシフトインコードの場合はマルチバイトステータスレジスタに１を記憶し、１が記憶されている間はマルチバイト文字と判断して以後の回路をバイパスして被照合データバッファメモリ２１１０に直接入力する。マルチバイト文字判定回路２１０２がシフトアウトコードを検出すると、シフトステータスレジスタはゼロにリセットされ、以後の入力データは再びシングルバイト文字として取り扱われる。
【００６３】
ＪＩＳコードとシフトＪＩＳコードの切り替えは設定レジスタ２２０１で行えるようにしても良い。
【００６４】
マルチバイトチェックを受けたデータは、ホワイトスペース除去回路２１０３に入力される。ホワイトスペース除去回路では、あらかじめ想定されるホワイトスペース文字コード（一例として０ｘ０Ｄ，０ｘ０Ａ，０ｘ２０，０ｘ０９など）と合致するコードは除去される。これは例えば入力データをＣとして以下の論理回路を組み合わせて実現可能である。
（Ｃ＝０ｘ０９）ＯＲ（Ｃ＝０ｘ０Ａ）ＯＲ（Ｃ＝０ｘ０Ｄ）ＯＲ（Ｃ＝０ｘ２０）
【００６５】
図９はホワイトスペース除去回路の例を示す。図９の装置は、ホワイトスペースに該当するコードを文字登録レジスタ２０２に記憶しておき、当該レジスタ上の各コードと前記入力データＣが一致するか否かでホワイトスペースを判定するものである。一方、ホワイトスペースとして定義する文字種類が多数（例えば数千バイト）にのぼる場合はＲＡＭを使うこともできる。
【００６６】
ホワイトスペース除去が行われた後、ＡＳＣＩＩコードの大文字小文字による照合不一致を避けるために、シングルバイト文字コードについては小文字判定回路２１０４（または大文字判定回路のいずれか）に入力される。小文字の判定は、例えば入力データをＣとして以下の論理回路、
（Ｃ≧０ｘ６１）ＡＮＤ（Ｃ≦０ｘ７Ａ）
により判定できる。小文字と判定された文字コードは大文字に変換される。小文字（Ｃ）から大文字（Ｃ'）の変換には、例えば、
Ｃ'←（Ｃ  ＡＮＤ  ０ｘＢＦ）
で変換できる。
【００６７】
上記一連の処理を経た入力データは、照合回路２１１１に入力され被照合データバッファメモリ２１１０に入力され、照合パターンメモリ２１１２と照合される。この照合は、例えば各バイト単位で排他的論理和（ＸＯＲ）を取り結果がゼロであったら合致と見なすようにすればよい。
【００６８】
設定レジスタ２２０１には２１０２から２１０５の各回路をバイパス設定するフラグが設けられ、例えば設定レジスタに接続されたコンピュータから操作可能とする。例えばあらかじめマルチバイト文字が含まれないことが明らかである英文文字列などであれば、マルチバイト文字判定回路２１０２をバイパスできるようにする。これにより判定効率を向上することができる。
【００６９】
この発明の実施の形態によれば、テキストデータやコンピュータプログラムデータなど、ホワイトスペースを含むテキストデータからホワイトスペースを取り除くとともに英文字の大文字小文字の差を吸収した状態でデータ照合を行うことができる。これにより従来困難であったハードウェアによるテキストデータ照合処理が容易かつ高速に実現できる。
【００７０】
発明の実施の形態４．
この発明の実施の形態４は、多段照合によるデータパターン検出方法及びその装置に関する。
【００７１】
図１０A及び図１０Bは本発明の一実施形態を示す。これはネットワークトラフィック中のコンピュータウイルスを検出する。
【００７２】
ネットワークのゲートウェイとして設置されたホストＣＰＵ３１０１には、第１のＮＩＣ（ネットワークインターフェース装置）３１０２と第２のＮＩＣ３１０３が備えられており、それぞれのネットワーク間のゲートウェイとしてデータの中継（プロキシサーバ）を行っている。ファイヤウォール機能を備えたソフトウェアと共に用いられることもある。
【００７３】
一方、ホストＣＰＵ３１０１には、バス３１０６を仲介して接続された第１のサブシステム３２０１としてｎバイトのＦＩＦＯ（１段からｎ段まで）３２０２を伴ったチェックサム算出回路３２０３とパターン照合回路３２０４、及びデータパターンを記憶したＲＡＭ（ランダムアクセスメモリ）３２０５が備えられている。ＲＡＭは好ましくはフラッシュメモリなどの不揮発性メモリである。
【００７４】
前記において、第１のデータパターンとしてＲＡＭ３２０５には、各コンピュータウイルスについて少なくとも１つ以上の、コンピュータウイルスデータ内の特定の連続するｎバイトのチェックサム値を算出したものが記憶されている。第２のデータパターンとしてＲＡＭ３２０５には、前記コンピュータウイルスを特徴づけるデータエリアから抽出されたデータ列が各コンピュータウイルスについて記憶されている。
【００７５】
ホストＣＰＵ３１０１からアクセス可能なメインメモリ３１０４には、コンピュータウイルス検出ソフトウェア３１０５が読み込まれホストＣＰＵ３１０１にて実行される。従来の技術では、当該ソフトウェア３１０５によりＮＩＣ３１０２と３１０３の間でやりとりされる全てのデータに対してコンピュータウイルス検出ソフトウェアを通して処理を行っていたため、多大な処理時間を必要としていた。従来の方法に対して、本発明では以下の流れに沿って処理を行う。
【００７６】
まず、ＮＩＣ３１０２（あるいは１０３）から入力されたデータは、分断されているパケットをシーケンスコードに従って繋いでメインメモリ３１０４に展開する。この後、サブシステム３２０１に搭載されたＤＭＡ（ＤＩＲＥＣＴ  ＭＥＭＯＲＹ  ＡＣＣＥＳＳ）回路３２１０がＤＭＡを起動してメインメモリ上のデータをサブメモリ３２０９に転送する。ＤＭＡ回路の起動は、ホストＣＰＵ３１０１のアドレス空間にマップされたＤＭＡ回路３２０８の制御レジスタをアクセスすることによって起動する。
【００７７】
ＤＭＡによってサブメモリ３２０９に転送する際、ＦＩＦＯ（３２０２）を経由する。このときリアルタイムにチェックサムを算出する。具体的には、ＦＩＦＯ（３２０２）の出力段（図では第ｎ段）のデータｄ'がＦＩＦＯのシフトと共に廃棄されるときに、当該データｄ'をアキュムレータレジスタ３２０６から減算する。一方、入力段（図では第１段）に新たな値ｄが入力される毎にアキュムレータレジスタ３２０６に加算する。これにより、アキュムレータレジスタ３２０６には、ＦＩＦＯの全段（第１段〜第ｎ段）のチェックサムに相当する値が常に更新され保持される。
【００７８】
より一般的には、前記演算式が正演算と逆演算による準可逆性を備える場合において、データを廃棄するとき、アキュムレータレジスタ（値をＡｎとする）で破棄データに対して所定の演算式の逆演算が行われ、Ａｎ'が算出される。新たなデータｄが入力されるとき、前記アキュムレータレジスタの値（Ａｎ'）及び当該入力データｄを用いて前記演算式の正演算が行われ、（Ａｎ＋１）が算出される。以上のステップが繰り返される。
【００７９】
前記の方法によりチェックサムが更新されると、あらかじめ想定されるデータパターンについて算出したチェックサムデータを記憶したＲＡＭ３２０５の内容と、アキュムレータレジスタ３２０６に記憶されたチェックサム値とをパターン照合回路３２０４によって照合する。照合の結果、合致するパターンが見つかれば、そのパターン番号をレジスタ３２０７に出力する。同時に、ホストＣＰＵ３１０１に対して割り込みをかける、あるいは制御レジスタを設けてホストＣＰＵからアクセス可能なようにホストＣＰＵのアドレス空間にマップし、制御レジスタのフラグを立て、そのフラグをホストＣＰＵからポーリング（監視）するようにしてもよい。
【００８０】
このようにしてパターン照合（粗照合）が行われその結果によってスクリーニング（ふるい分け）されたデータは、大きく分けてコンピュータウイルスの感染可能性があるもの、無いものに分けられる。このうち、感染可能性のあるものについては、パターンデータを変えて、同様にスクリーニングを繰り返してもよい。少なくとも１回以上の上記手順を経て、コンピュータウイルスの感染可能性が無いと判断されたものは、ＮＩＣ３１０３（あるいは３１０２）を経てネットワークに出力される。
【００８１】
一方、上記手順を経てコンピュータウイルスの感染可能性が有ると判断されたものについては、ここで初めてコンピュータウイルス検出ソフトウェア３１０５によって精密な感染検査が行われる。一般的に、コンピュータウイルス検出ソフトウェアによる精査は、上記で説明した単純なパターン照合処理（特に半導体集積回路を利用したパターン照合回路を用いた場合）に比べ著しく遅いので、精査を通すデータの量を減らすことによって結果として全体的なスループットは大幅に向上する。
【００８２】
一方、ハードウェアを利用せずにソフトウェアのみで本発明はは実現可能である。この場合、図１０のサブシステム３２０１については不要で、照合処理の全てをホストＣＰＵ３１０１とメインメモリ３１０４に読み込まれたソフトウェアによって前記パターン照合処理を含むスクリーニング処理を実現する。
【００８３】
本発明による方法を実装したコンピュータウイルス検査装置は、従来の技術に比べスループットが高いので、ネットワークゲートウェイ装置への応用や、大規模ネットワークストレージ（記憶装置）のコンピュータウイルス検査装置などに応用できる。
【００８４】
また、コンピュータウイルスではなく、所定の語句や文字列、ＵＲＬなどネットワーク上のアドレスに基づいて算出されたパターンデータを用いた場合、所定の語句を含むウェブサイトや電子メールの中継を遮断するようなアクセス制限装置が実現可能である。この装置は未成年にふさわしくない用語の閲覧を遮断するための教育機関向けネットワークゲートウェイ装置などに応用できる。
【００８５】
粗照合によるスクリーニングを行って、時間のかかる処理に通すデータ量を減らすことにより、装置全体としてのスループットを大幅に向上することが出来る。
【００８６】
発明の実施の形態５．
この発明の実施の形態５は、キャッシュシステムによるコンピュータウイルス検出装置の負荷低減方法及びその装置に関する。
【００８７】
図１１は本発明の一実施形態を示す。これは、コンピュータネットワークのトラフィック中のコンピュータウイルスを検出するゲートウェイプロキシサーバである。
【００８８】
コンピュータネットワークの中継点に設置されたサーバ４１０１は、ネットワーク的に繋がった外部サーバ４２０１とクライアントコンピュータ４３０１間においてデータの中継を行うプロキシサーバとして機能する。サーバ４１０１は、中継するデータのウィルスチェックを行うソフトウェア４１３２を記憶したメモリ４１０３とそれを駆動するためのＣＰＵ４１０２、大容量記憶装置４１４１、及び、ＮＩＣ（ネットワークインターフェース装置）４１１０を備える。ＮＩＣとＣＰＵ及びメモリはバスにより接続されている。ここではＮＩＣとメモリは同一バス上に接続されているが、別々のバスに接続されてもよい。
【００８９】
メモリはＲＡＭである。メモリは、ウイルスチェックを実施済みのファイルについての情報を記憶するインデックスファイル４１３１を記憶する。インデックスファイル４１３１のデータ構造の一例を図１２に示す。なお、メモリ上にインデックスファイルを記憶するのはインデックスファイルへのアクセスを高速化するためであり、記憶を恒久化するために時々大容量記憶装置内に書き出して記憶される。大容量記憶装置としてハードディスク装置などを用いることが出来る。
【００９０】
以下、実際の動作ステップを図１３及び図１４を用いて説明する。
【００９１】
クライアントコンピュータ３０１からのファイル要求リクエストは、例えばＨＴＴＰプロトコルやＦＴＰプロトコルに代表される手順に従って発行され処理される。
【００９２】
これらのファイル要求リクエストは、サーバ１０１によって仲介され（ステップ１００２）、まずインデックスファイル１３１と照合される（ステップ１００３）。
【００９３】
インデックスファイルに当該ファイルが存在しなければネットワークの先にある外部サーバ４２０１にファイル要求リクエストが転送される（ステップ１００５）。外部サーバ４２０１は該リクエストにより特定されるファイルを送出する。
【００９４】
外部サーバ４２０１から送出されたファイルは、一旦サーバ４１０１に返され（ステップ１００５）、さらにウイルスチェックソフトウェア等４１３２によりウイルスチェックを受ける（ステップ１００６）。
【００９５】
ウイルスチェックの結果、ウイルスが検出されなければ当該ファイル実体のコピーをキャッシュファイル４１４１として大容量記憶装置４１０４に保存すると共にインデックスファイル４１３１を更新する（ステップ１００８）。
【００９６】
一方、ウイルスが検出されれば、ウイルスチェックソフトウェア等４１３２はウイルスの駆除を試みる（ステップ１１０１）。ウイルスの駆除に成功すれば、ウイルス駆除済みフラグをオンにして駆除済みファイルを大容量記憶装置４１０４に保存し、インデックスファイル４１３１を更新する（ステップ１１０４，１１０５）。
【００９７】
ウイルスの駆除に失敗すれば、ウイルス駆除済みフラグをオフにしてインデックスファイル４１３１に追記する（ステップ１１０６，１１０７）。この場合はウイルスに感染したファイルの実体は大容量記憶装置４１０４には保存されない。
【００９８】
一方、ステップ１１０３においてインデックスファイル４１３１に当該ファイルが存在した場合、インデックスファイルのフラグを照合する（ステップ１０１１）。
【００９９】
ウイルス感染フラグがオンになっていなければウイルス未感染のファイルを取得済みであることを意味するので大容量記憶装置４１０４から当該インデックスによって特定されるキャッシュファイル４１４１の実体を取り出して（ステップ１０１３）要求元クライアントにファイルを送出する（ステップ１００９）。
【０１００】
一方、ステップ１０１１においてウイルス感染フラグがオンであり、ウイルス駆除済みフラグもオンであればウイルス駆除済みのファイル実体が大容量記憶装置４１０４に存在することを意味するので、ファイル実体を取り出してクライアントに送出する。ウイルス駆除済みフラグがオフであれば、要求元クライアントにウイルス感染ファイルであることを通知してファイル送出をストップする（ステップ１０１５）。
【０１０１】
このウイルス感染ファイルであることの通知は、電子メールで行っても良い。また、要求されたファイルに対してウイルス警告ファイルにすり替えて送出することによりユーザに注意を喚起するようにしてもよい。
【０１０２】
インデックスファイル４１３１は、例えば１時間に１回、大容量記憶装置４１０４に転写され記憶の恒久化が行われるようにするとよい。
【０１０３】
キャッシュシステムを備える場合、ウイルスチェックを経た対象ファイル自身のコピーを大容量記憶装置にも保管すると共に、前記インデックスファイルに保管日時を記録する。この保管日時は一定期間ごとに再度チェックされ、あらかじめ定めた所定の期間（例えば２４時間）を越えた場合は当該ファイルの実体を大容量記憶装置４１０４から削除すると共に、インデックスファイル４１３１からも同ファイルを表すインデックス情報を削除する。
【０１０４】
このようにして一度取得されたウイルスチェック済みのファイルが所定の期間は大容量記憶装置内にとどまることになるので、同一ファイルのリクエストがあった場合に大容量記憶装置からファイルを取得すればよくなり、外部サーバ４２０１との通信時間並びに当該ファイルに対してウイルスチェックを再度行う時間を節約できる。
【０１０５】
その後は同様に、任意のクライアントコンピュータ４３０１から前記と全く同一のファイル要求リクエストがサーバ４１０１に送出された場合、サーバ４１０１は、まずインデックスファイル４１３１に同一ファイルへのリクエストが既に存在しないか否かをチェックする（ステップ１００２）。
【０１０６】
チェックの結果、同一ファイルのインデックスが見つかると、フラグをチェックし、コンピュータウイルスの感染が無かった場合は大容量記憶装置４１０４から当該ファイルを取り出してクライアントに送出する。この場合は外部サーバ４２０１へのアクセスが発生しない、ウイルスチェック実施済みであるため再度チェックする必要がない、という理由により高速なレスポンスとサーバ負荷低減が期待できる。
【０１０７】
ネットワークの相互接続部分に本発明によるゲートウェイサーバないしはプロキシサーバを設置することにより、ネットワーク間でやりとりされるネットワークトラフィックをリアルタイムに監視するコンピュータウイルス検査装置が実現できる。
【０１０８】
この発明の実施の形態によれば、コンピュータウイルス検査装置の負荷を低減することができるので、少ない資源で多くのネットワークトラフィックを処理することが出来る。また、クライアントコンピュータがファイル要求リクエストを送出してからファイルがクライアントコンピュータに送出されるまでの応答時間を短縮できるため、ネットワーク遅延を縮小することができ、快適な操作性を実現できる。
【図１】
0004392461.tif 000002
【図２】
0004392461.tif 000003
【図３】
0004392461.tif 000004
【図４】
0004392461.tif 000005
【図５】
0004392461.tif 000006
【図６】
0004392461.tif 000007
【図７】
0004392461.tif 000008
【図８】
0004392461.tif 000009
【図９】
0004392461.tif 000010
【図１０Ａ】
0004392461.tif 000011
【図１０Ｂ】
0004392461.tif 000012
【図１１】
0004392461.tif 000013
【図１２】
0004392461.tif 000014
【図１３】
0004392461.tif 000015
【図１４】
0004392461.tif 000016