(57)【特許請求の範囲】
【請求項１】
格納媒体内のソフトウェアからの１つ又は複数のソフトウェア命令と組み合わせた、少なくとも１つのプロセッサおよび前記格納媒体を含むハードウェアにより実装されるコンピュータ実装方法であって、前記コンピュータ実装方法は、前記１つ又は複数のソフトウェア命令を実行する前記少なくとも１つのプロセッサにより、
データストリームにおける複数の同期ポイントを判定し、
前記複数の同期ポイントのそれぞれについて、前記データストリーム中の複数のビットの対応するブロックを判定し、
複数のビットの各ブロックについて、複数のビットの前記ブロックにハッシュ関数またはメッセージダイジェスト関数を適用して対応するブロックシグネチャを判定し、
前記複数の同期ポイントのそれぞれを、複数のビットの前記対応するブロックの前記対応するブロックシグネチャに関連付けてデータストリームシグネチャを前記格納媒体内に形成すること
を備え、
前記データストリームは、複数のビットの任意のシーケンスからなり、各同期ポイントは前記データストリーム中の複数のビットのシーケンスからなり、
前記データストリームにおける各同期ポイントの位置は、前記データストリームにおける複数のビットの各ブロックの位置とは異なり、
前記データストリームシグネチャが前記複数の同期ポイントおよび前記対応する複数のブロックシグネチャを含み、前記データストリームシグネチャ内の前記複数の同期ポイントおよび前記対応する複数のブロックシグネチャは、前記データストリームに他のデータストリームが一致するか否かを判断するために用いられる
方法。
【請求項２】
格納媒体内のソフトウェアからの１つ又は複数のソフトウェア命令と組み合わせた、少なくとも１つのプロセッサおよび前記格納媒体を含むハードウェアにより実装されるコンピュータ実装方法であって、前記コンピュータ実装方法は、前記１つ又は複数のソフトウェア命令を実行する前記少なくとも１つのプロセッサにより、
（Ａ）（１）第１のデータストリームにおける複数の同期ポイントを判定し、
（Ａ）（２）前記複数の同期ポイントのそれぞれについて、前記第１のデータストリーム中の複数のビットの対応するブロックを判定し、
（Ａ）（３）複数のビットの各ブロックについて、複数のビットの前記ブロックにハッシュ関数またはメッセージダイジェスト関数を適用して対応するブロックシグネチャを判定し、
（Ａ）（４）前記第１のデータストリームにおける前記複数の同期ポイントのそれぞれを、複数のビットの前記対応するブロックの前記対応するブロックシグネチャに関連付けて、前記第１のデータストリームに対する第１のデータストリームシグネチャを前記格納媒体内に形成し、
（Ａ）（５）前記第１のデータストリームに対する前記第１のデータストリームシグネチャを取得し、
（Ｂ）第２のデータストリームにおいて複数の同期ポイントのうち１つの同期ポイントを発見することを試み、
（Ｃ）前記第２のデータストリームにおいて前記複数の同期ポイントのうち１つの同期ポイントを発見した場合に、
（Ｃ）（１）前記第２のデータストリームにおいて複数のビットの対応するブロックのブロックシグネチャを判定し、
（Ｃ）（２）前記第２のデータストリームの前記同期ポイントおよび前記対応するブロックシグネチャが前記第１のデータストリームシグネチャ中の同期ポイントおよびブロックシグネチャに対応するか否かを確認し、
（Ｃ）（３）前記第２のデータストリームの前記同期ポイントおよび前記対応するブロックシグネチャが前記第１のデータストリームシグネチャ中の同期ポイントおよびブロックシグネチャに対応する場合に、対応関係を示す情報を保持し、
（Ｄ）前記第２のデータストリームのうち少なくともいくつかが依然として未処理である間、前記第２のデータストリームの予め定められた数の複数の同期ポイントおよび対応する複数のブロックシグネチャが前記第１のデータストリームシグネチャ中の複数の同期ポイントおよび対応する複数のブロックシグネチャに一致するまで、段階（Ｂ）および（Ｃ）を反復し、
（Ｅ）前記第２のデータストリームの前記予め定められた数の複数の同期ポイントおよび前記対応する複数のブロックシグネチャが前記第１のデータストリームシグネチャ中の複数の同期ポイントおよび対応する複数のブロックシグネチャに一致する場合に、前記第１のデータストリームと前記第２のデータストリームとの間の一致を示すこと
を備え、
前記第１のデータストリームシグネチャは、前記第１のデータストリームにおける前記複数の同期ポイントおよび前記対応するブロックの前記対応する複数のブロックシグネチャを含み、
前記第２のデータストリームにおける複数のビットの前記対応するブロックにハッシュ関数またはメッセージダイジェスト関数を適用して前記ブロックシグネチャが判定され、
前記第１のデータストリームが複数のビットの任意のシーケンスからなり、各同期ポイントが前記第１のデータストリーム中の複数のビットのシーケンスからなり、
前記第１のデータストリームにおける各同期ポイントの位置は、前記第１のデータストリームにおける複数のビットの各ブロックの位置とは異なる、
方法。
【請求項３】
前記第２のデータストリームの複数の異なる部分について段階（Ｂ）および（Ｃ）を並行して反復する、
請求項２に記載の方法。
【請求項４】
前記１つ又は複数のソフトウェア命令を実行する前記少なくとも１つのプロセッサにより、（Ｆ）  （Ｅ）において判定したとき前記第１のデータストリームと前記第２のデータストリームとの間で一致する場合に、前記第２のデータストリームへのアクセスを選択的に拒否することを更に備える、
請求項２または３に記載の方法。
【請求項５】
前記１つ又は複数のソフトウェア命令を実行する前記少なくとも１つのプロセッサにより、（Ｇ）  （Ｅ）において判定したとき前記第１のデータストリームと前記第２のデータストリームとの間で一致する場合、前記第２のデータストリームについての情報を保持すること
を更に備える、請求項２から４のいずれか一項に記載の方法。
【請求項６】
処理の少なくともいくつかは、特定のデバイスにおいて行われ、保持される前記情報は前記特定のデバイスについての情報を含む、
請求項５に記載の方法。
【請求項７】
前記デバイスは、ネットワーク内のルータである、
請求項６に記載の方法。
【請求項８】
前記１つ又は複数のソフトウェア命令を実行する前記少なくとも１つのプロセッサにより、
複数のパケットを取得し、
前記複数のパケットからペイロード情報を抽出して前記第２のデータストリームの少なくともいくつかを取得すること
を更に備える、請求項２から７のいずれか一項に記載の方法。
【請求項９】
前記１つ又は複数のソフトウェア命令を実行する前記少なくとも１つのプロセッサにより、（Ｈ）  （Ｅ）において判定したとき前記第１のデータストリームと前記第２のデータストリームとの間で一致する場合、前記第１のデータストリームと同一であるかを判定するべく、前記第２のデータストリームに追加のチェックを受けさせることを更に備える、
請求項２から８のいずれか一項に記載の方法。
【請求項１０】
格納媒体内のソフトウェアからの１つ又は複数のソフトウェア命令と組み合わせた、少なくとも１つのプロセッサおよび前記格納媒体を含むハードウェアにより実装されるコンピュータ実装方法であって、前記コンピュータ実装方法は、前記１つ又は複数のソフトウェア命令を実行する前記少なくとも１つのプロセッサにより、
（Ａ）（１）複数のデータストリームにおける複数の同期ポイントを判定し、
（Ａ）（２）前記複数の同期ポイントのそれぞれについて、前記複数のデータストリーム中の複数のビットの対応するブロックを判定し、
（Ａ）（３）複数のビットの各ブロックについて、複数のビットの前記ブロックにハッシュ関数またはメッセージダイジェスト関数を適用して対応するブロックシグネチャを判定し、
（Ａ）（４）前記複数のデータストリームにおける前記複数の同期ポイントのそれぞれを、複数のビットの前記対応するブロックの前記対応するブロックシグネチャに関連付けて、前記複数のデータストリームに対する複数のデータストリームシグネチャを前記格納媒体内に形成し、
（Ａ）（５）前記複数のデータストリームシグネチャを取得し、
（Ｂ）第２のデータストリームにおいて前記複数のデータストリームシグネチャの同期ポイントを発見することを試み、
（Ｃ）前記第２のデータストリームにおいて前記複数のデータストリームシグネチャの同期ポイントを発見した場合に、
（Ｃ）（１）前記第２のデータストリームにおいて複数のビットの対応するブロックのブロックシグネチャを判定し、
（Ｃ）（２）前記第２のデータストリームの前記同期ポイントおよび前記対応するブロックシグネチャが前記複数のデータストリームシグネチャのいずれかの中の同期ポイントおよびブロックシグネチャに対応するか否かを確認し、
（Ｃ）（３）前記第２のデータストリームの前記同期ポイントおよび前記対応するブロックシグネチャが前記複数のデータストリームシグネチャの１または複数の中の同期ポイントおよびブロックシグネチャに対応する場合に、対応関係を示す情報を保持し、
（Ｄ）前記第２のデータストリームのうち少なくともいくつかが依然として未処理である間、前記第２のデータストリームの予め定められた数の複数の同期ポイントおよび対応する複数のブロックシグネチャが前記複数のデータストリームシグネチャのうち少なくとも１つの中の複数の同期ポイントおよび対応する複数のブロックシグネチャに一致するまで、段階（Ｂ）および（Ｃ）を反復し、
（Ｅ）前記第２のデータストリームの前記予め定められた数の複数の同期ポイントおよび前記対応する複数のブロックシグネチャが前記複数のデータストリームのうちの第１のデータストリームに対する第１のデータストリームシグネチャ中の前記予め定められた数の同期ポイントおよび前記複数のブロックシグネチャに一致する場合に、前記第１のデータストリームと前記第２のデータストリームとの間の一致を示すこと
を備え、
前記複数のデータストリームに対する前記複数のデータストリームシグネチャは、前記複数のデータストリームにおける前記複数の同期ポイントおよび前記対応する複数のブロックシグネチャを含み、
前記第２のデータストリームにおける複数のビットの前記対応するブロックにハッシュ関数またはメッセージダイジェスト関数を適用して前記ブロックシグネチャが判定され、
前記複数のデータストリームが複数のビットの任意のシーケンスからなり、各同期ポイントが前記複数のデータストリーム中の複数のビットのシーケンスからなり、
前記複数のデータストリームのそれぞれにおいて、各同期ポイントの位置が、複数のビットの各ブロックの位置とは異なり、
前記複数のデータストリームのそれぞれに対して少なくとも１つのデータストリームシグネチャがある、
方法。
【請求項１１】
それぞれの特定の同期ポイントの複数のビットの前記対応するブロックは、前記特定の同期ポイントに直接隣接する、
請求項１から１０のいずれか一項に記載の方法。
【請求項１２】
前記ハッシュ関数は、ＳＨＡおよびＭＤ５を含む複数の関数から選択される、
請求項１から１１のいずれか一項に記載の方法。
【請求項１３】
各同期ポイントは、３２ビットからなる、
請求項１から１２のいずれか一項に記載の方法。
【請求項１４】
複数のビットの各ブロックは、２５６バイトからなる、
請求項１から１３のいずれか一項に記載の方法。
【請求項１５】
請求項１から１４のいずれか一項に記載の方法を実装するためのハードウェアおよびソフトウェアを備えるデバイス。
【請求項１６】
少なくとも１つのプロセッサおよび格納媒体を含むデバイスであって、前記格納媒体内のソフトウェアからの１つ又は複数のソフトウェア命令を実行する前記少なくとも１つのプロセッサにより、
データストリームにおける複数の同期ポイントを判定し、
前記複数の同期ポイントのそれぞれについて、前記データストリーム中の複数のビットの対応するブロックを判定し、
複数のビットの各ブロックについて、複数のビットの前記ブロックにハッシュ関数またはメッセージダイジェスト関数を適用して対応するブロックシグネチャを判定し、
前記複数の同期ポイントのそれぞれを、複数のビットの前記対応するブロックの前記対応するブロックシグネチャに関連付けてデータストリームシグネチャを形成することを実行し、
前記データストリームは、複数のビットの任意のシーケンスからなり、各同期ポイントは前記データストリーム中の複数のビットのシーケンスからなり、
前記データストリームにおける各同期ポイントの位置は、前記データストリームにおける複数のビットの各ブロックの位置とは異なり、
前記データストリームシグネチャが前記複数の同期ポイントおよび複数の前記対応するブロックシグネチャを含み、前記データストリームシグネチャ内の前記複数の同期ポイントおよび前記対応する複数のブロックシグネチャは、前記データストリームに他のデータストリームが一致するか否かを判断するために用いられる
デバイス。
【請求項１７】
少なくとも１つのプロセッサおよび格納媒体を含むデバイスであって、前記格納媒体内のソフトウェアからの１つ又は複数のソフトウェア命令を実行する前記少なくとも１つのプロセッサにより、
（Ａ）（１）第１のデータストリームにおける複数の同期ポイントを判定し、
（Ａ）（２）前記複数の同期ポイントのそれぞれについて、前記第１のデータストリーム中の複数のビットの対応するブロックを判定し、
（Ａ）（３）複数のビットの各ブロックについて、複数のビットの前記ブロックにハッシュ関数またはメッセージダイジェスト関数を適用して対応するブロックシグネチャを判定し、
（Ａ）（４）前記第１のデータストリームにおける前記複数の同期ポイントのそれぞれを、複数のビットの前記対応するブロックの前記対応するブロックシグネチャに関連付けて、前記第１のデータストリームに対する第１のデータストリームシグネチャを前記格納媒体内に形成し、
（Ａ）（５）前記第１のデータストリームに対する前記第１のデータストリームシグネチャを取得し、
（Ｂ）第２のデータストリームにおいて複数の同期ポイントのうち１つの同期ポイントを発見することを試み、
（Ｃ）前記第２のデータストリームにおいて前記複数の同期ポイントのうち１つの同期ポイントを発見した場合に、
（Ｃ）（１）前記第２のデータストリームにおいて複数のビットの対応するブロックのブロックシグネチャを判定し、
（Ｃ）（２）前記第２のデータストリームの前記同期ポイントおよび前記対応するブロックシグネチャが前記第１のデータストリームシグネチャ中の同期ポイントおよびブロックシグネチャに対応するか否かを確認し、
（Ｃ）（３）前記第２のデータストリームの前記同期ポイントおよび前記対応するブロックシグネチャが前記第１のデータストリームシグネチャ中の同期ポイントおよびブロックシグネチャに対応する場合に、対応関係を示す情報を保持し、
（Ｄ）前記第２のデータストリームのうち少なくともいくつかが依然として未処理である間、前記第２のデータストリームの予め定められた数の複数の同期ポイントおよび対応する複数のブロックシグネチャが前記第１のデータストリームシグネチャ中の複数の同期ポイントおよび対応する複数のブロックシグネチャに一致するまで、（Ｂ）および（Ｃ）を反復し、
（Ｅ）前記第２のデータストリームの前記予め定められた数の複数の同期ポイントおよび前記対応する複数のブロックシグネチャが前記第１のデータストリームシグネチャ中の複数の同期ポイントおよび対応する複数のブロックシグネチャに一致する場合に、前記第１のデータストリームと前記第２のデータストリームとの間の一致を示すことを実行し、
前記第１のデータストリームシグネチャは、前記第１のデータストリームにおける前記複数の同期ポイントおよび前記対応するブロックの前記対応する複数のブロックシグネチャを含み、
前記第２のデータストリームにおける複数のビットの前記対応するブロックにハッシュ関数またはメッセージダイジェスト関数を適用して前記ブロックシグネチャが判定され、
前記第１のデータストリームが複数のビットの任意のシーケンスからなり、各同期ポイントが前記第１のデータストリーム中の複数のビットのシーケンスからなり、
前記第１のデータストリームにおける各同期ポイントの位置は、前記第１のデータストリームにおける複数のビットの各ブロックの位置とは異なる、
デバイス。
【請求項１８】
少なくとも１つのプロセッサおよび格納媒体を含むデバイスであって、前記格納媒体内のソフトウェアからの１つ又は複数のソフトウェア命令を実行する前記少なくとも１つのプロセッサにより、
（Ａ）（１）複数のデータストリームにおける複数の同期ポイントを判定し、
（Ａ）（２）前記複数の同期ポイントのそれぞれについて、前記複数のデータストリーム中の複数のビットの対応するブロックを判定し、
（Ａ）（３）複数のビットの各ブロックについて、複数のビットの前記ブロックにハッシュ関数またはメッセージダイジェスト関数を適用して対応するブロックシグネチャを判定し、
（Ａ）（４）前記複数のデータストリームにおける前記複数の同期ポイントのそれぞれを、複数のビットの前記対応するブロックの前記対応するブロックシグネチャに関連付けて、前記複数のデータストリームに対する複数のデータストリームシグネチャを前記格納媒体内に形成し、
（Ａ）（５）前記複数のデータストリームシグネチャを取得し、
（Ｂ）第２のデータストリームにおいて前記複数のデータストリームシグネチャの同期ポイントを発見することを試み、
（Ｃ）前記第２のデータストリームにおいて前記複数のデータストリームシグネチャの同期ポイントを発見した場合に、
（Ｃ）（１）前記第２のデータストリームにおいて複数のビットの対応するブロックのブロックシグネチャを判定し、
（Ｃ）（２）前記第２のデータストリームの前記同期ポイントおよび前記対応するブロックシグネチャが前記複数のデータストリームシグネチャのいずれかの中の同期ポイントおよびブロックシグネチャに対応するか否かを確認し、
（Ｃ）（３）前記第２のデータストリームの前記同期ポイントおよび前記対応するブロックシグネチャが前記複数のデータストリームシグネチャの１または複数の中の同期ポイントおよびブロックシグネチャに対応する場合に、対応関係を示す情報を保持し、
（Ｄ）前記第２のデータストリームのうち少なくともいくつかが依然として未処理である間、前記第２のデータストリームの予め定められた数の複数の同期ポイントおよび対応する複数のブロックシグネチャが前記複数のデータストリームシグネチャのうち少なくとも１つの中の複数の同期ポイントおよび対応する複数のブロックシグネチャに一致するまで、（Ｂ）および（Ｃ）を反復し、
（Ｅ）前記第２のデータストリームの前記予め定められた数の複数の同期ポイントおよび前記対応する複数のブロックシグネチャが前記複数のデータストリームのうちの第１のデータストリームに対する第１のデータストリームシグネチャ中の前記予め定められた数の同期ポイントおよび前記複数のブロックシグネチャに一致する場合に、前記第１のデータストリームと前記第２のデータストリームとの間の一致を示すことを実行し、
前記複数のデータストリームに対する前記複数のデータストリームシグネチャは、前記複数のデータストリームにおける前記複数の同期ポイントおよび前記対応する複数のブロックシグネチャを含み、
前記第２のデータストリームにおける複数のビットの前記対応するブロックにハッシュ関数またはメッセージダイジェスト関数を適用して前記ブロックシグネチャが判定され、
前記複数のデータストリームが複数のビットの任意のシーケンスからなり、各同期ポイントが前記複数のデータストリーム中の複数のビットのシーケンスからなり、
前記複数のデータストリームのそれぞれにおいて、各同期ポイントの位置が、複数のビットの各ブロックの位置とは異なり、
前記複数のデータストリームのそれぞれに対して少なくとも１つのデータストリームシグネチャがある、
デバイス。
【請求項１９】
コンピュータに、請求項１から１４のいずれか一項に記載の方法を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
［著作権の陳述］  この特許文献は著作権保護を受ける資料を含む。著作権者は、本特許文献または米国特許商標庁での出願におけるいずれかの関係資料を複製することに異議はないが、それ以外ではあらゆる著作権を留保する。
【０００２】
本発明は、ストリーム認識およびフィルタリングに関する。
【背景技術】
【０００３】
データが他の既知のデータに対応するか否かを判定することを試みるべくデバイス上に格納され、またはデバイス間で送信されるデータを検査することは多くの場合、有用であり、望ましい。例えば、デバイスに格納されたデータが他のデータに対応し、または他のデータの完全もしくは部分的コピーであるかを判定することは有用であり、あるいは望ましい。別の例としては、２つのデバイス間で送信されるデータストリームが他のデータに対応するか（または他のデータの完全または部分的コピーであるか）を判定することが有用であり、あるいは望ましいことがある。
【図面の簡単な説明】
【０００４】
本発明の他の目的、特徴、および特性、関連する構造体の要素の操作方法および機能、ならびに部品の組み合わせおよび製造の効率性は、添付の図面を参照して以下の説明および添付の特許請求の範囲を検討すればより明らかとなるであろう。なお、これら書類の全てが本明細書の一部を形成する。
【０００５】
【図１（ａ）】データストリームを図示する。
【０００６】
【図１（ｂ）】同期ポイントおよび対応するビットのブロックを図示する。
【０００７】
【図１（ｃ）】図１（ａ）のデータストリームに対するストリームシグネチャを図示する。
【０００８】
【図２（ａ）】データストリームの処理を図示する。
【図２（ｂ）】データストリームの処理を図示する。
【図２（ｃ）】データストリームの処理を図示する。
【図２（ｄ）】データストリームの処理を図示する。
【０００９】
【図３（ａ）】複数のストリームを処理するべく用いられる構造を示す。
【図３（ｂ）】複数のストリームを処理するべく用いられる構造を示す。
【００１０】
【図４（ａ）】複数のストリームの処理を図示する。
【図４（ｂ）】複数のストリームの処理を図示する。
【００１１】
【図５】ストリームを処理するための例示的なデータ構造体を示す。
【００１２】
【図６（ａ）】図５のデータ構造体を用いて処理した例示的なストリームを示す。
【図６（ｂ）】図５のデータ構造体を用いて処理した例示的なストリームを示す。
【図６（ａ）】図５のデータ構造体を用いて処理した例示的なストリームを示す。
【００１３】
【図７】典型的なパケットを示す。
【００１４】
【図８】コンピュータシステムの概略図である。
【発明を実施するための形態】
【００１５】
データストリーム（またはストリーム）はビットのシーケンスを含む。ストリーム中のビットのシーケンスはいくつかの種類のデータ項目（例えば映画または画像、もしくは音楽、データベース等）を表し、あるいは符号化することができる。ストリーム中のビットのシーケンスは暗号化および／または圧縮してもよい。当業者は、本明細書を読めば、本発明が基礎となるビットのシーケンスが何を表すかによって限定されないことを理解するであろう。
【００１６】
本明細書において使用するように、データは、基礎となるデータが何を表すか、および基礎となるデータがどのようにフォーマットされ、符号化され、または格納されるかに関わらず、任意のデータを指す。
【００１７】
図１（ａ）〜図１（ｂ）を参照すると、ストリーム１００は複数の同期ポイントを含む（図面において、ＳＰ１、ＳＰ２、ＳＰ３...ＳＰｉと示され、集合的にはＳＰｊと呼ばれるｉ同期ポイントと共にストリームを示す。）。ビットのブロックはストリーム中の各同期ポイントの次である（ｊ番目のブロックは図面においてＢｊと表される）。
【００１８】
図１（ｂ）に示すように、ｉ番目の同期ポイント（ＳＰｉ）はｋビット（ｂ０ｂ１...ｂｋ）からなり、 ビット（Ｂｉ）のｉ番目のブロックはｊビット（ｃ０ｃ１...ｃｊ）からなる。
【００１９】
図面において、ビットのｊ番目のブロックをｊ番目の同期ポイントのすぐ次にあるものとして示すが、ビットのｊ番目のブロックがある既知の量によってｊ番目の同期ポイントから分離され得ることは明らかである。
【００２０】
現在好ましい実装において、１６個の同期ポイントが存在し、そのそれぞれは３２ビットからなり、またビットの各ブロックは２５６バイトからなる。別の実装において、１０個の同期ポイントが存在し、そのそれぞれは６４ビットからなり、またビットの各ブロックは２５６バイトからなる。本明細書において使用されるように、ストリーム中のビット数はストリームのサイズと呼ばれ、同期ポイントにおけるビット数は同期ポイントのサイズと呼ばれ、ビットのブロックにおけるビット数はビットのブロックのサイズと呼ばれる。当業者は本明細書を読めば、上記の数以外の種々のおよび／または他の数の同期ポイントを使用することができ、同期ポイントは上記のもの以外の種々の異なるサイズを有することができ、ビットのブロックが上記の数以外の種々のサイズを有することができることを理解するであろう。
【００２１】
当業者は本明細書を読めば、同期ポイントの数が、ある場合にビットのストリームサイズの関数として判定され得ることを理解するであろう。
【００２２】
関数（ｈ）をビットのブロックに適用することによって判定される値ＨｊはビットＢｊの各ブロックに対応し、従って次式の通りである。  Ｈｊ＝ｈ（Ｂｊ）
【００２３】
値Ｈｊは本明細書において、ビットのｊ番目のブロックに対するブロックシグネチャとも呼ばれる。
【００２４】
関数ｈはビットの２つの任意のブロックＢａおよびＢｂについて、ＢａがＢｂに等しいとき、ｈ（Ｂａ）＝ｈ（Ｂｂ）という特性を有していなければならない。
【００２５】
関数ｈに対する他の所望の特性としては、以下のものがある。（ａ）Ｂｉにおける小さい変化がｈ（Ｂｉ）の異なる値をもたらす可能性があること。（ｂ）関数ｈは比較的容易かつ迅速に計算できること。
【００２６】
関数ｈは任意のハッシュ関数であり得る。いくつかの実装において、ＭＤ５またはＳＨＡ‐１等のメッセージダイジェスト関数を用いることができる、好ましくはより単純でより軽い関数を用い得る。ハッシュ関数は３２ビット値を生成することが好ましい。
【００２７】
当業者は本明細書を読めば、関数ｈがビットの全てのブロックについて一意な値を生成する必要がない（またその可能性が少ない）ことを理解するであろう。
【００２８】
各ストリームは対応するストリームシグネチャを有する。ここで図１（ａ）〜図１（ｃ）を参照すると、ｉ同期ポイント（ＳＰ１、ＳＰ２、ＳＰ３...ＳＰｉ）を有するストリームのシグネチャはｉ組の＜ＳＰｊ，ｈ（Ｂｊ）＞からなり、ただしｊ＝１...ｉである。図１（ｃ）のダイアグラムは図１（ａ）のストリーム１００のシグネチャ１０２の論理表現を示す。
【００２９】
図２（ａ）および図２（ｂ）を参照してデータストリームに対するストリームシグネチャの作成を説明する。図２（ａ）に示すように、ストリームＳは初期設定２００によって処理され、ストリームシグネチャ２０２を生成する。図２（ｂ）の流れ図を参照して初期設定２００による処理をより詳細に説明する。初期設定処理２００により、ある数（ｋ）のペア＜ＳＰｊ，ｈ（Ｂｊ）＞からなり、ただしｋのある値についてｊ＝１...ｋであるストリームシグネチャ２０２を作成される。ｋの値は事前設定されているのが好ましいが（例えば１０、１５、２０等）、上述のようにｋの値はストリームＳのサイズの関数として決定してもよい。
【００３０】
ストリーム２００を処理するとき、初期設定２０２により、まずストリームＳのサイズを判定することができる（２０４）。このサイズ情報は、例えばこのストリームに必要とされる同期ポイントの数（ｋ）および／またはストリーム中の同期ポイントの分離を判定するべく用いることができる。本明細書を読めば明らかなように、任意の所与のストリーム（Ｓ）について、同期ポイントをストリーム（Ｓ）全体に分散させることが好ましい。
【００３１】
その後、（２０６で）処理２０２により、ストリームＳ中の次の（ｉ番目の）同期ポイント（ＳＰｉ）およびビット（Ｂｉ）の対応するブロックが判定される。ビットＢｉのブロックについての値Ｈ（Ｂｉ）を判定し（２０８）、ペア＜ＳＰｊ，Ｈ（Ｂｊ）＞はストリームＳのシグネチャ中に格納される（２１０）。２０８で計算される関数「Ｈ」は上記の関数ｈに対応し、ＭＤ５またはＳＨＡ等のハッシュ関数のメッセージダイジェストであることが好ましい。
【００３２】
その後、処理２０２により、このストリームＳについて十分な＜同期ポイント，値＞のペアを決定したかを判定する（２１２）。そうである場合、ストリームのシグネチャ（ＳＳ）は格納され（２１４）、そうでなければ別の同期ポイントを判定する（２０６）。ストリーム（Ｓ）の処理の終わりに、ストリームシグネチャ（例えば図１（ｃ）に示す形態の）を生成し、ストリームＳに関連付けて格納する。
【００３３】
本明細書を読めば当業者には明らかなように、２つのストリームが同一のストリームシグネチャ（本明細書に説明する処理を用いて判定した）を有するという事実は２つのストリームが同一であることを必ずしも示唆するものではない。例えば、第１のストリームは数百万のビットからなるが、ストリームシグネチャは１０または２０の＜同期ポイント，ビット値のブロック＞のペアのみからなることがあり、この場合、同期ポイントはストリーム全体に無作為に分散され、各同期ポイントは１２８ビットのみを使用し、ビットの各ブロックは５１２ビットのみを使用する。この場合、第２のストリームが全く同じ＜同期ポイント，ビット値のブロック＞のペアを有する場合、第１のストリームに対応してもよく、または対応しなくてもよい。しかし、第２のストリームが第１のストリームと同じ＜同期ポイント，ビット値のブロック＞のペアを有しない場合、第１のストリームに対応しない。
【００３４】
本発明者はいくつかの用途について、データストリームが別の既知のデータストリームに十分に対応しているかを判定すれば十分であり得ることに気付いた。本発明者はいくつかの用途において、２つのストリームがある程度は確実に等しいことを判定すれば十分であり得ることに気付いた。そのような情報は、ストリームのより広範な（かつ、恐らくは高価な）処理をトリガし、対応または等しさを判定するべく使用し得る。
【００３５】
ここで図２（ｃ）を参照すると、ストリームＳのシグネチャ（ＳＳ）を判定および格納すると、任意のストリームを処理し、ストリームＳに十分対応しているかを判定することができる。ストリームＳ'を比較処理２１６に提供する（以下に図２（ｄ）を参照して記載する）。比較処理２１６は先に格納されたストリームシグネチャ（ＳＳ）を使用し、入力ストリームＳ'がストリームＳに対応するか否かを判定する。
【００３６】
比較処理２１６は処理するストリームが他に存在しないかを判定する（２１８）。存在しない場合、一致は見られず、ストリームは一致しない。処理する入力ストリームが更に存在する場合、処理により同期ポイントを検索する（２２０）。処理によりストリームシグネチャＳＳにおける同期ポイント（ＳＰ）のいずれかを検索し、順序通りに検索する必要はないことを理解されたい。本明細書を読めば当業者に明らかなように、これによって入力ストリームを比較処理２１６に順序に関係なく送られ得る断片またはパケットの状態で処理することを可能にする。
【００３７】
同期ポイント（ＳＰ）を発見すると、次いで比較処理２１６は（２２０で）その同期ポイントに関連するビット（Ｂ）の対応するブロックを発見し、ビットＢのブロックｋに対するシグネチャＨ（Ｂ）を判定する。当業者は本明細書を読めば、比較処理２１６において使用する関数ｈがストリームシグネチャを生成するべく使用した関数と同じでなければならないことを理解するであろう。
【００３８】
次に（２２６で）ペア＜ＳＰ，Ｈ（Ｂ）＞を、ストリームシグネチャＳＳにおける同期ポイントＳＰに対して対応するペアと比較する。  ペアが（２２８で）一致しない場合、残余のストリーム（もしあれば）を（２１８以降で）処理する。他方、（２２８で）ペア＜ＳＰ，Ｈ（Ｂ）＞がストリームシグネチャＳＳにおける同期ポイントＳＰの対応するペアに一致する場合、（２３０で）比較処理２１６により一致するストリームを検討するべく十分なペアの一致が存在したかどうかを判定する。「十分な一致」に対する試験（２３０）ではそれまでのストリームにおける一致の数のカウントを用いてもよく、そのカウント値を用いてストリームシグネチャに対する＜同期ポイント，ブロックシグネチャ＞のペアのパーセンテージによる一致を判定してもよい。いくつかの好ましい実装において、ストリームの一致を検討する上で７０％の一致（例えば１０分の７の一致）は十分な一致とみなされる（２３２）。当業者は本明細書を読めば、要求されるパーセンテージによる一致（最大で１００％を含む）が比較処理により要求される確度の関数であることを理解するであろう。上記で説明したように、一致が発見された場合に（２３２）、比較処理２１６を用いて追加項目（そしてより費用の掛かる比較）をトリガすることができるので、当業者は（２３２で）どのように偽の肯定的一致を、十分に一致するストリームの次の処理コストとトレードオフするかを理解するであろう。
【００３９】
これまで、入力ストリーム（Ｓ'）を先に処理した１つのストリーム（Ｓ）と比較してこれに一致させる段階を説明してきた。いくつかの実施形態において、入力ストリームは、２つ以上の先に処理したストリームと比較することができる。
【００４０】
図３（ａ）のダイアグラムは複数（ｋ個）のストリームシグネチャの論理構成３００を示し、ｋ個のストリームＳ１，...Ｓｋのそれぞれに１つのストリームシグネチャがある。ストリームシグネチャのそれぞれは図２（ａ）〜２（ｂ）を参照して上記のように判定され得る。
【００４１】
ここで、図３（ａ）〜３（ｂ）および４（ａ）〜４（ｂ）を参照して任意の入力ストリーム（Ｓ）をこれらのｋストリームのそれぞれと比較する処理を説明する。複数の可能なストリームと比較した１つのストリームに対する比較処理により、入力ストリームにおける複数のストリームシグネチャに対する同期ポイントを発見することができ、一致する２つ以上のシグネチャに対する＜同期ポイント，ハッシュ値＞のペアを発見することもできる。要するに、処理によりｋストリーム（Ｓ１...Ｓｋ）のそれぞれについて処理が発見した一致する＜同期ポイント，ハッシュ値＞のペアの数をトラッキングし、（上記のように十分性に関する所定のしきい値に基づいて）入力ストリームＳとｋストリームの第１のものとの間の一致を十分な一致と宣言するのが好ましい。
【００４２】
図４（ａ）〜４（ｂ）の流れ図を参照すると、処理するストリームＳが更に存在する場合（４００）、処理を継続して（４０２）、ストリームＳ１...Ｓｋのうち１つに対する同期ポイントのうちの少なくとも１つに対応するＳにおける同期ポイント（ＳＰ）を検索する。流れ図において、ストリームＳ１...ＳｋはＳ'として示されるストリームのセットと称する。同期ポイントが発見されない場合（４０２）、処理を継続して（４００）、入力ストリームＳのいずれかの残存する部分を処理する。（４０２で）ストリームＳ１...Ｓｋ（すなわちストリームＳ'のセット）のいずれかに対応するＳにおいて同期ポイント（ＳＰ）が発見されない場合、処理を継続して（４０４）、発見された同期ポイント（ＳＰ）に関連するビットＢのブロックｋの対応するシグネチャＨ（Ｂ）を判定する。
【００４３】
次に（４０６で）、シグネチャのペア＜ＳＰ，Ｈ（Ｂ）＞を同期ポイントＳＰと関連するＳ'における全てのストリームのシグネチャと比較する（ＳＰはＳにおいて発見された、ストリームＳ１...Ｓｋのうち少なくとも１つの同期ポイントのうちの少なくとも１つに対応する同期ポイントであり、Ｈ（Ｂ）は同期ポイントＳＰに対応するビットＢのブロックのシグネチャである）。再び図３（ａ）を参照すると、ストリームＳ１...Ｓｋのそれぞれのストリームシグネチャは格納されて処理のために利用可能であるので、＜同期ポイント，シグネチャ＞のペアをチェックすることができる。
【００４４】
Ｓ'においてストリームのいずれかに対するペア＜ＳＰ，Ｈ（Ｂ）＞について一致するシグネチャのペアが発見されない場合（４０８）、処理を継続して（４００）、入力ストリームＳの残存する任意の部分を処理する。１または複数の一致するペア＜ＳＰ，Ｈ（Ｂ）＞を発見した場合（４０８）、Ｓ'における全ての一致するストリームについて＜ＳＰ，Ｈ（Ｂ）＞のペアのカウントが更新されるまで、処理を継続する（４１０）。
【００４５】
カウントを更新すると（４１０）、処理によりＳ'におけるストリーム（Ｓｍ）のいずれかが十分に一致するペアを有するかを判定する（４１２）。（４１２で）Ｓ'におけるストリームが十分に一致するペアを有しないと判定される場合、処理を継続して（４００）、入力ストリームＳのいずれかの残存する部分を処理する。ストリームＳｍが十分に一致するペアを有する場合、処理を行い（４１４）、入力ストリームＳは十分に一致するペアを有するストリームに一致するとみなされる。
【００４６】
上記の処理がセットＳ'において２つ以上のストリームに一致する入力ストリームＳをもたらし得ることを理解されたい。
【００４７】
いくつかの実装において、データ構造体３０２（図３（ｂ））は各ストリームシグネチャのチェックリストを維持し、従って＜同期ポイント，シグネチャ＞のペアがそのストリームに一致するたびに、処理はマークオフ（またはチェック）することができる。そのリストにより、システムがそのストリームの一致するペアの数を判定する（例えばカウントする）ことを可能にする。当業者は本明細書を読めば、例えば対応する＜同期ポイント，シグネチャ＞のペアのそれぞれにつき１ビットのビットマップとすることを含む、任意の数の方法でチェックリストを実装し得ることを理解するであろう。入力ストリームの処理を開始するとき、チェックリストにおける全てのビットはゼロに設定され、一致を発見すると、対応するビット値は１に設定される。ストリームＳｊのビットマップチェックリストにおけるビットの合計により、そのストリームＳｊに対する入力ストリームにおいて一致するペアの数が与えられる。理解されるように、異なるおよび／または他のスキームを用いて一致の数をトラッキングしてもよい。
【００４８】
当業者は本明細書を読めば、ここで２つのストリームに関して「一致する（ｍａｔｃｈ）」（または「一致する（ｍａｔｃｈｉｎｇ））という用語を用いても、それらが同一であることを必ずしも示唆するものでないことを理解するであろう。２つのストリームは、これらのストリームについて十分な数の＜同期ポイント，シグネチャ＞のペアが同じである場合に一致する。
【００４９】
前述のように、当業者は本明細書を読めば、十分性の異なる基準を用いて２つのストリームが十分に一致するかを判定し得ることを理解するであろう。いくつかの実施形態において、７０％の一致が十分とみなされるが、他の実施形態においてはより高い一致（最大１００％）が要求されることがある。当業者は本明細書を読めば、例えば処理の用途および偽の肯定的一致の公差に基づいて一致の十分性の基準をどのように選択するかを理解するであろう。前述のように、いくつかの用途において、ここで説明する処理により２つのストリームが一致することが分かると、更なる試験を用いてストリームが一致するかを判定することができる。
【００５０】
［データ構造体および実装］  当業者は本明細書を読めば、様々な最適化をマッチング処理の実装に適用することができることを理解するであろう。好ましくは、データ構造体は以下のようであるべきである。  スケーラブル。初期には数百から数百万のエントリを取扱い、必要であれば拡張する選択肢を有するべきである。  メモリが効率的であること。可能な限り少ないメモリを使用するべきである。  検索が効率的であること。所与のパターンの検索はＯ（ｎ）を超えないものとする。
【００５１】
図５を参照してストリームマッチング処理を実装するための例示的なデータ構造体を説明する。この例においては、各同期ポイントは６〜８バイトのシーケンスであり、各フィンガープリントは２バイト長の値であると想定されたい。追加の（任意選択の）データもデータ構造体内に格納してもよい。図５を参照すると、データ構造体（同期フィンガープリンティングデータ構造体（ＳＦＤＳ）と呼ばれる）はアレイのセットから構成される。  行１。２５６ビット長のアレイであり、各ビットはＡＳＣＩＩコード（同期ポイントにおいて現れるコード）に対応する。  行２。２５６２ビット長のアレイであり、２５６ビットは行１のビットのそれぞれに関係する。  行３。２５６３ビット長のアレイであり、２５６ビットは行３のビットのそれぞれに関係する。(行４。行３の個別のエントリに対応するツリーのリストである。
【００５２】
初期化処理において、同期ポイントのペア（６〜８バイトのシーケンス）およびフィンガープリント（データの追加の任意選択のセットを有する２バイト長のハッシュ値）を以下のようにデータ構造体に格納する。
【００５３】
１．同期の第１のバイトは行１の適切なビットを設定する（まだ設定されていない場合）。
【００５４】
２．同期の第２のバイトは、行１で設定されたビットに関係し、行２の２５６ビットにおいて適切なビットを設定する（まだ設定されていない場合）。
【００５５】
３．同期の第３のバイトは、行２で設定されたビットに関係する、行３の２５６ビット中の適切なビットを設定する（まだ設定されていない場合）。
【００５６】
４．それ以外の同期バイトは段階３でビットセットに対応するツリー内に格納される（ツリーはまだ存在しない場合に作成される）。
【００５７】
５．フィンガープリントおよび追加のデータを上記の段階４のツリーの適切なリーフに接続する。
【００５８】
［例］  以下の例は上記の例示的なデータ構造体（図５）の使用を示す。ここで図６（ａ）〜６（ｃ）の図面を参照し、同期ポイントＳＰ１＝「２、２５４、１、Ａ、Ａ、Ｃ」（ここではこのパターンをＡＳＣＩＩにおいて示す）を有し、対応するフィンガープリント値が０×２３ａ９であるストリームを考えられたい。これは同期ポイントＳＰ１に関連するビットのブロックのハッシュが０×２３ａ９であることを意味すると理解されたい。この例のために、ストリームは１０００のストリームｉｄおよび５の同期インデックスを有すると想定されたい。
【００５９】
このペア＜「２、２５４、１、Ａ、Ａ、Ｃ」、０×２３ａ９＞を以下のようにデータ構造体に追加することができる。
【００６０】
１．同期ポイントにおける第１の文字は「２」であり、従って行１のビット２を１に設定する。
【００６１】
２．同期ポイントにおける第２の文字は２５４であり、従って行１のビット２と一致する行２の２５６ビットのうちビット２５４を１に設定する。すなわち、行２［２］［２５４］を１に設定する。
【００６２】
３．同期ポイントの第３の文字は１であり、従って段階２で設定されたビットに一致する行３の２５６ビットの第１のビットを設定する。すなわち、行３［２，２５４］［１］を１に設定する。
【００６３】
４．段階３で設定されたビットが一致するツリーをすでに有し、かつそのツリーが第１の文字としてすでに「Ａ」を有すると想定すると、「Ａ」についてすることはない（同期ポイントの第４の文字）。
【００６４】
５．同期ポイントの第５の文字も「Ａ」であり、第２の文字としてツリーに追加する。
【００６５】
６．同期ポイントの第６の文字は「Ｃ」であり、従って第３の文字としてツリーに追加し、その下に新しい空のリーフを作成する。
【００６６】
７．フィンガープリント値（０×２３ａ９）および追加のデータ（ストリームｉｄ１０００および同期インデックス５）をレコードに格納し、段階６で作成されたリーフと関連付ける。
【００６７】
データ構造体を設定すると（上記のように）、例えば図６（ａ）〜６（ｃ）を参照してここに記載するように、入力ストリームを処理することができるマッチング処理は２つの補助的データ構造体、つまり一致同期リスト（Ｍａｔｃｈ  Ｓｙｎｃｈ  Ｌｉｓｔ、ＭＳＬ）データ構造体（図６（ｂ））およびベクトルの一致シグネチャリスト（Ｍａｔｃｈ  ｓｉｇｎａｔｕｒｅ  ｌｉｓｔ  ｏｆ  ｖｅｃｔｏｒｓ、ＭＳＬｏＶ）データ構造体（図６（ｃ））を用いる。
【００６８】
一致同期リスト（ＭＳＬ）構造は最大ｎのエントリ（ｎは同期の長さである）を有するリストである。この例において、同期の長さは８であり、ＭＳＬは８のエントリを有する。リストは処理される同期のアドレス（ＳＦＤＳ、図５）を保持する。ベクトルのエントリｉは同期のアドレスを保持し、それについて、第１のｉバイトはＳＦＤＳにおける同期に一致したがその（ｉ＋１）番目のバイトはまだ比較していない。−１という値は、その長さにおいて「一致がない」を表す。
【００６９】
ベクトル構造の一致シグネチャリスト（ＭＳＬｏＶ）はベクトルのリストである。ＭＳＬｏＶリストにおける各ベクトルは、所与のストリームの同期に一致する同期およびそのストリームのストリームｉｄのリストを保持する。ベクトルのｊ番目のエントリは、そのストリームの同期に一致すると分かったｊ番目の同期の同期インデックス（ＳＦＤＳから取得）を保持する。
【００７０】
これらのデータ構造体を用いる検索の流れは以下の通りである。
【００７１】
１．新しいパケットを読み取るたびに、そのパケット中の全てのバイトをバイト単位でスキャンする。各バイトをＳＦＤＳの行１におけるバイトと比較する。一致が存在する場合、ＭＳＬのエントリ１を、ＳＦＤＳの行１において適切なエントリに関係するＳＦＤＳの行２に設定する。
【００７２】
２．一致するバイトに続くバイトを数回比較する。先のバイトが一致するもののうちｉ番目であると想定し、現在のバイトをｉ回チェックする（チェックは以下の説明の逆の順序で行われる。すなわち、まず段階ｅにおいてチェックを行い、その次に段階ｄにおいてチェックし、最終的なものが段階ａに記載されている）。ａ．一致するもののうち第１番目のバイト（段階１に記載）ｂ．ＭＳＬのエントリ１によりポイントされた部分的同期から開始した一致するもののうち第２番目のバイト。ＭＳＬのエントリ１によりポイントされたＳＦＤＳの行２の適切なセクションに照らして一致をチェックする。一致を発見した場合、エントリ１を「−１」に設定し、エントリ２をそれまでに発見された（ＳＦＤＳの行２における適切なエントリである）部分的一致のアドレスを用いて更新する。ｃ．ＭＳＬのエントリ２によりポイントされた部分的同期から開始した一致するもののうち第３番目のバイト。ＭＳＬのエントリ１によりポイントされたＳＦＤＳの行３の適切なセクションに照らして一致をチェックする。一致を発見した場合、エントリ２を「−１」に設定し、エントリ３をそれまでに発見された（ＳＦＤＳの行２における適切なエントリである）部分的一致のアドレスを用いて更新する。ｄ...ｅ．ＭＳＬのエントリｉによりポイントされた部分的同期から開始した一致するもののうちｉ番目のバイト。ＭＳＬのエントリｉ−１によりポイントされたＳＦＤＳの適切なセクションに照らして一致をチェックする。一致を発見した場合、エントリｉ−１を「−１」に設定し、エントリｉをそれまでに発見された（ＳＦＤＳにおける適切なエントリである）部分的一致のアドレスを用いて更新する。
【００７３】
３．完全な同期を発見するたびに（すなわち段階２におけるｉが完全な同期の長さに等しく、かつ段階２ｅが成功裏であったとき）、フィンガープリントを計算する。計算したフィンガープリントを、ＭＳＬの最後のエントリにおけるＳＦＤＦセクションによりポイントされているＳＦＤＦのツリーリーフによりポイントされたフィンガープリントと比較する。一致するフィンガープリントを発見した場合、そのストリームｉｄおよび同期インデックスを取得し、ＭＳＬｏＶを更新する。ａ．ＭＳＬｏＶがそのストリームｉｄのベクトルを有しない場合、新しいＭＳＬｏＶを作成し、ＭＳＬｏＶの初めに追加する。新しいベクトルのストリームｉｄを、ＳＦＤＳから取得したストリームｉｄに設定する。新しいベクトルのエントリ１を、ＳＦＤＳから取得した同期インデックスに設定する。ｂ．ＭＳＬｏＶがそのストリームｉｄのベクトルをすでに有する場合、第１の空のエントリをＳＦＤＳから取得した同期インデックスに設定する。ｃ．一致する同期がＭＳＬｏＶ中にいくつかのリーフを有する場合、上記の段階ａ／ｂはこれらのリーフのそれぞれについて別個に行われることに留意されたい。
【００７４】
４．ＭＳＬｏＶベクトルのインデックスの数が所与の量（例えば１０のうち８）を超えると、入力フローと、ｉｄがそのベクトルのストリームｉｄにより格納されたストリームとの間の一致が定義される。
【００７５】
５．フローの所定の長さを有する一部分のみにおいて同期を検索することに留意されたい。検索が一致するストリームを識別するその部分を超えると、未知のストリームと想定され、ＭＳＬおよびＭＳＬｏＶの双方がクリアされる。
【００７６】
［最終例］  当業者は本明細書を読めば、異なるデータ構造体および／または他のデータ構造体を用いてここに説明する処理を実装し得ることを理解するであろう。使用するデータ構造体に対してある程度の効率性が好ましいことを理解されたい。目的としては、データ構造体は同期パターンのそれぞれに関係するフィンガープリントを有する最大百万個の同期ポイント（各々６〜８バイト）を格納するべきである。述べたように、データ構造体を予めオフラインで作成することが好ましいが（データ構造体はデータの初期設定のために準備された後、必要があれば増分的に更新される）、検索自体はリアルタイムで行う。
【００７７】
百万の同期エントリに上記の例（図６（ａ）〜６（ｃ））において説明したデータ構造体を使用する。最初の３バイトを、それぞれが２５６エントリからなる３つのラインに追加する（３×２８＝２２４で１６００万エントリ）次のバイトを各プレフィックスの最後の行に一意に追加する（１％未満が同一のプレフィックスを有し、リスト構造は十分に効率的である。そうでなければ、新たに追加したストリームに対して異なる同期パターンが考慮され得る）。新しい同期の追加をオフラインで、かつ同期の長さの順序で行う。データ構造体内での同期の検索はリアルタイムで行うことができ、かつ同期の長さＯ（１）の順序である。
【００７８】
パケット化データストリームある場合には、データの入力ストリームはパケット化データの形態である。これは、例えば比較処理をルータ等のデバイスで行う場合に生じることがある。そのような場合に処理を行うべく、処理を行うデバイスは２つ以上のパケットからペイロードデータをバッファする必要があり得る。
【００７９】
周知のように、パケットに基づくネットワーク（ＴＣＰ／ＩＰネットワークなど、例えばインターネット）において、ある位置から別の位置へと送信するデータはパケット化される（複数のパケットに分割される）。図７を参照すると、典型的なパケットはアドレス情報およびペイロードを含む。ペイロードは送信するデータを含み、アドレス情報はネットワークがパケットをその目的地にルーティングすることを可能にする情報を含む。当業者は本明細書を読めば、多くのパケット化の形態を用いることができ、パケットの形態およびタイプが本発明に限定されないことを理解するであろう。更に、いくつかのネットワークは複数のレベルのプロトコルを用いることができ、従ってペイロード自体は他のアドレス情報を含むパケットであり得ることを理解されたい。使用するプロトコルに関わらず、当業者は特定のパケットのデータ項目に対応するデータをどのように抽出するかを知るであろう。
【００８０】
パケット化の種類が予め知られている場合、各同期ポイントが１つのパケットのペイロード内で適合するように同期ポイントを選択することが好ましい。しかし、これは可能でないことがあるので、上記の処理（同期ポイントを検索した後、ビットの対応するブロックを処理する）を行うべく複数のシーケンシャルなパケットのペイロードを取得およびバッファすることが必要な場合がある。
【００８１】
当業者は本明細書を読めば、説明した処理およびシステムが現在使用されているアプローチと比較して、２つのコンテンツストリーム間の比較をはるかに迅速に、かつより効率的な方法でサポートすることを理解するであろう。更に、本明細書に説明するアプローチは暗号化コンテンツを取り扱うことができる。
【００８２】
［計算］  そのような方法（ならびに他のタイプのデータ）を実装するプログラムは、多くの態様で多様な媒体（例えばコンピュータ可読媒体）を用いて格納および送信することができる。ハードワイヤードされた回路または特注のハードウェアは、様々な実施形態の処理を実装し得るソフトウェア命令のいくつかまたは全てに代えて、またはこれらと組み合わせて使用してもよい。従って、ソフトウェアのみにではなく、ハードウェアおよびソフトウェアの様々な組み合わせを使用してもよい。
【００８３】
図８は本開示の実施形態を実装し、また実行し得るコンピュータシステム８００の概略図である。
【００８４】
この例によれば、コンピュータシステム８００はバス８０１（すなわちインターコネクト）、少なくとも１つのプロセッサ８０２、少なくとも１つの通信ポート８０３、メインメモリ８０４、リムーバブルストレージ媒体８０５、リードオンリメモリ８０６、および大容量ストレージ８０７を含む。
【００８５】
プロセッサ８０２はインテル（登録商標）アイテニアム（登録商標）プロセッサまたはアイテニアム２（登録商標）プロセッサ、ＡＭＤ（登録商標）オプテロンプロセッサ（登録商標）またはアスロンＭＰ（登録商標）プロセッサ、またはモトローラ（登録商標）ラインのプロセッサ等の、しかしこれらに限定されない既知のプロセッサであり得る。通信ポート９０３はモデムベースのダイアルアップ接続と共に使用するＲＳ-２３２ポート、１０／１００イーサネット（登録商標）ポート、銅線またはファイバを用いるギガビットポート、またはＵＳＢポート等のいずれかであり得る。通信ポート８０３は、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、ＣＤＮ、またはコンピュータシステム８００が接続する任意のネットワーク等のネットワークに応じて選択してもよい。コンピュータシステム８００は入力／出力（Ｉ／Ｏ）ポート８０９を介して周辺機器（例えばディスプレイスクリーン８３０、入力デバイス８１６）と通信してもよい。
【００８６】
メインメモリ８０４はランダムアクセスメモリ（ＲＡＭ）、または当技術分野において通常既知のその他のダイナミックストレージデバイスであり得る。リードオンリメモリ８０６はプロセッサ８０２に対する命令等、静的情報を格納するプログラマブルリードオンリメモリ（ＰＲＯＭ）チップなど、任意のスタティックストレージデバイスであり得る。情報および命令を格納するべく、大容量ストレージ８０７を用いることができる。例えばアダプテック（登録商標）系統のスモールコンピュータシリアルインターフェース（ＳＣＳＩ）ドライブ等のハードディスク、光学ディスク、アダプテック（登録商標）系統のリダンダント・アレイ・オブ・インエクスペンシブ・ディスクス（ＲＡＩＤ）ドライブ等のＲＡＩＤなどディスクのアレイ、またはその他の大容量ストレージデバイスを使用することができる。
【００８７】
バス８０１はプロセッサ８０２を他のメモリ、ストレージ、および通信ブロックと通信可能に結合させる。バス８０１は使用するストレージデバイスに応じて、ＰＣＩ／ＰＣＩ−Ｘ、ＳＣＳＩ、ユニバーサルシリアルバス（ＵＳＢ）に基づくシステムバス（または他のバス）等であり得る。リムーバブルストレージ媒体８０５は外部ハードドライブ、フロッピー（登録商標）ディスク、アイオメガ（登録商標）Ｚｉｐドライブ、コンパクトディスクリードオンリメモリ（ＣＤ‐ＲＯＭ）、再書き込み可能コンパクトディスク（ＣＤ‐ＲＷ）、デジタルビデオディスク‐リードオンリメモリ（ＤＶＤ‐ＲＯＭ）等のうちいずれの種類でもあり得る。
【００８８】
本明細書の実施形態は、命令を格納した機械可読媒体を含み得るコンピュータプログラム製品として提供してもよく、命令は、コンピュータ（または他の電子デバイス）をプログラミングして処理を行うように使用してもよい。本明細書で使用するように、「機械可読媒体」という用語は任意の媒体、その複数の媒体、または異なる媒体の組み合わせを指し、これらはコンピュータ、プロセッサ、または類似のデバイスが読み取ることができるデータ（例えば命令、データ構造体）を提供するときに関与する。そのような媒体は不揮発性媒体、揮発性媒体、および伝送媒体を含むがこれらに限定されない多くの形状を取り得る。不揮発性媒体は、例えば光ディスクまたは磁気ディスク、ならびに他の永続メモリを含む。揮発性媒体はダイナミックランダムアクセスメモリを含み、ダイナミックランダムアクセスメモリは通常、コンピュータのメインメモリを構成する。伝送媒体としては、プロセッサに結合されたシステムバスを有するワイヤを含む同軸ケーブル、銅線、および光ファイバが挙げられる。伝送媒体としては、無線周波数（ＲＦ）データ通信および赤外線（ＩＲ）データ通信中に生成されるもの等の音波、光波、電磁放出が挙げられ、これらを運び得る。
【００８９】
機械可読媒体としては、電子命令を格納するのに好適なフロッピー（登録商標）ディスケット、光学ディスク、ＣＤ−ＲＯＭ、光磁気ディスク、ＲＯＭ、ＲＡＭ、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、磁気カードまたは光カード、フラッシュメモリ、または他のタイプの媒体／機械可読媒体が挙げられ得るが、これらに限定されない。更に、本明細書の実施形態はコンピュータプログラム製品としてもダウンロードすることができ、通信リンク（例えばモデムまたはネットワーク接続）を介する搬送波または他の伝播媒質において実施されるデータ信号により、遠隔のコンピュータから要求しているコンピュータへとプログラムを転送してもよい。
【００９０】
データ（例えば命令のシーケンス）をプロセッサに搬送するときに様々な形態のコンピュータ可読媒体を伴ってもよい。例えば、データは、（ｉ）ＲＡＭからプロセッサに提供し、（ｉｉ）無線伝送媒体を介して搬送し、（ｉｉｉ）多くのフォーマット、規格、またはプロトコルに従ってフォーマットおよび／または送信し、および／または （iv）当技術分野で周知の様々な方法のいずれかで暗号化してもよい。
【００９１】
コンピュータ可読媒体は、（いずれの適切なフォーマットでも）この方法を行うのに適切なプログラム要素を格納することができる。
【００９２】
示すように、本明細書で論じるような機能性をサポートするアプリケーション８５０‐１を用いてメインメモリ８０４をエンコードしてもよい。（アプリケーション８５０-１は、例えば初期設定２００または比較アプリケーション２１６であってもよい）。アプリケーション８５０-１（および／または本明細書で説明する他のリソース）を、データおよび／または論理命令等のソフトウェアコード（例えば、メモリ内、またはディスク等の別のコンピュータ可読媒体上に格納されたコード）として実施することができ、このソフトウェアコードは本明細書で説明する種々の実施形態に従って機能性の処理をサポートする。
【００９３】
一実施形態のオペレーション中に、プロセッサ８０２はアプリケーション８５０-１の論理命令を立ち上げ、走らせ、実行し、解釈し、または別の方法で実行するべく、バス８０１を使用することにより、メインメモリ８０４にアクセスする。アプリケーション８５０-１の実行により、処理８５０-２における処理の機能性が生成される。換言すれば、処理８５０-２は、コンピュータシステム８００のプロセッサ８０２内またはプロセッサ８０２上で実行するアプリケーション８５０-１の１または複数の部分を表す。
【００９４】
本明細書で論じるオペレーションを実行する処理８５０−２に加えて、本明細書の他の実施形態はアプリケーション８５０-１自体（すなわち実行されていないまたは動作していない論理命令および／またはデータ）を含むことに留意されたい。アプリケーション８５０−１は、ディスク、ハードディスク等のコンピュータ可読媒体（例えばレポジトリ）上、または光媒体内に格納してもよい。また、他の実施形態によれば、アプリケーション８５０‐１は、ファームウェア、リードオンリメモリ（ＲＯＭ）等のメモリタイプシステム内に、またはこの例におけるようにメインメモリ８０４内（例えばランダムアクセスメモリまたはＲＡＭ内）に実行可能なコードとして格納することができる。例えば、アプリケーション８５０‐１を、リムーバブルストレージ媒体８０５、リードオンリメモリ８０６、および／または大容量ストレージデバイス８０７内にも格納してもよい。
【００９５】
コンピュータシステム８００によりサポートされる例示的な機能性、より具体的にはアプリケーション８５０‐１に関連する機能性を図２（ａ）〜２（ｄ）および４（ａ）〜４（ｂ）を参照して上述している。
【００９６】
当業者はコンピュータシステム８００が他の処理、ならびに／またはハードウェアリソースの割り当ておよび使用を制御するオペレーティングシステム等のソフトウェアおよびハードウェアコンポーネントを含み得ることを理解するであろう。
【００９７】
本明細書で論じるように、本発明の実施形態は様々な段階またはオペレーションを含む。様々なこれらの段階は、ハードウェアコンポーネントにより実行してもよく、または機械実行可能な命令において実施してもよく、機械実行可能な命令は、命令を用いてプログラミングした汎用プロセッサまたは特定目的のプロセッサによりオペレーションを実行するべく使用してもよい。あるいは、段階をハードウェア、ソフトウェア、および／またはファームウェアを組み合わせることにより実行してもよい。「モジュール」という用語は、ハードウェア、ソフトウェア、ファームウェア、またはそれらのいずれかの組み合わせを含み得る自己完結型の機能的なコンポーネントを指す。
【００９８】
当業者は本明細書を読めば、装置の実施形態が説明した処理のうちいくつか（しかし必ずしも全てではない）を実行するように動作するコンピュータ／コンピューティングデバイスを含み得ることを理解するであろう。
【００９９】
プログラムまたはデータ構造体を格納するコンピュータ可読媒体の実施形態は実行されると、プロセッサに説明した処理のうちいくつか（しかし必ずしも全てではない）を実行させるプログラムを格納するコンピュータ可読媒体を含む。
【０１００】
本明細書において処理を説明する限りにおいて、当業者は処理がユーザがいかなる介入もすることなく動作し得ることを理解するであろう。別の実施形態において、処理はいくらかの人間による介入（例えば、段階は人間の支援により実行される）を含む。
【０１０１】
特許請求の範囲における「第１」および「第２」という語は区別または特定するべく用いられるのであって、連続的または数値的な限定を示すべく用いられるものではないことを理解されたい。同様に、文字または数値的表示（「（ａ）」、「（ｂ）」等）を使用しても、区別および／または特定するのに役立つように用いられるのであって、いかなる連続的または数値的な限定、もしくは順序も示すものではない。
【０１０２】
最も実際的かつ好ましい実施形態であると現在考えられるものに関連して本発明を説明したが、本発明は開示した実施形態に限定されるものではなく、むしろ添付の特許請求の趣旨および範囲内に含まれる様々な変更形態および均等な配置を包含することを意図することを理解されたい。
［項目１］
ソフトウェアと組み合わせたハードウェアにより実装されるコンピュータ実装方法であって、前記方法は、
データ項目における複数の同期ポイントを判定する段階と、
前記複数の同期ポイントのそれぞれについて、前記データ項目中の複数のビットのブロックを判定する段階と、
ビットの各ブロックについて、複数のビットの前記ブロックにハッシュ関数またはメッセージダイジェスト関数を適用して対応するブロックシグネチャを判定する段階と、
前記複数の同期ポイントのそれぞれを、複数のビットの前記対応するブロックの前記対応するブロックシグネチャに関連付けてデータ項目シグネチャを形成する段階とを備え、
前記データ項目は、複数のビットの任意のシーケンスからなり、各同期ポイントは前記データ項目中の複数のビットのシーケンスからなる方法。
［項目２］
各特定の同期ポイントの複数のビットの前記対応するブロックは、前記特定の同期ポイントに直接に隣接する、項目１に記載の方法。
［項目３］
前記ハッシュ関数は、ＳＨＡおよびＭＤ５を含む複数の関数から選択される、項目１または２に記載の方法。
［項目４］
各同期ポイントは、３２ビットからなる、項目１〜３のいずれか一項に記載の方法。
［項目５］
複数のビットの各ブロックは、２５６バイトからなる、項目１〜４のいずれか一項に記載の方法。
［項目６］
項目１〜５のいずれか一項に記載の方法を実装するためのハードウェアおよびソフトウェアを備えるデバイス。
［項目７］
ソフトウェアと組み合わせたハードウェアにより実装されるコンピュータ実装方法であって、前記方法は、
（Ａ）第１のデータ項目に対する第１のデータ項目シグネチャを取得する段階と、
（Ｂ）第２のデータ項目において複数の同期ポイントのうち１つの同期ポイントを発見することを試みる段階と、
（Ｃ）前記第２のデータ項目において前記複数の同期ポイントのうち１つの同期ポイントを発見した場合に、
（Ｃ）（１）前記第２のデータ項目において複数のビットの対応するブロックのブロックシグネチャを判定する段階と、
（Ｃ）（２）前記第２のデータ項目の前記同期ポイントおよび前記対応するブロックシグネチャが前記第１のデータ項目シグネチャにおける同期ポイントおよびブロックシグネチャに対応するか否かを確認する段階と、
（Ｃ）（３）前記第２のデータ項目の前記同期ポイントおよび前記対応するブロックシグネチャが前記第１のデータ項目シグネチャ中のある同期ポイントおよびブロックシグネチャに対応する場合に、対応関係を示す情報を保持する段階と、
（Ｄ）前記第２のデータ項目のうち少なくともいくつかが依然として未処理である間、前記第２のデータ項目の予め定められた数の複数の同期ポイントおよび対応する複数のブロックシグネチャが前記第１のデータ項目シグネチャ中の複数の同期ポイントおよび対応する複数のブロックシグネチャに一致するまで、段階（Ｂ）および（Ｃ）を反復する段階と、
（Ｅ）前記第２のデータ項目の前記予め定められた数の複数の同期ポイントおよび前記対応する複数のブロックシグネチャが前記第１のデータ項目シグネチャ中の複数の同期ポイントおよび対応する複数のブロックシグネチャに一致する場合に、前記第１のデータ項目と前記第２のデータ項目との間の一致を示す段階とを備え、
前記第１のデータ項目シグネチャは、前記第１のデータ項目における複数の同期ポイントと対応する複数のブロックシグネチャとの間の関連性を含み、
前記第２のデータ項目における複数のビットの前記対応するブロックにハッシュ関数またはメッセージダイジェスト関数を適用して前記ブロックシグネチャを判定する方法。
［項目８］
前記第２のデータ項目の複数の異なる部分について段階（Ｂ）および（Ｃ）を並行して反復する、項目７に記載の方法。
［項目９］
（Ｆ）段階（Ｅ）において判定したとき前記第１のデータ項目と前記第２のデータ項目との間で一致する場合に、前記第２のデータ項目へのアクセスを選択的に拒否する段階を更に備える、
項目７または８に記載の方法。
［項目１０］
（Ｇ）段階（Ｅ）において判定したとき前記第１のデータ項目と前記第２のデータ項目との間で一致する場合、前記第２のデータ項目についての情報を保持する段階を更に備える、
項目７〜９のいずれか一項に記載の方法。
［項目１１］
処理の少なくともいくつかは、特定のデバイスにおいて行われ、保持される前記情報は前記特定のデバイスについての情報を含む、項目１０に記載の方法。
［項目１２］
前記デバイスは、ネットワーク内のルータである、項目１１に記載の方法。
［項目１３］
複数のパケットを取得する段階と、
前記複数のパケットからペイロード情報を抽出して前記第２のデータ項目の少なくともいくつかを取得する段階とを更に備える、
項目７〜１２のいずれか一項に記載の方法。
［項目１４］
（Ｈ）段階（Ｅ）において判定したとき前記第１のデータ項目と前記第２のデータ項目との間で一致する場合、前記第１のデータ項目と同一であるかを判定するべく、前記第２のデータ項目に追加のチェックを受けさせる段階を更に備える、
項目７〜１３のいずれか一項に記載の方法。
［項目１５］
それぞれの特定の同期ポイントの複数のビットの前記対応するブロックは、前記特定の同期ポイントに直接隣接する、項目７〜１４のいずれか一項に記載の方法。
［項目１６］
前記ハッシュ関数は、ＳＨＡおよびＭＤ５を含む複数の関数から選択される、項目７〜１５のいずれか一項に記載の方法。
［項目１７］
各同期ポイントは、３２ビットからなる、項目７〜１６のいずれか一項に記載の方法。
［項目１８］
複数のビットの各ブロックは、２５６バイトからなる、項目７〜１７のいずれか一項に記載の方法。
［項目１９］
ソフトウェアと組み合わせたハードウェアにより実装されるコンピュータ実装方法であって、前記方法は、
（Ａ）複数のデータ項目のそれぞれに対する少なくとも１つのシグネチャである複数のデータ項目シグネチャを取得する段階と、
（Ｂ）第２のデータ項目において複数のデータ項目シグネチャの同期ポイントを発見することを試みる段階と、
（Ｃ）前記第２のデータ項目において前記複数のデータ項目シグネチャの同期ポイントを発見した場合に、
（Ｃ）（１）前記第２のデータ項目において複数のビットの対応するブロックのブロックシグネチャを判定する段階と、
（Ｃ）（２）前記第２のデータ項目の前記同期ポイントおよび前記対応するブロックシグネチャが前記複数のデータ項目シグネチャのいずれかにおける同期ポイントおよびブロックシグネチャに対応するか否かを確認する段階と、
（Ｃ）（３）前記第２のデータ項目の前記同期ポイントおよび前記対応するブロックシグネチャが前記複数のデータ項目シグネチャの１または複数における同期ポイントおよびブロックシグネチャに対応する場合に、対応関係を示す情報を保持する段階と、
（Ｄ）前記第２のデータ項目のうち少なくともいくつかが依然として未処理である間、前記第２のデータ項目の予め定められた数の複数の同期ポイントおよび対応する複数のブロックシグネチャが前記複数のデータ項目シグネチャのうち少なくとも１つにおける複数の同期ポイントおよび対応する複数のブロックシグネチャに一致するまで、段階（Ｂ）および（Ｃ）を反復する段階と、
（Ｅ）前記第２のデータ項目の前記予め定められた数の複数の同期ポイントおよび前記対応する複数のブロックシグネチャが前記複数のデータ項目の第１のデータ項目シグネチャにおいて前記予め定められた数の同期ポイントおよび前記複数のブロックシグネチャに一致する場合に、前記第１のデータ項目と前記第２のデータ項目との間の一致を示す段階とを備え、
前記データ項目のそれぞれの特定のデータ項目に対する前記複数のデータ項目シグネチャは、前記特定のデータ項目における複数の同期ポイントと前記特定のデータ項目に対する対応する複数のブロックシグネチャとの間の関連性を含み、
前記第２のデータ項目における複数のビットの前記対応するブロックにハッシュ関数またはメッセージダイジェスト関数を適用して前記ブロックシグネチャを判定する方法。
【図１（ａ）】
0006340668.tif 000002
【図１（ｂ）】
0006340668.tif 000003
【図１（ｃ）】
0006340668.tif 000004
【図２（ａ）】
0006340668.tif 000005
【図２（ｂ）】
0006340668.tif 000006
【図２（ｃ）】
0006340668.tif 000007
【図２（ｄ）】
0006340668.tif 000008
【図３（ａ）】
0006340668.tif 000009
【図３（ｂ）】
0006340668.tif 000010
【図４（ａ）】
0006340668.tif 000011
【図４（ｂ）】
0006340668.tif 000012
【図５】
0006340668.tif 000013
【図６（ａ）】
0006340668.tif 000014
【図６（ｂ）】
0006340668.tif 000015
【図６（ｃ）】
0006340668.tif 000016
【図７】
0006340668.tif 000017
【図８】
0006340668.tif 000018