(57)【特許請求の範囲】
【請求項１】
データベースシステムの匿名化方法であって、
コントローラが、クエリを受信すること、
前記コントローラが、クエリ内の攻撃コンポーネントを識別すること、
前記コントローラが、前記攻撃コンポーネントの検査に適したデータストアから行と列を要求すること、
前記コントローラが、どの攻撃コンポーネントが削除または調整されたときに固定閾値よりも小さいUIDの差になるかを判定すること、
前記コントローラが、前記攻撃コンポーネントの影響を除去するために、前記クエリに適合する行に対して行を追加するかまたは削除すること、
前記コントローラが、得られた行調整済みテーブルに統計処理を適用すること、
前記コントローラが、得られた回答を出力すること、を備える匿名化方法。
【請求項２】
前記コントローラが、前記クエリを検査して、すべての攻撃コンポーネントが識別されるように前記クエリが制約されていることを保証すること、
前記クエリが制約されていない場合、前記コントローラが、前記クエリを拒否すること、をさらに備える請求項１に記載の匿名化方法。
【請求項３】
識別された攻撃コンポーネントが、スナップされたアライメントに適合しない範囲である場合に、前記コントローラが、クエリを拒否すること、をさらに備える請求項１に記載の匿名化方法。
【請求項４】
前記コントローラが、前記クエリ内の識別された攻撃コンポーネントを、スナップされたアラインメントに適合する範囲に変更すること、をさらに備える請求項１に記載の匿名化方法。
【請求項５】
識別された攻撃コンポーネントは、範囲の片側のみを指定し、
前記変更することは、範囲の反対側を追加する、請求項４に記載の匿名化方法。
【請求項６】
前記変更することは、前記範囲を、スナップされたアライメントに個別に適合する複数の論理和された範囲に分割する、請求項４に記載の匿名化方法。
【請求項７】
識別された攻撃コンポーネントは範囲であり、
前記コントローラが、スナップされたアライメントである重なり合う部分範囲を検出することにより、識別された攻撃コンポーネントを調整すること、
前記コントローラが、前記範囲を縮小して小さなUIDの差となる範囲の一部分を除外すること、をさらに備える請求項１に記載の匿名化方法。
【請求項８】
前記コントローラが、摂動が固定されるように、出力された回答を摂動させること、をさらに備える請求項１に記載の匿名化方法。
【請求項９】
前記コントローラが、前記回答が少なくとも固定閾値数の別個のUIDを有する行によって影響されることを保証すること、をさらに備える請求項８に記載の匿名化方法。
【請求項１０】
出力された回答は、固定ノイズで摂動される、請求項８に記載の匿名化方法。
【請求項１１】
前記固定ノイズの量は、個々のユーザデータの影響を隠すのに十分である、請求項１０に記載の匿名化方法。
【請求項１２】
別個のUIDの数が、固定閾値を下回った場合に回答を抑制する、請求項１に記載の匿名化方法。
【請求項１３】
前記クエリが、スナップされたアラインメントを順守しない範囲に従ってグループ化する場合、前記コントローラが、前記クエリを拒否すること、をさらに備える請求項１に記載の匿名化方法。
【請求項１４】
グループ化が、スナップされたアライメントを順守するように、スナップされたアライメントを順守しない範囲に従って前記クエリがグループ化する場合に、前記コントローラが、前記クエリを修正すること、をさらに備える請求項１に記載の匿名化方法。
【請求項１５】
非一時的なコンピュータ可読媒体であって、
クエリを受信すること、
クエリ内の攻撃コンポーネントを識別すること、
前記攻撃コンポーネントの検査に適したデータストアから行と列を要求すること、
どの攻撃コンポーネントが、削除または調整されたときに固定閾値よりも小さいUIDの差となるかを判定すること、
前記攻撃コンポーネントの影響を除去するために、前記クエリに適合する行に対して行を追加するかまたは削除すること、
得られた行調整済みテーブルに統計処理を適用すること、
得られた回答を出力すること、を実行するように、少なくとも1つのプロセッサとメモリデバイスとを含むコントローラを適合させるように構成された命令を格納する、非一時的なコンピュータ可読媒体。
【請求項１６】
格納された命令は、
前記クエリを検査して、すべての攻撃コンポーネントが識別されるように前記クエリが制約されていることを保証すること、
前記クエリが制約されていない場合、前記クエリを拒否すること、を実行するように前記コントローラを適合させるようにさらに構成される、請求項１５に記載の非一時的なコンピュータ可読媒体。
【請求項１７】
格納された命令は、
摂動が固定されるように、出力された回答を摂動させること、を実行するように前記コントローラを適合させるようにさらに構成される、請求項１５に記載の非一時的なコンピュータ可読媒体。
【請求項１８】
クエリに対する結果を匿名化するクロークであって、
少なくとも１つのプロセッサと、
アプリケーションを格納するメモリデバイスと、を備え、
前記少なくとも１つのプロセッサにロードされると、前記アプリケーションは、
クエリを受信すること、
クエリ内の攻撃コンポーネントを識別すること、
前記攻撃コンポーネントの検査に適したデータストアから行と列を要求すること、
どの攻撃コンポーネントが、削除または調整されたときに固定閾値よりも小さいUIDの差となるかを判定すること、
前記攻撃コンポーネントの影響を除去するために、前記クエリに適合する行に対して行を追加するかまたは削除すること、
得られた行調整済みテーブルに統計的処理を適用すること、
得られた回答を出力すること、を実行するように前記クロークを適合させる、クローク。
【請求項１９】
前記アプリケーションは、
前記クエリを検査して、すべての攻撃コンポーネントが識別されるように前記クエリが制約されていることを保証すること、
前記クエリが制約されていない場合、前記クエリを拒否すること、を実行するように前記クロークをさらに適合させる、請求項１８に記載のクローク。
【請求項２０】
前記アプリケーションは、
摂動が固定されるように、出力された回答を摂動させること、を実行するように前記クロークをさらに適合させる、請求項１８に記載のクローク。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ分析のための統計的方法に関する。特定の実施形態は、データベースのクエリから生成された回答の匿名化に関する。
【背景技術】
【０００２】
分析者は、データベース内の個々のユーザについて何も知ることなく、ユーザ情報を含むデータベースから統計データを取得することができることをしばしば希望する。データベースから名前や識別番号を削除するだけでは、個々のプライバシーの損失を防ぐことは効果的ではない。例えば、分析者がデータベース（被害者）の個人の生年月日、性別、および郵便番号を知っている場合、これだけで被害者を一意に識別するのに十分な情報であることが多い。その後、分析者は、この情報と、分析者が被害者について知りたいと思ういくつかの機密情報を特定するクエリを生成し、回答を取得することができる。たとえば、「1957年12月14日に生まれた郵便番号67663のすべての男性の給与の合計はどれだけですか？」である。このような人が1人だけの場合、給与の合計はその人の給料になる。
【０００３】
初期の先行技術では、このことに対して防御するためのメカニズムは、回答に示されるK人の個人が少なくとも存在しない限り、回答を出さないだけでであった。しかし、この防御はしばしば簡単に回避されてしまう。例えば、分析者は、1）「すべての男性の給与の合計はいくらですか？」、および2）「1957年12月14日に生まれていない郵便番号67663のすべての男性の給料の合計はいくらですか？」という２つのクエリを生成する。最初のクエリにはすべての男性が含まれるが、2番目のクエリには被害者以外のすべての男性が含まれる。第1の合計から第2の合計を差し引くことにより、被害者の給与を計算することができる。
【０００４】
他の先行技術は、データベース自体のデータを修正することによってこの問題に対処している。1つのアプローチは、データベース内の数値にノイズを追加する。別のアプローチは、ユーザ間で特定のフィールドを交換する。さらにＫ匿名性（K-anonymity）と呼称される別のアプローチは、データベースの各ユーザが同じＫ−１人の他のユーザを見るようにデータ値の正確性を無くすことである。これらのアプローチとその変種は強力な匿名性を提供することができるが、しばしばデータそのものの有用性を損なう。さらに、これらのアプローチの構成が複雑であり、しばしば匿名性の強さを弱めるエラーを引き起こす。
【０００５】
他の従来技術のアプローチである「差分プライバシー（differential privacy）」は、データベースからのクエリに対する回答が数値回答（numerical answers）の形式で行われ、数値回答にランダムノイズが追加される匿名化の方法である。「ノイズのある数値回答（noisy numerical answer）」とは、数値回答にランダムノイズを追加した数をいう。
【０００６】
これがどのように動作するかの例を挙げると、「男性であり、1957年12月14日の生まれであり、郵便番号67663であり、9万ドルから10万ドルの給与を持っているユーザが何人いるか？」というクエリが想定される。真の数値回答は、ユーザー（問合せの被害者）がその給与を持っているかどうかによって、1または0になる。正規分布と「5」の標準偏差のランダムノイズが追加されたと仮定される。ここで、数値回答は、「６」または負の「８」である。分析者は、被害者がその給与を持っているかどうか分からず、被害者のプライバシーを保護する。一方、クエリが「郵便番号67663であり、9万ドルから10万ドルの給料を持っている男性は何人ですか？」であると想定した場合、真の数値回答が513であれば、ノイズのある数値回答は510または518となる。結果として、分析者は合理的に正確な答えを得る。このようにして、差分プライバシー・システムは、プライバシーと正確さの両方を提供することができる。
【０００７】
問題は、分析者がクエリを繰り返すことを許可されたときに生じる。最初のクエリを想定すると、各ノイズのある数値解答は、0または1の期待値のランダム分布から得られる。十分なノイズ解答があれば、分析者は平均をとり、真の解答であると確信することができる。
【０００８】
この問題に対する一般的に知られている解決策は、分析者によって差分プライバシー・データベースにクエリすることができる回数を制限することである。しかし、特定クエリが異なる時間に異なる結果を生成する可能性があるように、データベースの内容が絶えず変化しているような場合には、特定のクエリを繰り返すことが有用であり重要な場合があるので、このことは実用的ではない。
【０００９】
したがって、有用な分析を提供しながらデータベースシステムのプライバシーを構成し改善することが容易な匿名化方法およびシステムが必要とされている。
【発明の概要】
【課題を解決するための手段】
【００１０】
本発明の実施形態は、匿名化モジュールを提供し、匿名化モジュールは、その入力がクエリであり、その出力が摂動された統計的回答であり、行および列からなるテーブルを要求することによってデータストアと対話する。一実施形態では、匿名化モジュールは、テーブル内の行に影響を及ぼすクエリ内の攻撃コンポーネントを識別し、テーブル内のごく僅かなユーザが攻撃コンポーネントによって影響を受けたときに、それらの攻撃コンポーネントの影響を除去する。匿名化モジュールは、攻撃コンポーネントを削除するか、攻撃コンポーネントによって指定された範囲を調整して、攻撃コンポーネントの影響を検査する。したがって、モジュールは、クエリ間の差を使用して個々のユーザに関する情報を推測する攻撃に対して防御する。
【００１１】
一実施形態では、匿名化モジュールは、個々のユーザに関する情報が単一の回答から、または単一の回答の繰り返しのインスタンスから推定されることがないように、統計的回答を摂動させる。これは、平均値と外れユーザ値との両方の効果が隠されるほどのノイズを追加し、出力がユーザのグループから取得されることを保証することによって行われる。
【００１２】
一実施形態では、匿名化モジュールは、ノイズを追加するためおよび閾値に基づく決定のために、固定乱数を使用する。固定乱数は、ユーザIDの同じ組が同じ擬似乱数を生成するような方法で擬似乱数分布から取得される。
【００１３】
一実施形態では、データベースシステムの匿名化方法が提供される。この方法は、クエリを受信すること、クエリ内の攻撃コンポーネントを識別すること、攻撃コンポーネントの検査に適したデータストアから行と列を要求すること、を含む。この方法は、除去するかまたは調整されたときにどの攻撃コンポーネントが固定閾値よりも小さいユーザ識別（「user identification : UID」）の差をもたらすかを決定すること、攻撃コンポーネントの影響を除去するために、クエリに一致する行に対して行を追加するかまたは削除すること、をさらに含む。方法は、得られた行調整済みテーブルに統計処理を適用すること、得られた回答を出力することをさらに含む。
【００１４】
実施形態では、非一時的なコンピュータ可読媒体が提供される。非一時的なコンピュータ可読媒体は、クエリを受信すること、クエリ内の攻撃コンポーネントを識別すること、攻撃コンポーネントの検査に適したデータストアから行と列を要求すること、を実行するように、少なくとも1つのプロセッサとメモリデバイスとを含むコントローラを適合させるように構成された命令を格納する。格納された命令は、どの攻撃コンポーネントが、削除または調整されたときに固定閾値よりも小さいUIDの差となるかを判定すること、前記攻撃コンポーネントの影響を除去するために、前記クエリに一致する行に対して行を追加するかまたは削除すること、を実行するように前記コントローラを適合させるように構成される。格納された命令は、得られた行調整済みテーブルに統計処理を適用すること、得られた回答を出力すること、を実行するように前記コントローラを適合させるように構成される。
【００１５】
本発明のこれらおよび他の目的、特徴および利点は、添付の図面に示されるように、その詳細な説明から明らかになるであろう。
【図面の簡単な説明】
【００１６】
【図１】本発明の一実施形態による列および行を有するテーブルとしてのデータの概念的表現を概略的に示す。
【図２】本発明の一実施形態によるUIDを含む列を有する概念的なテーブルを概略的に示す。
【図３】本発明の一実施形態による固定乱数の生成を概略的に示す図である。
【図４】本発明の一実施形態による擬似乱数生成器を使用した固定的乱数生成を概略的に示す。
【図５】本発明の一実施形態によるメジアン統計処理のための回答摂動を概略的に示す。
【図６】本発明の一実施形態による最大統計処理のための回答摂動を概略的に示す。
【図７】本発明の一実施形態による合計統計処理のための回答摂動を概略的に示す。
【図８】本発明の一実施形態による攻撃コンポーネントの行調整を概略的に示す。
【発明を実施するための形態】
【００１７】
本発明は、非限定的な実施形態の以下の説明を添付の図面を参照して読むことにより、よりよく理解されるであろう。
以下では、本発明の例示的な実施形態を詳細に参照し、その例を添付の図面に示す。可能な限り、図面全体にわたって使用されている同じ参照符号は、同じかまたは同様の部分を示し、重複する説明は省略される。
【００１８】
本明細書で使用する「実質的に」、「一般に」および「約」という用語は、コンポーネントまたはアセンブリの機能的目的を達成するのに適した理想的な望ましい条件に対して、合理的に達成可能な製造およびアセンブリ公差内の条件を示す。
【００１９】
図1を参照すると、本発明の一実施形態は、記憶媒体、例えばデータベース/データストアに記憶されたデータを処理する。概念的には、実施形態では、データは、行120および列110として編成されたデータセル140からなるテーブル130である。物理的には、実施形態では、意味的にデータが行および列のテーブルとして参照される限り、データを行および列自体として格納する必要はない。実施形態では、各列は名前を有してもよく、各データセル（または単にセル）は数値、文字列、または他の任意のデータタイプであってもよい。
【００２０】
実施形態では、概念テーブル（conceptual table）は、本発明によって保護されるエンティティを識別する列を有することができる。エンティティは通常、人であるが、例えば、スマートフォンまたは車のような個人が使用するデバイス、またはプライバシーを保護すべき他のエンティティであってもよい。図2を参照すると、本明細書は、これらのエンティティをユーザと呼称し、列をUID列230と呼称し、セル値210および220をUIDと呼称する。テーブル内の各ユーザは、たとえば文字列または数字であってもよい一意のUID210および220を有し得る。実施形態では、任意の所与の行のセルは、その行のUIDによって識別されるユーザに関する情報を含む。同じUIDは、複数の行に現れてもよく、例えば図2のユーザ2  220である。
【００２１】
本発明の実施形態は、本明細書では、「クローク（cloak）」、例えば、少なくとも1つのプロセッサおよびメモリデバイスを有するコンピュータと呼称され、本明細書で開示される方法のうちの1つまたは複数を実行するように動作する。クロークを具体化するソフトウェアは、例えばデータストア/データベースを具体化するソフトウェアに統合することができる。あるいは、クロークを具体化するソフトウェアは、スタンドアロン（stand alone）であってもよく、明確に定義された標準インターフェースを介してデータストアと対話してもよい。後者の場合、クローク・ソフトウェアを実行するハードウェアは、データストアソフトウェアを実行するハードウェアと同じであってもよく、または別個のマシンであってもよい。
【００２２】
統計分析のためのデータストア/データベースに対するクエリは、2つのステップからなるものとして特徴付けることができる。ステップ1は、すべての行と列から行と列の一部分を選択する。ステップ2は、選択された行のうちの1つまたは複数の列からのセルに対する統計処理を計算する。一般的な統計処理には、count（行数をカウントする）、count distinct（別個のセル値の数をカウントする）、avg（セル値の平均を計算する）、std-dev（セル値の標準偏差を計算する）、sum、max（最大セル値の選択）、min、median、およびその他を含む。
【００２３】
実施形態では、第1のステップは、行ごとに（row-by-row basis）概念的に処理する。このような実施形態では、各行について、指定された列からのセルに対する比較処理が実行され、出力として処理ごとにブール値（Boolean）TRUEまたはFALSEを生成する。ブール論理（Boolean logic）を出力に適用して、行を選択するか（TRUE）、そうでないか（FALSE）を決定することができる。これらの種類の比較処理（comparison operators）とブール論理は、例えば、ＳＱＬのWHERE句とHAVING句（WHERE and HAVING clauses）の中で見つけることができる（他の句の中でも）。 規約として、本明細書のSQL  WHERE句を使用する例は、任意のクエリ言語に対するこの行選択プロセスの例示であり、SQLに限定されないことを理解すべきである。
【００２４】
この一例は、[WHERE（age> 20）AND（gender = 'male'）]である。ここでは、年齢と性別が列名である。第１の比較処理は、数値タイプで実行される「より大きい（greater than）」であり、第2の比較処理は、文字列で実行される「等しい（equal to）」である。2つの比較によって生成された2つのブール値は、ブール「論理積」演算（Boolean ‘AND’ operation）される。結果がTRUEの場合、行が選択される。それ以外の場合、行は選択されない。一般的な比較演算子は、
【００２５】
【数１】
0006462764.tif 000002
を含む。一般的なブール演算子は、AND、OR、およびNOTを含む。
【００２６】
同様に、クロークにおける匿名化（anonymization）のための2つの主なステップが存在し得る。例えば、実施形態では、第1のステップにおいて、他の方法でクエリによって要求される行のセットに行が追加されるか、または削除される。これは行調整（row adjustment）と呼称される。実施形態では、第2のステップにおいて、統計処理は、いくつかの摂動（perturbation）を適用する。これは回答摂動（answer perturbation）と呼称される。
【００２７】
理解されるように、行調整および回答摂動の両方における特定の動作は、疑似乱数を必要とする。分析者（analyst）が信頼性の高いデータに関する具体的な事実を確立するのを防ぐためには、一般にランダム性が必要である。この擬似乱数は、ある分布およびそれに関連するパラメータ、例えばパラメータ平均および標準分布を有するガウス分布から得られる。
【００２８】
クロークの実施形態における匿名化は、固定ランダム（fixed-random）と呼ばれる特別な種類の疑似乱数生成を使用する。固定乱数（fixed-random number）は、典型的には、別個の幾つかのセットのUIDを含む幾つかのセットの行のコンテキストで生成される。図3を参照すると、実施形態では、固定乱数のキープロパティ（key property）は、選択された数が別個のセットのUIDs250（UIDセット）に基づくものである。言い換えれば、実施形態では、所与の分布パラメータ260のセットおよび所与のUIDセット250を有する所与の分布は、常に同じ擬似乱数270を生成する。固定ランダム性は、典型的には、分析者が、同じ回答を繰り返し、繰り返し値の平均を取って不確実性を効果的に除去することで回答からランダム性を自明に取り除くことを防止することができる。
【００２９】
図4を参照すると、一実施形態では、固定乱数は、UIDセット330から導出されたシード（seed）320をコンピュータの擬似乱数生成器310にシードすることによって生成される。例えば、UIDセット330からの各ＵＩＤはハッシュされてもよく（340）、ハッシュされたUIDは排他的論理和（350）をとってシード320を生成してもよい。各ハッシュ340は、分析者がUID値の知識に基づいて擬似乱数を予測することを防止するために、分析者に知られていないノンス（nonce）でソルトされる（salted）。
【００３０】
一実施形態では、固定乱数は、ガウス分布から取得される。他の分布も使用され得る。
いくつかの実施形態では、クローク内の固定乱数の2つの共通の使用法がある。1つは固定ノイズで、もう1つは固定閾値である。
【００３１】
固定ノイズとは、正確な解を不明確にするために数値回答にノイズを加えるメカニズムを指す。一実施形態では、固定ノイズは、ゼロの平均を有する固定乱数である。ゼロ平均を使用することは、回答の期待値は真の回答と等しくなり、重要な統計的特性である。非ガウス分布を使用することもできる。原理的には、他の手段を用いることもできる。
【００３２】
ある閾値に基づいて決定を行う必要がある場合、固定閾値はクロークで用いられ得る。例えば、クロークが、K人の別々のユーザが回答に寄与することを必要とする場合、Kは常に正確にKではなく固定閾値（すなわち、固定ランダム値に基づく）である。一実施形態では、固定閾値が、Ｋの平均を有する固定乱数である。固定乱数がガウス分布から取得されると仮定すると、標準偏差は、ゼロ以下の値が極めて無さそうに選択される。例えば、標準偏差はK/4以下として選択され得る。 一実施形態では、確かな下限（hard lower bound）が固定閾値に設定される。例えば、固定乱数が1未満である場合でも、固定閾値は決して1未満であってはならない。
【００３３】
ここで、回答摂動について説明する。実施形態では、回答摂動を行う統計処理への入力は、テーブル（具体的には、行調整から得られるテーブル）であってもよい。テーブルは、少なくともUID列を含む。テーブルには他の列も含めることができる。実施形態では、各統計処理（カウント、合計、平均など）について、回答摂動のための様々な可能な方法が存在し得る。したがって、そのような実施形態では、可能な方法は、以下の3つの特性を有する。まず、分析者が処理出力からデータベース内の個人について何かを推測することは不可能または極めて不可能でなければならない。第2に、処理は、同じ出力を生成するUIDを含む同じ入力パラメータを用いた処理の繰り返し実行において固定される。第3に、処理によって生成されるいくつかの回答は、ある固定数のユーザのセル値に基づいていなければならない。これら3つの特性を有する任意の統計処理は、クロークにおける回答摂動の実施形態において使用されてもよい。
【００３４】
上記した3つの特性を有する統計処理の例示的な実施形態について説明する。統計処理は、2つのタイプに分類され得る。1つのタイプでは、処理の出力は、特定のセル値である。これは、単一行統計出力（single-row statistical output）と呼称される。例には、最小、最大、および中央値が含まれる。匿名化がない場合、これらの統計処理のそれぞれは、単一のセルの正確な値を生成する。もう1つのタイプでは、処理の出力は複数の入力セルの合成である。これは、複数行統計出力（multi-row statistical output）と呼称される。複数行統計出力の例は、count、sum、avg、およびstd-devを含む。出力は、通常は単一のセル値ではなく、すべてのセル値から取得された値である。
【００３５】
単一行統計出力の場合、実施形態では、クロークは、その値を共有するいくつかの他のセルがある場合にのみ、回答摂動関数の出力が真のセル値であることを保証する。その値を共有する十分な他のセルがない場合、回答摂動関数の出力は、いくつかの他のセルの合成となる。
【００３６】
一実施形態では、他のセルの数は固定閾値である。
図5を参照すると、統計処理の中央値（median）に対する回答摂動の例示的な実施形態では、真の中央値のユーザが、UID列および中央値が計算される列（中央値の列）を含むテーブル380からステップ358において計算される。固定閾値Tは、ステップ355においてテーブルのUIDセットから計算される。中央値の列からのユーザのオーダー（ordering）では、中央値よりも上または下の「T」人の別々のユーザがステップ365において選択される。ステップ370において、選択されたユーザと中央値のユーザが平均化される。この平均は、ステップ375において概数化されて（rounded）回答を生成する。
【００３７】
この実施形態は、回答摂動の3つの原理を説明する。まず、固定処理であり、同じ入力テーブルが、同じ回答を生成する。ステップ365において選択されたユーザがすべて同じ値を有する場合、回答は、適切な数のユーザ（2T+1）によって共有される。ステップ365において選択されたユーザがすべて同じ値を有していない場合、回答は、ユーザ数からなる合成（composite）である。いずれにしても、回答は、固定閾値数のユーザに基づいている。最後に、分析者が個々のユーザについて何かを推測することはほとんどない。このことは、１つには複数のユーザが回答に貢献したという理由であり、１つには固定閾値によって分析者がどれくらい多くのユーザが貢献したかを知ることが難しいという理由であり、また一つには概数化（rounding）によって、どの値が平均に寄与したのかを判断することが困難であるという理由である。
【００３８】
図6を参照すると、回答摂動を伴う統計処理maxの実施形態は、中央値演算の実施形態と同様である。主な違いは、非常に高い値の閾値T1が無視されることである（ステップ385,390および395）。このことは、高い外れ値（outlying value）によって計算された平均値が偏り（skew）、真の最大ユーザに関する情報が明らかになる状況を防止することができる。
【００３９】
図7を参照すると、合計に対する回答摂動を伴う複数行の統計処理が示されている。ここでは、すべての値は正であると仮定される。第1のステップ435では、個々のユーザの合計が計算され、ユーザごとに潜在的に複数の行の代わりに、そのユーザの合計を含むユーザごとに1つの行が存在する修正されたテーブル430が作成される。この修正されたテーブルから処理して、ステップ385,390、および395において最高値を有する2つのユーザグループが選択され、ステップ400で第2のグループの平均が計算される。これらは、max演算で実行された同じ手順に類似している。ステップ410において、第1のグループの値は、第2のグループから得られた平均値に置き換えられる。これにより、これらのユーザから何か寄与しながら、最高値のユーザの影響が排除される。ステップ415および420において、テーブル内の全セルにおける合計および平均が計算される。ステップ425は、ノイズの標準偏差としてステップ420で計算された平均値を使用して、元のテーブルのUIDセットに基づいて固定ノイズを生成する。最後に、ステップ430で、そのノイズを合計に加算して回答を生成する。
【００４０】
正と負の値がある場合、図7の処理は、正の数に対して1回および負の数の絶対値に対して1回、つまり2回実行する。最終的な回答は、前者から後者を差し引いたものとなる。
実施形態では、回答摂動の3つの原理が満たされる。理解されるように、実施形態では、固定処理（fixed operation）である。したがって、実施形態では、すべての中間値は、T1およびT2の最高値のユーザ（400および410）またはユーザの完全な集合（415および420）である１組のユーザに基づく。したがって、さらに理解されるように、実施形態では、外れ値の影響を除去すること、および任意のユーザの平均寄与に比例するノイズを追加することによって、個々のユーザについて何かが推測される可能性は非常に低い。
【００４１】
さらに、実施形態では、カウント統計処理は、個々のユーザごとの値の合計を計算する（ステップ435）ことを除いて、非常に似ており、個々のユーザ当たりの行数が代わりに用いられる。
【００４２】
中央値、最大値、最小値、合計値、およびカウント値の演算の実施形態は例示的なものであり、ここでは固定処理、一組のユーザからの回答の導出、および個々のユーザに関する情報がその回答から推測される可能性を非常に低下させる原理を説明するために用いられる。これらのおよび他の統計処理のための同じ原理を有する多くの他の特定の実施形態は、当業者には明らかであるべきである。
【００４３】
記載された回答摂動法は、単一の回答に関して強い匿名性を提供するか、または同じ回答が繰り返される。しかし、一対の回答の違いを比較することに関して強い匿名性を提供することはできない。これは、固定処理原理の逆によるものであり、同じデータベースの同じ列に対して同じ統計処理を使用する2つのクエリが異なる回答を生成する場合、2つのクエリのUIDセットが異ならなければならない。この事実は、分析者が個々のユーザについて何かを発見するために活用され得る。
【００４４】
一例として、任意のユーザ、被害者が所与の属性を有するかどうか、例えば被害者がエイズ（AIDS）と診断されたか否かを発見することを分析者が希望する場合を考える。分析者が2つのクエリを生成すると想定される。1番目のクエリは、（被害者にエイズがあるかどうかに関係なく）エイズを持つが被害者を明示的に除外するすべてのユーザを含む。2番目のクエリは、AIDSを持つすべてのユーザを含む。被害者にエイズがあれば、2番目のクエリの回答に含まれるが、1番目の質問の回答には含まれない。したがって、2つの回答が異なる場合、分析者は、被害者がAIDSと診断されたと自信を持って結論づけることができる。
【００４５】
この種の攻撃は差分攻撃（difference attack）と呼ばれる。行調整の目的は、差分攻撃から防御することである。
行調整の背後にある基本的な考え方は、攻撃ペア内の2つのクエリが、単一のユーザである被害者によって異なる必要があるという発見から導かれる。このことを考慮して、行調整は、特定のクエリの修正を積極的に検査して、その修正によって元のクエリの回答と変更されたクエリの回答との間に小さな差が生じるかどうかを確認する。差が小さい場合、差異を構成する行は、元のクエリと修正されたクエリとの間の差異を除去するように調整される。
【００４６】
例えば、クエリが比較[(disease = ‘AIDS’) AND (job_title ≠ ‘CEO’)]をチェックすると仮定する。このクエリの修正は、クエリからの比較（disease = AIDS）を除去することになる。大部分の人々はエイズと診断されていないため、修正されたテーブルに含まれることになるので、極めて異なるテーブルとなる。したがって、実施形態では、クロークは、この修正されたクエリおよび元のクエリが差分攻撃を構成しないと結論づけることができる。もう1つの修正は、クエリから比較（job_title≠ 'CEO'）を削除することである。CEOが1人しかいないと仮定すると、この修正により、（CEOがAIDSを持っていないか、またはAIDSを持っているかによって）ゼロ人または１人のいずれかのユーザだけ異なるテーブルが作成され得る。したがって、このような実施形態では、クロークは、修正されたクエリおよび元のクエリが差分攻撃を構成すると結論づけることができる。結果として、（job_title≠ 'CEO'）なしで生成されたテーブルに適合する（match）ように行を調整することができる。
【００４７】
これらのタイプの比較は、ここでは攻撃コンポーネントと呼ばれる。攻撃コンポーネントは、コンポーネントが分析者によって差分攻撃を行うために悪用される可能性がある妥当なリスクがあるクエリのコンポーネントである。調節可能であり且つ除去可能な2種類の攻撃コンポーネントがある。上記の例は、除去可能な攻撃コンポーネント（removable attack component）を使用しており、攻撃コンポーネントが削除されて、一対の攻撃クエリを形成する。調整可能な攻撃コンポーネントは、範囲のサイズまたはオフセットを調整することによって範囲から作成される。以下は、除去可能な攻撃コンポーネントによる差分攻撃に関するものである。その後、調整可能な攻撃コンポーネントについて説明する。
【００４８】
図8は、除去可能な攻撃コンポーネントを用いた行調整の実施形態を示す。この処理は、データストアから行および列350を選択するためにクロークによって使用されるクエリ360を入力として受け取る。クエリ360を、例えば分析者またはアプリケーションから受け取ることができる。この処理は、次に、修正されたクエリを生成し、修正されたクエリおよび元のクエリによって生成されたテーブル間の差が固定された閾値だけ異なるかどうかを調べるループを開始する。そのような修正の各々は、攻撃コンポーネントを除去し（ステップ440）、クエリ’と呼称される新しいクエリを生成することによって行われる。ステップ445では、クエリ’の行と列がデータストアから選択され、テーブル’と呼称される新しいテーブルが生成される。
【００４９】
ステップ450において、テーブルとテーブル’との間で異なる行が特定される。ステップ455において、これらの異なる行のUIDセットが決定される。固定閾値は、UIDセットに基づいて生成され、ステップ460では、UIDセット内のUIDの数が閾値と比較される。UIDの数が閾値よりも小さい場合、最終回答を生成するために使用されるクエリから除去されるように、ステップ465において攻撃コンポーネントにタグ付けされる。
【００５０】
ステップ470では、検査されるべき攻撃コンポーネントがさらにあるかどうかについての判定が行われる。そうでない場合、ループはステップ440に進む。さもなければ、ループは終了する。元のクエリが攻撃コンポーネントをまったく有していない場合、ループ（440,445,450,455,460、および465）は決して実行されないことに注意されたい。ループが終了すると、異なるUIDの数が閾値を下回るすべての攻撃コンポーネントにタグ付けされる。ステップ475において、クエリ’と呼称される最終クエリは、元のクエリからタグ付けされた攻撃コンポーネントのすべてを除去することによって生成される。テーブル’と呼称されるこのクエリから得られたテーブルは、ステップ480で生成され、ステップ485で元のクエリによって定義された統計処理への入力として使用される。
【００５１】
実施形態では、クロークは、（除去可能であるかまたは調整可能であるかにかかわらず）クエリ内の攻撃コンポーネントを識別することができる。これは、クエリ言語が、クロークが識別できる攻撃コンポーネントのみを含むように制約され得ることを意味する。例えば、実施形態では、クエリ言語は、可能性のあるすべての攻撃コンポーネントを効率的に識別することが技術水準を超えているので、完全に一般的なチューリング完全言語（Turing-complete language）ではない可能性がある。別の例として、実施形態では、ブール論理がAND、ORおよびNOTを用いるWHERE句またはHAVING句でのみ指定されるように、クエリ言語に利用可能な数学的演算は制限され得る。
【００５２】
一実施形態では、クロークは、受信したクエリを検査して、クロークがすべての攻撃コンポーネントを識別できるようにクエリが制約されていることを保証する。この検査に合格しないクエリは、クロークによって拒絶される。
【００５３】
クエリにおける全ての比較が必ずしも攻撃コンポーネントであるとは限らない。たとえば、SQLクエリは、両方のテーブルの社会保障番号が同じ場合など、いくつかの条件で2つのテーブルを結合する（JOIN）ことがある（tab1 JOIN tab2 WHERE tab1.ssn = tab2.ssn）。理解されるように、実施形態では、分析者がその比較を使用して単一のユーザが不在であることを処理することは、合理的な予期される状況下では不可能であると想定される。
【００５４】
当業者であれば、数字または文字列とセルの単独でされた比較が攻撃コンポーネントを構成するとは限らないことを認識するであろう。むしろ、特定の条件下では、攻撃コンポーネントを構成するそのような比較のセットであり得る。たとえば、[WHERE disease = ‘AIDS’ OR (name = ‘Paul’ AND date_of_birth = ‘1957-12-14’ AND zipcode = 48442)]を考慮する。この場合、差分攻撃のために論理積された（AND’d）比較のみが用いられ得る。むしろ、論理和（OR）と組み合わされた3つすべての論理積（AND'ing）が、攻撃コンポーネントに使用され得る。一実施形態では、論理和（OR）と結合されたとき、論理積された等価（AND’d equalities）のグループは、単一の攻撃コンポーネントを構成する。
【００５５】
一実施形態では、否定論理和（OR NOT）の等価のグループは、論理積（AND）と結合された場合に単一の攻撃コンポーネントを構成する。例えば、[WHERE disease = ‘AIDS’ AND (NOT name = ‘Paul’ OR NOT date_of_birth = ‘1957-12-14’ OR NOT zipcode = 48442)]では、個々の否定（NOT）の等価のどれも攻撃コンポーネントではなく、むしろ3つ全てを組み合わせたものである。
【００５６】
上記の例では、正確な一致またはその逆が、除去可能な攻撃コンポーネントの比較として用いられていた。当業者であれば、日付および時間を含む数字を扱う場合、範囲も同様に使用できることを認識するであろう。たとえば、範囲を使用する次の論理積された（AND’d）グループは、除去可能な攻撃コンポーネントである：[WHERE disease = ‘AIDS’ OR (name = ‘Paul’ AND date_of_birth > ‘1957-12-12’ AND date_of_birth < ‘1957-12-16’ AND zipcode > 48440 AND zipcode < 48444)]。
【００５７】
実施形態では、調整可能な攻撃コンポーネントは、被害者のみを含むかまたは被害者のみを排除する量だけ範囲を拡大または縮小することによって形成される。たとえば、分析者が、被害者が正確には135,225ドルの給与を有し且つその給与を有するデータストア内の唯一の人であることを知っている場合、分析者は、次のWHERE句[WHERE disease = ‘AIDS’ AND salary < 135225]および[WHERE disease = ‘AIDS’ AND salary < 135226]を有する2つのクエリを使用して差分攻撃を形成できる。ここでは、前者のWHERE句を有するクエリは被害者を除外し、後者のクエリは、AIDS診断を受けている場合に被害者を含むように調整される。
【００５８】
これに対して防御するために、クロークの実施形態は、スナップされたアライメント（snapped alignment）を使用する。ここでの基本的な考え方は、範囲は予め決定された（スナップされた）許容可能なアライメントに限定されることである。範囲のサイズと範囲のオフセットの両方がこのように制限される。スナップされたアラインメントの例は、範囲のサイズが2nおよび1/2nのうちの1つに制限され、オフセットがそれぞれ2nおよび1/2nの偶数倍（even multiple）に制限されるものであり、nは整数（0、1、2など）である。この定義で許容される範囲の例は、8-16、2-3、および100.5-100.75である。この定義で許容されない範囲は、2-5（サイズの範囲「３」は許されない）と9-17（サイズの範囲「８」は8の倍数に揃えなければならない）である。範囲を制限しながら柔軟性を追加するには、範囲の1/2のオフセットで任意の範囲のオフセットをシフトする機能が許容され得る。このことは、例えば、4〜12の範囲（「4」だけシフトされたサイズ「8」）を可能にするが、依然として9〜17ではない。
【００５９】
当業者であれば、スナップされたアライメントの多くの異なる定義が可能であることが分かるであろう。例えば、日時の場合、アライメントは、秒、分、時、日、月、年などの自然時間単位に従って行うことができる。または、このアライメントは、10進数ベース（decimal-based）で行うことができ、インスタンスサイズとオフセットを1x10n, 2x10n, 5x10nから設定され、ここで、nは正または負の整数である。
【００６０】
一実施形態では、クエリ自体が、スナップされたアライメントに適合しなければならない。不等号（inequality）は、範囲の上限と下限の両方を指定し、範囲はスナップされる。適合しないクエリは削除され得る。あるいは、範囲は、スナップされたアライメントに適合するようにクロークによって修正されてもよい。一実施形態では、クエリ自体は範囲の上限または下限のみを指定するが、両方を指定するものではない。範囲の不特定の端は、暗黙的にプラスまたはマイナスの無限大とみなされる。無限は有効なスナップされたアライメントではないので、実施形態では、クロークは、範囲の不特定の端の適切な値を決定し、それに応じてスナップされたアライメントを設定することができる。一実施形態では、クロークは、回答摂動を伴う最小または最大の統計処理として範囲の不特定の端を設定する。
【００６１】
スナップされたアライメントは、範囲のアライメントに基づいてほとんどの差分攻撃の可能性を排除するが、全てを排除することはできない。たとえば、最高賃金の従業員が1,750,000ドルの給与を有し、次に高い給与従業員が1,150,000の給与を有するケースを想定する。ここでは、上記の１０進数ベースのスナップされたアライメントを想定して、分析者は、[WHERE disease = ‘AIDS’ AND salary >= 1000000 AND salary < 2000000]および[WHERE disease = ‘AIDS’ AND salary >= 1000000 AND salary < 1500000]という２つのWHERE句を有する差分攻撃を使用して最高賃金の従業員を攻撃する。後者のクエリは、最高賃金の従業員を除外し、前者のクエリは、エイズである場合にその従業員も含まれる。ただし、両方のクエリは、スナップされたアライメントを有する。
【００６２】
これに対して防御するために、クロークの実施形態は、シュリンク・アンド・ドロップ（shrink-and-drop）と呼ばれる行調整の形態を用いる。基本的な概念は、クロークが、囲まれた比較的小さいスナップされた範囲（enclosed smaller snapped ranges）をチェックして、比較的小さいスナップされた範囲を使用したクエリに対する回答が、元のクエリの回答とわずかだけ異なるかどうかを確認することである。この概念は、図8で説明した行調整の概念に似ている。この差異は、図８では、攻撃コンポーネントを削除して潜在的な攻撃クエリ（potential attack queries）が生成されるのに対し、シュリンク・アンド・ドロップでは、範囲を縮小することによって潜在的な攻撃クエリが生成される。
【００６３】
具体的には、実施形態では、元の範囲（元のクエリの範囲）の各々に対して、最大の重なりから最小の重なりの順番に元の範囲と重なる一連の部分範囲（a series of sub-ranges）を定義することができる。次に、クロークは、図8のループを使用して順番に連続した各部分範囲を検査することができるが、攻撃コンポーネントを除去する代わりに元の範囲を部分範囲に置き換える（すなわち、ステップ440）。行の差（row difference）の結果のUIDセットが固定閾値を下回らない場合（ステップ460）、より小さい部分範囲もまた固定閾値を下回らないので、より小さい重複部分範囲をさらに検査する必要はない。検査する部分範囲がなくなると、元のクエリは、閾値以下の差（below-threshold difference）を有する最小の部分範囲となるように変更される。すべての部分範囲が閾値以下の差を有する場合、範囲全体が、修正されたクエリから削除され得る。
【００６４】
例えば、最高賃金の従業員（被害者）が1,750,000ドルの給与を有し、その次に高い賃金の従業員が1,150,000ドルの給与を有し、1,000,000ドルと1,150,000ドルの間の給与を有する相当数の従業員がいると仮定する。１０進数ベースのスナップされたアライメント（すなわち、1x10n, 2x10n, 5x10n）を仮定する。元のクエリは、1,000,000〜2,000,000ドルの範囲を含む。クロークは、最初に1,500,000〜2,000,000ドルの部分範囲を検査する。2つのクエリの間の差は、1,000,000〜1,500,000ドルの範囲の相当数の従業員を含むため、この差は固定閾値を下回っていない。この部分範囲は固定閾値を下回らないので、クロークは、1,500,000〜2,000,000ドルの部分範囲内でさらに小さな部分範囲を試す必要はない。
【００６５】
次に、クロークは、1,000,000〜1,500,000ドルの部分範囲を検査する。1,500,000〜2,000,000ドルの範囲内に従業員が1人しかないため、元のクエリとこのクエリとの行の差は固定閾値を下回る。結果として、クロークはさらに小さな部分範囲、今度は1,000,000〜1,200,000ドルの部分範囲を検査する。これがまた固定閾値を下回っているので、クロークは1,000,000〜1,100,000ドルの部分範囲を試みるかもしれない。これが固定閾値を下回らないと仮定すると、クロークは、これまで閾値を下回った最小の部分範囲として、1,000,000〜1,200,000ドルの部分範囲をタグ付けする。また、クロークは1,200,000〜1,400,000ドルと1,400,000〜1,500,000ドルの範囲を試みることもでき、これらは有効なスナップされたアライメントでもある。これらはいずれも固定閾値を下回らない。したがって、クロークは、1,000,000〜2,000,000ドルの元の範囲を1,000,000〜1,200,000ドルに変更することができる。
【００６６】
この例が、1,000,000〜1,150,000ドルの範囲に相当数の従業員がいないように変更された場合、クロークによって検査された最初の2つの部分範囲である1,000,000〜1,500,000ドルと1,500,000〜2,000,000ドルは、両方とも固定閾値を下回るので、クロークはクエリから元の範囲を完全に削除し得る。
【００６７】
当業者であれば、図8の処理、（除去可能な攻撃コンポーネントのために）シュリンク・アンド・ドロップであるかまたは（調整可能な攻撃コンポーネントのために）シュリンク・アンド・ドロップを適用するように変更されるような両方が記述的（descriptive）であり規範的（prescriptive）ではないことを認識するであろう。換言すれば、結果が同じである限り、図8の正確なステップに従わない処理を具体化する多くの方法が存在し得る。たとえば、クロークは、チェックされた攻撃コンポーネントごとに、データストアから行と列を1回で選択しない。むしろ、クロークは、すべての必要な行と列を1回のアクセスですべて選択し、一種のスーパーテーブル（super-table）を構築することができる。同様に、各攻撃コンポーネントに対する別個の処理における行の差を決定するのではなく、クロークは、このスーパーテーブルを一度スキャンして、すべての攻撃コンポーネントの行の差を並行してチェックすることができる。
【００６８】
スナップされたアライメントの制限は、所与のスナップされ調整された範囲（snapped-aligned range）が元のクエリに記載された範囲と大きく異なることである。一実施形態では、クロークは、元の範囲を、複数の論理和されスナップされ調整された範囲（multiple OR’d snapped-aligned ranges）と一致またはほぼ一致させることによって、元のクエリの範囲を修正する。ここでは、スナップされ調整された範囲でシュリンク・アンド・ドロップが実行される。
【００６９】
例えば、元のクエリが[WHERE col >= 17 AND col < 31]で範囲を指定したとする。１０進数ベースのスナップされたアラインメント（すなわち、1x10n, 2x10n, 5x10n）を仮定すると、WHERE句は、[WHERE (col >= 17 AND col < 18) OR (col >= 18 AND col < 20) OR (col >= 20 AND col < 30) OR (col >= 30 AND col < 31)]である元の範囲に一致するスナップされ調整された範囲のセットで構成される。シュリンク・アンド・ドロップは、4つの論理和されスナップされ調整された範囲のそれぞれで実行される。
【００７０】
ここまでは、任意の所与のクエリが単一の回答を生成するようにクエリが説明されている。すなわち、クエリが行を選択して単一のテーブルを生成し、このテーブルは回答摂動を伴う統計処理を実行される。しかし、多くのクエリ言語では、何らかの方法で行をグループ化することができ、その方法は、そのような各グループに適用される統計的処理を有する。たとえば、SQLでは、これはGROUP BY句で行われる。この例は、[SELECT age, count(*) FROM table GROUP BY age]である。このクエリは、各年齢別に行数のカウントをそれぞれ報告する。
【００７１】
実施形態では、そのようなグループ分けの各々は、クロークの回答摂動機能によって別個のテーブルのように扱われてもよい。言い換えれば、図5、図6、および図7のテーブル380は、各グループのテーブル380であると理解される。グループ化すると、セル自体の値が報告される（上記の例では、年齢）。これにより、セルの値自体が単一のユーザの機密情報である可能性があるため、プライバシーの問題が発生する可能性がある。これに対して保護するために、セル値のグループ化のUIDセット内のUIDの数が固定閾値を下回ったときに、クロークの実施形態はセル値の出力を抑制する。固定閾値は、グループのテーブルのUIDセットに基づいている。この処理は、グループ化機能の結果だけでなく、回答摂動を伴う統計処理に対する任意のテーブル入力に適用される。
【００７２】
グループ化は、特定のセル値ではなく、セル値の範囲に基づくことができる。たとえば、次のSQLクエリは、0〜9,10〜19などのグループが作成され、[SELECT floor(age/10)*10 AS age_group, count(*) FROM table GROUP BY age_group]である。一実施形態では、クロークは、そのような範囲のグループ分けが、スナップされたアライメントを順守していることを保証する。範囲のグループ化がスナップされたアライメントを順守していないクエリは削除される。あるいは、範囲のグループ化を変更して、同様なスナップされたアライメントに順守させることができる。
【００７３】
最後に、本明細書に開示されたクロークおよび/または他のコンピューティングデバイスは、必要な電子機器、ソフトウェア、メモリ、ストレージ、データベース、ファームウェア、ロジック/ステートマシン、マイクロプロセッサ、通信リンク、ディスプレイまたは他の視覚または音声ユーザインターフェース、印刷装置、および本明細書に記載された機能を実行し、および/または本明細書に記載の効果を達成するための他の任意の入出力インターフェースを含む。例えば、クロークは、少なくとも1つのプロセッサと、ランダムアクセスメモリ（RAM）およびリードオンリーメモリ（ROM）を含み得るシステムメモリ/データ記憶構造とを有するコントローラを含み得る。少なくとも1つのプロセッサは、1つまたは複数の従来のマイクロプロセッサと、数値演算コプロセッサなどの1つまたは複数の補助コプロセッサ（supplementary co-processor）とを含むことができる。本明細書で説明されたデータ記憶構造は、磁気、光学および/または半導体メモリの適切な組み合わせを含み、例えばRAM、ROM、フラッシュドライブ、コンパクトディスクなどの光ディスク、および/またはハードディスクまたはドライブを含み得る。
【００７４】
さらに、本明細書に開示された方法を実行するように少なくとも1つのプロセッサを適合させるソフトウェアアプリケーションは、コンピュータ可読媒体から少なくとも1つのプロセッサのメインメモリに読み込まれてもよい。本明細書で使用される「コンピュータ可読媒体」という用語は、実行のために少なくとも1つのプロセッサ（または本明細書に記載のデバイスの任意の他のプロセッサ）に命令を提供することを提供または関与する任意の媒体を指す。そのような媒体は、不揮発性媒体および揮発性媒体を含むが、これに限定されない多くの形態をとり得る。不揮発性媒体には、例えば、メモリなどの光学ディスク、磁気ディスク、光磁気ディスクなどがある。揮発性媒体は、典型的にはメインメモリを構成するダイナミックランダムアクセスメモリ（DRAM）を含む。コンピュータ可読媒体の一般的な形態は、例えば、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、任意の他の磁気媒体、CD-ROM、DVD、任意の他の光媒体、RAM、PROM、EPROMまたはEEPROM（電子的に消去可能なプログラム可能な読み出し専用メモリ）、FLASH-EEPROM、任意の他のメモリチップまたはカートリッジ、またはコンピュータが読み取ることができる他の任意の媒体を含む。
【００７５】
実施形態では、ソフトウェアアプリケーションにおける一連の命令の実行により、少なくとも1つのプロセッサによって本明細書で説明される方法/プロセスを実行させているが、ハード・ワイヤード回路（hard-wired circuitry）は、本発明の方法/プロセスの具体化のため、ソフトウェア命令の代わりにまたはそれと組み合わせて用いられ得る。したがって、本発明の実施形態は、ハードウェアおよび/またはソフトウェアの特定の組み合わせに限定されない。
【００７６】
本発明は、その詳細な実施形態に関して示され、説明されたが、当業者であれば、本発明の範囲から逸脱することなく、様々な変更を行うことができ、その要素に等価物を代用することができることを理解されたい。さらに、本発明の本質的な範囲から逸脱することなく、特定の状況または材料を本発明の教示に適合させるために改変を行うことができる。したがって、本発明は、上記の詳細な説明に開示された特定の実施形態に限定されず、本発明は、本開示の範囲内にあるすべての実施形態を含むことが意図される。
【００７７】
上記の説明は例示的なものであり、限定的なものではないことが意図されていることはさらに理解されるべきである。例えば、上記の実施形態（および/またはその態様）は、互いに組み合わせて使用されてもよい。さらに、本発明の範囲から逸脱することなく、特定の状況または材料を本発明の教示に適合させるために、多くの改変を行うことができる。
【００７８】
さらに、本明細書に記載された材料の寸法およびタイプは、本発明のパラメータを定義することを意図しているが、決して限定的ではなく例示的な実施形態である。多くの他の実施形態は、上記の説明を検討すると当業者には明らかであろう。したがって、本発明の範囲は、添付の特許請求の範囲を参照して、そのような特許請求の範囲が権利を与えられる等価物の全範囲とともに決定されるべきである。添付の特許請求の範囲において、「含む（including）」および「その中で（in which）」という用語は、それぞれの用語「備える（comprising）」および「そこで（wherein）」の平易な英語の等価物として用いられる。さらに、添付の特許請求の範囲において、「第1」、「第2」、「第3」、「上方」、「下方」、「底部」、「上部」などの用語は単に名称として用いられ、その対象に数値的または定位置的な要件を課すことを意図していない。さらに、以下の特許請求の範囲の限定はミーンズ・プラス・ファンクションで記載されておらず、ミーンズ・プラス・ファンクションは、そのような特許請求の範囲が明示的に「手段（means for）」の句を使用し、それに続く機能の記載がない限り、解釈されることを意図するものではない。
【００７９】
この記述された説明は例を用いてベストモードを含む本発明のいくつかの実施形態を開示し、当業者によって任意のデバイスまたはシステムの作成および使用および組み込まれた方法の実行を含む本発明の実施形態を具体化させる。本発明の特許可能な範囲は、特許請求の範囲によって規定され、当業者に思い付く他の例を含むことができる。そのような他の例は、特許請求の範囲の文字通りの言葉と異ならない構造的要素を有する場合、または特許請求の範囲の文字通りの言葉とは実質的に異なる等価の構造要素を含む場合に特許請求の範囲内であることを意図する。
【００８０】
本明細書で使用されるように、単数で記載されるかまたは単語「a」または「an」が続く要素またはステップは、そのような除外が明示的に述べられていない限り、複数の要素またはステップを除外しないものとして理解されるべきである。さらに、本発明の「一実施形態」への言及は、記載された特徴をも組み込む追加の実施形態の存在を排除するものとして解釈されることを意図しない。さらに、明示的に反対の記載がない限り、特定の特性を有する要素または複数の要素を「備える」、「含む」または「有する」実施形態は、その特性を持たない追加の要素を含むことができる。
【００８１】
本発明の精神および範囲から逸脱することなく、上述した発明にある変更を加えることができるので、添付の図面に示された上記説明の主題の全てが、単に本発明の概念を説明するための例として解釈され、本発明を限定するものではないことが意図される。
【図１】
0006462764.tif 000003
【図２】
0006462764.tif 000004
【図３】
0006462764.tif 000005
【図４】
0006462764.tif 000006
【図５】
0006462764.tif 000007
【図６】
0006462764.tif 000008
【図７】
0006462764.tif 000009
【図８】
0006462764.tif 000010