(57)【要約】      （修正有）【課題】データベースシステムのための匿名化方法を提供する。【解決手段】元のクエリを受け取り、そのクエリ内にある１つ以上の攻撃コンポーネントを識別し、１つ以上の攻撃コンポーネントから１つ以上のノイズ要素を算出し、１つ以上のノイズ要素から固定ノイズまたは固定閾値を算出する。【選択図】図３
2019032814.tif 000002
【特許請求の範囲】
【請求項１】
データベースシステムのための匿名化方法であって、
元のクエリを受け取り、
前記元のクエリ内にある１つ以上の攻撃コンポーネントを識別し、
前記元のクエリへの回答内にある別個のユーザＩＤと、１つ以上の修正クエリの各々への回答内にある別個のユーザＩＤとの間の差を判定し、前記修正クエリの各々は、前記識別された１つ以上の攻撃コンポーネントのうちの少なくとも１つが削除されており、
前記差が閾値よりも小さい場合、前記元のクエリの前記回答が前記修正クエリの前記回答に一致するように、前記元のクエリへの前記回答に行を追加し、または、前記元のクエリへの前記回答から行を削除する、匿名化方法。
【発明の詳細な説明】
【発明の詳細な説明】
【０００１】
［関連出願の説明］
本願は、２０１７年１０月１３日に出願された米国特許出願第１５／７８３，３０６号、及び２０１７年５月１０日に出願された欧州特許出願第１７１７０５０５．６号に基づく優先権及び利益を主張するものであり、前記の両出願の詳細は、全体を参照することにより本明細書に組み込まれる。
［技術分野］
本発明はデータ解析のための統計的方法に関し、より詳細には、データベースクエリから作成された応答の匿名化に関する。
［背景技術］
分析者が、ユーザ情報を含むデータベースから統計データを、データベース内の個々のユーザについて何も知ることなく取得できることが所望されることが多い。データベースから名前や識別番号を単純に削除することは、個々のプライバシーの喪失の防止に効果的ではない。例えば、分析者がデータベース内のある個人（被害者）の生年月日、性別、及び郵便番号を知っているならば、多くの場合はこれだけで被害者を一意に識別するのに十分な情報である。よって、分析者は、この情報と、分析者が被害者について知りたいと思ういくつかの機密情報とを特定するクエリを作成し、その回答を取得することができる。例えば、「１９５７年１２月１４日に生まれた、郵便番号６７６６３のすべての男性の給与の合計額は？」というクエリである。このような人が１人だけの場合、給与の合計はその人の給料になる。
【０００２】
このことに対する初期の従来技術における防御メカニズムは、回答に示される個人が少なくともＫ人存在しない限り、単純に回答を提供しないというものであった。しかし、この防御策は多くの場合簡単に回避されてしまう。例えば、分析者は、１）「すべての男性の給与の合計額は？」、及び２）「１９５７年１２月１４日生まれではなく、郵便番号６７６６３でもないすべての男性の給料の合計額は？」という２つのクエリを生成する。最初のクエリにはすべての男性が含まれるが、２番目のクエリには被害者以外のすべての男性が含まれる。最初の合計から２番目の合計を差し引くことにより、被害者の給与を算出することができる。
【０００３】
他の従来技術は、データベース自体のデータを修正することによってこの問題に対処する。１つの対処法として、データベース内の数値にノイズを加える。別の対処法として、ユーザ間で特定のフィールドを交換する。さらに別の対処法はＫ匿名化と称されるもので、データベースの各ユーザが（Ｋ−１）人の他のユーザと同一に見えるようにして、データ値の正確性を排除する。これらの対処法及びその変形は、強力な匿名性が得られるが、データそのものの実用性を消失させることも多い。さらに、これらの対処法は構成が複雑であるので、匿名性の強力さを弱めるエラーをもたらすことも多い。
【０００４】
別の従来技術における対処法「差分プライバシー」は、データベースからのクエリへの応答が、数値による回答の形式をとり、その数値回答にランダムノイズが加えられるという、匿名化の方法である。この「ノイズのある数値回答」とは、数値回答にランダムノイズを加えることで生成された数を指す。
【０００５】
この動作方法の例として、「男性であり、１９５７年１２月１４日生まれであり、郵便番号が６７６６３であり、給与が９万ドルから１０万ドルの範囲であるユーザは何人？」というクエリを想定する。真の数値回答は、ユーザー（このクエリの被害者）の給与が当該範囲かどうかによって、１または０になる。正規分布であって標準偏差が「５」であるランダムノイズを加えると仮定すると、次にその回答は「６」や負の「８」となるであろう。分析者にとっては、被害者の給与額がその範囲かどうかは分からないので、被害者のプライバシーは保護されると考えられる。一方、クエリが「郵便番号が６７６６３である男性のうち、給与が９万ドルから１０万ドルの範囲である男性は何人？」であると想定すると、真の数値回答が５１３であれば、ノイズのある数値回答は例えば５１０や５１８となると考えられる。結果として、分析者はかなり正確な答えを得る。このようにして、差分プライバシー方式は、プライバシーと正確性の両方を提供することができる。
【０００６】
問題は、分析者がクエリを繰り返すことを許可されたときに生じる。最初のクエリを想定すると、ノイズのある数値解答はそれぞれ、０または１のどちらかの期待値を有するランダム分布から得られる。このようなノイズ解答が十分にあれば、分析者は平均を取り、真の解答であると強く確信することができる。
【０００７】
この問題に対する一般的に知られている解決策は、分析者が差分プライバシーデータベースにクエリを実行してもよい回数を制限することである。しかし、例えばデータベースの内容が絶えず変化する結果として、同一クエリが異なる時間で異なる結果を生成する可能性があるような場合には、同一のクエリを繰り返すことが有用かつ重要であり得るので、上記解決策は実用的ではない。
【０００８】
したがって、演算及び記憶の点においてより効率的であり、かつ、条件または逆条件からなる対に対する匿名性を保護する匿名化方法及びシステムが必要とされている。
［発明の概要］
本発明の各態様は、入力がクエリ、出力が攪乱された統計に基づく回答であって、行及び列からなるテーブルを要求することによってデータストアと情報をやりとりする、匿名化モジュールを有するシステム、及び／または匿名化モジュールを用いた方法を提供する。ある実施形態において、モジュールは、テーブル内の行に影響を及ぼし得るクエリ内の攻撃コンポーネントを識別し、ノイズ要素を加えて、この攻撃コンポーネントの小さな影響を隠す。よって、モジュールは、クエリ間の差を用いて個々のユーザの情報を推論する攻撃に対する防御を行う。
【０００９】
ある実施形態において、モジュールは、統計に基づく回答を攪乱し、単一の回答、または単一の回答の繰り返しのインスタンスのいずれかから、個々のユーザの情報を推論することをほぼ不可能とする。これは、平均値と、遠く外れたユーザ値の両方の影響を隠すのに十分なノイズを加えて、その出力をユーザのグループから確実に導出することによって行われる。
【００１０】
ある実施形態において、モジュールは、ノイズを加えるため、かつ、ノイズ閾値を設定するために１つにまとめられた、固定乱数要素からなる組を用いる。固定乱数は、一方では同じ回答は同じ擬似乱数要素を生成するが、他方では異なるクエリ条件は異なる擬似乱数要素を生成するという態様で、擬似乱数分布から取得される。
【００１１】
ある実施形態において、モジュールは、時間エポックを規定し、回答生成時に、最新の時間エポック以降に起こったデータベースへの変更を無視する。
ある実施形態において、モジュールは、時間エポックの階層構造からノイズ要素を導出する。
【００１２】
ある実施形態において、モジュールは、回答に影響するデータベースの変更を経験したユーザ数がある明確な数よりも多い最新の時間エポックよりも前に起こったデータベースへの変更を無視する。
【００１３】
本発明の以上の目的、特徴及び効果、及び他の目的、特徴及び効果は、添付図面に示されるような、その詳細な説明に照らして明らかになるであろう。
【図面の簡単な説明】
【００１４】
【図１】図１は、本発明のある実施形態に係る、列及び行を有するテーブルとしてのデータの概念的表現を模式的に示したものである。
【図２】図２は、本発明のある実施形態に係る、ＵＩＤを含む列を有する概念的なテーブルを模式的に示したものである。
【図３】図３は、本発明のある実施形態に係る、ノイズ要素の生成に用いられるコンポーネントを模式的に示したものである。
【図４】図４は、本発明のある実施形態に係る、クエリの攻撃コンポーネントからのシードの生成を模式的に示したものである。
【図５】図５は、本発明のある実施形態に係る、中央値の統計的演算のための回答の攪乱を模式的に示したものである。
【図６】図６は、本発明のある実施形態に係る、最大値の統計的演算のための回答の攪乱を模式的に示したものである。
【図７】図７は、本発明のある実施形態に係る、合計の統計的演算のための回答の攪乱を模式的に示したものである。
【図８】図８は、本発明のある実施形態に係る、時間エポックの階層構造を模式的に示したものである。
【発明を実施するための形態】
【００１５】
［発明の詳細な説明］
以下に、本発明の例示的実施形態を詳細に参照し、その例を添付図面に示す。可能な限り、図面全体にわたって使用される同一の参照符号は、同一または同様の部分を示しており、重複した記載は行っていない。
【００１６】
本明細書で使用されるように、「実質的に」、「一般に」及び「約」という語は、あるコンポーネントまたはアセンブリの機能的目的を達成するのに適した理想的な所望条件に対する、合理的に達成可能な製造及びアセンブリの公差内であるという状態を表す。
【００１７】
理解されるように、クエリへの回答の匿名化は、削除または調整時に、どの攻撃コンポーネントが固定閾値よりも小さいユーザＩＤ（ｕｓｅｒ  ＩＤ：「ＵＩＤ」）の差をもたらしているのかを判定し、修正されたクエリに一致するクエリに関する行を追加または削除して、攻撃コンポーネントの影響を排除することによって行ってもよい。例えば、１人のユーザだけ、または数人のユーザだけが異なる、２つのクエリへの回答は、同一としてもよい。しかし、このような対処法は、元の分析者によるクエリと修正されたクエリとがどれくらいの量だけ異なるのかを決定するのにかなりの演算（処理能力）とメモリリソースを要する可能性がある。クエリから「ＷＨＥＲＥ  ｓａｌａｒｙ  ＝  １０００００」といったクエリ条件を削除した場合に、その結果得られる回答は、その条件が含まれていた元のクエリよりも何倍も多い行を含み得る。
【００１８】
さらに、分析者は、正確な回答値を、一方のクエリは１つの条件を含み、他方のクエリはこの条件を逆にしたものを含んでいる一連のクエリ対を用いて習得する可能性もある。各対を足すと、ノイズの計数が行われる。一連のクエリ対を平均すると、ノイズは排除され、正確な計数が行われ得る。
【００１９】
したがって、これより図１を参照すると、本発明のある実施形態は、記憶媒体、例えばデータベースやデータストアに記憶されたデータに対して演算を行う。概念上は、各実施形態において、データとは、行１２０及び列１１０として構成されるデータセル１４０からなるテーブル１３０である。実際には、各実施形態において、データは、意味的にデータが行と列とのテーブルとして参照可能である限り、行及び列そのものとして記憶させる必要はない。各実施形態では、各列は名称を有してもよく、各データセル（または略して単にセル）は数値、文字列、または他の任意のデータタイプであってもよい。
【００２０】
各実施形態において、概念的なテーブルは、本発明によって保護されているエンティティを識別する列を有していてもよい。エンティティは通常は人であるが、例えば、スマートフォンまたは車のような個人が使用するデバイス、またはプライバシーを保護すべき他のエンティティであってもよい。図２を参照すると、本明細書では、これらのエンティティをユーザ、列をＵＩＤ列２３０、セル値２１０及び２２０をＵＩＤ、とそれぞれ称する。テーブル内の各ユーザは、一意のＵＩＤ２１０及び２２０を有していてもよく、ＵＩＤ２１０及び２２０は例えば文字列または数字であってもよい。各実施形態では、所与のいずれの行のセルも、その行のＵＩＤによって識別されるユーザの情報を含む。同じＵＩＤは、複数の行に現れてもよく、例えば図２に符号２２０で示すユーザ２である。
【００２１】
本発明のある実施形態は、本明細書では「クローク」と称され、例えば、少なくとも１つのプロセッサと１つのメモリデバイスを有しているコンピュータであり、本明細書に開示される方法のうちの１つ以上を実行するように動作可能である。クロークを実現するソフトウェアは、例えばデータストアまたはデータベースを実現するソフトウェア内に統合されていてもよい。あるいは、クロークを実現するソフトウェアは、スタンドアロンであってもよく、明確に規定された標準インターフェースを介してデータストアとやりとりを行ってもよい。後者の場合、クロークソフトウェアを実行するハードウェアは、データストアソフトウェアを実行するハードウェアと同じであってもよく、または別個のマシンであってもよい。
【００２２】
統計分析を行うデータストアまたはデータベースに対するクエリは、２つのステップからなる構成を特徴とし得る。ステップ１では、すべての行と列から、行と列のサブセットを選択する。ステップ２では、選択された行のうちの１つ以上の列からのセルに対して、統計的演算を行う。代表的な統計的演算としては、ｃｏｕｎｔ（行数をカウントする）、ｃｏｕｎｔ  ｄｉｓｔｉｎｃｔ（別個のセル値の数をカウントする）、ａｖｇ（セル値の平均を算出する）、ｓｔｄ−ｄｅｖ（セル値の標準偏差を算出する）、ｓｕｍ、ｍａｘ（最大セル値を選択する）、ｍｉｎ、ｍｅｄｉａｎ等が挙げられる。
【００２３】
各実施形態において、第１ステップでは、行ごとに概念的に実行される。このような実施形態では、各行に対して、指定された列のセルに対する比較演算が行われ、出力として演算ごとにＴＲＵＥまたはＦＡＬＳＥのブール値が生成される。次に、ブール論理を出力に適用して、その行を選択するか（ＴＲＵＥ）しないか（ＦＡＬＳＥ）を決定してもよい。これらの類の比較演算子とブール論理は、例えば（数ある句の中で）ＳＱＬのＷＨＥＲＥ句とＨＡＶＩＮＧ句に見出すことができる。慣習として、本明細書中でＳＱＬのＷＨＥＲＥ句を用いた例は、任意のクエリ言語に対するこの行選択プロセスの例示であり、ＳＱＬに限定するものではないことを理解すべきである。
【００２４】
この一例は、［ＷＨＥＲＥ  （ａｇｅ  ＞  ２０）  ＡＮＤ  （ｇｅｎｄｅｒ  ＝  ‘ｍａｌｅ’）］である。ここでは、年齢（ａｇｅ）と性別（ｇｅｎｄｅｒ）とが列名である。最初の比較演算は数値型に対して実行される「より大きい（ｇｒｅａｔｅｒ  ｔｈａｎ）」であり、２番目の比較演算は、文字列に対して実行される「等しい（ｅｑｕａｌ  ｔｏ）」である。２つの比較によって生成された２つのブール値は、次にブール演算「論理積（ＡＮＤ）」が行われる。結果がＴＲＵＥの場合はその行が選択される。そうでない場合、その行は選択されない。代表的な比較演算子としては、＝、＜、＞、≦、≧、及び≠が挙げられる。代表的なブール演算子としては、ＡＮＤ、ＯＲ、及びＮＯＴが挙げられる。
【００２５】
各実施形態において、クロークは、データに対して実行される統計的演算に多少の攪乱を与えることによって匿名化する。これは回答の攪乱と称される。
理解されるように、回答の攪乱におけるある特定の演算は擬似乱数を必要とする。分析者がデータに関する具体的事実を高い信頼性をもって立証することを防ぐためには、一般にランダム性（乱雑さ）が必要である。この擬似乱数は、ある種の分布及びそれに関連するパラメータ、例えば、平均及び標準分布というパラメータを有するガウス分布、に由来してもよい。
【００２６】
クロークの実施形態における匿名化は、固定乱数と称される特別な種類の疑似乱数の発生を使用する。固定乱数とは、その値がクロークによって制御可能である擬似乱数である。この制御によって、クロークは、同じクエリは確実に同じノイズを生成し、一方で、異なる２つのクエリでありながら同じ回答を返す２つのクエリが、確実に異なるノイズを有するようにすることができる。
【００２７】
ある実施形態において、クロークは、擬似乱数発生器（Ｐｓｅｕｄｏ−Ｒａｎｄｏｍ  Ｎｕｍｂｅｒ  Ｇｅｎｅｒａｔｏｒ：ＰＲＮＧ）のシードを設定するのに用いられる値を制御することによって、固定乱数の値を制御する。クロークが同じシードを使用する場合、ＰＲＮＧは同じ固定乱数を生成する。クロークが異なるシードを使用する場合、ＰＲＮＧは高確率で異なる固定乱数を生成する。ある実施形態において、クロークは、データベースが返した行から導出された情報を、全部または一部使用して、固定乱数を制御する。ある実施形態において、クロークは、クエリ自体から導出された情報を、全部または一部使用して、固定乱数を制御する。
【００２８】
各実施形態において、クローク内の固定乱数の２つの共通する使用法が存在してもよい。１つは固定ノイズで、もう１つは固定閾値である。
固定ノイズとは、正確な回答を不明瞭にするために、数値回答にノイズを加えるメカニズムを指す。一実施形態では、固定ノイズは、平均がゼロである固定乱数である。ゼロ平均を使用することにより、回答の期待値は真の回答と等しくなるが、これは重要な統計的属性である。非ガウス分布を使用してもよい。原理的には他の手段を用いることもできる。
【００２９】
ある閾値に基づいて決定を行う必要がある場合、クローク内では固定閾値が用いられてもよい。例えば、クロークが、回答に寄与する別々のユーザをおおよそＫ人必要とする場合、Ｋは常に正確にＫではなく、固定閾値である（すなわち、固定乱数値に基づく）と考えられる。一実施形態において、固定閾値は、平均がＫである固定乱数である。固定乱数がガウス分布から取得されると仮定すると、標準偏差は、ゼロ以下の値がほぼ確実に存在し得ないように選択される。例えば、標準偏差はＫ／４以下として選択され得る。一実施形態において、確かな下限が固定閾値に設定される。例えば、固定乱数が１未満である場合でも、固定閾値は決して１未満にはなり得ないものであってもよい。
【００３０】
理解されるように、データベースから何を知り得るかを分析者が制御できる主な方法は、比較演算とそれに関連するブール論理によるものである。特に、分析者は、得られる回答が同じであるか、またはただ１人のユーザ分だけ異なるかのどちらかである異なる２つのクエリに対する回答を比較することによって、データベース内のあるユーザに関する情報の推論を試みることができる。
【００３１】
例えば、１つは比較演算及びブール論理［（ｄｉｓｅａｓｅ  ＝  ‘ＡＩＤＳ’）  ＡＮＤ  （ｊｏｂ  ｔｉｔｌｅ  ≠  ‘ＣＥＯ’）］、もう１つは［（ｄｉｓｅａｓｅ  ＝  ‘ＡＩＤＳ’）］という、２つのクエリを分析者が作成したと仮定する。ＣＥＯがＡＩＤＳに罹患している場合、そのＣＥＯは最初のクエリから除外されて、２番目のクエリに含まれる。ＣＥＯがＡＩＤＳに罹患していない場合は、そのＣＥＯは両方のクエリから除外される。分析者がＡＩＤＳに罹患しているかどうかを判定するために、分析者がこれを利用しようとする可能性もある。
【００３２】
別の例では、分析者は、ＣＥＯの給与が１００００００ドルであり、かつ、これがデータベース内で最高の給与額であることを知っている可能性がある。この場合、分析者は、以下の比較と論理を有する２つのクエリ［（ｄｉｓｅａｓｅ  ＝  ‘ＡＩＤＳ’）  ＡＮＤ  （ｓａｌａｒｙ  ＜  １００００００）］及び［（ｄｉｓｅａｓｅ  ＝  ‘ＡＩＤＳ’）  ＡＮＤ  （ｓａｌａｒｙ  ＜  １００００１）］を生成できる。ＣＥＯは最初のクエリから除外されて、ＣＥＯがＡＩＤＳに罹患している場合のみ２番目のクエリに含まれる。
【００３３】
これらの類の攻撃は差分攻撃と称されており、その理由は、分析者は、２つのクエリの回答の差を探して、ユーザに関する何かを推論するからである。分析者は差を実行するために比較演算とブール論理との使用を試みることもあるので、比較演算とそれに関連する論理を攻撃コンポーネントと称する。
【００３４】
差分攻撃から防御するために、クロークは、異なる攻撃コンポーネントを有する２つのクエリが、２つのクエリへの回答が同じであっても、確実に異なるノイズを有するようにしてもよい。その結果、２つの回答が異なるという事実がある場合は、回答内にユーザの有無を開示しない。
【００３５】
理解されるように、分析者は、攻撃コンポーネントを不明瞭になるように符号化することによって（例えば、数学的構文を有するブール論理を実行することによって）、クロークによる攻撃コンポーネントの検出を防ごうとする可能性がある。ある実施形態において、クロークは、こういった可能性のある符号化がないかどうかについて、クエリを検査し、このような符号化を有するクエリを拒絶する。
【００３６】
ある実施形態において、固定ノイズ及び固定閾値は、複数の固定乱数値に基づいてもよい。固定ノイズ及び固定閾値がガウス分布を用いる場合には、複数の固定乱数値を合計して固定ノイズまたは固定閾値を生成する。固定ノイズまたは固定閾値を含む個々のノイズ値は「ノイズ要素」と称される。理解されるように、ガウス分布以外の分布をノイズ要素に使用してもよいし、合計以外の演算を使用してノイズ要素を結合してもよい。
【００３７】
ノイズ要素は、同じ攻撃コンポーネントに対して同じノイズ値を生成するという点で固定されている。その結果、同じクエリを繰り返した場合にはノイズが同じになり、したがって、例えばノイズ値が純粋な疑似乱数値である場合のようには、ノイズ値を平均化して消すことができない。一実施形態において、ノイズ要素はゼロ平均のガウス分布から取り出される。
【００３８】
２つの攻撃コンポーネントは、両者が同じ意味を有するならば、同じとみなされる。よって、例えば、攻撃コンポーネント［ｓａｌａｒｙ  ＝  １０００００］と［ｓａｌａｒｙ  ＝  ２＊５００００］は同じとみなされ、対応するノイズ要素は同じシードから導出され得る。
【００３９】
図３は、クエリ１０からノイズ５６０まで通じる各要素を図示し、これらの要素間の関係性を示す。図４は、クエリ１０からシード３２０まで進む際に関与するステップを図示する。図３に示されるように、クエリ１０は複数の攻撃コンポーネント５００を有し得る。攻撃コンポーネントの例は［ｓａｌａｒｙ  ＝  １０００００］である。攻撃コンポーネントは通常、「ｓａｌａｒｙ」、「１０００００」、「＝」等のいくつかのアスペクト５５０（または、相）を有する。１つ以上のアスペクト５５０を用いて、例えばノイズ要素をハッシュすることによってシードコンポーネント５１５が生成される。攻撃コンポーネント５００からシードコンポーネント５１５を取得するプロセスは、図４にステップ５３０として図示される。このステップは、データベース１６からデータを要求して解読することを含んでもよい。
【００４０】
図４のステップ５２０で示されるように、所与の一つの攻撃コンポーネントから複数のシードが生成され得る場合があるが、通常は、複数のシードコンポーネント５１５が結合されて一つのシード３２０を生成する。各シードを用いて一つのノイズ要素５５５（すなわち、疑似ランダムガウス分布値）を生成し、複数のノイズ要素を結合してノイズ５６０を生成する。
【００４１】
ある実施形態において、各シードコンポーネントは、攻撃コンポーネントの一つのアスペクトのハッシュであり、複数のシードコンポーネントをＸＯＲ演算により組み合わせ、その結果得られた値をＸＯＲ演算により秘匿乱数と組み合わせて、シードを生成する。理解されるように、攻撃コンポーネントの１つ以上のアスペクトからシードを生成する方法は、他にも多く存在する。
【００４２】
ある実施形態において、シードの１つ以上のアスペクトは、攻撃コンポーネント内の１つ以上の列の名称である。ある実施形態において、別個の列名はそれぞれ個別にノイズ要素に寄与する（すなわち、攻撃コンポーネント内に別個の２つの列名があれば、２つのノイズ要素を生成することになる）。別の実施形態では、複数の列名を結合して１つのノイズ要素を生成する。ある実施形態において、各列名をハッシュしてシードコンポーネントを生成する。
【００４３】
ある実施形態において、クロークは、データベース自体がどのようにして攻撃コンポーネントを処理するかを観察することによって、シードのアスペクトを導出する。図４を参照すると、クロークは要求５０５をデータベース１６に送信してもよく、データベース１６は、攻撃コンポーネント内で用いられている１つ以上の列の値を含むデータ５１０を返す。ステップ５３０では、クロークはこれらの値を用いて、１つ以上のシード３２０に寄与する１つ以上のシードコンポーネント５１５を導出してもよい。
【００４４】
例えば、クロークがクエリ［ＳＥＬＥＣＴ  ｃｏｕｎｔ（＊）  ＦＲＯＭ  ｔａｂｌｅ  ＷＨＥＲＥ  ｓａｌａｒｙ  ＝  １０００００］を受け取ると仮定する。クロークはデータベースから給与（ｓａｌａｒｙ）列を要求し、受け取った値（この場合すべての値が１０００００である）を使用してシードコンポーネントを導出する。
【００４５】
別の例では、クロークはクエリ［ＳＥＬＥＣＴ  ｃｏｕｎｔ（＊）  ＦＲＯＭ  ｔａｂｌｅ  ＷＨＥＲＥ  ｓａｌａｒｙ  ！＝  １０００００］（給与（ｓａｌａｒｙ）が１０００００に等しくないすべての行）を受け取る。ここで再び、クロークはデータベースから給与（ｓａｌａｒｙ）列を要求し、受け取った値を使用してシードコンポーネントを導出する。
【００４６】
別の例では、クロークはクエリ［ＳＥＬＥＣＴ  ｃｏｕｎｔ（＊）  ＦＲＯＭ  ｔａｂｌｅ  ＷＨＥＲＥ  ｓａｌａｒｙ  ＋  ａｇｅ  ＝  １０００００］を受け取る。クロークはデータベースから給与（ｓａｌａｒｙ）列と年齢（ａｇｅ）列を要求することができる。クロークは、給与列からから導出されたシードに対するシードコンポーネントと、年齢列から導出されたシードに対するシードコンポーネントとを生成してもよい。あるいは、クロークは１つのシードに対して複数のシードコンポーネントを生成してもよい。
【００４７】
ある実施形態において、クロークは、要求された列からの別個の値をすべて使用して、シードコンポーネントを導出する。ある実施形態において、別個の値はそれぞれハッシュされ、その結果得られる複数のハッシュ値をＸＯＲ演算により組み合わせてシードコンポーネントを生成する。攻撃コンポーネント内で用いられる列のデータベースによって報告された複数の値からシードコンポーネントを導出する他の実施形態は、当業者にとって明らかであろう。
【００４８】
ある実施形態において、ノイズ要素はＵＩＤ列から導出される。この場合、ＵＩＤ列はシードコンポーネントを導出するのに用いられる要求された列である。
ある実施形態において、クロークは、攻撃コンポーネント内に現れる１つ以上の定数からシードコンポーネントを生成する。例えば、攻撃コンポーネント［ｓａｌａｒｙ  ＝  １０００００］では、１０００００が定数である。ある実施形態において、１つ以上の定数の各々をハッシュして、ＸＯＲ関数により組み合わせる。
【００４９】
ある実施形態において、クロークは、データベースから列を要求するのではなく、攻撃コンポーネント内の列に対してデータベースは何を返すかを予測し、この予測結果を使用してシードコンポーネントを生成する。例えば、攻撃コンポーネントが［ｓａｌａｒｙ  ＝  ９９９９９  ＋  １］の場合、クロークは、給与（ｓａｌａｒｙ）列が１０００００の値のみを含んでいると予測し、よって、１０００００の値を使用してシードコンポーネントを生成することができる。
【００５０】
ある実施形態において、攻撃要素は、値の範囲を規定する一対の不等式からなる。例えば、クエリ［ＳＥＬＥＣＴ  ｃｏｕｎｔ（＊）  ＦＲＯＭ  ｔａｂｌｅ  ＷＨＥＲＥ  ａｇｅ  ＞＝  ４０  ＡＮＤ  ａｇｅ  ＜  ５０］では、年齢（ａｇｅ）の範囲を要求する。クロークは、範囲を規定するこの２つの不等式を１つの攻撃コンポーネントとしてみなし得る。ある実施形態において、クロークは、両方の定数を１つのシードのための複数のシードコンポーネントとして使用する。
【００５１】
ある実施形態において、クロークは、攻撃コンポーネント内の比較演算をシードコンポーネントとして使用する。比較演算の例として「＝」と「＜」が挙げられる。
ある実施形態において、あるクエリ内で同じ攻撃コンポーネントが複数回現れる場合、クロークは、カウンタからの値をこのようなコンポーネントの各々に割り当てて、このカウンタ値をシードコンポーネントとして使用する。例えば、クエリ［ＳＥＬＥＣＴ  ｃｏｕｎｔ（＊）  ＦＲＯＭ  ｔａｂｌｅ  ＷＨＥＲＥ  ｓａｌａｒｙ  ＝  １０００００  ＡＮＤ  ｓａｌａｒｙ  ＝  ９９９９９  ＋  １］では、クロークは、各攻撃コンポーネントから、別個のシードとその結果得られるノイズ要素を導出することができる。意味的に同一な攻撃コンポーネントの各々に対して、クロークは、カウンタ値、つまりカウンタ＝０を［ｓａｌａｒｙ  ＝  １０００００］に、カウンタ＝１を［ｓａｌａｒｙ  ＝  ９９９９９  ＋  １］に割り当てる。ある実施形態において、カウンタ値のハッシュはシードコンポーネントである。
【００５２】
ある実施形態において、ノイズ要素の総数をシードコンポーネントとして使用する。
理解されるように、シードコンポーネントとして使用してもよい種々の攻撃コンポーネントアスペクトが存在する。
【００５３】
ある実施形態において、固定ノイズは、ゼロ平均といくらかの標準偏差ＳＤを有するガウス分布から生成されてもよい。固定閾値は、平均がＫでいくらかの標準偏差ＳＤを有するガウス分布から生成されてもよい。多数のノイズ要素から固定ノイズまたは固定閾値を生成するために、各ノイズ要素はゼロ平均を有するガウス分布を用いる。ノイズ要素は合計される。各ノイズ要素の標準偏差は、最終的な固定ノイズの標準偏差がＳＤになるように選定されてもよい。この場合、各ノイズ要素の標準偏差はＳＤよりも小さい。あるいは、個々のノイズ要素にいくらかの最小標準偏差ＳＤｍｉｎを与えてもよい。この場合、その結果得られる最終的な標準偏差はＳＤよりも大きくてもよい。
【００５４】
合計されたノイズ要素は平均がゼロである。固定ノイズは平均がゼロであるので、最終的な固定ノイズはノイズ要素の合計である。固定閾値は平均がＫであるので、ノイズ要素の合計にＫを加えて最終的な固定閾値を生成する。ある実施形態において、Ｋの値は標準偏差ＳＤの関数である。例えば、Ｋ＝４ＳＤ＋１により、ノイズ閾値が１以下となる可能性を確実に低下させる。
【００５５】
次に、回答の攪乱を説明する。各実施形態において、回答の攪乱を行う統計的演算への入力は、テーブルであってもよい。テーブルは、少なくともＵＩＤ列を含んでいてもよい。テーブルはさらに、他の列も同様に含んでいてもよい。各実施形態において、各統計的演算（カウント（ｃｏｕｎｔ）、合計（ｓｕｍ）、平均（ａｖｇ）等）に対して、実行可能な回答攪乱方法が種々存在し得る。
【００５６】
したがって、そのような実施形態において、実行可能な方法は次の３つの属性を有する。第１に、分析者が演算の出力からデータベース内の個人に関するいかなることも演繹することは不可能または極めてまれでなければならない。第２に、演算は、本明細書で規定されているように固定されなければならない。言い換えると、同じ意味を有するクエリを繰り返し実行すると、同じノイズ要素が生成されるが、意味的に異なるクエリを実行すると、異なるノイズ要素を生成する確率がかなり高い。第３に、演算によって生成されるいずれの回答も、ある固定閾値数のユーザのセル値に基づいていなければならない。これら３つの属性を有するあらゆる統計的演算が、クローク内での回答の攪乱の実施形態において使用可能である。理解されるように、これらの属性のうちの３つすべてではなくその一部を有する回答攪乱方法も、やはり価値のある匿名化の利点をもたらし得る。
【００５７】
次に、上述の３つの属性を有する統計的演算の例示的実施形態を説明する。統計的演算は２種類に分類され得る。一方は、演算の出力が特定のセル値である。これは単一行統計出力と称される。例としては、最小値（ｍｉｎ）、最大値（ｍａｘ）、及び中央値（ｍｅｄｉａｎ）が挙げられる。匿名化がない場合、これらの統計的演算の各々は単一セルの正確な値を生成する。もう一方は、演算の出力が複数の入力セルを複合したものである。これは、複数行統計出力と称される。複数行統計出力の例としては、カウント（ｃｏｕｎｔ）、合計（ｓｕｍ）、平均（ａｖｇ）、及び標準偏差（ｓｔｄ−ｄｅｖ）が挙げられる。出力は、通常は単一セルの値ではなく、セル値のすべてから導出された値である。
【００５８】
単一行統計出力の場合、各実施形態において、クロークは、回答攪乱関数の出力が真のセル値であるのは、その値を共有する他のセルがいくつかある場合であり、かつその場合に限ることを保証する。その値を共有する他のセルが不十分である場合、回答攪乱関数の出力は、他のセルをいくつか複合したものとなる。
【００５９】
一実施形態において、他のセルの数は固定閾値である。
図５を参照すると、中央値の統計的演算の回答の攪乱の例示的実施形態には、２つの入力、つまり、本明細書に記載のように算出された固定閾値Ｔ（符号３７８）とテーブル３８０とが存在する。テーブル３８０は、ＵＩＤ列と、中央値を算出する列（中央値列）とを含む。ステップ３５８で、テーブル３８０から真の中央値のユーザ（中央値ユーザ）を算出する。ステップ３６５で、この中央値ユーザよりも値が上の別個のユーザをＴ人、値が下の別個のユーザをＴ人選択する。ステップ３７０で、選択されたユーザと中央値ユーザの平均を計算する。ステップ３７５でこの平均の端数処理をすることによって、回答を作成する。
【００６０】
この実施形態では、回答の攪乱の３つの原理を説明する。まずは固定演算であり、同じ固定閾値は同じ回答を生成し、異なる固定閾値は異なる回答を作成する可能性が非常に高い。次に、ステップ３６５において選択されたユーザがすべて同じ値を有する場合、回答は適切な数のユーザ（２Ｔ＋１）によって共有される。ステップ３６５において選択されたユーザのすべてが同じ値を有するわけではない場合、回答はその数のユーザからの複合である。いずれにしても、回答は固定閾値数のユーザに基づく。最後に、分析者が個々のユーザに関する何らかのことを演繹することはほぼ不可能なことである。これは、１つには複数のユーザが回答に寄与したからであり、１つには固定閾値のために、寄与したユーザの人数を分析者が知ることが難しくなっているからであり、さらには、端数処理によって、どの値が平均値に寄与した可能性があるのかを判断することが困難になるからある。
【００６１】
図６を参照すると、回答攪乱を伴う最大値の統計的演算のある実施形態は、中央値演算の実施形態と類似する。主な違いは、まさに最高値の閾値Ｔ１は無視されることである（ステップ３９０及び３９５）。これにより、範囲外の高い値のせいで算出された平均値が偏る結果として真の最大値ユーザに関する情報が漏れてしまう状況を防止する。
【００６２】
次に図７では、合計に対する、回答の攪乱を伴う複数行統計的演算を示す。ここでは、すべての値は正であると仮定する。第１ステップ４３５では、個々のユーザそれぞれの合計を算出し、これにより、ユーザごとに潜在的に複数の行が存在するのではなく、そのユーザごとに１つの、ユーザの合計を含む行が存在する、修正されたテーブル４３０が作成される。この修正されたテーブルから処理して、ステップ３９０及びステップ３９５で、最高値を有する２つのユーザグループを選択し、ステップ４００で２番目のグループの平均を算出する。これらは、ｍａｘ演算で実行される同じステップに似ている。ステップ４１０で、１番目のグループの値を、２番目のグループから得られた平均値に置き換える。これにより最高値のユーザの影響が排除されるが、これらのユーザからの何らかの寄与は残っている。ステップ４１５及び４２０で、テーブル内の全セルの合計及び平均を算出する。ステップ４２５で、ノイズの標準偏差としてステップ４２０で算出した平均値を用いて、固定ノイズを生成する。最後に、ステップ４３０で、そのノイズを合計に加えることで、回答を作成する。
【００６３】
正と負の値がある場合、図７の演算を２回、つまり、正の数に対して１回と、負の数の絶対値に対して１回実行してもよい。最終的な回答は、前者から後者を差し引いたものとなる。
【００６４】
各実施形態では、回答の攪乱の３つの原理を満たす。理解されるように、各実施形態において、それは固定演算である。したがって、各実施形態において、どの中間値も、Ｔ１及びＴ２の最高値のユーザ（４００及び４１０）か、またはユーザの完全な集合（４１５及び４２０）のいずれかである１組のユーザに基づいていてもよい。よって、さらに理解されるように、各実施形態において、外れ値の影響を除去すること、及びあらゆるユーザの平均寄与に比例するノイズを加えることによって、個々のユーザに関する何らかのことを演繹できるということはほぼ起こりえない。
【００６５】
さらに、各実施形態において、カウントの統計的演算は、個々のユーザごとの値の合計を算出する（ステップ４３５）ことを除いて非常に類似していてもよく、その代わりに個々のユーザ当たりの行数が用いられる。
【００６６】
なお、中央値、最大値、最小値、合計値、及びカウント値の演算の実施形態は例示的なものであり、ここでは固定演算の原理、一組のユーザからの回答の導出の原理、及び個々のユーザに関する情報が回答から演繹できる可能性をほぼ無くす原理を説明するために、例として用いた。理解されるように、他の多くの特定の実施形態は、これらの、及び他の統計的演算に対して、同じ原理を用いてもよい。
【００６７】
ここまで、クエリは、所与の任意のクエリが１つの回答を作成するかのように説明されてきた。つまり、クエリが行を選択して１つのテーブルを生成し、このテーブルに回答の攪乱を伴う統計的演算が施される。しかし、多くのクエリ言語では、何らかの手法で行をグループ化することができ、その結果、このようなグループの各々に統計的演算が適用される。例えば、ＳＱＬの場合、これはＧＲＯＵＰ  ＢＹ句で行われる。この一例は、［ＳＥＬＥＣＴ  ａｇｅ，  ｃｏｕｎｔ（＊）  ＦＲＯＭ  ｔａｂｌｅ  ＧＲＯＵＰ  ＢＹ  ａｇｅ］である。このクエリは、別個の年齢のそれぞれに対して、行数のカウントを別々に報告する。
【００６８】
各実施形態において、このようなグループ化はそれぞれ、クロークの回答攪乱関数によって別々のテーブルのように扱われてもよい。言い換えれば、図５、図６、及び図７のテーブル３８０は、各グループのテーブルであると理解される。グループ化すると、セル自体の値（上述の例では年齢）の報告が引き起こされる可能性がある。セルの値自体が１人のユーザの機密情報であるかもしれないため、これによりプライバシーの問題が発生する可能性がある。このようなことから守るために、クロークのある実施形態は、セル値のグループ化において別個のＵＩＤの数が固定閾値を下回ると、セル値の出力を阻止する。この演算は、グループ化関数から得られた結果だけでなく、回答の攪乱を伴う統計的演算への任意のテーブル入力にも適用されてもよい。
【００６９】
各実施形態において、攻撃コンポーネントは、被害者だけを含むかまたは排除する量だけ範囲を拡大または縮小することによって作成される。例えば、分析者が、被害者の給与額が正確に１３５，２２５ドルであり、かつ、その給与額であるデータストア内の唯一の人であることを知っている場合、分析者は、ＷＨＥＲＥ句［ＷＨＥＲＥ  ｄｉｓｅａｓｅ  ＝  ‘ＡＩＤＳ’  ＡＮＤ  ｓａｌａｒｙ  ＜  １３５２２５］及び［ＷＨＥＲＥ  ｄｉｓｅａｓｅ  ＝  ‘ＡＩＤＳ’  ＡＮＤ  ｓａｌａｒｙ  ＜  １３５２２６］を有する２つのクエリを使用して差分攻撃を作成できる。ここで、前者のＷＨＥＲＥ句を有するクエリは被害者を除外し、後者のクエリは、被害者がＡＩＤＳ診断を受けている場合に含まれるように調整されている。
【００７０】
このことから防御するために、クロークのある実施形態では、切り取られた（ｓｎａｐｐｅｄ）アライメントを使用する。ここでの基本的な考え方は、範囲は所定の切り取られた許容アライメントに限定されることである。範囲のサイズと範囲のオフセットの両方がこのようにして限定される。切り取られたアラインメントの一例は、範囲のサイズが２ｎ及び１／２ｎのうちの１つであるように制限され、オフセットがそれぞれ２ｎ及び１／２ｎの偶数倍であるように限定されるものであり、ここでｎは整数（０、１、２など）であり得る。この規定での許容範囲の例として、８〜１５、２〜３、及び１００．５〜１００．７５が挙げられる。この規定のもとでは許容されない範囲は、２〜５（サイズの範囲「３」は許されない）と９〜１７（サイズの範囲「８」は８の倍数に揃えなければならない）である。範囲を制限したままで、多少の柔軟性を加えるには、任意の範囲のオフセットを、範囲のサイズの１／２だけシフトできることが許可されている可能性がある。これにより、例えば、４〜１１の範囲（４だけシフトされたサイズ８）が可能になるが、依然として９〜１７ではない。
【００７１】
理解されるように、切り取られたアライメントの多種多様な規定が可能である。例えば、日時の場合、アライメントは、秒、分、時、日、月、年のような自然な時間の単位に沿ったものであり得る。または、このアライメントは、さらに１０進数に基づいたものであってもよく、例えば１ｘ１０ｎ、２ｘ１０ｎ、５ｘ１０ｎの組からのサイズとオフセットが与えられ得る。ここで、ｎは正または負の整数である。
【００７２】
ある実施形態において、クエリ自体が、切り取られたアライメントに従っていなければならない。任意の不等式によって範囲の上限と下限の両方が指定されなければならず、その範囲は切り取られなければならない。従っていないクエリは削除してもよい。あるいは、切り取られたアライメントに合うように、範囲をクロークによって修正してもよい。ある実施形態において、クエリ自体は範囲の上限だけ、または下限だけを指定し、両方を指定するものではない。範囲の指定されていない方の端は、自動的に正または負の無限大とみなされる。無限大は切り取られたアライメントとしては有効ではないので、各実施形態では、クロークは、範囲の指定されていない方の端の適切な値を決定し、それに応じて切り取られたアライメントを設定することができる。ある実施形態において、クロークは、範囲の指定されていない方の端を、回答の攪乱を伴う最小または最大の統計的演算により定める。
【００７３】
理解されるように、本発明の各実施形態は、所与のクエリと、個々の攻撃コンポーネントを除去するか、または、切り取られたアライメントの範囲をより小さな切り取られたアライメントの範囲に縮小するかのいずれかによって生成され得る代替クエリとの間における、回答内の別個のＵＩＤの数の差を判断してもよい。このプロセスは「代替クエリ探査」と称される。所与のクエリと代替クエリは、別個のＵＩＤの数が閾値を下回る場合には、「隣接クエリ」と称される。そうでない場合は、所与のクエリと代替クエリは「離隔クエリ」と称される。この閾値は固定閾値であってもよい。
【００７４】
理解されるように、本願に記載されているような固定ノイズと固定閾値との生成にノイズ要素を用いることを、代替クエリ探査と組み合わせてもよい。ある実施形態において、所与の攻撃コンポーネントに対する代替クエリ探査によって、結果として得られるクエリが離隔クエリであると判定された場合、この攻撃コンポーネントに関連するノイズ要素をノイズ要素の組から除外してもよい。このようにして、回答内のノイズ量を減らすことができる。
【００７５】
理解されるように、所与のクエリと代替クエリが隣接クエリであることが分かった場合、クロークは、この所与のクエリの行を、所与のクエリの出力が代替クエリと同一になるように調整してもよい。この演算は「行調整」と称される。理解されるように、行調整は、差分攻撃の２つのクエリを、両クエリの間に差が有ると無いとに関わらず強制的に同一にすることによって、差分攻撃から防御する。
【００７６】
ある実施形態において、ノイズ要素は行調整と組み合わせてもよい。この場合、回答が攪乱された、ノイズ要素を有する統計的関数が、行調整されたデータに対して実行される。
【００７７】
別の種類の差分攻撃は、データベースへの動的変化を活用する。時間Ｔに、分析者がクエリを作成すると仮定する。時間Ｔよりも後の時間Ｔ１に、例えば既存値の追加、削除、または変更によって１人のユーザのデータを修正する。時間Ｔ１よりも後の時間Ｔ２に、同じクエリを繰り返す。２番目のクエリへの回答が１番目のクエリへの回答とは異なるとすると、それは、修正されたデータがクエリの条件と合致したためである。その結果、分析者は、１人のユーザの修正されたデータについて知ることになるので、そのユーザのプライバシーを危険にさらしてしまう。
【００７８】
ある実施形態において、データベースへの変更はそれぞれ、変更がなされた時刻を表すタイムスタンプと称される値を含む。
ある実施形態において、クロークは時間を、時間エポックと称される時間帯に分割する。時間エポックの例としては、１時間や１日が挙げられる。ある実施形態において、クエリに回答するときに、クロークは、最後のエポックよりも後のタイムスタンプを有するデータベースへの変更を無視する。その結果、どのような所与の繰り返しのクエリという状況においても、唯一のユーザのデータが２つのクエリの間で変更されるということは極めて稀となり得る。
【００７９】
次に図８を参照すると、ある実施形態において、時間エポックは階層的に構成されていて、より高いレベルのエポックがより低いレベルのエポックを取り囲んでいる状態である。例えば、最も低いレベルの時間エポック６００は１日であってもよい。高いレベル側の次の時間エポック６０５は２日である等であってもよい。ある実施形態において、クエリに回答するときに、クロークは、最後の最も低いレベルのエポックよりも後のタイムスタンプを有するデータベースへの変更を無視する。
【００８０】
ある実施形態において、クロークは、ノイズ要素を各エポックに対応付けるが、ここで各ノイズ要素のシードはエポックに対して一意である。ある実施形態において、クエリに回答するときに、クロークは、クエリを受け取った時点の階層構造の各レベルのエポックからのノイズ要素から、ノイズを構成する。図８に示されるように、「現在」と記された時点に受け取られたクエリは、ｚと表示された１日単位のエポック、ｊと表示された２日単位のエポック、ｅと表示された４日単位のエポック、ｂと表示された８日単位のエポック、そして場合によってはさらに高層にあるエポック（図示せず）から、ノイズ要素を生成する。
【００８１】
理解されるように、エポックは可変の時間長であってもよい。図８において１日単位、２日単位、４日単位等のエポックを用いているのは、例示のためである。
ある実施形態において、クロークは、所与のレベルにおいて、あるエポック（「第１エポック」）から次のエポック（「第２エポック」）までで値が変化した一意のユーザの数を算出する。クロークは、変化した別個のユーザの数が閾値を超えるかどうかを判断する。ある実施形態において、閾値はノイズ閾値である。
【００８２】
ある実施形態において、クロークがクエリに回答するとき、クロークは、別個のユーザにおける変更が閾値を上回った同一のレベルで隣接し合う最新のエポックの対を見出す。クエリに回答する際に、クロークは、対の第１エポックの終了後に起こった変更はすべて無視する。再度図８を参照して、「現在」と表示された時点でクエリを受け取ったと仮定する。さらに、１日単位のエポックｙの間に変更が起こった別個のユーザの数が閾値を超えたと仮定する。クエリに回答する際、クロークは１日単位のエポックｘの終了後に起こったデータベースへの変更はすべて無視するであろう。
【００８３】
今度は、１日単位のエポックｙの間に変更が起こった別個のユーザの数が閾値を超えず、１日単位のエポックｘの間に変更が起こった別個のユーザの数が閾値を超えず、１日単位のエポックｗの間に変更が起こった別個のユーザの数が閾値を超えない、と仮定する。ただし、さらに、２日単位のエポックｉの間に変更が起こった別個のユーザの数が閾値を超えたと仮定する。クエリに回答する際、クロークは２日単位のエポックｈの終了後に起こったデータベースへの変更はすべて無視するであろう。
【００８４】
理解されるように、分析者は、各エポックにおいて同じクエリを繰り返すことにより、最新の回答を得ることができる。さらに、クロークは、各エポックにおいて、自発的に所与のクエリへの回答を与えることができる。クロークが定期的な回答を与える原因となるクエリは、スタンディングクエリと称される。
【００８５】
したがって、各実施形態において、分析者は、スタンディングクエリへの回答を受け取るために次のエポックまで待ちたがらない可能性もある。このような実施形態では、まず、クロークがスタンディングクエリを受け取ったときに、クロークが回答を与える。続いて、データベースへの変更が起こるたびに、クロークは、この変更の結果、回答を修正することになるのかどうかを判定してもよい。判定結果が「修正が必要」の場合、クロークは、変更が適用されたユーザのＩＤを記録する。別個のユーザの数が閾値を上回ったら、クロークは、最後に与えた回答以降の変更の全てを含む新たな回答を与える。この回答を与えた後、クロークは再度、新たな変更の結果、一番最近の回答を修正することになるのかどうかを判定し、変更が起こった別個のユーザの数が閾値を上回ったときは別の回答を与える。
【００８６】
また、各実施形態において、クロークは、複数のスタンディングクエリに対して上述の方法を実行してもよい。
最後に、本明細書に開示されたクローク及び／または他のコンピュータデバイスは、本明細書に記載された機能を実行し、かつ／または本明細書に記載の結果を達成するために必要である、電子機器、ソフトウェア、メモリ、ストレージ、データベース、ファームウェア、論理機械または状態機械、マイクロプロセッサ、通信リンク、ディスプレイもしくは他の視覚または音声ユーザインターフェース、印刷装置、及び他の任意の入出力インターフェースを含んでいてもよいとも理解される。例えば、クロークは、少なくとも１つのプロセッサと、ランダムアクセスメモリ（ＲＡＭ）及びリードオンリーメモリ（ＲＯＭ）を含んでいてもよいシステムメモリ構造またはデータ記憶構造と、を有するコントローラを含んでいてもよい。少なくとも１つのプロセッサは、１つ以上の従来のマイクロプロセッサと、１つ以上の補助コプロセッサ、例えば数値演算コプロセッサ等と、を含んでいてもよい。本明細書で説明されたデータ記憶構造は、磁気メモリ、光学メモリ、及び／または半導体メモリの適切な組み合わせを含んでいてもよく、例えばＲＡＭ、ＲＯＭ、フラッシュドライブ、コンパクトディスクなどの光ディスク、及び／またはハードディスクまたはハードドライブを含んでいてもよい。
【００８７】
また、少なくとも１つのプロセッサを、本明細書に開示された方法を実行するように構成するために用意されたソフトウェアアプリケーションは、コンピュータ可読媒体から、少なくとも１つのプロセッサのメインメモリに読み込まれてもよい。本明細書で使用される、「コンピュータ可読媒体」という用語は、少なくとも１つのプロセッサ（または本明細書に記載のデバイスの任意の他のプロセッサ）に対して実行のための命令を提供し、または提供に関与する任意の媒体を指す。そのような媒体は、不揮発性媒体と揮発性媒体とを含むが、これらに限定されない多くの形態をとり得る。不揮発性媒体は、例えばメモリなどの、光学ディスク、磁気ディスク、光磁気ディスク等を含む。揮発性媒体は、典型的にはメインメモリを構成するダイナミックランダムアクセスメモリ（ＤＲＡＭ）を含む。コンピュータ可読媒体の一般的な形態は、例えば、フロッピーディスク、フレキシブルディスク、ハードディスク、磁気テープ、他の任意の磁気媒体、ＣＤ−ＲＯＭ、ＤＶＤ、他の任意の光媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭまたはＥＥＰＲＯＭ（ｅｌｅｃｔｒｏｎｉｃａｌｌｙ  ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ：電子的に消去可能なプログラム可能な読み出し専用メモリ）、ＦＬＡＳＨ−ＥＥＰＲＯＭ、他の任意のメモリチップまたはカートリッジ、もしくはコンピュータが読み取り可能な他の任意の媒体を含む。
【００８８】
各実施形態において、ソフトウェアアプリケーションで命令シーケンスを実行することにより、少なくとも１つのプロセッサが本明細書に記載されている方法またはプロセスを行うようにしているが、ソフトウェア命令の代わりに、あるいはソフトウェア命令と組み合わせて、ハードワイヤード回路を用いて本発明の方法またはプロセスを実施してもよい。したがって、本発明の実施形態は、ハードウェア及び／またはソフトウェアのいかなる特定の組み合わせにも限定されない。
【００８９】
例えば、ある実施形態において、データベースシステムのための匿名化方法が提供される。本方法は、クエリを受信し、クエリ中の１つ以上の攻撃コンポーネントを識別し、１つ以上の攻撃コンポーネントから１つ以上のノイズ要素を算出し、１つ以上のノイズ要素から固定ノイズまたは固定閾値を算出する。ある特定の実施形態において、本方法はさらに、クエリを検査して、１つ以上の攻撃コンポーネントをすべて識別可能であるようにクエリを確実に制約して、クエリがそのように制約されない場合はそのクエリを拒絶する。ある特定の実施形態において、本方法はさらに、１つ以上の攻撃コンポーネントのうちの少なくとも１つが切り取られたアライメントと一致しない範囲にある場合にクエリを拒絶する。ある特定の実施形態において、本方法はさらに、クエリ内にある１つ以上の攻撃コンポーネントのうちの少なくとも１つを、切り取られたアライメントと一致する範囲になるように修正する。ある特定の実施形態において、１つ以上の攻撃コンポーネントのうちの少なくとも１つからの列名を部分的に用いて、１つ以上のノイズ要素のうちの少なくとも１つを算出する。ある特定の実施形態において、１つ以上の攻撃コンポーネントのうちの少なくとも１つからの定数を部分的に用いて、１つ以上のノイズ要素のうちの少なくとも１つを算出する。ある特定の実施形態において、本方法はさらに、１つ以上の攻撃コンポーネントのうちの少なくとも１つの中にある列名に関連するデータベースから、１つ以上の値を要求して、データベースからの１つ以上の値を部分的に用いて、１つ以上のノイズ要素のうちの少なくとも１つを算出する。ある特定の実施形態において、要求された値はＵＩＤ列からのものである。ある特定の実施形態において、本方法はさらに、データストアから行と列を要求する。ある特定の実施形態において、本方法はさらに、要求した行と列に対して、回答が攪乱された統計的演算を、固定ノイズと固定閾値のうちの少なくとも１つを用いて算出する。ある特定の実施形態において、攪乱された回答は、要求された行のうちの、少なくとも固定閾値数の別個のＵＩＤを有する１つ以上の行による影響を受ける。ある特定の実施形態において、回答は固定ノイズを用いて攪乱される。ある特定の実施形態において、固定ノイズ量は、個々のユーザデータの影響を不明瞭にするのに十分な量である。ある特定の実施形態において、本方法はさらに、別個のＵＩＤの数が固定閾値を下回る場合には回答を阻止する。ある特定の実施形態において、本方法はさらに、代替クエリ探査プロシージャを実行して、代替クエリが離隔クエリである場合には所与の攻撃コンポーネントに関連するノイズ要素を除外する。ある特定の実施形態において、本方法はさらに、１つ以上のエポックのうちの最後のエポックの終了後のデータベースへの変更を無視する。ある特定の実施形態において、１つ以上のエポックはエポック階層構造を構成し、本方法はさらに、エポック階層構造の各層において、エポックから追加のノイズ要素を算出する。ある特定の実施形態において、本方法はさらに、変更を受けたある明確な数のユーザ数が閾値を上回った場合に一番最近のエポックを識別し、一番最近のエポックの前のエポックの終了後のデータベースへの変更を無視する。
【００９０】
他の実施形態は、データベースシステムのための匿名化方法を提供する。本方法は、スタンディングクエリへの回答を与え、データベースの変更を受け取り次第、その変更がスタンディングクエリの回答に影響を及ぼすかどうかを判定し、スタンディングクエリの回答の変更に関連する別個のユーザの組を記録し、記録された別個のユーザの組のユーザ数が閾値を上回ったときに、スタンディングクエリへの新たな回答を与える。
【００９１】
さらに他の実施形態は、データベースシステムのための匿名化方法を提供する。本方法は、元のクエリを受け取り、元のクエリ内にある１つ以上の攻撃コンポーネントを識別し、元のクエリへの回答内にある別個のユーザＩＤと、１つ以上の修正クエリの各々への回答内にある別個のユーザＩＤとの間の差を判定する。修正クエリの各々は、識別された１つ以上の攻撃コンポーネントのうちの少なくとも１つが削除される。差が閾値よりも小さい場合、本方法はさらに、元のクエリの回答が修正クエリの回答に一致するように、元のクエリへの回答に行を追加し、または、元のクエリへの回答から行を削除する。
【００９２】
本発明をその詳細な実施形態に関して図示・説明してきたが、当業者であれば、本発明の範囲から逸脱することなく、様々な変更を行ってもよく、その要素に等価物を代用してもよいことを理解するだろう。さらに、本発明の本質的な範囲から逸脱することなく、特定の状況または材料を本発明の教示に適合させるために、修正を行ってもよい。したがって、本発明は上述の詳細な説明に開示された特定の実施形態に限定されるものではなく、本発明は本開示の範囲の範疇にあるすべての実施形態を含むこととする。
【図１】
2019032814.tif 000003
【図２】
2019032814.tif 000004
【図３】
2019032814.tif 000005
【図４】
2019032814.tif 000006
【図５】
2019032814.tif 000007
【図６】
2019032814.tif 000008
【図７】
2019032814.tif 000009
【図８】
2019032814.tif 000010
【外国語明細書】
2019032814000001.pdf