(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0015】
[発明の詳細な説明]
以下に、本発明の例示的実施形態を詳細に参照し、その例を添付図面に示す。可能な限り、図面全体にわたって使用される同一の参照符号は、同一または同様の部分を示しており、重複した記載は行っていない。
【0016】
本明細書で使用されるように、「実質的に」、「一般に」及び「約」という語は、あるコンポーネントまたはアセンブリの機能的目的を達成するのに適した理想的な所望条件に対する、合理的に達成可能な製造及びアセンブリの公差内であるという状態を表す。
【0017】
理解されるように、クエリへの回答の匿名化は、削除または調整時に、どの攻撃コンポーネントが固定閾値よりも小さいユーザID(user ID:「UID」)の差をもたらしているのかを判定し、修正されたクエリに一致するクエリに関する行を追加または削除して、攻撃コンポーネントの影響を排除することによって行ってもよい。例えば、1人のユーザだけ、または数人のユーザだけが異なる、2つのクエリへの回答は、同一としてもよい。しかし、このような対処法は、元の分析者によるクエリと修正されたクエリとがどれくらいの量だけ異なるのかを決定するのにかなりの演算(処理能力)とメモリリソースを要する可能性がある。クエリから「WHERE salary = 100000」といったクエリ条件を削除した場合に、その結果得られる回答は、その条件が含まれていた元のクエリよりも何倍も多い行を含み得る。
【0018】
さらに、分析者は、正確な回答値を、一方のクエリは1つの条件を含み、他方のクエリはこの条件を逆にしたものを含んでいる一連のクエリ対を用いて習得する可能性もある。各対を足すと、ノイズの計数が行われる。一連のクエリ対を平均すると、ノイズは排除され、正確な計数が行われ得る。
【0019】
したがって、これより
図1を参照すると、本発明のある実施形態は、記憶媒体、例えばデータベースやデータストアに記憶されたデータに対して演算を行う。概念上は、各実施形態において、データとは、行120及び列110として構成されるデータセル140からなるテーブル130である。実際には、各実施形態において、データは、意味的にデータが行と列とのテーブルとして参照可能である限り、行及び列そのものとして記憶させる必要はない。各実施形態では、各列は名称を有してもよく、各データセル(または略して単にセル)は数値、文字列、または他の任意のデータタイプであってもよい。
【0020】
各実施形態において、概念的なテーブルは、本発明によって保護されているエンティティを識別する列を有していてもよい。エンティティは通常は人であるが、例えば、スマートフォンまたは車のような個人が使用するデバイス、またはプライバシーを保護すべき他のエンティティであってもよい。
図2を参照すると、本明細書では、これらのエンティティをユーザ、列をUID列230、セル値210及び220をUID、とそれぞれ称する。テーブル内の各ユーザは、一意のUID210及び220を有していてもよく、UID210及び220は例えば文字列または数字であってもよい。各実施形態では、所与のいずれの行のセルも、その行のUIDによって識別されるユーザの情報を含む。同じUIDは、複数の行に現れてもよく、例えば
図2に符号220で示すユーザ2である。
【0021】
本発明のある実施形態は、本明細書では「クローク」と称され、例えば、少なくとも1つのプロセッサと1つのメモリデバイスを有しているコンピュータであり、本明細書に開示される方法のうちの1つ以上を実行するように動作可能である。クロークを実現するソフトウェアは、例えばデータストアまたはデータベースを実現するソフトウェア内に統合されていてもよい。あるいは、クロークを実現するソフトウェアは、スタンドアロンであってもよく、明確に規定された標準インターフェースを介してデータストアとやりとりを行ってもよい。後者の場合、クロークソフトウェアを実行するハードウェアは、データストアソフトウェアを実行するハードウェアと同じであってもよく、または別個のマシンであってもよい。
【0022】
統計分析を行うデータストアまたはデータベースに対するクエリは、2つのステップからなる構成を特徴とし得る。ステップ1では、すべての行と列から、行と列のサブセットを選択する。ステップ2では、選択された行のうちの1つ以上の列からのセルに対して、統計的演算を行う。代表的な統計的演算としては、count(行数をカウントする)、count distinct(別個のセル値の数をカウントする)、avg(セル値の平均を算出する)、std−dev(セル値の標準偏差を算出する)、sum、max(最大セル値を選択する)、min、median等が挙げられる。
【0023】
各実施形態において、第1ステップでは、行ごとに概念的に実行される。このような実施形態では、各行に対して、指定された列のセルに対する比較演算が行われ、出力として演算ごとにTRUEまたはFALSEのブール値が生成される。次に、ブール論理を出力に適用して、その行を選択するか(TRUE)しないか(FALSE)を決定してもよい。これらの類の比較演算子とブール論理は、例えば(数ある句の中で)SQLのWHERE句とHAVING句に見出すことができる。慣習として、本明細書中でSQLのWHERE句を用いた例は、任意のクエリ言語に対するこの行選択プロセスの例示であり、SQLに限定するものではないことを理解すべきである。
【0024】
この一例は、[WHERE (age > 20) AND (gender = ‘male’)]である。ここでは、年齢(age)と性別(gender)とが列名である。最初の比較演算は数値型に対して実行される「より大きい(greater than)」であり、2番目の比較演算は、文字列に対して実行される「等しい(equal to)」である。2つの比較によって生成された2つのブール値は、次にブール演算「論理積(AND)」が行われる。結果がTRUEの場合はその行が選択される。そうでない場合、その行は選択されない。代表的な比較演算子としては、=、<、>、≦、≧、及び≠が挙げられる。代表的なブール演算子としては、AND、OR、及びNOTが挙げられる。
【0025】
各実施形態において、クロークは、データに対して実行される統計的演算に多少の攪乱を与えることによって匿名化する。これは回答の攪乱と称される。
理解されるように、回答の攪乱におけるある特定の演算は擬似乱数を必要とする。分析者がデータに関する具体的事実を高い信頼性をもって立証することを防ぐためには、一般にランダム性(乱雑さ)が必要である。この擬似乱数は、ある種の分布及びそれに関連するパラメータ、例えば、平均及び標準分布というパラメータを有するガウス分布、に由来してもよい。
【0026】
クロークの実施形態における匿名化は、固定乱数と称される特別な種類の疑似乱数の発生を使用する。固定乱数とは、その値がクロークによって制御可能である擬似乱数である。この制御によって、クロークは、同じクエリは確実に同じノイズを生成し、一方で、異なる2つのクエリでありながら同じ回答を返す2つのクエリが、確実に異なるノイズを有するようにすることができる。
【0027】
ある実施形態において、クロークは、擬似乱数発生器(Pseudo−Random Number Generator:PRNG)のシードを設定するのに用いられる値を制御することによって、固定乱数の値を制御する。クロークが同じシードを使用する場合、PRNGは同じ固定乱数を生成する。クロークが異なるシードを使用する場合、PRNGは高確率で異なる固定乱数を生成する。ある実施形態において、クロークは、データベースが返した行から導出された情報を、全部または一部使用して、固定乱数を制御する。ある実施形態において、クロークは、クエリ自体から導出された情報を、全部または一部使用して、固定乱数を制御する。
【0028】
各実施形態において、クローク内の固定乱数の2つの共通する使用法が存在してもよい。1つは固定ノイズで、もう1つは固定閾値である。
固定ノイズとは、正確な回答を不明瞭にするために、数値回答にノイズを加えるメカニズムを指す。一実施形態では、固定ノイズは、平均がゼロである固定乱数である。ゼロ平均を使用することにより、回答の期待値は真の回答と等しくなるが、これは重要な統計的属性である。非ガウス分布を使用してもよい。原理的には他の手段を用いることもできる。
【0029】
ある閾値に基づいて決定を行う必要がある場合、クローク内では固定閾値が用いられてもよい。例えば、クロークが、回答に寄与する別々のユーザをおおよそK人必要とする場合、Kは常に正確にKではなく、固定閾値である(すなわち、固定乱数値に基づく)と考えられる。一実施形態において、固定閾値は、平均がKである固定乱数である。固定乱数がガウス分布から取得されると仮定すると、標準偏差は、ゼロ以下の値がほぼ確実に存在し得ないように選択される。例えば、標準偏差はK/4以下として選択され得る。一実施形態において、確かな下限が固定閾値に設定される。例えば、固定乱数が1未満である場合でも、固定閾値は決して1未満にはなり得ないものであってもよい。
【0030】
理解されるように、データベースから何を知り得るかを分析者が制御できる主な方法は、比較演算とそれに関連するブール論理によるものである。特に、分析者は、得られる回答が同じであるか、またはただ1人のユーザ分だけ異なるかのどちらかである異なる2つのクエリに対する回答を比較することによって、データベース内のあるユーザに関する情報の推論を試みることができる。
【0031】
例えば、1つは比較演算及びブール論理[(disease = ‘AIDS’) AND (job title ≠ ‘CEO’)]、もう1つは[(disease = ‘AIDS’)]という、2つのクエリを分析者が作成したと仮定する。CEOがAIDSに罹患している場合、そのCEOは最初のクエリから除外されて、2番目のクエリに含まれる。CEOがAIDSに罹患していない場合は、そのCEOは両方のクエリから除外される。分析者がAIDSに罹患しているかどうかを判定するために、分析者がこれを利用しようとする可能性もある。
【0032】
別の例では、分析者は、CEOの給与が1000000ドルであり、かつ、これがデータベース内で最高の給与額であることを知っている可能性がある。この場合、分析者は、以下の比較と論理を有する2つのクエリ[(disease = ‘AIDS’) AND (salary < 1000000)]及び[(disease = ‘AIDS’) AND (salary < 100001)]を生成できる。CEOは最初のクエリから除外されて、CEOがAIDSに罹患している場合のみ2番目のクエリに含まれる。
【0033】
これらの類の攻撃は差分攻撃と称されており、その理由は、分析者は、2つのクエリの回答の差を探して、ユーザに関する何かを推論するからである。分析者は差を実行するために比較演算とブール論理との使用を試みることもあるので、比較演算とそれに関連する論理を攻撃コンポーネントと称する。
【0034】
差分攻撃から防御するために、クロークは、異なる攻撃コンポーネントを有する2つのクエリが、2つのクエリへの回答が同じであっても、確実に異なるノイズを有するようにしてもよい。その結果、2つの回答が異なるという事実がある場合は、回答内にユーザの有無を開示しない。
【0035】
理解されるように、分析者は、攻撃コンポーネントを不明瞭になるように符号化することによって(例えば、数学的構文を有するブール論理を実行することによって)、クロークによる攻撃コンポーネントの検出を防ごうとする可能性がある。ある実施形態において、クロークは、こういった可能性のある符号化がないかどうかについて、クエリを検査し、このような符号化を有するクエリを拒絶する。
【0036】
ある実施形態において、固定ノイズ及び固定閾値は、複数の固定乱数値に基づいてもよい。固定ノイズ及び固定閾値がガウス分布を用いる場合には、複数の固定乱数値を合計して固定ノイズまたは固定閾値を生成する。固定ノイズまたは固定閾値を含む個々のノイズ値は「ノイズ要素」と称される。理解されるように、ガウス分布以外の分布をノイズ要素に使用してもよいし、合計以外の演算を使用してノイズ要素を結合してもよい。
【0037】
ノイズ要素は、同じ攻撃コンポーネントに対して同じノイズ値を生成するという点で固定されている。その結果、同じクエリを繰り返した場合にはノイズが同じになり、したがって、例えばノイズ値が純粋な疑似乱数値である場合のようには、ノイズ値を平均化して消すことができない。一実施形態において、ノイズ要素はゼロ平均のガウス分布から取り出される。
【0038】
2つの攻撃コンポーネントは、両者が同じ意味を有するならば、同じとみなされる。よって、例えば、攻撃コンポーネント[salary = 100000]と[salary = 2*50000]は同じとみなされ、対応するノイズ要素は同じシードから導出され得る。
【0039】
図3は、クエリ10からノイズ560まで通じる各要素を図示し、これらの要素間の関係性を示す。
図4は、クエリ10からシード320まで進む際に関与するステップを図示する。
図3に示されるように、クエリ10は複数の攻撃コンポーネント500を有し得る。攻撃コンポーネントの例は[salary = 100000]である。攻撃コンポーネントは通常、「salary」、「100000」、「=」等のいくつかのアスペクト550(または、相)を有する。1つ以上のアスペクト550を用いて、例えばノイズ要素をハッシュすることによってシードコンポーネント515が生成される。攻撃コンポーネント500からシードコンポーネント515を取得するプロセスは、
図4にステップ530として図示される。このステップは、データベース16からデータを要求して解読することを含んでもよい。
【0040】
図4のステップ520で示されるように、所与の一つの攻撃コンポーネントから複数のシードが生成され得る場合があるが、通常は、複数のシードコンポーネント515が結合されて一つのシード320を生成する。各シードを用いて一つのノイズ要素555(すなわち、疑似ランダムガウス分布値)を生成し、複数のノイズ要素を結合してノイズ560を生成する。
【0041】
ある実施形態において、各シードコンポーネントは、攻撃コンポーネントの一つのアスペクトのハッシュであり、複数のシードコンポーネントをXOR演算により組み合わせ、その結果得られた値をXOR演算により秘匿乱数と組み合わせて、シードを生成する。理解されるように、攻撃コンポーネントの1つ以上のアスペクトからシードを生成する方法は、他にも多く存在する。
【0042】
ある実施形態において、シードの1つ以上のアスペクトは、攻撃コンポーネント内の1つ以上の列の名称である。ある実施形態において、別個の列名はそれぞれ個別にノイズ要素に寄与する(すなわち、攻撃コンポーネント内に別個の2つの列名があれば、2つのノイズ要素を生成することになる)。別の実施形態では、複数の列名を結合して1つのノイズ要素を生成する。ある実施形態において、各列名をハッシュしてシードコンポーネントを生成する。
【0043】
ある実施形態において、クロークは、データベース自体がどのようにして攻撃コンポーネントを処理するかを観察することによって、シードのアスペクトを導出する。
図4を参照すると、クロークは要求505をデータベース16に送信してもよく、データベース16は、攻撃コンポーネント内で用いられている1つ以上の列の値を含むデータ510を返す。ステップ530では、クロークはこれらの値を用いて、1つ以上のシード320に寄与する1つ以上のシードコンポーネント515を導出してもよい。
【0044】
例えば、クロークがクエリ[SELECT count(*) FROM table WHERE salary = 100000]を受け取ると仮定する。クロークはデータベースから給与(salary)列を要求し、受け取った値(この場合すべての値が100000である)を使用してシードコンポーネントを導出する。
【0045】
別の例では、クロークはクエリ[SELECT count(*) FROM table WHERE salary != 100000](給与(salary)が100000に等しくないすべての行)を受け取る。ここで再び、クロークはデータベースから給与(salary)列を要求し、受け取った値を使用してシードコンポーネントを導出する。
【0046】
別の例では、クロークはクエリ[SELECT count(*) FROM table WHERE salary + age = 100000]を受け取る。クロークはデータベースから給与(salary)列と年齢(age)列を要求することができる。クロークは、給与列からから導出されたシードに対するシードコンポーネントと、年齢列から導出されたシードに対するシードコンポーネントとを生成してもよい。あるいは、クロークは1つのシードに対して複数のシードコンポーネントを生成してもよい。
【0047】
ある実施形態において、クロークは、要求された列からの別個の値をすべて使用して、シードコンポーネントを導出する。ある実施形態において、別個の値はそれぞれハッシュされ、その結果得られる複数のハッシュ値をXOR演算により組み合わせてシードコンポーネントを生成する。攻撃コンポーネント内で用いられる列のデータベースによって報告された複数の値からシードコンポーネントを導出する他の実施形態は、当業者にとって明らかであろう。
【0048】
ある実施形態において、ノイズ要素はUID列から導出される。この場合、UID列はシードコンポーネントを導出するのに用いられる要求された列である。
ある実施形態において、クロークは、攻撃コンポーネント内に現れる1つ以上の定数からシードコンポーネントを生成する。例えば、攻撃コンポーネント[salary = 100000]では、100000が定数である。ある実施形態において、1つ以上の定数の各々をハッシュして、XOR関数により組み合わせる。
【0049】
ある実施形態において、クロークは、データベースから列を要求するのではなく、攻撃コンポーネント内の列に対してデータベースは何を返すかを予測し、この予測結果を使用してシードコンポーネントを生成する。例えば、攻撃コンポーネントが[salary = 99999 + 1]の場合、クロークは、給与(salary)列が100000の値のみを含んでいると予測し、よって、100000の値を使用してシードコンポーネントを生成することができる。
【0050】
ある実施形態において、攻撃要素は、値の範囲を規定する一対の不等式からなる。例えば、クエリ[SELECT count(*) FROM table WHERE age >= 40 AND age < 50]では、年齢(age)の範囲を要求する。クロークは、範囲を規定するこの2つの不等式を1つの攻撃コンポーネントとしてみなし得る。ある実施形態において、クロークは、両方の定数を1つのシードのための複数のシードコンポーネントとして使用する。
【0051】
ある実施形態において、クロークは、攻撃コンポーネント内の比較演算をシードコンポーネントとして使用する。比較演算の例として「=」と「<」が挙げられる。
ある実施形態において、あるクエリ内で同じ攻撃コンポーネントが複数回現れる場合、クロークは、カウンタからの値をこのようなコンポーネントの各々に割り当てて、このカウンタ値をシードコンポーネントとして使用する。例えば、クエリ[SELECT count(*) FROM table WHERE salary = 100000 AND salary = 99999 + 1]では、クロークは、各攻撃コンポーネントから、別個のシードとその結果得られるノイズ要素を導出することができる。意味的に同一な攻撃コンポーネントの各々に対して、クロークは、カウンタ値、つまりカウンタ=0を[salary = 100000]に、カウンタ=1を[salary = 99999 + 1]に割り当てる。ある実施形態において、カウンタ値のハッシュはシードコンポーネントである。
【0052】
ある実施形態において、ノイズ要素の総数をシードコンポーネントとして使用する。
理解されるように、シードコンポーネントとして使用してもよい種々の攻撃コンポーネントアスペクトが存在する。
【0053】
ある実施形態において、固定ノイズは、ゼロ平均といくらかの標準偏差SDを有するガウス分布から生成されてもよい。固定閾値は、平均がKでいくらかの標準偏差SDを有するガウス分布から生成されてもよい。多数のノイズ要素から固定ノイズまたは固定閾値を生成するために、各ノイズ要素はゼロ平均を有するガウス分布を用いる。ノイズ要素は合計される。各ノイズ要素の標準偏差は、最終的な固定ノイズの標準偏差がSDになるように選定されてもよい。この場合、各ノイズ要素の標準偏差はSDよりも小さい。あるいは、個々のノイズ要素にいくらかの最小標準偏差SDminを与えてもよい。この場合、その結果得られる最終的な標準偏差はSDよりも大きくてもよい。
【0054】
合計されたノイズ要素は平均がゼロである。固定ノイズは平均がゼロであるので、最終的な固定ノイズはノイズ要素の合計である。固定閾値は平均がKであるので、ノイズ要素の合計にKを加えて最終的な固定閾値を生成する。ある実施形態において、Kの値は標準偏差SDの関数である。例えば、K=4SD+1により、ノイズ閾値が1以下となる可能性を確実に低下させる。
【0055】
次に、回答の攪乱を説明する。各実施形態において、回答の攪乱を行う統計的演算への入力は、テーブルであってもよい。テーブルは、少なくともUID列を含んでいてもよい。テーブルはさらに、他の列も同様に含んでいてもよい。各実施形態において、各統計的演算(カウント(count)、合計(sum)、平均(avg)等)に対して、実行可能な回答攪乱方法が種々存在し得る。
【0056】
したがって、そのような実施形態において、実行可能な方法は次の3つの属性を有する。第1に、分析者が演算の出力からデータベース内の個人に関するいかなることも演繹することは不可能または極めてまれでなければならない。第2に、演算は、本明細書で規定されているように固定されなければならない。言い換えると、同じ意味を有するクエリを繰り返し実行すると、同じノイズ要素が生成されるが、意味的に異なるクエリを実行すると、異なるノイズ要素を生成する確率がかなり高い。第3に、演算によって生成されるいずれの回答も、ある固定閾値数のユーザのセル値に基づいていなければならない。これら3つの属性を有するあらゆる統計的演算が、クローク内での回答の攪乱の実施形態において使用可能である。理解されるように、これらの属性のうちの3つすべてではなくその一部を有する回答攪乱方法も、やはり価値のある匿名化の利点をもたらし得る。
【0057】
次に、上述の3つの属性を有する統計的演算の例示的実施形態を説明する。統計的演算は2種類に分類され得る。一方は、演算の出力が特定のセル値である。これは単一行統計出力と称される。例としては、最小値(min)、最大値(max)、及び中央値(median)が挙げられる。匿名化がない場合、これらの統計的演算の各々は単一セルの正確な値を生成する。もう一方は、演算の出力が複数の入力セルを複合したものである。これは、複数行統計出力と称される。複数行統計出力の例としては、カウント(count)、合計(sum)、平均(avg)、及び標準偏差(std−dev)が挙げられる。出力は、通常は単一セルの値ではなく、セル値のすべてから導出された値である。
【0058】
単一行統計出力の場合、各実施形態において、クロークは、回答攪乱関数の出力が真のセル値であるのは、その値を共有する他のセルがいくつかある場合であり、かつその場合に限ることを保証する。その値を共有する他のセルが不十分である場合、回答攪乱関数の出力は、他のセルをいくつか複合したものとなる。
【0059】
一実施形態において、他のセルの数は固定閾値である。
図5を参照すると、中央値の統計的演算の回答の攪乱の例示的実施形態には、2つの入力、つまり、本明細書に記載のように算出された固定閾値T(符号378)とテーブル380とが存在する。テーブル380は、UID列と、中央値を算出する列(中央値列)とを含む。ステップ358で、テーブル380から真の中央値のユーザ(中央値ユーザ)を算出する。ステップ365で、この中央値ユーザよりも値が上の別個のユーザをT人、値が下の別個のユーザをT人選択する。ステップ370で、選択されたユーザと中央値ユーザの平均を計算する。ステップ375でこの平均の端数処理をすることによって、回答を作成する。
【0060】
この実施形態では、回答の攪乱の3つの原理を説明する。まずは固定演算であり、同じ固定閾値は同じ回答を生成し、異なる固定閾値は異なる回答を作成する可能性が非常に高い。次に、ステップ365において選択されたユーザがすべて同じ値を有する場合、回答は適切な数のユーザ(2T+1)によって共有される。ステップ365において選択されたユーザのすべてが同じ値を有するわけではない場合、回答はその数のユーザからの複合である。いずれにしても、回答は固定閾値数のユーザに基づく。最後に、分析者が個々のユーザに関する何らかのことを演繹することはほぼ不可能なことである。これは、1つには複数のユーザが回答に寄与したからであり、1つには固定閾値のために、寄与したユーザの人数を分析者が知ることが難しくなっているからであり、さらには、端数処理によって、どの値が平均値に寄与した可能性があるのかを判断することが困難になるからある。
【0061】
図6を参照すると、回答攪乱を伴う最大値の統計的演算のある実施形態は、中央値演算の実施形態と類似する。主な違いは、まさに最高値の閾値T1は無視されることである(ステップ390及び395)。これにより、範囲外の高い値のせいで算出された平均値が偏る結果として真の最大値ユーザに関する情報が漏れてしまう状況を防止する。
【0062】
次に
図7では、合計に対する、回答の攪乱を伴う複数行統計的演算を示す。ここでは、すべての値は正であると仮定する。第1ステップ435では、個々のユーザそれぞれの合計を算出し、これにより、ユーザごとに潜在的に複数の行が存在するのではなく、そのユーザごとに1つの、ユーザの合計を含む行が存在する、修正されたテーブル430が作成される。この修正されたテーブルから処理して、ステップ390及びステップ395で、最高値を有する2つのユーザグループを選択し、ステップ400で2番目のグループの平均を算出する。これらは、max演算で実行される同じステップに似ている。ステップ410で、1番目のグループの値を、2番目のグループから得られた平均値に置き換える。これにより最高値のユーザの影響が排除されるが、これらのユーザからの何らかの寄与は残っている。ステップ415及び420で、テーブル内の全セルの合計及び平均を算出する。ステップ425で、ノイズの標準偏差としてステップ420で算出した平均値を用いて、固定ノイズを生成する。最後に、ステップ430で、そのノイズを合計に加えることで、回答を作成する。
【0063】
正と負の値がある場合、
図7の演算を2回、つまり、正の数に対して1回と、負の数の絶対値に対して1回実行してもよい。最終的な回答は、前者から後者を差し引いたものとなる。
【0064】
各実施形態では、回答の攪乱の3つの原理を満たす。理解されるように、各実施形態において、それは固定演算である。したがって、各実施形態において、どの中間値も、T1及びT2の最高値のユーザ(400及び410)か、またはユーザの完全な集合(415及び420)のいずれかである1組のユーザに基づいていてもよい。よって、さらに理解されるように、各実施形態において、外れ値の影響を除去すること、及びあらゆるユーザの平均寄与に比例するノイズを加えることによって、個々のユーザに関する何らかのことを演繹できるということはほぼ起こりえない。
【0065】
さらに、各実施形態において、カウントの統計的演算は、個々のユーザごとの値の合計を算出する(ステップ435)ことを除いて非常に類似していてもよく、その代わりに個々のユーザ当たりの行数が用いられる。
【0066】
なお、中央値、最大値、最小値、合計値、及びカウント値の演算の実施形態は例示的なものであり、ここでは固定演算の原理、一組のユーザからの回答の導出の原理、及び個々のユーザに関する情報が回答から演繹できる可能性をほぼ無くす原理を説明するために、例として用いた。理解されるように、他の多くの特定の実施形態は、これらの、及び他の統計的演算に対して、同じ原理を用いてもよい。
【0067】
ここまで、クエリは、所与の任意のクエリが1つの回答を作成するかのように説明されてきた。つまり、クエリが行を選択して1つのテーブルを生成し、このテーブルに回答の攪乱を伴う統計的演算が施される。しかし、多くのクエリ言語では、何らかの手法で行をグループ化することができ、その結果、このようなグループの各々に統計的演算が適用される。例えば、SQLの場合、これはGROUP BY句で行われる。この一例は、[SELECT age, count(*) FROM table GROUP BY age]である。このクエリは、別個の年齢のそれぞれに対して、行数のカウントを別々に報告する。
【0068】
各実施形態において、このようなグループ化はそれぞれ、クロークの回答攪乱関数によって別々のテーブルのように扱われてもよい。言い換えれば、
図5、
図6、及び
図7のテーブル380は、各グループのテーブルであると理解される。グループ化すると、セル自体の値(上述の例では年齢)の報告が引き起こされる可能性がある。セルの値自体が1人のユーザの機密情報であるかもしれないため、これによりプライバシーの問題が発生する可能性がある。このようなことから守るために、クロークのある実施形態は、セル値のグループ化において別個のUIDの数が固定閾値を下回ると、セル値の出力を阻止する。この演算は、グループ化関数から得られた結果だけでなく、回答の攪乱を伴う統計的演算への任意のテーブル入力にも適用されてもよい。
【0069】
各実施形態において、攻撃コンポーネントは、被害者だけを含むかまたは排除する量だけ範囲を拡大または縮小することによって作成される。例えば、分析者が、被害者の給与額が正確に135,225ドルであり、かつ、その給与額であるデータストア内の唯一の人であることを知っている場合、分析者は、WHERE句[WHERE disease = ‘AIDS’ AND salary < 135225]及び[WHERE disease = ‘AIDS’ AND salary < 135226]を有する2つのクエリを使用して差分攻撃を作成できる。ここで、前者のWHERE句を有するクエリは被害者を除外し、後者のクエリは、被害者がAIDS診断を受けている場合に含まれるように調整されている。
【0070】
このことから防御するために、クロークのある実施形態では、切り取られた(snapped)アライメントを使用する。ここでの基本的な考え方は、範囲は所定の切り取られた許容アライメントに限定されることである。範囲のサイズと範囲のオフセットの両方がこのようにして限定される。切り取られたアラインメントの一例は、範囲のサイズが2n及び1/2nのうちの1つであるように制限され、オフセットがそれぞれ2n及び1/2nの偶数倍であるように限定されるものであり、ここでnは整数(0、1、2など)であり得る。この規定での許容範囲の例として、8〜15、2〜3、及び100.5〜100.75が挙げられる。この規定のもとでは許容されない範囲は、2〜5(サイズの範囲「3」は許されない)と9〜17(サイズの範囲「8」は8の倍数に揃えなければならない)である。範囲を制限したままで、多少の柔軟性を加えるには、任意の範囲のオフセットを、範囲のサイズの1/2だけシフトできることが許可されている可能性がある。これにより、例えば、4〜11の範囲(4だけシフトされたサイズ8)が可能になるが、依然として9〜17ではない。
【0071】
理解されるように、切り取られたアライメントの多種多様な規定が可能である。例えば、日時の場合、アライメントは、秒、分、時、日、月、年のような自然な時間の単位に沿ったものであり得る。または、このアライメントは、さらに10進数に基づいたものであってもよく、例えば1x10n、2x10n、5x10nの組からのサイズとオフセットが与えられ得る。ここで、nは正または負の整数である。
【0072】
ある実施形態において、クエリ自体が、切り取られたアライメントに従っていなければならない。任意の不等式によって範囲の上限と下限の両方が指定されなければならず、その範囲は切り取られなければならない。従っていないクエリは削除してもよい。あるいは、切り取られたアライメントに合うように、範囲をクロークによって修正してもよい。ある実施形態において、クエリ自体は範囲の上限だけ、または下限だけを指定し、両方を指定するものではない。範囲の指定されていない方の端は、自動的に正または負の無限大とみなされる。無限大は切り取られたアライメントとしては有効ではないので、各実施形態では、クロークは、範囲の指定されていない方の端の適切な値を決定し、それに応じて切り取られたアライメントを設定することができる。ある実施形態において、クロークは、範囲の指定されていない方の端を、回答の攪乱を伴う最小または最大の統計的演算により定める。
【0073】
理解されるように、本発明の各実施形態は、所与のクエリと、個々の攻撃コンポーネントを除去するか、または、切り取られたアライメントの範囲をより小さな切り取られたアライメントの範囲に縮小するかのいずれかによって生成され得る代替クエリとの間における、回答内の別個のUIDの数の差を判断してもよい。このプロセスは「代替クエリ探査」と称される。所与のクエリと代替クエリは、別個のUIDの数が閾値を下回る場合には、「隣接クエリ」と称される。そうでない場合は、所与のクエリと代替クエリは「離隔クエリ」と称される。この閾値は固定閾値であってもよい。
【0074】
理解されるように、本願に記載されているような固定ノイズと固定閾値との生成にノイズ要素を用いることを、代替クエリ探査と組み合わせてもよい。ある実施形態において、所与の攻撃コンポーネントに対する代替クエリ探査によって、結果として得られるクエリが離隔クエリであると判定された場合、この攻撃コンポーネントに関連するノイズ要素をノイズ要素の組から除外してもよい。このようにして、回答内のノイズ量を減らすことができる。
【0075】
理解されるように、所与のクエリと代替クエリが隣接クエリであることが分かった場合、クロークは、この所与のクエリの行を、所与のクエリの出力が代替クエリと同一になるように調整してもよい。この演算は「行調整」と称される。理解されるように、行調整は、差分攻撃の2つのクエリを、両クエリの間に差が有ると無いとに関わらず強制的に同一にすることによって、差分攻撃から防御する。
【0076】
ある実施形態において、ノイズ要素は行調整と組み合わせてもよい。この場合、回答が攪乱された、ノイズ要素を有する統計的関数が、行調整されたデータに対して実行される。
【0077】
別の種類の差分攻撃は、データベースへの動的変化を活用する。時間Tに、分析者がクエリを作成すると仮定する。時間Tよりも後の時間T1に、例えば既存値の追加、削除、または変更によって1人のユーザのデータを修正する。時間T1よりも後の時間T2に、同じクエリを繰り返す。2番目のクエリへの回答が1番目のクエリへの回答とは異なるとすると、それは、修正されたデータがクエリの条件と合致したためである。その結果、分析者は、1人のユーザの修正されたデータについて知ることになるので、そのユーザのプライバシーを危険にさらしてしまう。
【0078】
ある実施形態において、データベースへの変更はそれぞれ、変更がなされた時刻を表すタイムスタンプと称される値を含む。
ある実施形態において、クロークは時間を、時間エポックと称される時間帯に分割する。時間エポックの例としては、1時間や1日が挙げられる。ある実施形態において、クエリに回答するときに、クロークは、最後のエポックよりも後のタイムスタンプを有するデータベースへの変更を無視する。その結果、どのような所与の繰り返しのクエリという状況においても、唯一のユーザのデータが2つのクエリの間で変更されるということは極めて稀となり得る。
【0079】
次に
図8を参照すると、ある実施形態において、時間エポックは階層的に構成されていて、より高いレベルのエポックがより低いレベルのエポックを取り囲んでいる状態である。例えば、最も低いレベルの時間エポック600は1日であってもよい。高いレベル側の次の時間エポック605は2日である等であってもよい。ある実施形態において、クエリに回答するときに、クロークは、最後の最も低いレベルのエポックよりも後のタイムスタンプを有するデータベースへの変更を無視する。
【0080】
ある実施形態において、クロークは、ノイズ要素を各エポックに対応付けるが、ここで各ノイズ要素のシードはエポックに対して一意である。ある実施形態において、クエリに回答するときに、クロークは、クエリを受け取った時点の階層構造の各レベルのエポックからのノイズ要素から、ノイズを構成する。
図8に示されるように、「現在」と記された時点に受け取られたクエリは、zと表示された1日単位のエポック、jと表示された2日単位のエポック、eと表示された4日単位のエポック、bと表示された8日単位のエポック、そして場合によってはさらに高層にあるエポック(図示せず)から、ノイズ要素を生成する。
【0081】
理解されるように、エポックは可変の時間長であってもよい。
図8において1日単位、2日単位、4日単位等のエポックを用いているのは、例示のためである。
ある実施形態において、クロークは、所与のレベルにおいて、あるエポック(「第1エポック」)から次のエポック(「第2エポック」)までで値が変化した一意のユーザの数を算出する。クロークは、変化した別個のユーザの数が閾値を超えるかどうかを判断する。ある実施形態において、閾値はノイズ閾値である。
【0082】
ある実施形態において、クロークがクエリに回答するとき、クロークは、別個のユーザにおける変更が閾値を上回った同一のレベルで隣接し合う最新のエポックの対を見出す。クエリに回答する際に、クロークは、対の第1エポックの終了後に起こった変更はすべて無視する。再度
図8を参照して、「現在」と表示された時点でクエリを受け取ったと仮定する。さらに、1日単位のエポックyの間に変更が起こった別個のユーザの数が閾値を超えたと仮定する。クエリに回答する際、クロークは1日単位のエポックxの終了後に起こったデータベースへの変更はすべて無視するであろう。
【0083】
今度は、1日単位のエポックyの間に変更が起こった別個のユーザの数が閾値を超えず、1日単位のエポックxの間に変更が起こった別個のユーザの数が閾値を超えず、1日単位のエポックwの間に変更が起こった別個のユーザの数が閾値を超えない、と仮定する。ただし、さらに、2日単位のエポックiの間に変更が起こった別個のユーザの数が閾値を超えたと仮定する。クエリに回答する際、クロークは2日単位のエポックhの終了後に起こったデータベースへの変更はすべて無視するであろう。
【0084】
理解されるように、分析者は、各エポックにおいて同じクエリを繰り返すことにより、最新の回答を得ることができる。さらに、クロークは、各エポックにおいて、自発的に所与のクエリへの回答を与えることができる。クロークが定期的な回答を与える原因となるクエリは、スタンディングクエリと称される。
【0085】
したがって、各実施形態において、分析者は、スタンディングクエリへの回答を受け取るために次のエポックまで待ちたがらない可能性もある。このような実施形態では、まず、クロークがスタンディングクエリを受け取ったときに、クロークが回答を与える。続いて、データベースへの変更が起こるたびに、クロークは、この変更の結果、回答を修正することになるのかどうかを判定してもよい。判定結果が「修正が必要」の場合、クロークは、変更が適用されたユーザのIDを記録する。別個のユーザの数が閾値を上回ったら、クロークは、最後に与えた回答以降の変更の全てを含む新たな回答を与える。この回答を与えた後、クロークは再度、新たな変更の結果、一番最近の回答を修正することになるのかどうかを判定し、変更が起こった別個のユーザの数が閾値を上回ったときは別の回答を与える。
【0086】
また、各実施形態において、クロークは、複数のスタンディングクエリに対して上述の方法を実行してもよい。
最後に、本明細書に開示されたクローク及び/または他のコンピュータデバイスは、本明細書に記載された機能を実行し、かつ/または本明細書に記載の結果を達成するために必要である、電子機器、ソフトウェア、メモリ、ストレージ、データベース、ファームウェア、論理機械または状態機械、マイクロプロセッサ、通信リンク、ディスプレイもしくは他の視覚または音声ユーザインターフェース、印刷装置、及び他の任意の入出力インターフェースを含んでいてもよいとも理解される。例えば、クロークは、少なくとも1つのプロセッサと、ランダムアクセスメモリ(RAM)及びリードオンリーメモリ(ROM)を含んでいてもよいシステムメモリ構造またはデータ記憶構造と、を有するコントローラを含んでいてもよい。少なくとも1つのプロセッサは、1つ以上の従来のマイクロプロセッサと、1つ以上の補助コプロセッサ、例えば数値演算コプロセッサ等と、を含んでいてもよい。本明細書で説明されたデータ記憶構造は、磁気メモリ、光学メモリ、及び/または半導体メモリの適切な組み合わせを含んでいてもよく、例えばRAM、ROM、フラッシュドライブ、コンパクトディスクなどの光ディスク、及び/またはハードディスクまたはハードドライブを含んでいてもよい。
【0087】
また、少なくとも1つのプロセッサを、本明細書に開示された方法を実行するように構成するために用意されたソフトウェアアプリケーションは、コンピュータ可読媒体から、少なくとも1つのプロセッサのメインメモリに読み込まれてもよい。本明細書で使用される、「コンピュータ可読媒体」という用語は、少なくとも1つのプロセッサ(または本明細書に記載のデバイスの任意の他のプロセッサ)に対して実行のための命令を提供し、または提供に関与する任意の媒体を指す。そのような媒体は、不揮発性媒体と揮発性媒体とを含むが、これらに限定されない多くの形態をとり得る。不揮発性媒体は、例えばメモリなどの、光学ディスク、磁気ディスク、光磁気ディスク等を含む。揮発性媒体は、典型的にはメインメモリを構成するダイナミックランダムアクセスメモリ(DRAM)を含む。コンピュータ可読媒体の一般的な形態は、例えば、フロッピーディスク、フレキシブルディスク、ハードディスク、磁気テープ、他の任意の磁気媒体、CD−ROM、DVD、他の任意の光媒体、RAM、PROM、EPROMまたはEEPROM(electronically erasable programmable read−only memory:電子的に消去可能なプログラム可能な読み出し専用メモリ)、FLASH−EEPROM、他の任意のメモリチップまたはカートリッジ、もしくはコンピュータが読み取り可能な他の任意の媒体を含む。
【0088】
各実施形態において、ソフトウェアアプリケーションで命令シーケンスを実行することにより、少なくとも1つのプロセッサが本明細書に記載されている方法またはプロセスを行うようにしているが、ソフトウェア命令の代わりに、あるいはソフトウェア命令と組み合わせて、ハードワイヤード回路を用いて本発明の方法またはプロセスを実施してもよい。したがって、本発明の実施形態は、ハードウェア及び/またはソフトウェアのいかなる特定の組み合わせにも限定されない。
【0089】
例えば、ある実施形態において、データベースシステムのための匿名化方法が提供される。本方法は、クエリを受信し、クエリ中の1つ以上の攻撃コンポーネントを識別し、1つ以上の攻撃コンポーネントから1つ以上のノイズ要素を算出し、1つ以上のノイズ要素から固定ノイズまたは固定閾値を算出する。ある特定の実施形態において、本方法はさらに、クエリを検査して、1つ以上の攻撃コンポーネントをすべて識別可能であるようにクエリを確実に制約して、クエリがそのように制約されない場合はそのクエリを拒絶する。ある特定の実施形態において、本方法はさらに、1つ以上の攻撃コンポーネントのうちの少なくとも1つが切り取られたアライメントと一致しない範囲にある場合にクエリを拒絶する。ある特定の実施形態において、本方法はさらに、クエリ内にある1つ以上の攻撃コンポーネントのうちの少なくとも1つを、切り取られたアライメントと一致する範囲になるように修正する。ある特定の実施形態において、1つ以上の攻撃コンポーネントのうちの少なくとも1つからの列名を部分的に用いて、1つ以上のノイズ要素のうちの少なくとも1つを算出する。ある特定の実施形態において、1つ以上の攻撃コンポーネントのうちの少なくとも1つからの定数を部分的に用いて、1つ以上のノイズ要素のうちの少なくとも1つを算出する。ある特定の実施形態において、本方法はさらに、1つ以上の攻撃コンポーネントのうちの少なくとも1つの中にある列名に関連するデータベースから、1つ以上の値を要求して、データベースからの1つ以上の値を部分的に用いて、1つ以上のノイズ要素のうちの少なくとも1つを算出する。ある特定の実施形態において、要求された値はUID列からのものである。ある特定の実施形態において、本方法はさらに、データストアから行と列を要求する。ある特定の実施形態において、本方法はさらに、要求した行と列に対して、回答が攪乱された統計的演算を、固定ノイズと固定閾値のうちの少なくとも1つを用いて算出する。ある特定の実施形態において、攪乱された回答は、要求された行のうちの、少なくとも固定閾値数の別個のUIDを有する1つ以上の行による影響を受ける。ある特定の実施形態において、回答は固定ノイズを用いて攪乱される。ある特定の実施形態において、固定ノイズ量は、個々のユーザデータの影響を不明瞭にするのに十分な量である。ある特定の実施形態において、本方法はさらに、別個のUIDの数が固定閾値を下回る場合には回答を阻止する。ある特定の実施形態において、本方法はさらに、代替クエリ探査プロシージャを実行して、代替クエリが離隔クエリである場合には所与の攻撃コンポーネントに関連するノイズ要素を除外する。ある特定の実施形態において、本方法はさらに、1つ以上のエポックのうちの最後のエポックの終了後のデータベースへの変更を無視する。ある特定の実施形態において、1つ以上のエポックはエポック階層構造を構成し、本方法はさらに、エポック階層構造の各層において、エポックから追加のノイズ要素を算出する。ある特定の実施形態において、本方法はさらに、変更を受けたある明確な数のユーザ数が閾値を上回った場合に一番最近のエポックを識別し、一番最近のエポックの前のエポックの終了後のデータベースへの変更を無視する。
【0090】
他の実施形態は、データベースシステムのための匿名化方法を提供する。本方法は、スタンディングクエリへの回答を与え、データベースの変更を受け取り次第、その変更がスタンディングクエリの回答に影響を及ぼすかどうかを判定し、スタンディングクエリの回答の変更に関連する別個のユーザの組を記録し、記録された別個のユーザの組のユーザ数が閾値を上回ったときに、スタンディングクエリへの新たな回答を与える。
【0091】
さらに他の実施形態は、データベースシステムのための匿名化方法を提供する。本方法は、元のクエリを受け取り、元のクエリ内にある1つ以上の攻撃コンポーネントを識別し、元のクエリへの回答内にある別個のユーザIDと、1つ以上の修正クエリの各々への回答内にある別個のユーザIDとの間の差を判定する。修正クエリの各々は、識別された1つ以上の攻撃コンポーネントのうちの少なくとも1つが削除される。差が閾値よりも小さい場合、本方法はさらに、元のクエリの回答が修正クエリの回答に一致するように、元のクエリへの回答に行を追加し、または、元のクエリへの回答から行を削除する。
【0092】
本発明をその詳細な実施形態に関して図示・説明してきたが、当業者であれば、本発明の範囲から逸脱することなく、様々な変更を行ってもよく、その要素に等価物を代用してもよいことを理解するだろう。さらに、本発明の本質的な範囲から逸脱することなく、特定の状況または材料を本発明の教示に適合させるために、修正を行ってもよい。したがって、本発明は上述の詳細な説明に開示された特定の実施形態に限定されるものではなく、本発明は本開示の範囲の範疇にあるすべての実施形態を含むこととする。