以下は、暗号化された確率的データ構造に基づいて大量の多重集合の頻度を推定する方法、装置、およびシステムに関する様々な概念、およびそれらの実装形態の詳細な説明である。説明される概念はどのような特定の実装方式にも限定されないので、上で紹介され以下でより詳しく論じられる様々な概念は、多数の方法のいずれで実装されてもよい。具体的な実装形態および応用の例は、主に説明を目的に与えられる。
本明細書において説明される様々な実装形態および技法の説明を読むために、本明細書のセクションについての以下の簡単な説明が有用であり得る。
セクションAは、差分プライベート方式で多重集合の頻度および濃度を推定するために数え上げブルームフィルタを実装する技法を説明する。そのような技法の1つまたは複数、またはそれらの態様は、本明細書において説明される1つまたは複数の実装形態を用いて実装され得る。
セクションBは、多重集合の頻度および濃度を推定するためにカスケーディングリージョンデータ構造を実装する技法を説明する。そのような技法の1つまたは複数、またはそれらの態様は、本明細書において説明される1つまたは複数の実装形態を用いて実装され得る。
セクションCは、差分プライベート方式で多重集合の頻度および濃度を推定するために差分プライベートカスケーディングリージョンデータ構造を実装するための代替的な技法を説明する。そのような技法の1つまたは複数、またはそれらの態様は、本明細書において説明される1つまたは複数の実装形態を用いて実装され得る。
セクションDは、連続リキッドリージョン(liquid legions)を使用して多重集合の頻度および濃度を推定するためにHyperLogLogスケッチの特性と数え上げブルームフィルタの特性を組み合わせる技法を説明する。そのような技法の1つまたは複数、またはそれらの態様は、本明細書において説明される1つまたは複数の実装形態を用いて実装され得る。
セクションEは、多重集合の頻度および濃度を推定するために指数一般化ブルームフィルタを実装する技法を説明する。そのような技法の1つまたは複数、またはそれらの態様は、本明細書において説明される1つまたは複数の実装形態を用いて実装され得る。
本明細書では、「代替的な」という用語は、排他的な代替の選択肢を指す必要はない。互いに「代替的」であるものとして説明される複数の実装形態、技法、システム、方法、またはプロセスが、適宜組み合わせて使用されてもよい。
本明細書では、「スケッチ」という用語は、1つまたは複数のデータ要素、データ記録、変数、カウンタレジスタ、浮動小数点数値、文字列、インデックス値、メモリポインタ値、または本明細書において説明されるようなそれらの任意の組合せを含む、1つまたは複数のデータ構造を指すものとする。「スケッチ」および「データ構造」という用語は、交換可能に使用されることがあってもよい。
A.システム概要および数え上げブルームフィルタの頻度と濃度の推定
識別子サーバは、たとえばそれぞれのクライアントデバイスと関連付けられるクライアント識別子を維持することによって、クライアントデバイスの集合と関連付けられ得る。各クライアント識別子は、各識別子サーバとクライアントデバイスとの間の関連付けを記述する属性情報を含み得る。属性情報は、クライアントデバイスと識別子サーバとの間の関係についての情報(たとえば、ウェブブラウジング履歴、対話データ、アソシエーション時間、ネットワーク分析データなど)を含んでもよく、それぞれのクライアントデバイスから受信される、保護されるまたは別様の秘密の情報を含んでもよい。異なる識別子サーバは、同じそれぞれのクライアントデバイスに対応する異なる属性データおよび異なるクライアント識別子を維持し得る。通常、各識別子サーバ間に重複する属性データがあるかどうかを決定するために、識別子サーバは、保護されるまたは秘密の情報を含み得る属性データを中央サーバと共有して、あらゆるクライアント属性情報を重複排除してもよい。
しかしながら、すべてのクライアント属性データを送信することは、スケーラビリティの問題を生む。クライアント識別子サーバの数が増えるにつれて、ネットワークを介して送信されるクライアントデバイス属性データの量も通常は増える。属性データは、各クライアントデバイスに対して詳細であり比較的大きいことがあるので、そのような情報を大規模に送信することは、ネットワークの帯域幅および計算リソースを消耗させ得る。さらに、ユーザ識別子の総数を計算するだけではなく、特定の属性の頻度などの、特定の属性データ基準を満たすクライアントデバイスの数を、保護されるまたは秘密の属性情報をネットワーク上で送信することなく計算することも、システムにとって有益であろう。
前述の問題に対処するために、本技術的解決法のシステムおよび方法の態様は、多数の識別子サーバ間でクライアントデバイスの共通の数を決定するために、数え上げブルームフィルタを利用することができる。各識別子サーバは、クライアントデバイス識別子および属性データの関連付けられる集合を表す数え上げブルームフィルタを生成することができる。数え上げブルームフィルタは(「バケット」と呼ばれることがある)カウンタレジスタのベクトルであってもよく、各バケットは、数え上げブルームフィルタにおいて、その位置に対応するバケット識別子、またはインデックス値と関連付けられる。各識別子サーバは、1つまたは複数のハッシュされた識別子を生成するために、1つまたは複数のハッシュ関数をクライアントデバイス識別子および属性データに適用することができる。システムは、ハッシュされた識別子から数え上げブルームフィルタの1つまたは複数のバケットへのポインタを抽出し、それらのバケットをインクリメントすることができる。システムは、ブルームフィルタの最も小さいバケットがインクリメントされるような、最小増分技法を使用することができる。最小増分技法を使用することによって、システムは、各識別子サーバと関連付けられるクライアントデバイスの総数を推定できるだけではなく、最小の属性値を示す関連する属性データであるクライアントデバイスの数も推定することができる。数え上げブルームフィルタはさらに、データの集合、たとえばブルームフィルタ、または他の一般化されたデータ構造の中の項目の数を追跡できる、数、整数、または値の任意の列であってもよい。クライアントデバイス属性の頻度についての情報を推定することは、たとえば、ネットワーク帯域幅のルーティングおよび計算リソースの割振りについての決定を行うために、クライアントデバイスと識別子サーバとの間の巨視的なデータ傾向を決定するのに有用であり得る。
各識別子サーバの数え上げブルームフィルタの差分プライバシーを維持するために、システムは、数え上げブルームフィルタのバケットヒストグラムを構築し、それによりバケットを抽象化することができる。バケットヒストグラムを作成するために、各識別子サーバは、それぞれの識別子サーバにしか知られていない秘密鍵を使用してその数え上げブルームフィルタをバケットごとに暗号化し、暗号化されたブルームフィルタを既知のワーカーコンピューティングデバイス(たとえば、ワーカーコンピューティングデバイス405、アグリゲータコンピューティングデバイス410など)に送信することができる。ワーカーコンピューティングデバイスは、識別子サーバにより暗号化された数え上げブルームフィルタのすべてを単一の合成された暗号化データ構造へと合成することができる。合成されたブルームフィルタはそれでも、各識別子サーバの秘密鍵を用いて暗号化される。合成されたブルームフィルタは次いで、各ワーカーコンピューティングデバイスに逐次渡されて、各ワーカーコンピューティングデバイスは、共有される鍵を使用して合成されたフィルタを復号し、次いで各バケットを(たとえば、確定的に、非確定的になど)暗号化することができる。ワーカーは次いで、バケットヒストグラムが作成されるときそれが差分プライベートになるように、ある数の追加のバケットを追加および/または削除することによってノイズを適用することができる。ワーカーは、ブルームフィルタを再配置して(たとえば、並べ替えるなど)、それを次のワーカーに送信することができる。これは、最後のブルームフィルタが第1のワーカーによって再び受信されるまで続く。ワーカーは次いで、ワーカーの確定的な鍵の各々を用いて、0から最大の望ましい頻度までの各値を暗号化することができる。第1のワーカーは、バケットヒストグラムを構築することができ、復号できないあらゆる値が最大頻度に等しいと仮定され、そのバケットに加算される。最後のヒストグラムは、すべての識別子サーバにわたるユニーククライアントデバイスの総数を、望ましい属性データの対応する頻度とともに推定するために使用される。
したがって、本技術的解決法の態様は、クライアントデバイス識別子およびデータ数え上げシステムの向上したセキュリティをもたらすことができる。暗号化された数え上げブルームフィルタおよび準同型暗号方式を使用することによって、本技術的解決法の態様は、ネットワークを介して送信されるデータの量を減らすことができ、これは、他の属性データ数え上げおよび比較システムを上回る大きな改善である。さらに、推定されるヒストグラムを使用することによって、この技術的解決法は、ネットワークを介して保護されるまたは秘密の情報を送信することなく、クライアント識別子属性データ頻度の正確な推定を行うことができる。これは、識別子サーバがそれらの関連するデバイスの数または属性を晒すのを防ぐだけではなく、クライアントデバイスがそれらの保護される情報または秘密の情報を晒すのも防ぎ、これはネットワーキングシステムのセキュリティに対する大きな改善である。
いくつかの実装形態では、デバイス識別子および属性データは、識別子サーバにわたってプライバシーを保護する方式で、K+値を計算するために使用され得る。識別子サーバにわたって特定の属性がK回以上現れる頻度を反映し得る、K+の値が、本明細書において説明されるように、数え上げブルームフィルタを使用して計算され得る。測定方法が論じられた後、差分プライベート方式で複数の参加者にわたってブルームフィルタをアグリゲートするためのセキュアマルチパーティ通信(MPC)プロトコルが提示される。
本技術的解決法のシステムおよび方法は、セキュアでプライバシーを保護する方式で複数の識別子サーバ(たとえば、パブリッシャ、プロバイダなど)にわたるクロスメディアリーチおよび属性を測定するための業界全体の努力を記述し得る。数百の、または数千の識別子サーバすらも、このシステムに参加することができる。K+値、積集合、和集合、および属性頻度を計算するための本明細書において以下で説明されるアルゴリズムは、頻度推定のための数え上げブルームフィルタの使用、およびパブリッシャにまたがってブルームフィルタを合成するためのセキュアMPCプロトコルを通じて、問題の規模とその厳しいプライバシー要件の両方に対処する。最後に、この本解決法の態様のシステムおよび方法は、いずれのエンティティの集合も関与する他の参加者の秘密の情報または保護される情報を侵害する懸念がない状態で、様々なエンティティによって実施され、実行され、または別様に運用され得ることが重要である。
属性の特定の集合のリーチは、それぞれの属性に晒された、またはそれを別様に反映する、クライアントデバイスの数として定義され得る。頻度は、クライアントデバイスが特定の属性と関連付けられる回数として定義され得る。K+値(たとえば、K+リーチなど)は、頻度が特定の属性に対する所与の値Kより大きいクライアントデバイスの数を反映する測定結果を記述し得る。言い換えると、それは、特定の属性とK回以上関連付けられるクライアントデバイスの数である。
HyperLogLog(HLL)が、濃度推定器として使用され得る。濃度推定器は、実際には非常に大きい、何らかの多重集合Mの中の元の数を推定することができる。HLLは、低い誤差率、低い分散、および少ないメモリ使用量により特徴付けられ得る。その上、2つのHLLの和集合は計算が容易であることがあり、これは、HLLが分散型数え上げ用途において実装され得ることを意味する。FreqLogLog(FLL)と呼ばれるHLLの拡張は、Mの中の元の数とともにそれらの頻度を推定することを可能にし得る。
ブルームフィルタは、集合のコンパクト表現を提供することができる。ブルームフィルタは、insertメソッドとcontainsメソッドの両方を実装できるが、コンパクト表現により、わずかな確率でcontainsメソッドがフォールスポジティブを返す。これは、ある元が集合の中にない可能性があるときにその元が集合の中にあると言われ得ることを意味する。一方で、フォールスネガティブは除外され、つまり、containsメソッドがfalseを返す場合、それは常に正しいことがある。
空のブルームフィルタは、そのビットのすべてが0に設定されたサイズmのビットアレイであり得る。元xは、k個のハッシュ関数modulus mにそれを通し、ブルームフィルタの中の対応するビットを1に設定することによって挿入され得る(以下の例を参照)。containsメソッドは、同様の方式で機能することができ、x modulus mのすべてのk個のハッシュが1に設定される場合にtrueを返し、それ以外の場合にfalseを返し得る。空のブルームフィルタの例は、Table 1(表1)において以下で示される。
「値」行により示されるビット文字列は空のブルームフィルタを表し、ブルームフィルタの中の各位置(たとえば、「ID」行の中の数値列によって示される)は0の二進値に設定される。ここで、mの値は11であり、m個の位置の識別子は0から10にわたる。
それらの比較的高いメモリ要件により(たとえば、HLLに関して)、ブルームフィルタは、通常は濃度推定のために使用されないことがあるが、ブルームフィルタの濃度は、以下の式を評価することによって決定され得る。
上の式では、kはブルームフィルタにおいて使用されるハッシュの数であってもよく、mはブルームフィルタの中のビットの数であってもよく、xはブルームフィルタの中の満たされているバケットの数であってもよく、nはブルームフィルタの濃度の推定の数であってもよい。
推定量の分散は次の式によって近似される。
分散はテイラー展開に基づき得る。
偏りの推定は以下の式によって与えられ得る。
数え上げブルームフィルタ(CBF)は、削除動作を提供できる標準的なブルームフィルタの拡張である。数え上げブルームフィルタは、標準的なブルームフィルタと同様に機能する。数え上げブルームフィルタにおいて、ビットアレイはカウントのアレイにより置き換えられる。完全性のために、削除動作の使用はフォールスネガティブの可能性をもたらし得ることは留意に値する。図2A~図2Cに示される例は、元(x)のうちの1つが2回挿入されるような、CBFへの3つの元の挿入を示す。
最小増分は、多数の挿入動作にわたりCBFカウンタ値を最小にできる技法を表す。最小増分を使用してCBFへ何らかの元を挿入するとき、インクリメントされるべきバケットは、最小の値を伴うものである。最小のバケット値は、挿入される元が数え上げブルームフィルタへと以前に挿入された可能性がある最大の回数を表すことができる。この技法は、コンピュータネットワークにおけるトラフィックフローを記録するために使用され得るが、CBFのバケットを1だけインクリメントする代わりに、トラフィックフロー監視アプリケーションは、パケットの中のバイトの数だけバケットの値をインクリメントすることができる。これはトラフィックの過剰推定を避けることができる。最小増分数え上げブルームフィルタの例が、図3A~図3Cに示される。
数え上げブルームフィルタを用いてK+値を推定することは、上で示されたブルームフィルタ濃度推定式を繰り返し適用することからなり得る。基本(1+)の値に対して、この技術的解決法は式を直接適用することができ、一方でK+値に対して、この技術的解決法は、K以上の値を伴うバケットを満たされているものとして数え上げ、次いで同じ式を適用することができる。たとえば、3+値は、値0、1、または2を伴うすべてのバケットを0として数え上げることによって決定され得る。重要な所見は、この方法はCBFバケット値のヒストグラムを使用できるということであり、ヒストグラムビンの範囲は[0,1)、[1,2)、[2,3)などである。複数の識別子サーバがある事例は、CBFが同じ構成を有し(すなわち、同一のm、k、およびハッシュ関数)、同じ識別子空間から埋められることを当然仮定して、CBFをバケットごとに加算することによってCBFの和集合を得ることができることに気付くことで、対処され得る。
CBFヒストグラムのセキュアな計算
このプロトコルへの入力は、多数の識別子サーバ(たとえば、パブリッシャ、プロバイダなど)(数百個または低い4桁個)から来ることがあり、単純なMPC手法はあまりにも非効率である。代わりに、多数のパブリッシャからのデータを使用して少数のワーカー(たとえば、3個)が双方向MPCプロトコルに参加できる、「ワーカー/クライアント」MPCパターンに従う。提供されるセキュリティは、すべてのワーカー集団が不正ではない限り、識別子サーバのデータを秘密に保つことができるというものである。この方式では、異なるエンティティは異なるワーカーを運用することができる。
プロトコルは、ワーカーとして動作する多くの参加者に対して無作為に公開され得る。多くの実装形態では、ワーカーの数は一定であり、ワーカーの集合は、プロトコルの実行が開始する前にワーカーの残りに知られている。プロトコルの初期化は、ワーカーの数の二次関数である通信を必要とし得ることに留意されたい。
プロトコルの簡単な概要が以下で与えられる。
各ワーカー(W)は、加法準同型(たとえば、ElGamal)鍵ペア(SK、PK)を生成することができる。各識別子サーバに分配され得る超公開鍵(UPK)を作成するために、すべてのワーカーの公開鍵が組み合わせられる。
各パブリッシャ(P)は、CBFを作成し、それをバケットごとにUPKを用いて暗号化し、それを単一のよく知られている(たとえば、信用されている、ランダムな、など)ワーカーに送信することができる。
次いで、第1のワーカーは、パブリッシャCBFをバケットごとに加算することによって、パブリッシャCBFを最終的な合成されたCBFへと合成することができる。最終的なCBFはそれでも、各ワーカーの秘密鍵を用いて暗号化されることに留意されたい。
次に、ブルームフィルタは各ワーカーに渡され得る。
ワーカーは、そのSKを用いてCBFを復号し、各バケットを確定的暗号化することができる。
ワーカーは、バケットヒストグラムが作成されるときにそれが差分プライベートであるように、ある数の追加のバケットを追加または削除することによってノイズを適用することができる。
ワーカーは次いで、ブルームフィルタを並べ替えることができる。
ワーカーは次いで、並べ替えられたブルームフィルタを次のワーカーに送信することができる。
このプロセスは、完全な確定的暗号化方式のもとで暗号化される並べ替えブルームフィルタ(たとえば、リング構成など)を第1のワーカーが取り戻すまで、繰り返される。
次に、ワーカーは、ワーカーの確定的な鍵の各々を用いて、0から最大の望ましい頻度までの各値を暗号化することができる。
第1のワーカーはバケットヒストグラムを構築することができる。復号できないいずれの値も、最大頻度に等しいものと見なされ、バケットに追加され得る。
最後に、リーチおよび最大頻度までの頻度を推定するためにヒストグラムが使用され、これらの推定値がプロトコルの最終的な出力である。
ElGamal暗号化
ElGamal暗号化は、閾値の復号を支援するように適合され得る簡単な公開鍵暗号化方式である。これは、Diffie-Hellman鍵交換プロトコルのオフライン変形として見ることができ、楕円曲線暗号を使用して実装することができる。ジェネレータGを伴う楕円曲線群に対する基本的な方式は次の通りである。
KeyGen:ランダムな整数X modulo q(楕円曲線群の位数)を選ぶ。これは、復号のために使用される秘密鍵である。公開鍵はG^Xである。
Encrypt(pk,m):ランダムな整数R modulo qを選ぶ。暗号文は(G^R,m pk^R)であり、これは(G^R,m G^(X R))である。
Decrypt(sk,m):秘密鍵を使用してG^(X R)を計算し、そしてm=m pk^R/G^(X R)である。
本方式の閾値バージョンは、秘密鍵Xが秘密共有方式(たとえば、Shamirの秘密鍵共有方式など)を使用してシェアとして分配されることを実現することができる。各参加者は、秘密鍵の自身のシェアを使用して「公開鍵のシェア」を計算することができ、次いで、「真の」公開鍵が、指数において秘密鍵のシェアを組み合わせることによって計算され得る(シェアを組み合わせることは線形演算であり、これは群演算を使用して指数において行われ得る)。閾値がN対Nである場合、これは単にすべての「公開鍵のシェア」を一緒に乗算することによって行われ得る。復号のシェアは、秘密鍵のシェアを使用して復号演算を実行し、公開鍵が計算されたのと同じ方式で結果を合成することによって計算され得る。
閾値の変形の単純な例は次の通りである:2つのワーカーが鍵G^XおよびG^Yを生成する。これらの公開鍵が乗算されると、G^(X+Y)が得られ、これは暗号化のための公開鍵として使用され得る。対応する秘密鍵はX+Yである。しかしながら、復号では、元の秘密鍵は1対1で(任意の順序で)適用され得るので、単一の参加者がジョイント秘密鍵を知る必要はないことに留意されたい。
ElGamal暗号化は、乗法準同型性をサポートできるという、追加の有用な特性を含み得る。2つの暗号文(G^R1,M1 G^X R1)、(G^R2,M2 G^X R2)が与えられると、(G^(R1+R2),M1 M2 G^X(R1+R2))を計算することができ、これは、2つのメッセージの積へと復号することができる。これは、メッセージの離散対数に対する加法準同型性であり、言い換えると、(G^(R1+R2),G^(M1+M2) G^X(R1+R2))を計算するためにこれを使用することが可能であり、これは小さいメッセージ空間(離散対数を効率的に計算するのに十分小さい)に対して機能するということに留意されたい。
我々の事例では、指数で合計を実行することで十分であり得る。数え上げブルームフィルタ推定は、復号にはルックアップテーブルで十分になるほど小さい、閾値Kより小さい元のカウントを使用することができる。これには、小さいセキュリティ上の利益もある。アグリゲータが、閾値を超える値のカウントを、それらの値が何であるかを知ることなく知ることができる。そうするために、ワーカーは、確定的暗号化(たとえば、Pohlig-Hellman暗号など)を使用することができ、これは、すべての部分的に復号されるバケットに適用される秘密指数を各ワーカーが選ぶことを伴ってもよく、これは、準同型性(これはジェネレータGを何らかのランダムな群の元に変更することと等価である)を介しても実行され得る。
ブルームフィルタを使用した手法、(n-1)個の共謀HBC
この手法では、ワーカーは、それらの数え上げブルームフィルタの合計を計算するために、閾値の秘密鍵を用いて加法準同型暗号化を使用し、それに続いて、結果をアグリゲータに明らかにする前にセキュアシャッフルおよび確定的暗号化を使用し得る。この合計は、加法準同型性を使用して(たとえば、パブリッシャにそれらのブルームフィルタの暗号化を指定されたワーカーへ送信させることなどによって)1つの参加者によって直接計算され得る。
並べ替えを効率的に行うために、本技術的解決法は、暗号化方式の閾値の性質を使用することができる。並べ替えを実行することについていずれの単一の参加者を信用することも避けるために、解決法は、各参加者にフィルタをランダムに並べ替えさせることができる(2つの並べ替えの合成は並べ替えであることを思い出されたい)。暗号化されたブルームフィルタを受信して初期の合計を計算した第1の参加者は、第1の並べ替えを実行することができる。その参加者は次いで、暗号化されたブルームフィルタをランダム化し、次いでその復号鍵のシェアを適用して結果を部分的に復号し、最後に確定的方式のその鍵のシェアを適用することができる。シャッフル/再ランダム化された暗号文は次いで、次の参加者に、そして最後には、最終的な復号のためにアグリゲータに送信され得る。
ステップ1:ElGamal鍵を準備する
第1のステップにおいて、ワーカーは、上で説明されたような閾値ElGamal鍵を準備し、次いで合成された鍵をパブリッシャの各々に対して利用可能にする。
ステップ2:入力
このプロトコルは合計を計算することができる。識別子サーバは、ワーカーによって提供される合成公開鍵を用いて、バケットごとにそれらの数え上げブルームフィルタを暗号化し、無作為に選ばれ得る「第1の」参加者に暗号文を送信することができる。その参加者は次いで、暗号文に対して準同型加法演算を使用して合計を計算することができ、確定的暗号化のもとでアグリゲータが知ることが許される値を暗号化することによって、復号ルックアップテーブルを付加することができる。この参加者がアグリゲータ自身であることが可能だが、その場合、アグリゲータは、暗号文を並べ替えのために次の参加者に送信する前に、暗号文を部分的に復号すべきではない。アグリゲータが結果(並べ替えられた、確定的暗号化されたブルームフィルタ)を確実に知るようにするために、アグリゲータの復号は最後のステップであるべきである。
ステップ3:シャッフル
次に、第1の参加者は、暗号文を部分的に復号し、その確定的暗号鍵を適用し、暗号化されたフィルタをシャッフルし(しかしルックアップテーブルはシャッフルしない)、すべてを第2の参加者に転送することができる。第2の参加者は次いで、唯一の残っている復号がアグリゲータの鍵に関わるものになるまで、部分的に復号し、その鍵のもとで確定的暗号化を適用し、シャッフルし(たとえば、確率的データ構造における位置を並べ替える、その順序を変更する、または別様に入れ替えるなど)、すべてを第3の参加者に転送することなどができる。
秘密共有方式のためにNという閾値を設定することによって、この技術的解決法は、共謀するワーカーの部分集合が他の参加者のプライバシーを侵害できないようにすることができる。並べ替えを、ワーカーの間での任意の共謀に対して秘密に保つことができ、それは、ワーカーのうちの1つしか、その並べ替えを秘密にする必要がないからである。別の選択肢は、MPCプロトコルを使用してKより大きい値の合計を計算することであるが、そうすることは、はるかに計算集約的であり得る。
分散差分プライベートノイズ生成
各ヒストグラムビンに追加される全体のノイズが本明細書において説明されるような両側幾何分布に従い得るように、ノイズの追加は分散した方式で行われる。具体的には、各ヒストグラムビン[0,最大頻度]に対して、各ワーカーは、ワーカーが各ビンにどれだけのノイズを追加できるかを決定できるランダム変数(たとえば、Polya(負の二項分布の特別な場合)ランダム変数など)を生成することができる。したがって、適切に構築されたランダム変数の合計は両側幾何ランダム変数に等しくなり得るので、各ビンは所望の量のノイズを受け取ることができる。これを達成するために、上で説明されたプロトコルに対していくつかの修正がある。
以下は、シャッフル(たとえば、各ワーカーによる並べ替え)が開始する前に起こり得る。
ワーカーはノイズベースラインについて合意することができ、ノイズベースラインは、個々のワーカーによって生成される任意の負のノイズ値より大きくなり得る確率が高い整数であり得る。この値をBと呼ぶ。
各ワーカーは、max_frequency+1個のランダム変数(たとえば、Polyaランダム変数など)[X0,X1,…Xi,…,Xmf]を生成し、サイズB-Xiのアレイを作成することができる。これをノイズアレイと呼ぶ。
次いで、各iに対して、ノイズアレイはiのB-Xi個のコピーで満たされ得る。
次いで、各ワーカーは、それらのノイズアレイをシャッフルし、ElGamal公開鍵を用いて各値を暗号化することができる。
次いで、各ワーカーは、シャッフルを始めるワーカーにそれらのノイズを送信することができる。
次いで、第1のワーカーは、上のプロトコルにおいて説明されるようなCBFのすべてを一緒に加算する前に、ノイズアレイのすべてをCBFに付加することができる。
最後に、ヒストグラムが構築された後で、アグリゲータは、各ヒストグラムバケットからB*ワーカーの数を減算することができ、各ビンからノイズベースラインを基本的に除去し、両側幾何ノイズのみを残す。
上のプロトコルに対する少なくとも1つの保護は、識別子サーバがそれら自身の閾値を維持することであり、それにより、識別子サーバは、それがN個のクライアント識別子または属性をすでに含んでいない限り、集合を計算に寄与させない。シャッフルステップの間にDPノイズをブルームフィルタに追加することも、懸念を軽減することの助けになる。
濃度/頻度推定のためにCBFを使用することについての基本的な問題は、一定の誤差率を維持するために必要とされるバケットの数が、そのサイズが推定中である集合のサイズに対して線形にスケーリングするということである。その上、セキュアプロトコルは、生成されるあらゆるCBFの各バケットを各パブリッシャが暗号化することを必要とする。
問題の規模として、様々な属性にまたがるリーチ値を計算するために一日約500億個の識別子が処理され得ることを想定することができる。ブルームフィルタが3倍のオーバーヘッドをこれに加えると仮定すると、各識別子サーバは1500億回のバケット暗号化を実行する可能性があり、これは、上の文書からの数字を使用すると、~42CPU時間が必要であることを示唆する。64バイトの暗号文を仮定すると、これは、一日約9.6TBのデータ転送をもたらす可能性がある。特にこれがすべてのサイズのパブリッシャに対して適用される定数であることを反映すれば、これは無視できない。幸運なことに、このオーバーヘッドを軽減するためのいくつかの方法がある。
まず、識別子サーバ側の暗号化をなくし、それにより、付随する暗号文の拡張に由来する通信オーバーヘッドをなくすことが可能であり得る。ここで、各バケットに対して、識別子サーバは、元ごとに加算されるとCBFに等しくなるk個のアレイによってCBFが表されるように、バケットの値に加算されるk個のランダムな数を生成することができる。次いで、識別子サーバは、以後CBFシェアと呼ばれるアレイを、別個のMPCワーカーに送信することができ、それらのMPCワーカーは、上で説明されたようなEl Gamal暗号化レイヤを適用する前にパブリッシャにまたがってCBFシェアを加算することができる。暗号化されると、各ワーカーは、暗号化されたCBFシェアを、それらを合成できる単一のワーカーに送信することができ、その合成の結果は、完全に合成されたx-pub CBFである。ここから、本明細書において上で説明されたようなプロトコルの復号/シャッフルステップが開始することができる。この選択肢では、バケットのサイズは、場合によっては1バイト、2バイト、または4バイトであってもよく、これは、一日450GB、900GB、または1800GBのデータ転送をもたらし、1バイトの場合、(3シェア*1バイト*500億)である。これは、MPCシステム、セキュア識別子数え上げシステム、頻度数え上げシステム、および識別子通信システムに対するかなりの改善をもたらし得る。
少なくとも1つの他の改善は、識別子サーバが、ワーカーのうちの1つを信用して、そのCBFを平文でそのワーカーに送信することである。次いで、単一のワーカーのためのCBFは平文で合成されてもよく、そのワーカーが、部分的なx-pub CBFであるものを暗号化する負担を引き受けてもよい。これらの部分的なx-pub CBFは次いで、それらを準同型に合成できる単一のワーカーに送信され得る。そして、本明細書において説明されるように、復号/シャッフルステップが始まることができる。この場合、バケット当たり1バイトを仮定すると、一日150GBのデータ転送がある。これは、MPCシステム、セキュア識別子数え上げシステム、頻度数え上げシステム、および識別子通信システムに対するかなりの改善をもたらし得る。
興味深いことに、本明細書において説明される実装形態は、上で説明された2つの代替形態と組み合わせられてもよく、各識別子サーバ(たとえば、パブリッシャ)は、システムとどのように対話するかを独立に選ぶことができる。加算の結合的な性質により、各ワーカーは、CBFシェアおよび平文CBFを容易に合成することができることに留意されたい。次いで、そのような合成は暗号化されて、ワーカーごとに他の暗号化されたCBFと合成されてもよく、その後で、すべてのワーカーが、それらの暗号化された部分的なx-pub CBFを単一のワーカーに送信し、その単一のワーカーは、暗号化された部分的なx-pub CBFを準同型に合成して完全なx-pub CBFを得ることができ、再び、元のプロトコルのシャッフルステップを開始することができる。これは、MPCシステム、セキュア識別子数え上げシステム、頻度数え上げシステム、および識別子通信システムに対するかなりの改善をもたらし得る。
以下は、差分プライベートCBFヒストグラムを計算するための暗号学的にセキュアなプロトコルを説明する。
差分プライベートCBFバケット
CBF全体をクエリの出力として取り入れて、第1のタスクは、そのセンシティビティを決定することである。これはまず、単一の属性の場合に対して行われ、次いで、単一のクライアントデバイスと関連付けられる属性のすべてに拡張され得る。コリジョンを無視すると、挿入ごとに最大でk(ハッシュの数)個のバケットがインクリメントされる。これは、最小増分の場合にはより小さくなり得るが、最悪の場合を想定してもプライバシーは損なわれず、最小増分の場合を特徴付けることは扱いやすいようには見えない。
単一のインプレッションに関するクエリのセンシティビティを考慮するための少なくとも1つの方法は、1というL1センシティビティを伴う別個のクエリとして各ハッシュ関数の出力を考慮することであり、その場合、CBFクエリ全体のセンシティビティはkである。その対極にある方法は、CBFクエリ全体が1というセンシティビティを有すると宣言することである。以下は、この特性描写について続けるが、この緩い仮定でも、バケットレベルにおけるDPは実現可能ではないことが示される。
センシティビティは、2つの隣接するデータベース間の最大の距離として定義され得ることを思い出されたい。そうすると、単一のインプレッションに関するCBFのセンシティブティが1であると仮定すると、これをクライアント識別子に拡張することは、センシティビティが、特定の属性との関連付けが最も多いクライアント識別子と関連付けられる属性の総数に等しくなり得ることを意味する。言い換えると、これは、大きい方からk個のバケットの最小値によって制約され得る最大頻度であってもよく、これについての議論は最小増分の有効性についての議論と同様である。
次いで、CBFを差分プライベートにするには、説明されるような最大頻度を推定し、両側幾何ノイズを各バケットに適用し、負になるであろうあらゆるバケットが0の値を有するものとして割り当てられるようにノイズを切り詰めることで十分である。以下の表は、イプシロンおよびセンシティビティの様々な値の幾何分布に対するパラメータを示す。
1つの所見は、分布の側部が、イプシロンおよびセンシティビティのあまり大きくない値に対しても非常に長くなり得るということである。たとえば、最大頻度の典型的な値が8であると仮定すると、これは過小評価であり得るが、1というイプシロンに対して必要とされるノイズの量すら、受け入れられないように見え始める。しかしながら、バケットカウントのヒストグラムが推定のために使用され得るので、総計ではノイズが除去され得る可能性がいくらかあることを思い出されたい。具体的には、有ノイズヒストグラムは、両側幾何分布の期待値に基づいて無ノイズヒストグラムを生む校正行列と乗算され得る。
Xを有ノイズヒストグラムとし、これは、両側幾何ノイズを各バケットに適用した後のCBFバケットのヒストグラムであり得る。Yを元のCBFから構築されるヒストグラムとする。そうすると、
E[X]=A*Y
であり、ここで
A=[a0,a1,a2,…ai,…an]T
である。そして、各aiは、n+1個の要素を伴う行ベクトルであってもよく、ここで、
a0=[P(Z<=0),…,P(Z<=n)]
ai=[P(Z=i-j)] - for j in [0,n]
an=[P(Z>=n),…,P(Z>=0)]
であり、Zは両側幾何ランダム変数であり得る。基本的に、ai*Yは、Yの元がXの中の特定のビンに割り当てられる期待値であり得る。Aは列の確率であり得ることに留意されたい。
そして、
であり、ここで
は、濃度を推定するために次いで使用され得る無ノイズヒストグラムであり得る。
少なくとも1つの他の実装形態では、K+値推定器は次のように進行することができる。
数え上げブルームフィルタの各エントリに対して、エントリがKより大きい場合、エントリを出力の合計に含め、そうではない場合は無視する。MPCにおいてこれを計算するために、システムは、集合の中の各元に対して、比較、合計、およびシングルビット積を実行し得る。
b←x[i]>=k//bは0または1の値である
sum←sum+x[i]*b
比較関数を計算することは、フィルタ要素のビットごとの分解を使用することができ、これは、より多くの通信を必要とすることにより、プロトコル全体の計算コストを高め得る。比較自体は、演算回路を計算する「一般的な」MPC構築を必要とし、これは、ラウンドの数を大幅に増やすことなく、SPDZプロトコルの変形を使用して達成され得る。
演算回路を使用して比較を実行するために、システムは、「教科書」の減算アルゴリズムである「リップルボロー」減算子を評価することができる。直感的には、Xの高次ビットを超えるボローを必要とすることなくX-Yを計算できる場合、X>=Yである。これを行うための1つの方法は、その関数のためのブーリアン回路をシミュレートして「演算回路」を作成することである。たとえば、2ビットの数
[a0,a1]<[b0,b1]
を比較するために、このブーリアン式を使用することができる
((!a1)&&((!a0)&&b0))||((!a1)&&b1)||((!a0)&&b0)&&b1
ここで、これらは0/1の値であると仮定する(フィールドにおいて;したがってビットごとの分解が必要)。これらの規則を使用して同じ式をシミュレートすることができる。
!x→(1-x)
x&&y→x*y
x||y→x+y-x*y
よって、我々の比較器は次の通りであり得る。
c1=((1-a1)*((1-a0)*b0))
c2=((1-a1)*b1)
c3=((1-a0)*b0*b1)
out←c1+c2+c3-c1*c2-c1*c3-c2*c3+c1*c2*c3
これは、任意の数のビットまでスケーリングされ得る。最終的な出力は0/1の値であるので、上で説明されたような合計に値を選択的に含めるためにそれを使用することができる。
この場合、合成されたブルームフィルタについての部分的な情報が明らかにされないので、プライバシーがMPCプロトコル自体のセキュリティにより得られ得る。この場合には、フィルタが平文で明らかにされることは決してないので、フィルタに対するどのような並べ替えも実行する必要がないことに留意されたい。プロトコルの終わりにおいて、ワーカーは合計のシェアを有し、これは次いで、累算器、または他のワーカーが出力する権利のある何かに送信され得る。
Kが2のべき乗である場合、オンラインプロトコルを改善することができる。第1のステップは、各参加者のそれぞれのブルームフィルタにわたって合計を計算することであることを思い出されたい。次いで、値Kを超えない元を数える。Kが2のべき乗であるとき、これは、ある位置を超えるビットがあるかどうかを確認するということになり、比較器を完全になくすことができ、追加の回路をオンラインで計算するだけでよい。
乗算ゲート当たり1回のブロードキャストラウンドを仮定すると、ブルームフィルタ要素が4ビットである場合、9回のブロードキャストラウンドが必要である(加算回路に対して8回、および加算からのキャリーアウトのORに対して1回;最終的な合計は、どのような乗算も必要としない線形結合である)。恣意的な共謀に対するセキュリティのために、honest-but-curious環境においてSPDZプロトコルを使用すると、主要な計算コストはBeaver tripleを計算することである。
ここで図1を参照すると、ネットワーキング環境におけるクライアントデバイス識別子のカウントおよび頻度を決定するために数え上げブルームフィルタを生成するためのシステム100が図示される。システム100は、分散準同型暗号化を使用して、ベクトルからデータの推定される頻度のヒストグラムを生成することができる。システム100は、少なくとも1つのデータ処理システム105A~N(全般にデータ処理システム105と呼ばれることがある)、少なくとも1つのネットワーク110、少なくとも1つのデータベース115、および少なくとも1つのクライアントデバイス120A~N(全般にクライアントデバイス120と呼ばれることがある)を含み得る。データ処理システム105は、少なくとも1つのベクトル生成器130、少なくとも1つのハッシュ識別器134、少なくとも1つのデータ記録ハッシャ140、少なくとも1つの暗号鍵生成器145、少なくとも1つのベクトル暗号化器150、少なくとも1つの暗号化ベクトル通信器155、少なくとも1つのベクトル合成器160、少なくとも1つのヒストグラム構築器165、および少なくとも1つの濃度推定器170を含み得る。データベース115は、少なくとも1つのデータ記録122A~N(全般にデータ記録122と呼ばれることがある)を含み得る。データ記録122の各々は、少なくとも1つのクライアント識別子125A~N(全般にクライアント識別子125と呼ばれることがある)、および少なくとも1つの属性127A~N(全般に属性127と呼ばれることがある)を含み得る。
システム100のコンポーネント(たとえば、データ処理システム105、ネットワーク110、データベース115、クライアントデバイス120、ベクトル生成器130、ハッシュ識別器135、データ記録ハッシャ140、暗号鍵生成器145、ベクトル暗号化器150、暗号化ベクトル通信器155、ベクトル合成器160、ヒストグラム構築器165、濃度推定器170、データ記録122、クライアント識別子125、および属性127など)は、図8に関連して本明細書において詳述されるコンピューティングシステム800のハードウェアコンポーネントまたはソフトウェアとハードウェアコンポーネントの組合せを使用して実装され得る。たとえば、データ処理システム105は、サーバまたは他のコンピューティングデバイスを含み得る。クライアントデバイス120は、サーバまたは他のコンピューティングデバイスを含み得る。データ処理システム105のコンポーネントの各々は、本明細書において詳述される機能を実行することができる。
ネットワーク110は、インターネット、ローカルエリアネットワーク、ワイドエリアネットワーク、メトロエリアネットワーク、または他のエリアネットワーク、イントラネット、衛星ネットワーク、音声またはデータの携帯電話通信ネットワークなどの他のコンピュータネットワーク、およびそれらの組合せなどの、コンピュータネットワークを含み得る。システム100のデータ処理システム105は、たとえば少なくとも1つのコンテンツプロバイダ115および少なくとも1つのデータベース120と、ネットワーク110を介して通信することができる。ネットワーク110は、とりわけ、コンテンツプロバイダ115、データ処理システム105、およびウェブサーバなどの1つまたは複数のコンテンツソースの間で情報を中継する、任意の形式のコンピュータネットワークであり得る。いくつかの実装形態では、ネットワーク110は、インターネット、および/または、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、セルラーネットワーク、衛星ネットワーク、もしくは他のタイプのデータネットワークなどの、他のタイプのデータネットワークを含み得る。ネットワーク110は、ネットワーク110内でデータを受信および/または送信するように構成される任意の数のコンピューティングデバイス(たとえば、コンピュータ、サーバ、ルータ、ネットワークスイッチなど)も含み得る。ネットワーク110はさらに、任意の数の有線接続および/またはワイヤレス接続を含み得る。コンテンツプロバイダ115は、ネットワーク110の中の他のコンピューティングデバイスに(たとえば、光ファイバケーブル、CAT5ケーブルなどを介して)有線接続されたトランシーバとワイヤレスに(たとえば、WiFi、セルラー、無線などを介して)通信し得る。コンテンツプロバイダ115はまた、プロキシデバイス(たとえば、ルータ、ネットワークスイッチ、またはゲートウェイ)を介して、ネットワーク110のコンピューティングデバイスとワイヤレスに通信し得る。
データ処理システム105は、少なくとも1つのプロセッサおよびメモリ、すなわち処理回路を含み得る。メモリは、プロセッサによって実行されると、本明細書において説明される動作のうちの1つまたは複数をプロセッサに実行させるプロセッサ実行可能命令を記憶する。プロセッサは、マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)など、またはこれらの組合せを含み得る。メモリは、プログラム命令をプロセッサに提供することが可能な電子デバイス、光デバイス、磁気デバイス、または任意の他の記憶デバイスもしくは送信デバイスを含み得るが、それらに限定はされない。メモリはさらに、フロッピーディスク、CD-ROM、DVD、磁気ディスク、メモリチップ、ASIC、FPGA、読取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、電気的消去可能プログラマブルROM(EEPROM)、消去可能プログラマブルROM(EPROM)、フラッシュメモリ、光学メディア、またはプロセッサがそれから命令を読み取ることができる任意の他の適切なメモリを含み得る。命令は、任意の適切なコンピュータプログラミング言語からのコードを含み得る。データ処理システム105は、たとえば本明細書において説明される機能または方法を含む、様々な機能を実行することができる1つまたは複数のコンピューティングデバイスまたはサーバを含み得る。
データベース115は、本明細書において説明される情報のいずれかを記憶および/または維持するように構成されるデータベースであり得る。データベース115は1つまたは複数のデータ構造を維持することができ、これらは、本明細書において説明される値、多数性、もしくは閾値の各々を含み、またはインデクシングすることができる。データベース115は、1つまたは複数のメモリアドレスまたはインデックス値を使用してアクセスされ得る。データベース115は、データ処理システム105のコンポーネントによって、またはネットワーク110を介してクライアントデバイス120によってアクセスされ得る。いくつかの実装形態では、データベース115は、データ処理システム105の内部にあり得る。いくつかの実装形態では、システム100は多くのデータベースを含んでもよく、各データベース115は少なくとも1つのデータ処理システム105A~Nに対応する。たとえば、データ処理システム105A~Nの各々は、固有のデータベースを含んでもよく、またはそれと通信していてもよい。いくつかの実装形態では、データベース115は、データ処理システム105の外部に存在することができ、ネットワーク110を介してアクセスされ得る。データベース115は、多くの異なるコンピュータシステムまたは記憶要素にわたって分散されてもよく、ネットワーク110または適切なコンピュータバスインターフェースを介してアクセスされ得る。データ処理システム105は、データベース115に、適切な値を用いてインデクシングされる1つまたは複数のデータ構造における任意のもしくはすべての計算、決定、選択、識別、生成、構築、または算術の結果を記憶することができ、それらの各々が、本明細書において説明される機能または関数のいずれかを実行するためにデータ処理システム105またはクライアントデバイス120によってアクセスされ得る。
クライアントデバイス120は、データ処理システム105によって提供される指示(たとえば、クライアント識別子125、属性127、頻度値、または本明細書において説明される任意の他の値などの集合の濃度を表示する指示)などのデータを表示するために、ネットワーク110を介して通信するように構成されるコンピューティングデバイスであり得る。クライアントデバイス120は、とりわけ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートフォン、携帯情報端末、モバイルデバイス、消費者向けコンピューティングデバイス、サーバ、クライアント、デジタルビデオレコーダ、テレビのセットトップボックス、ビデオゲームコンソール、または、ネットワーク110を介して通信するように構成される任意の他のコンピューティングデバイスであり得る。クライアントデバイス120は、1つまたは複数のクライアント識別子125または1つまたは複数の属性127を、データ処理システムに送信し、または受信することができる。クライアントデバイス120は、それぞれのクライアントデバイス120に関連付けてクライアント識別子125または属性127を記憶するために、少なくとも1つのデータベース115と通信することができる。
クライアントデバイス120は、プロセッサおよびメモリ、すなわち処理回路を含み得る。メモリは、プロセッサによって実行されると、本明細書において説明される動作のうちの1つまたは複数をプロセッサに実行させる機械命令を記憶する。プロセッサは、マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)など、またはこれらの組合せを含み得る。メモリは、限定はされないが、プログラム命令をプロセッサに提供することが可能な電子デバイス、光デバイス、磁気デバイス、または任意の他の記憶デバイスもしくは送信デバイスを含み得る。メモリはさらに、フロッピーディスク、CD-ROM、DVD、磁気ディスク、メモリチップ、ASIC、FPGA、読取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、電気的消去可能プログラマブルROM(EEPROM)、消去可能プログラマブルROM(EPROM)、フラッシュメモリ、光学メディア、または、プロセッサがそれから命令を読み取ることができる任意の他の適切なメモリを含み得る。命令は、任意の適切なコンピュータプログラミング言語からのコードを含み得る。
クライアントデバイス120は、1つまたは複数のユーザインターフェースデバイスを含み得る。一般に、ユーザインターフェースデバイスは、感覚情報(たとえば、ディスプレイ上の視覚化、1つまたは複数の音など)を生成することによってユーザにデータを伝える、および/または、ユーザからの受け取られた感覚情報を電子信号に変換する、任意の電子デバイス(たとえば、キーボード、マウス、ポインティングデバイス、タッチスクリーンディスプレイ、マイクロフォンなど)を指す。1つまたは複数のユーザインターフェースデバイスは、クライアントデバイス120のハウジングの内部にあってもよく(たとえば、内蔵ディスプレイ、マイクロフォンなど)、またはクライアントデバイス120のハウジングの外部にあってもよい(たとえば、クライアントデバイス120に接続されるモニタ、クライアントデバイス120に接続されるスピーカーなど)。いくつかの実装形態では、クライアントデバイス120は電子ディスプレイを含んでもよく、これは、クライアントデバイス120上で実行するオペレーティングシステムによって提供される、データベース115から取り出される、またはデータ処理システム105によって提供されるインターフェースデータを使用してインターフェースを視覚的に表示する。
データ処理システム105は、データベース115に、少なくとも1つのデータ記録122を維持することができる。データ記録は、たとえば、少なくとも1つのクライアント識別子125および少なくとも1つの属性127を含み得る。クライアント識別子125は、クライアントデバイス120のそれぞれ1つに対応することができる。属性は、データ記録122の中のクライアント識別子125と関連付けられてもよく、それぞれのクライアントデバイス120の属性についての情報を含んでもよい。属性は、とりわけ、たとえば、クライアントデバイス位置データ、クライアントデバイスメタデータ、クライアントデバイスパラメータ、設定、および他の情報、ユーザプロファイルデータ、クライアントデバイスによって実行される対話、アプリケーションブラウジング履歴、ウエブページブラウジング履歴、活動情報、デバイス特性、クライアントデバイスがコンテンツ項目を見たか、またはそれと対話したかどうか、ネットワーク利用率情報、電力利用率情報、ならびにデバイスのオペレーティングシステムバージョン、設定、および他の情報を含み得る。データ処理システムは、クライアントデバイスの各々からデバイス識別子および属性データを受信し、それぞれのクライアントデバイスに対応するデータベース115にそれぞれのデータ記録を生成し、維持することができる。すべてのクライアントデバイス120がデータ処理システム105A~Nの各々と通信していることが図1に描かれているが、データ処理システムの各々がクライアントデバイス120の特定の集合からクライアントデバイス識別子および情報のみを受信し得ることを理解されたい。同様に、データ処理システム105A~Nは、他のデータ処理システム105A~Nによってアクセスすることができない固有のデータベース115にそれぞれのデータ記録を維持し得る。いくつかの実装形態によれば、クライアントデバイス120の異なる群が、異なる識別子サーバ(たとえば、データ処理システム105)によってサービスされてもよく、各データ処理システムは、クライアントデバイス120の集合のそれぞれ1つに対応するデータ記録の固有の集合を維持してもよい。
ベクトル生成器130は、複数の座標を備えるベクトルを生成することができる。ベクトルを生成するために、ベクトル生成器130は、少なくとも1つのカウンタレジスタを融通するために、データ処理システム105の中のメモリの1つまたは複数の領域を割り振ることができる。割り振られたカウンタレジスタは、ベクトルの少なくとも1つの座標に対応することができる。1つまたは複数のカウンタレジスタのためのメモリを生成して割り振ることによって、ベクトル生成器130は、カウンタレジスタを備えるベクトルを生成することができる。ベクトル生成器130は、ベクトルのカウンタレジスタの各々を初期化し、たとえば0または1に初期化することができる。ベクトル生成器130は、任意の数のカウンタレジスタ(「バケット」と呼ばれることがある)を有するように、最小増分数え上げブルームフィルタに対応し得るベクトルを生成することができる。たとえば、ベクトル生成器130は、n個のバケットを伴う最小増分数え上げブルームフィルタを生成するための指示を受信することができ、または、バケットもしくはカウンタレジスタの数によって最小増分数え上げブルームフィルタのサイズを指定する、外部コンピューティングデバイスによって提供される内部構成設定にアクセスし得る。
ハッシュ識別器135は、数え上げブルームフィルタデータ構造を更新するために使用可能なハッシュ関数のリストから1つまたは複数のハッシュ関数を識別することができる。たとえば、ハッシュのリストにおいて識別されるハッシュの各々は、入力値に基づいてランダム性の正規分布または予想を提供することができる。すなわち、たとえば、ハッシュ関数に対する同様の入力は、ハッシュ関数に対する同様の出力を必ずしも有しない。ハッシュ関数は、数え上げブルームフィルタのための最適なハッシュ関数として選ばれ得る。たとえば、ハッシュ識別器135は、独立の均一に分布するハッシュ関数を選ぶことができる。そのようなハッシュ関数は、たとえば、とりわけmurmurハッシュ、Fowler-Noll-Voシリーズハッシュ、またはJenkinsハッシュを含み得る。ハッシュ識別器135は、ある数のハッシュ関数を選択または識別して、各ハッシュ関数を各データ記録に適用してデータ記録のハッシュされた集合を生成することができる。
データ記録ハッシャ140は、それぞれのデータ処理システム105によって維持されるデータ記録の各々をハッシュして、ハッシュされたデータ記録のそれぞれの集合を作成することができる。ハッシュデータ記録を適用することは、ハッシュ識別器135によって識別されるハッシュ関数への引数としてデータ記録を使用することを含み得る。データ記録ハッシャ140は、ハッシュ識別器135によって識別されるハッシュの各々を使用してデータ記録の各々をハッシュすることができ、それにより、データ記録のそれぞれ1つに対応するある数のハッシュされた値をもたらす。したがって、データ記録ハッシャ140は、ループでデータ記録の各々を繰り返し、ハッシュ関数の各々を、それらが選択されるにつれて各データ記録に適用することができる。ハッシュ関数を適用した後で、データ記録ハッシャ140は、それぞれのデータ処理システム105のメモリに、ハッシュされたデータ記録の各々をそれぞれのデータ記録と関連付けて記憶することができる。
データ記録ハッシャ140はさらに、それぞれのデータ処理システム105によって維持されるデータ記録の各々に対応するハッシュされたデータ記録の各々からレジスタ識別子を抽出することができる。ハッシュされたデータ記録集合のハッシュされたデータ記録の各々は、ベクトル生成器130によって生成されるベクトルのカウンタレジスタに対応することができる。対応するカウンタレジスタを識別するために、データ記録ハッシャ140は、ハッシュされたデータ記録の各々からレジスタ識別子を抽出することができる。データ記録ハッシャ140は、たとえば、最小増分数え上げブルームフィルタの中のカウンタレジスタの数を用いて各々のハッシュされたデータ識別子に対する剰余演算を実行することによって、レジスタ識別子を抽出することができる。たとえば、ハッシュされたデータ記録のうちの1つが500に等しく、最小増分数え上げブルームフィルタにおいて15個の位置がある場合、データ処理システムは、500%15=5を計算して、ハッシュされたデータ記録が最小増分数え上げブルームフィルタの中の5番目のカウンタレジスタに対応することを決定することができる。いくつかの実装形態では、最小増分ブルームフィルタの中のカウンタレジスタの数が2のべき乗である場合、データ記録ハッシャ140はlog2(b)に等しいビットの数を選択することができ、bは最小増分数え上げブルームフィルタの中のカウンタレジスタの数に等しい。
ベクトル生成器130は、最小のレジスタ値を決定するために、データ記録ハッシャ140によって識別されるレジスタ識別子に対応する、ベクトル生成器130によって生成される数え上げブルームフィルタのカウンタレジスタの各々にアクセスすることができる。最小増分ブルームフィルタの実装形態では、ベクトル生成器130はさらに、バケット値の集合を取り出すために、データ記録ハッシャ140によって抽出されるレジスタ識別子の各々と関連付けられるカウンタレジスタバケットにアクセスすることができる。バケット値のうちのいずれをインクリメントすべきかを決定するために、ベクトル生成器130は、カウンタレジスタバケットの中から、最小値に等しいカウンタレジスタバケットの部分集合を決定することができる。最小値は、カウンタレジスタバケットの各々を比較し、最も小さい(たとえば、最も0に近い値など)バケット値を識別することによって決定され得る。たとえば、3、91、30、88、および10というそれぞれの値を伴う5つのバケットがある場合、最小のバケット値は3である。1つのバケットのみが最小値に等しいものとして示されているが、最小値に等しい任意の数のバケットがあり得ることに留意されたい。この概念を例示するために、5つのバケットがそれぞれ5、10、30、5、および28に等しい第2の例を考える。この例では、5に等しい2つのバケットがある。バケットのすべての最小値も5である。ベクトル生成器130は次いで、カウンタレジスタバケットの部分集合に含めるために、最小値に等しいバケットを選択することができる。これは、バケットがそれぞれ3、91、30、88、および10に等しい第1の例では、ベクトル生成器130が最小値である3に等しいバケットを部分集合の中のカウンタレジスタとして選択できることを意味する。5つのバケットがそれぞれ5、10、30、5、および28に等しい第2の例では、ベクトル生成器130は、カウンタレジスタバケットの最小値である5に等しい両方のバケットを選択することができる。カウンタレジスタの選択は、それぞれのデータ処理システム105のメモリの中のデータ構造に、対応するバケットを識別するレジスタ識別子を記憶することを含み得る。ブルームフィルタの最小値を正確に決定するために、ベクトル生成器130は、データ記録の各々について繰り返して、それぞれの識別子のハッシュされた値から抽出されるレジスタ識別子にアクセスすることができることに留意されたい。
ベクトル生成器130は、本明細書において上で説明されたようなカウンタレジスタの最小値閾値を満たすカウンタレジスタの各々をインクリメントすることができる。レジスタ識別子をインクリメントすることは、それぞれのレジスタ識別子に対応するカウンタレジスタに1を加算することを含み得る。いくつかの実装形態では、カウンタレジスタに加算される量は、1以外の値であり得る。たとえば、ベクトル生成器130は、本明細書において決定される、生成される、または計算される任意の値に対応し得る他の値を各カウンタレジスタに加算することができる。いくつかの実装形態では、データ処理システムは、本明細書において論じられる様々な理由でカウンタレジスタから減算することができる。いくつかの実装形態では、減算に対する代替として、ベクトル生成器130は、ベクトル生成器130によって現在選択されていない他のカウンタレジスタバケットの各々にある量(たとえば、1、または何らかの他の値など)を加算することができる。カウンタレジスタバケットまたは座標をインクリメントすることによって、ベクトル生成器130は、それぞれのデータ処理システム105によって維持されるデータ記録に基づいて、数え上げブルームフィルタを全体として更新することができる。このシステムの文脈では、標準的な数え上げブルームフィルタを更新するプロセスは、図2A~図2Cに関連して以下で簡単に説明され、最小増分数え上げブルームフィルタを更新するプロセス(図1に関連してここで説明されるような)は、図3A~図3Cに関連して以下で説明される。
図2Aをここで参照すると、少なくとも1つのデータ処理システム(たとえば、データ処理システム105のうちの少なくとも1つなど)による標準的な数え上げブルームフィルタへのデータ記録Xの挿入を示す、フロー図200Aの例示的な図が示されている。ブロック202において、データ処理システムは、数え上げブルームフィルタに挿入すべきデータ記録を示すことができる。示されるデータ記録は、たとえば、データベース(たとえば、データベース115)から選択され得る。データ処理システムは、h1、h2、およびh3とここでは示される、ある数のハッシュ関数を選択することができる。3つのハッシュ関数だけが示されているが、データ処理システムは、データ記録を標準的な数え上げブルームフィルタに挿入するために任意の数のハッシュ関数を利用できることを理解されたい。ブロック204A~204Cにおいて、データ処理システムは、識別されたハッシュ関数の各々を使用して、少なくとも1回データ記録Xを複製してハッシュすることができる。ハッシュ関数は、たとえば、本明細書において説明されるようなElGamalハッシュ、または、とりわけSHA-1、SHA-2、MD5などの任意の他のタイプのハッシュであり得る。データ記録Xを3回複製してハッシュすることによって、データ処理システムは、図2Aにおいてh1(x)、h2(x)、およびh3(x)として示される3つのハッシュされたデータ記録を生成した。さらにブロック204A~Cを参照すると、データ処理システムは、ハッシュされたデータ記録の各々からインデックス値を抽出することができる。抽出されたインデックス値は、数え上げブルームフィルタの中の少なくとも1つのそれぞれの位置に対応することができる。図2Aにおいて提供される例では、各ハッシュは11の剰余を用いて計算され、11は数え上げブルームフィルタの中のレジスタ位置の数である。11個のレジスタ位置だけがブルームフィルタにおいて使用されるが、ブルームフィルタを実装するために任意の数の数え上げレジスタが使用され得ることを理解されたい。
図2Aのさらなる詳細において、h1(x)のmod 11は1に等しく、h2(x)のmod 11は3に等しく、h3(x)のmod 11は9に等しい。これらの値の各々は、数え上げブルームフィルタの中のそれぞれの位置(たとえば、ID値など)と関連付けられるカウンタレジスタへのポインタとしてデータ処理システムによって使用され得る。たとえば、1に等しいh1(x)のmod 11は数え上げブルームフィルタにおいて位置「1」を指すことができ、3に等しいh2(x)のmod 11は数え上げブルームフィルタにおいて位置「3」を指すことができる、などである。これらは、数え上げブルームフィルタに関する動作を例示する目的の例示的な値にすぎず、数え上げブルームフィルタを記述する任意の実装形態の範囲を限定するものとして解釈されるべきではない。データ処理システムは、それぞれのハッシュ関数によって指し示されるカウンタレジスタの各々をインクリメントすることによって数え上げブルームフィルタを更新する(たとえば、データ記録を挿入する)ことができ、更新された数え上げブルームフィルタ206をもたらす。図2Aは各カウンタレジスタが1だけインクリメントされることを示すが、データ処理システムは、任意の値の任意の量だけ、たとえば、ある数のバイトだけ、ある数のビットだけ、または、本明細書において説明される任意の他の値、閾値、もしくは推定に対して相対的に、カウンタレジスタのいずれをインクリメントすることもできることに留意されたい。
図2Bをここで参照すると、少なくとも1つのデータ処理システム(たとえば、データ処理システム105のうちの少なくとも1つなど)による、図2Aに関連して上で本明細書において説明された更新された数え上げブルームフィルタ206へのデータ記録Yの挿入を示す、フロー図200Bの例示的な図が示されている。ブロック208において、データ処理システムは、数え上げブルームフィルタに挿入すべきデータ記録Yを示すことができる。示されるデータ記録は、たとえばデータベース(たとえば、データベース115)から選択され得る。データ処理システムは、h1、h2、およびh3としてここでは示される、ある数のハッシュ関数を選択することができる。3つのハッシュ関数だけが示されているが、データ処理システムは、データ記録を標準的な数え上げブルームフィルタに挿入するために任意の数のハッシュ関数を利用できることを理解されたい。ブロック210A~Cにおいて、データ処理システムは、識別されたハッシュ関数の各々を使用して、少なくとも1回データ記録Yを複製してハッシュすることができる。ハッシュ関数は、たとえば、本明細書において説明されるようなElGamalハッシュ、または、とりわけSHA-1、SHA-2、MD5などの任意の他のタイプのハッシュであり得る。データ記録Yを3回(たとえば、各ハッシュに対して1回)複製してハッシュすることによって、データ処理システムは、図2Bにおいてh1(y)、h2(y)、およびh3(y)として示される3つのハッシュされたデータ記録を生成した。さらにブロック210A~Cを参照すると、データ処理システムは、ハッシュされたデータ記録の各々からインデックス値を抽出することができる。抽出されたインデックス値は、数え上げブルームフィルタの中の少なくとも1つのそれぞれの位置に対応することができる。図2Aにおいて提供される例では、各ハッシュは11の剰余を用いて計算され、11は数え上げブルームフィルタの中のレジスタ位置の数である。11個のレジスタ位置だけが数え上げブルームフィルタにおいて使用されるが、数え上げブルームフィルタを実装するために任意の数の数え上げレジスタが使用され得ることを理解されたい。
図2Bのさらなる詳細において、h1(y)のmod 11は1に等しく、h2(y)のmod 11は5に等しく、h3(y)のmod 11は7に等しい。これらの値の各々は、数え上げブルームフィルタの中のそれぞれの位置(たとえば、ID値など)と関連付けられるカウンタレジスタへのポインタとしてデータ処理システムによって使用され得る。たとえば、1に等しいh1(y)のmod 11は数え上げブルームフィルタにおいて位置「1」を指すことができ、5に等しいh2(y)のmod 11は数え上げブルームフィルタにおいて位置「5」を指すことができる、などである。これらは、数え上げブルームフィルタに関する動作を例示する目的の例示的な値にすぎず、数え上げブルームフィルタを記述する任意の実装形態の範囲を限定するものとして解釈されるべきではない。データ処理システムは、それぞれのハッシュ関数によって指し示されるカウンタレジスタの各々をインクリメントすることによって数え上げブルームフィルタを更新する(たとえば、データ記録を挿入する)ことができ、更新された数え上げブルームフィルタ212をもたらす。図2Bは各カウンタレジスタが1だけインクリメントされることを示すが、データ処理システムは、任意の値の任意の量だけ、たとえば、ある数のバイトだけ、ある数のビットだけ、または、本明細書において説明される任意の他の値、閾値、もしくは推定に対して相対的に、カウンタレジスタのいずれをインクリメントすることもできることに留意されたい。図2Bに示されるように、位置「1」に対応するカウンタレジスタは、すでに1に等しい値を有するので、1だけインクリメントされると2に等しくなる。同様に、位置「5」および「7」に対応するカウンタレジスタの各々は0に等しいので、インクリメントされると各々1に等しくなる。したがって、更新された数え上げブルームフィルタ212は、位置「1」において2、位置「3」において1、位置「5」において1、位置「7」において1、および位置「9」において1の値を有する。
図2Cをここで参照すると、少なくとも1つのデータ処理システム(たとえば、データ処理システム105のうちの少なくとも1つなど)による、図2Cに関連して上で本明細書において説明された更新された数え上げブルームフィルタ212へのデータ記録Xの挿入を示す、フロー図200Cの例示的な図が示されている。ブロック214において、データ処理システムは、数え上げブルームフィルタに挿入すべきデータ記録Xを示すことができる。データ記録Xは図2Aに関連して上で説明されたように数え上げブルームフィルタへとすでに挿入されているが、これは、数え上げブルームフィルタの性質により、数え上げブルームフィルタへの1回より多くの同じデータ記録の挿入を必ずしも除外しないことに留意されたい。これは、たとえば、各位置がカウンタレジスタではなく二進値に対応し得る標準的なブルームフィルタとは異なる。示されるデータ記録は、たとえばデータベース(たとえば、データベース115)から選択され得る。データ処理システムは、h1、h2、およびh3としてここでは示される、ある数のハッシュ関数を選択することができる。3つのハッシュ関数だけが示されているが、データ処理システムは、データ記録を標準的な数え上げブルームフィルタに挿入するために任意の数のハッシュ関数を利用できることを理解されたい。ブロック216A~Cにおいて、データ処理システムは、識別されたハッシュ関数の各々を使用して、少なくとも1回データ記録Xを複製してハッシュすることができる。ハッシュ関数は、たとえば、本明細書において説明されるようなElGamalハッシュ、または、とりわけSHA-1、SHA-2、MD5などの任意の他のタイプのハッシュであり得る。データ記録Xを3回(たとえば、各ハッシュに対して1回)複製してハッシュすることによって、データ処理システムは、図2Cにおいてh1(x)、h2(x)、およびh3(x)として示される3つのハッシュされたデータ記録を生成した。さらにブロック214A~Cを参照すると、データ処理システムは、ハッシュされたデータ記録の各々からインデックス値を抽出することができる。抽出されたインデックス値は、数え上げブルームフィルタの中の少なくとも1つのそれぞれの位置に対応することができる。図2Cにおいて提供される例では、各ハッシュは11の剰余を用いて計算され、11は数え上げブルームフィルタの中のレジスタ位置の数である。11個のレジスタ位置だけが数え上げブルームフィルタにおいて使用されるが、数え上げブルームフィルタを実装するために任意の数の数え上げレジスタが使用され得ることを理解されたい。
図2Cのさらなる詳細において、h1(x)のmod 11は1に等しく、h2(x)のmod 11は3に等しく、h3(x)のmod 11は9に等しい。これらの値の各々は、図2Aにおいて決定されるものと同じであることに留意されたい。これは、データ処理システムが同じハッシュ関数を使用して同じデータ記録をハッシュしているので、各ハッシュの値が図2Aにおいて以前に計算されたものと同じ値をもたらすからである。データ処理システムは、数え上げブルームフィルタの中のそれぞれの位置と関連付けられるカウンタレジスタへのポインタ(たとえば、ID値など)として、これらのインデックス値の各々を使用することができる。たとえば、1に等しいh1(x)のmod 11は数え上げブルームフィルタにおいて位置「1」を指すことができ、3に等しいh2(x)のmod 11は数え上げブルームフィルタにおいて位置「3」を指すことができる、などである。これらは、数え上げブルームフィルタに関する動作を例示する目的の例示的な値にすぎず、数え上げブルームフィルタを記述する任意の実装形態の範囲を限定するものとして解釈されるべきではない。データ処理システムは、それぞれのハッシュ関数によって指し示されるカウンタレジスタの各々をインクリメントすることによって数え上げブルームフィルタを更新する(たとえば、データ記録を挿入する)ことができ、更新された数え上げブルームフィルタ218をもたらす。図2Cは各カウンタレジスタが1だけインクリメントされることを示すが、データ処理システムは、任意の値の任意の量だけ、たとえば、ある数のバイトだけ、ある数のビットだけ、または、本明細書において説明される任意の他の値、閾値、もしくは推定に対して相対的に、カウンタレジスタのいずれをインクリメントすることもできることに留意されたい。図2Cに示されるように、位置「1」に対応するカウンタレジスタは、すでに2に等しい値を有するので、1だけインクリメントされると3に等しくなる。同様に、位置「3」および「9」に対応するカウンタレジスタの各々は1に等しいので、インクリメントされると2に等しくなる。したがって、更新された数え上げブルームフィルタ218は、位置「1」において3、位置「3」において2、位置「5」において1、位置「7」において1、および位置「9」において2の値を有する。
図3Aをここで参照すると、少なくとも1つのデータ処理システム(たとえば、データ処理システム105のうちの少なくとも1つなど)による最小増分数え上げブルームフィルタへのデータ記録Xの挿入を示す、フロー図300Aの例示的な図が示されている。ブロック302において、データ処理システムは、数え上げブルームフィルタに挿入すべきデータ記録、たとえばデータ記録Xを示すことができる。示されるデータ記録は、たとえば、データベース(たとえば、データベース115)から選択され得る。データ処理システムは、h1、h2、およびh3とここでは示される、ある数のハッシュ関数を選択することができる。3つのハッシュ関数だけが示されているが、データ処理システムは、データ記録を標準的な数え上げブルームフィルタに挿入するために任意の数のハッシュ関数を利用できることを理解されたい。ブロック304A~Cにおいて、データ処理システムは、識別されたハッシュ関数の各々を使用して、選択されたデータ記録(たとえば、データ記録X)を少なくとも1回複製してハッシュすることができる。ハッシュ関数は、たとえば、本明細書において説明されるようなElGamalハッシュ、または、とりわけSHA-1、SHA-2、MD5などの任意の他のタイプのハッシュであり得る。データ記録Xを3回複製してハッシュすることによって、データ処理システムは、図3Aにおいてh1(x)、h2(x)、およびh3(x)として示される3つのハッシュされたデータ記録を生成した。さらにブロック304A~Cを参照すると、データ処理システムは、ハッシュされたデータ記録の各々からインデックス値を抽出することができる。抽出されたインデックス値は、数え上げブルームフィルタの中の少なくとも1つのそれぞれの位置に対応することができる。図3Aにおいて提供される例では、各ハッシュは11の剰余を用いて計算され、11は数え上げブルームフィルタ中のレジスタ位置の数である。11個のレジスタ位置だけがブルームフィルタにおいて使用されるが、ブルームフィルタを実装するために任意の数の数え上げレジスタが使用され得ることを理解されたい。
図3Aのさらなる詳細において、h1(x)のmod 11は1に等しく、h2(x)のmod 11は3に等しく、h3(x)のmod 11は9に等しい。これらの値の各々は、数え上げブルームフィルタの中のそれぞれの位置(たとえば、ID値など)と関連付けられるカウンタレジスタへのポインタとしてデータ処理システムによって使用され得る。たとえば、1に等しいh1(x)のmod 11は数え上げブルームフィルタにおいて位置「1」を指すことができ、3に等しいh2(x)のmod 11は数え上げブルームフィルタにおいて位置「3」を指すことができる、などである。これらは、数え上げブルームフィルタに関する動作を例示する目的の例示的な値にすぎず、数え上げブルームフィルタを記述する任意の実装形態の範囲を限定するものとして解釈されるべきではない。データ記録を最小増分数え上げブルームフィルタへと挿入するために、データ処理システムは、計算されたインデックス値によって指し示されるカウンタレジスタの最小値に対応するカウンタレジスタをインクリメントすることができる。たとえば、データ処理システムは、計算されたインデックス値によって指し示されるカウンタレジスタの各々にアクセスすることができる。図3Aに示されるように、これらは、位置「1」、「3」、および「9」に対応するカウンタレジスタである。最小増分数え上げブルームフィルタはまだ更新されていないので、これらの位置の各々は0に等しい。
データ処理システムは、これらのアクセスされたデータレジスタの各々を比較して、カウンタレジスタの間での最小値を決定することができる。たとえば、最小値は、アクセスされたカウンタレジスタの最小のカウンタレジスタ値であり得る。1つより多くのカウンタレジスタが最小値に等しくてもよいことに留意されたい。データ処理システムは、カウンタレジスタの決定された最小値に等しい値を伴うアクセスされたカウンタレジスタの部分集合を選択することができる。図3Aに示されるように、アクセスされたカウンタレジスタの各々は0に等しいので、アクセスされたカウンタレジスタの各々は最小値(ここでは0)に等しい。したがって、アクセスされたカウンタレジスタの各々が選択される。データ処理システムは、カウンタレジスタの選択された部分集合の各々をインクリメントすることによって最小増分数え上げブルームフィルタを更新する(たとえば、データ記録を挿入する)ことができ、更新された数え上げブルームフィルタ306をもたらす。図3Aは各カウンタレジスタが1だけインクリメントされることを示すが、データ処理システムは、任意の値の任意の量だけ、たとえば、ある数のバイトだけ、ある数のビットだけ、または、本明細書において説明される任意の他の値、閾値、もしくは推定に対して相対的に、カウンタレジスタの選択された部分集合のいずれをインクリメントすることもできることに留意されたい。
図3Bをここで参照すると、少なくとも1つのデータ処理システム(たとえば、データ処理システム105のうちの少なくとも1つなど)による最小増分数え上げブルームフィルタへのデータ記録Yの挿入を示す、フロー図300Bの例示的な図が示されている。ブロック308において、データ処理システムは、数え上げブルームフィルタに挿入すべきデータ記録、たとえばデータ記録Yを示すことができる。示されるデータ記録は、たとえば、データベース(たとえば、データベース115)から選択され得る。データ処理システムは、h1、h2、およびh3とここでは示される、ある数のハッシュ関数を選択することができる。3つのハッシュ関数だけが示されているが、データ処理システムは、データ記録を標準的な数え上げブルームフィルタに挿入するために任意の数のハッシュ関数を利用できることを理解されたい。ブロック310A~Cにおいて、データ処理システムは、識別されたハッシュ関数の各々を使用して、選択されたデータ記録(たとえば、データ記録Y)を少なくとも1回複製してハッシュすることができる。ハッシュ関数は、たとえば、本明細書において説明されるようなElGamalハッシュ、または、とりわけSHA-1、SHA-2、MD5などの任意の他のタイプのハッシュであり得る。データ記録Yを3回複製してハッシュすることによって、データ処理システムは、図3Bにおいてh1(y)、h2(y)、およびh3(y)として示される3つのハッシュされたデータ記録を生成した。さらにブロック310A~Cを参照すると、データ処理システムは、ハッシュされたデータ記録の各々からインデックス値を抽出することができる。抽出されたインデックス値は、数え上げブルームフィルタの中の少なくとも1つのそれぞれの位置に対応することができる。図3Bにおいて提供される例では、各ハッシュは11の剰余を用いて計算され、11は数え上げブルームフィルタ中のレジスタ位置の数である。11個のレジスタ位置だけがブルームフィルタにおいて使用されるが、ブルームフィルタを実装するために任意の数の数え上げレジスタが使用され得ることを理解されたい。
図3Bのさらなる詳細において、h1(y)のmod 11は1に等しく、h2(y)のmod 11は5に等しく、h3(y)のmod 11は7に等しい。これらの値の各々は、最小増分数え上げブルームフィルタの中のそれぞれの位置(たとえば、ID値など)と関連付けられるカウンタレジスタへのポインタとしてデータ処理システムによって使用され得る。たとえば、1に等しいh1(y)のmod 11は数え上げブルームフィルタにおいて位置「1」を指すことができ、5に等しいh2(y)のmod 11は数え上げブルームフィルタにおいて位置「5」を指すことができる、などである。これらは、数え上げブルームフィルタに関する動作を例示する目的の例示的な値にすぎず、数え上げブルームフィルタを記述する任意の実装形態の範囲を限定するものとして解釈されるべきではない。データ記録を最小増分数え上げブルームフィルタへと挿入するために、データ処理システムは、計算されたインデックス値によって指し示されるカウンタレジスタの最小値に対応するカウンタレジスタをインクリメントすることができる。たとえば、データ処理システムは、計算されたインデックス値によって指し示されるカウンタレジスタの各々にアクセスして、更新動作の前にそれらの値を決定することができる。図3Bに示されるように、これらは、位置「1」、「5」、および「7」に対応するカウンタレジスタである。更新の前に、位置「1」に対応する値は1に等しく、位置「5」に対応する値は0に等しく、位置「7」に対応する値も0に等しい。
データ処理システムは、これらのアクセスされたデータレジスタの各々を比較して、カウンタレジスタの間での最小値を決定することができる。たとえば、最小値は、アクセスされたカウンタレジスタの最小のカウンタレジスタ値であり得る。1つより多くのカウンタレジスタが最小値に等しくてもよいことに留意されたい。この場合、最小値は位置「5」および「7」において示され、これらは、更新ステップの前はともに0に等しい。データ処理システムは、カウンタレジスタの決定された最小値に等しい値を伴うアクセスされたカウンタレジスタの部分集合を選択することができ、これはこの場合、位置「5」および「7」に対応するカウンタレジスタを選択することを意味する。データ処理システムは、カウンタレジスタの選択された部分集合の各々をインクリメントすることによって最小増分数え上げブルームフィルタを更新する(たとえば、データ記録を挿入する)ことができ、更新された数え上げブルームフィルタ312をもたらす。h1(y)は位置「1」を指し示すが、それは指し示されるカウンタレジスタの最小値に等しくないので、インクリメントされない。図3Bは各カウンタレジスタが1だけインクリメントされることを示すが、データ処理システムは、任意の値の任意の量だけ、たとえば、ある数のバイトだけ、ある数のビットだけ、または、本明細書において説明される任意の他の値、閾値、もしくは推定に対して相対的に、カウンタレジスタの選択された部分集合のいずれをインクリメントすることもできることに留意されたい。
図3Cをここで参照すると、少なくとも1つのデータ処理システム(たとえば、データ処理システム105のうちの少なくとも1つなど)による最小増分数え上げブルームフィルタへのデータ記録Xの挿入を示す、フロー図300Cの例示的な図が示されている。ブロック314において、データ処理システムは、最小増分数え上げブルームフィルタに挿入すべきデータ記録、たとえばデータ記録Xを示すことができる。図3Aに関連して上で説明されたように、データ記録Xは最小増分ブルームフィルタへとすでに挿入されているが、これは、データ処理システムがデータ記録Xを1回より多く挿入することを必ずしも除外しないことに留意されたい。示されるデータ記録は、たとえば、データベース(たとえば、データベース115)から選択され得る。データ処理システムは、h1、h2、およびh3とここでは示される、ある数のハッシュ関数を選択することができる。3つのハッシュ関数だけが示されているが、データ処理システムは、データ記録を標準的な数え上げブルームフィルタに挿入するために任意の数のハッシュ関数を利用できることを理解されたい。ブロック316A~Cにおいて、データ処理システムは、識別されたハッシュ関数の各々を使用して、選択されたデータ記録(たとえば、データ記録X)を少なくとも1回複製してハッシュすることができる。ハッシュ関数は、たとえば、本明細書において説明されるようなElGamalハッシュ、または、とりわけSHA-1、SHA-2、MD5などの任意の他のタイプのハッシュであり得る。データ記録Xを3回複製してハッシュすることによって、データ処理システムは、図3Cにおいてh1(x)、h2(x)、およびh3(x)として示される3つのハッシュされたデータ記録を生成した。さらにブロック316A~Cを参照すると、データ処理システムは、ハッシュされたデータ記録の各々からインデックス値を抽出することができる。抽出されたインデックス値は、数え上げブルームフィルタの中の少なくとも1つのそれぞれの位置に対応することができる。図3Cにおいて提供される例では、各ハッシュは11の剰余を用いて計算され、11は数え上げブルームフィルタ中のレジスタ位置の数である。11個のレジスタ位置だけがブルームフィルタにおいて使用されるが、ブルームフィルタを実装するために任意の数の数え上げレジスタが使用され得ることを理解されたい。
図3Cのさらなる詳細において、h1(x)のmod 11は1に等しく、h2(x)のmod 11は3に等しく、h3(x)のmod 11は9に等しい。これらの値の各々は、最小増分数え上げブルームフィルタの中のそれぞれの位置(たとえば、ID値など)と関連付けられるカウンタレジスタへのポインタとしてデータ処理システムによって使用され得る。たとえば、1に等しいh1(x)のmod 11は数え上げブルームフィルタにおいて位置「1」を指すことができ、3に等しいh2(x)のmod 11は数え上げブルームフィルタにおいて位置「3」を指すことができる、などである。これらは、数え上げブルームフィルタに関する動作を例示する目的の例示的な値にすぎず、数え上げブルームフィルタを記述する任意の実装形態の範囲を限定するものとして解釈されるべきではない。データ記録を最小増分数え上げブルームフィルタへと挿入するために、データ処理システムは、計算されたインデックス値によって指し示されるカウンタレジスタの最小値に対応するカウンタレジスタをインクリメントすることができる。たとえば、データ処理システムは、計算されたインデックス値によって指し示されるカウンタレジスタの各々にアクセスして、更新動作の前にそれらの値を決定することができる。図3Cに示されるように、これらは、位置「1」、「3」、および「9」に対応するカウンタレジスタである。更新の前に、位置「1」、「3」、および「9」に対応する値は各々1に等しい。
データ処理システムは、これらのアクセスされたデータレジスタの各々を比較して、カウンタレジスタの間での最小値を決定することができる。たとえば、最小値は、アクセスされたカウンタレジスタの最小のカウンタレジスタ値であり得る。1つより多くのカウンタレジスタが最小値に等しくてもよいことに留意されたい。この場合、最小値は位置「1」、「3」および「9」によって共有され、これらは、更新ステップの前は各々1に等しい。データ処理システムは、カウンタレジスタの決定された最小値に等しい値を伴うアクセスされたカウンタレジスタの部分集合を選択することができ、これはこの場合、位置「1」、「3」および「9」に対応するカウンタレジスタを選択することを意味する。データ処理システムは、カウンタレジスタの選択された部分集合の各々をインクリメントすることによって最小増分数え上げブルームフィルタを更新する(たとえば、データ記録を挿入する)ことができ、更新された数え上げブルームフィルタ318をもたらす。更新された最小増分ブルームフィルタ318において、位置「1」、「3」および「9」の各々はインクリメントされて2という値を有するようになるが、他の位置は変更されないままである。図3Cは各カウンタレジスタが1だけインクリメントされることを示すが、データ処理システムは、任意の値の任意の量だけ、たとえば、ある数のバイトだけ、ある数のビットだけ、または、本明細書において説明される任意の他の値、閾値、もしくは推定に対して相対的に、カウンタレジスタの選択された部分集合のいずれをインクリメントすることもできることに留意されたい。
ここで図1を再び参照して、ワーカーコンピューティングデバイスの動作に関するデータ処理システムの機能およびモジュールの説明を続ける。同じデータ処理システム105の一部として描かれているが、本明細書において以下で詳述されるコンポーネントの各々(たとえば、暗号鍵生成器145、ベクトル暗号化器150、暗号化ベクトル通信器155、ベクトル合成器160、ヒストグラム構築器165、および濃度推定器170)および図4A~図4Cにおけるそれらの付随する説明は、同じモジュールと機能を含み実装するワーカーコンピューティングデバイスによって実行され得る。したがって、データ処理システム105はそのようなモジュールを含み得るが、他の実装形態では、これらの動作およびコンポーネントは、1つまたは複数のワーキングコンピューティングデバイス上で実行され、維持され、実装されることが可能であり得ることを理解されたい。さらに、以下のコンポーネントの部分集合のみがワーカーコンピューティングデバイスに存在してもよいこと、たとえば、ワーカーコンピューティングデバイスが暗号鍵生成器145、暗号化ベクトル通信器、ベクトル合成器160、ヒストグラム構築器165、および濃度推定器170のみを含むことを理解されたい。したがって、そのようなワーカーコンピューティングデバイスは、たとえばネットワーク110を介して、データ処理システム105と通信していてもよく、システムの全体的な差分プライバシーを維持するために暗号化されたベクトルまたは暗号鍵のみを交換してもよい。
暗号鍵生成器145は、少なくとも1つのベクトルを暗号化するために、1つまたは複数の秘密鍵および公開鍵を生成することができる。暗号鍵生成器145はさらに、固有の公開鍵と秘密鍵のペアも生成した他のワーカーコンピューティングデバイスを識別し、またはそうでなければ、それらからデータを受信することができる。暗号鍵生成器145は、少なくとも1つの他の公開鍵を受信するために、他のワーカーコンピューティングデバイスと通信することができる。暗号鍵生成器145は、受信された公開鍵の各々を、暗号鍵生成器145によって生成された公開鍵とともに、アグリゲートし、連結し、または別様に合成して、アグリゲートされた(たとえば、合成された)暗号鍵を作成することができる。生成された暗号鍵は、とりわけ、任意の種類の準同型暗号鍵または方式、たとえばElGamal暗号鍵であり得る。暗号鍵生成器145は、それぞれのデータ処理システム105によって維持される最小増分数え上げブルームフィルタを暗号化するために、生成されアグリゲートされた暗号鍵をベクトル暗号化器150に通信することができる。暗号鍵生成器145はさらに、データ処理システム105A~Nの各々(たとえば、識別子サーバの各々など)にアグリゲートされた暗号鍵の各々を分配することができる。
ベクトル暗号化器150は、暗号化されたベクトルを生成するために、暗号鍵生成器145によって受信されるアグリゲートされた暗号鍵を使用して、最小増分数え上げブルームフィルタの1つまたは複数のカウンタレジスタの各々を符号化することができる。最小増分数え上げブルームフィルタの差分プライバシーを確保するために、ベクトル暗号化器150は、それぞれのデータ処理システム105(たとえば、それぞれの識別子サーバ)によって生成され維持されるベクトルを暗号化するために、1つまたは複数の暗号化技法を利用することができる。たとえば、データ処理システムは、ある暗号化方式(たとえば、ElGamal暗号化、閾値復号をサポートする暗号化方式、準同型暗号化など)を使用して、暗号鍵生成器から受信されるアグリゲートされた公開鍵を使用することができる。いくつかの実装形態では、ベクトル暗号化器150は、アグリゲートされた暗号鍵を使用して個別に、ベクトルの座標に対応するカウンタレジスタの各々を暗号化することができる。そのような実装形態では、暗号化されたカウンタレジスタの各々は、最小増分数え上げブルームフィルタを表す暗号化されたベクトルを作成するためにアグリゲートされ得る。
暗号化ベクトル通信器155は、暗号化されたベクトルを少なくとも1つのワーカーコンピューティングデバイスに通信することができる。いくつかの実装形態では、暗号化ベクトル通信器155は、暗号化されたベクトルに対する1つまたは複数の要求を受信することができ、これは次いで、本明細書において説明されるような暗号化されたベクトルの生成または通信のいずれかを惹起することができる。要求は、たとえば、少なくとも1つのワーカーコンピューティングデバイスによって受信され得る。暗号化されたベクトルを送信することは、ネットワーク110を介して暗号化されたベクトルをワーカーコンピューティングデバイスに提供することを含み得る。暗号化ベクトル通信器155は、暗号化されたベクトルを処理するために、1つまたは複数のワーカーコンピューティングデバイスのうちの第1のものとしてワーカーコンピューティングデバイスを選択することができる。いくつかの実装形態では、暗号化ベクトル通信器155は、暗号化されたベクトルをバケットごとに送信することができ、すなわち、各バケットはワーカーコンピューティングデバイスに別々に送信される。いくつかの実装形態では、暗号化ベクトル通信器155は、バルクトランザクションにおいて暗号化されたベクトルを送信することができ、このとき、暗号化されるベクトルの大半または全体が、単一のメッセージにおいて送信される。
ベクトル合成器160は、1つまたは複数の識別子サーバ(たとえば、データ処理システム105A~N)から1つまたは複数の暗号化されたベクトルを受信することができる。受信された暗号化されたベクトルの各々は、暗号化されたベクトルの座標に対応する少なくとも1つの暗号化されたカウンタレジスタを含み得る。いくつかの実装形態では、ベクトル合成器160は、定期的に、またはバーストトランザクションにおいて、ベクトルを受信することができる。各ベクトルは、ベクトルの受信元である識別子サーバを反映するそれぞれの識別子と関連付けられ得る。識別子サーバから受信された暗号化されたベクトルの各々は、暗号鍵生成器145によって生成される合成された公開鍵を使用して暗号化され、それぞれの識別子サーバ(たとえば、データ処理システム105A~N)に分配され得る。合成された公開鍵は、ワーカーコンピューティングデバイスが、識別子サーバから受信された暗号化されたベクトルを部分的に復号することを可能にし得る。これらの動作は、図4A~図4Cに関連して以下でより詳細に示される。
ここで図4を参照すると、ワーカーコンピューティングデバイスによる暗号鍵の生成および分配のためのシステムフロー図400Aが示されている。システムフロー図400Aは、1つまたは複数のワーカーコンピューティングデバイス405A~C(全般にワーカー(workers)405またはワーカー(worker)405と呼ばれることがある)を含み得る。3つのワーカーコンピューティングデバイスのみがあるが、任意の数のワーカーコンピューティングデバイスが、本明細書において説明される機能を実装するために使用され得ることを理解されたい。ワーカー405は、データ処理システム105のうちの少なくとも1つであってもよく、または、データ処理システム105のコンポーネントの部分集合、たとえば、暗号鍵生成器145、暗号化ベクトル通信器155、ベクトル合成器160、ヒストグラム構築器165、および濃度推定器170を含んでもよい。
図4Aに示されるように、ワーカー405は合成された鍵を生成することができる。合成された鍵を生成することは、少なくとも1つの公開鍵および少なくとも1つの秘密鍵を生成することを含み得る。いくつかの実装形態では、ワーカー405は、少なくともElGamal暗号化技法の一部として実装され得る鍵を生成することができる。たとえば、ワーカー405は、ランダム(たとえば、擬似ランダムなど)整数X modulo q(たとえば、楕円曲線群の位数)を生成または選択することができる。ワーカー405は、復号のために秘密鍵として整数Xを使用することができ、gxを公開鍵として使用することができ、gはジェネレータである。ジェネレータは、たとえば、巡回群の元であり得る。公開鍵は、たとえば1つまたは複数の他のワーカー405と共有され得る。他のワーカー405の各々が、固有の公開鍵と秘密鍵のペアを生成して、他のワーカー405の各々に送信することができる。合成された鍵を生成するために、各ワーカー405は、他のワーカー405から受信された公開鍵の各々をその固有の公開鍵と合成することができる。
ここで図4Bを参照すると、識別子サーバによる暗号化されたベクトルの分配のためのシステムフロー図400Bが示されている。システムフロー図400Bは、少なくとも1つの識別子サーバ415A~Nおよび少なくとも1つのワーカー405A~Nを含み得る。ワーカー405はさらに、図4Aに関連して上で本明細書において説明される。識別子サーバ415A~Nの各々は、たとえば、図1に関連して上で本明細書において説明されたデータ処理システム105のうちの1つまたは複数であり得る。フロー図400Bでは、ワーカー405Aが第1のワーカー405として選ばれている(たとえば、無作為に、要求によって、内部構成設定によって、など)。識別子サーバの各々が、上で本明細書において説明されたような暗号化されたレジスタバケットを備え得る、関連する暗号化されたベクトルを提供することができる。
識別子サーバによる暗号化のための合成された鍵を送信した後、ワーカー405(たとえば、第1のワーカー405A)は、識別子サーバ415A~Nの各々から少なくとも1つの暗号化されたベクトルを受信することができる。いくつかの実装形態では、第1のワーカー405Aは、定期的に、またはバーストトランザクションにおいて、ベクトルを受信することができる。各ベクトルは、ベクトルの受信元である識別子サーバ415A~Nを反映するそれぞれの識別子と関連付けられ得る。識別子サーバ415A~Nから受信される暗号化されたベクトルの各々は、図1および図4Aに関連して上で本明細書において説明されたように生成される合成された公開鍵を使用して暗号化され得る。合成された公開鍵は、識別子サーバから受信された暗号化されたベクトルを各ワーカー405が部分的に復号することを可能にできる。
ここで図4Cを参照すると、ノイズを伴うアグリゲートされたベクトルの逐次復号のためのシステムフロー図400Cが示されている。システムフロー図400Cは、少なくとも1つのワーカー405A~Nを含み得る。ワーカー405はさらに、図4Aおよび図4Bに関連して上で本明細書において説明されている。フロー図400Cにおいて、第1のワーカー405Aは、図4Bに関連して上で説明されたように、識別子サーバ415A~Nから受信された暗号化されたベクトルを処理することができる。暗号化されたベクトルを処理するために、第1のワーカー405Aは、それぞれ図6および図7に関連して以下で本明細書において説明されるような、方法600および方法700のステップを実行することができる。識別子サーバ415A~Nから受信されたベクトルを処理した後で、ワーカー415は、付加された復号ルックアップテーブルとともに、処理された暗号化されたベクトルをアグリゲータコンピューティングデバイス410に転送することができる。
上で本明細書において説明されたように、アグリゲータコンピューティングデバイス410は、データ処理システム105A~Nの1つまたは複数のモジュールまたはワーカーコンピューティングデバイスの1つまたは複数のモジュールを含み得る。たとえば、アグリゲータ410は、データ処理システム105のコンポーネント(たとえば、ベクトル生成器130、ハッシュ識別器135、データ記録ハッシャ140、暗号鍵生成器145、ベクトル暗号化器150、暗号化ベクトル通信器155、ベクトル合成器160、ヒストグラム構築器165、および濃度推定器170など)のすべてを含み得る。いくつかの実装形態では、アグリゲータ410は、データ処理システム105のコンポーネント(たとえば、暗号鍵生成器145、暗号化ベクトル通信器155、ベクトル合成器160、ヒストグラム構築器165、および濃度推定器170)のいくつかを含み得る。いくつかの実装形態では、アグリゲータ410は、暗号化ベクトル通信器155、ヒストグラム構築器165、および濃度推定器170を含み得る。アグリゲータ410は、データ処理システム105A~Nのうちの少なくとも1つ、ワーカー405A~Nのうちの少なくとも1つ、またはワーカー405A~Nおよびデータ処理システム105A~Nと通信している別個の個別のコンピューティングデバイスであり得る。
図1を再び参照し、アグリゲータ410(これは少なくとも1つのデータ処理システム105A~N、または少なくとも1つのワーカー405などのいずれであってもよい)の動作に関連して以下のコンポーネントを説明すると、暗号化ベクトル通信器155は、ワーカーコンピューティングデバイス(たとえば、ワーカー405など)から暗号化された並べ替えられたベクトルを受信することができる。暗号化された並べ替えられたベクトルは、本明細書において以下で説明される方法500および方法600に関連して各ワーカーコンピューティングデバイス(たとえば、ワーカー405)によって処理されるような、アグリゲートされたベクトルであり得る。暗号化ベクトル通信器155は、コンピュータメモリの中の1つまたは複数のデータ構造に、暗号化された並べ替えられたベクトルを記憶することができる。いくつかの実装形態では、暗号化ベクトル通信器155は、並べ替えられた暗号化されたベクトルと関連付けられる復号ルックアップテーブルを受信することができる。いくつかの実装形態では、並べ替えられた暗号化されたベクトルは、復号ルックアップテーブルと連結され、またはそれに別様に付加され得る。
ヒストグラム構築器165は、暗号化された並べ替えられたベクトルの座標値に基づいてバケットヒストグラムを構築することができる。ヒストグラムを構築することは、暗号化された並べ替えられたベクトルに付加または連結される復号ルックアップテーブルを使用して、暗号化された並べ替えられたベクトルを復号することを含み得る。復号ルックアップテーブルは、たとえば、ワーカー405のうちの少なくとも1つによって作成される対応する復号鍵であり得る。ヒストグラムを構築器165は、識別子サーバに対応するアグリゲートされたベクトルの値を明らかにするために、復号ルックアップテーブルを使用することができる。復号されると、アグリゲートされたベクトルは、目標頻度値に対応する復号されたバケット値を含み得る。目標頻度値は、システム100の中のコンピューティングデバイスのいずれかから、または、ワーカー405もしくはアグリゲータ410のうちの1つから受信される要求において提供される、内部構成設定によって提供され得る。目標頻度値は、0以上の任意の種類の数値を含んでもよく、ヒストグラム構築器165に、値が目標頻度以上である暗号化されたベクトルのバケットのみを復号するために目標頻度値を使用させることができる。たとえば、目標頻度値が3である場合、ヒストグラム構築器165は、3以上の暗号化されたベクトルのバケットを復号することができ、目標頻度値より小さいバケットの値を復号することはできない。
いくつかの実装形態では、ワーカー405は、復号ルックアップテーブルを生成するとき、目標頻度値を組み込むことができる。そのような実装形態では、ワーカー405は、目標頻度値以上である値を有するバケットのみを復号するように、復号ルックアップテーブルを構成することができる。ワーカー405は、たとえば、システム100のコンピューティングデバイスのいずれかからの要求もしくはメッセージにおいて、または内部構成設定から、目標頻度値を取得することができる。そのような実装形態では、復号ルックアップテーブルは、目標頻度値以上である値を有するバケットを復号するように構成され得る。ワーカー405の各々は、暗号化されたベクトルのシェアを部分的に復号するとき、確定的暗号鍵のシェアを用いて復号ルックアップテーブルを更新することができる。ワーカー405は、閾値以上である暗号化されたベクトルのバケットのシェアを復号するように、しかし、閾値未満の値に対応するバケットを復号することが不可能であるように、復号ルックアップテーブルを構成することができる。したがって、ヒストグラム構築器165が暗号化されたベクトルを復号してヒストグラムを作成するとき、目標頻度閾値以上のバケットの各々が復号ルックアップテーブルを使用して復号されてもよく、目標頻度閾値未満のバケットは暗号化されたままであってもよい。バケットヒストグラムを構築するとき、暗号化されたままであるバケットの各々は、本明細書において説明されるように、max_frequency値に設定され得る。ヒストグラム構築器165は、たとえば、システム100のコンピューティングデバイスのいずれかからの要求もしくはメッセージから、または内部構成設定から、max_frequency値を受信することができる。暗号化されたベクトルを復号することによって、ヒストグラム構築器165は、暗号化されたベクトルの復号された値の各々を含む復号されたベクトルを生成することができる。
復号ルックアップテーブルを使用して暗号化されたベクトルを復号した後、ヒストグラム構築器165は、復号されたベクトルのバケットまたはカウンタレジスタを使用して、バケットヒストグラムを生成または作成することができる。バケットヒストグラムは、復号されたベクトルのバケット値の各々の頻度に対応し得る。たとえば、バケットヒストグラムの中の各ビンは、[0,1)、[1,2)、[2,3)、[3,4)などの範囲を有し得る。バケットヒストグラムを生成するために、ヒストグラム構築器165は、復号されたベクトルの各座標を入手してその値を決定することができる。その値を決定した後で、ヒストグラム構築器165は、バケットヒストグラムの中の対応するビンをインクリメントし、またはそれに加算することができる。たとえば、ヒストグラム構築器165が51に等しい復号されたベクトル座標値を入手する場合、ヒストグラム構築器165は、範囲[51,52)に対応するバケットヒストグラムビンをインクリメントすることができる。これらの例では、ヒストグラムビンの範囲が単一の整数範囲に等しいことが述べられたが、バケットヒストグラムビンは、任意のタイプの数値範囲を反映するビンに対応し得ることを理解されたい。したがって、いくつかの実装形態では、バケットヒストグラムビンは、単一の整数値範囲より広いまたは狭い範囲に対応し得る。
ヒストグラム構築器165は、復号されたベクトルの値の各々について繰り返して、上で説明されたようにヒストグラムを更新することができる。ヒストグラム構築器165は、コンピュータメモリの中の1つまたは複数のデータ構造にヒストグラムを記憶することができる。復号されたベクトルの各座標バケットについて繰り返した後で、ヒストグラム構築器165は、ヒストグラムからノイズを除去することができる。ベクトルを部分的に復号してシャッフルする前に、追加のバケットが1つまたは複数のワーカー405によって追加されたことを思い出されたい。ノイズバケット値を暗号化されたベクトルに付加する前に、ワーカー405の各々は、ベースラインノイズ値Bについて合意した。したがって、ヒストグラムにおいて提示されるような結果には偏りがあり、正確な測定を達成するためにノイズが除去され得る。ノイズを除去するために、ヒストグラム構築器165は、バケットヒストグラムビンの各々について繰り返して、B*wを減算することができ、wはバケットにノイズを追加したワーカー405の数である。ヒストグラム構築器165は、ベースラインノイズ値とともに、暗号化されたベクトルにノイズを追加したワーカー405の数を、ワーカー405のうちの1つまたは複数から受信することができる。いくつかの実装形態では、ヒストグラム構築器165は、ベースラインノイズ値Bについてすでに合意したワーカー405上で実行されている。したがって、ベースラインノイズ値を要求または受信する必要がある可能性があり、それは、ベースラインノイズ値がコンピュータメモリの中に存在し得るからである。ヒストグラムの各ビンからノイズを減算することによって、ヒストグラム構築器165は、フィルタリングされたヒストグラムを生成することができる。ベースラインは除去されたが、フィルタリングされたヒストグラムに両側幾何ノイズがまだ存在し得ることを理解されたい。これはさらに、システムのセキュリティを改善することができ、それは、あらゆるノイズが、濃度または頻度の推定の結果に重大な影響を及ぼすことなくヒストグラムの中の値をさらに不明瞭にするからである。
濃度推定器170は、ヒストグラム構築器165によって生成されたフィルタリングされたヒストグラムに基づいて、デバイス識別子およびデバイス属性の集合の濃度(たとえば、多重集合のユニークメンバーの数など)を推定することができる。多重集合の全体の濃度を推定するために、濃度推定器170は以下に含まれる式を使用することができる。
上の式では、nは多重集合の濃度であり、kは各最小増分数え上げブルームフィルタを埋めるために使用されるハッシュ関数の数であり、mは復号されたベクトルの中のカウンタレジスタバケットの数であり、xは復号されたベクトルの中の満たされているバケットの数である。濃度推定器170は、1以上であるフィルタリングされたヒストグラムの中のビンの各々を数えることによって、満たされているバケットの数を決定することができる。濃度推定器170は、システム100のコンピューティングデバイスのうちの1つまたは複数、またはワーカー405もしくはアグリゲータ410のいずれかから、他の値(たとえば、ハッシュ関数の数、各々の復号されたベクトルの中のカウンタレジスタバケットの数など)の各々を受信することができる。多重集合のK+頻度を推定するために、濃度推定器170は、1つまたは複数の交替とともに上で提供された式を利用することができる。K+頻度を推定するために、濃度推定器170はさらに、濃度推定器170が目標頻度値K未満の範囲に対応するフィルタリングされたヒストグラムのビンを空として扱うように、ヒストグラムをフィルタリングすることができる。たとえば、目標頻度が3である場合、濃度推定器170は、3未満のすべての範囲(たとえば、[0,1)、[1,2)、[2,3)など)を空であるものとして扱うことができ、濃度推定にそれらのバケットを含めなくてもよい。したがって、上の式におけるxの値は、頻度閾値以上である復号されたベクトルのバケットの数として扱われる。濃度推定器170は、たとえば、内部構成設定から、または、システム100のコンピューティングデバイスの1つまたは複数から、または、ワーカー405もしくはアグリゲータ410から、頻度閾値を受信することができる。多重集合の濃度または頻度を計算した後、濃度推定器170は、1つまたは複数のメッセージにおいて、要求しているコンピューティングデバイスに濃度または頻度を提供する(たとえば、送信する、または別様に通信するなど)ことができる。濃度推定器170は、システム100の中の任意のコンピューティングデバイス、たとえば、データ処理システム105A~N、クライアントデバイス120、または、システム100に描かれていないことがあるが、ネットワーク110に通信可能に結合されて濃度推定器170に要求を通信して濃度推定器170から濃度データ受信するように構成され得る、別の外部コンピューティングデバイスから、濃度に対する要求を受信することができる。
ここで図5を参照すると、デバイス識別子値および属性データに基づいて暗号化されたベクトルを生成するための方法500のフロー図が示されている。方法500は、たとえば、少なくとも1つのデータ処理システム(たとえば、少なくとも1つのデータ処理システム105など)または本明細書において説明される任意の他のコンピューティングデバイスによって実行され得る。データ処理システムはデータ記録を維持することができる(ACT502)。データ処理システムはベクトルを生成することができる(ACT504)。データ処理システムはk番目のデータ記録を選択することができる(ACT506)。データ処理システムは選択されたデータ記録をハッシュすることができる(ACT508)。データ処理システムはレジスタ識別子を抽出することができる(ACT510)。データ処理システムはj番目のレジスタ識別子を選択することができる(ACT512)。データ処理システムは選択されたレジスタ識別子をインクリメントすることができる(ACT514)。データ処理システムは、カウンタレジスタjがレジスタ識別子の数mに等しいかどうかを決定することができる(ACT516)。データ処理システムはカウンタレジスタjをインクリメントすることができる(ACT518)。データ処理システムは、カウンタレジスタkがデータ記録の数nに等しいかどうかを決定することができる(ACT520)。データ処理システムはカウンタレジスタkをインクリメントすることができる(ACT522)。データ処理システムはアグリゲートされた暗号鍵を取得することができる(ACT524)。データ処理システムはベクトルカウンタレジスタを暗号化することができる(ACT526)。データ処理システムは暗号化されたベクトルを送信することができる(ACT528)。
データ処理システムはデータ記録を維持することができる(ACT502)。データ記録(たとえば、データ記録122A~N)は、たとえば、1つまたは複数のデバイス識別子(たとえば、クライアント識別子125A~N)および1つまたは複数の属性(たとえば、属性127A~N)を含み得る。データ記録は、データ処理システムに通信可能に結合されるデータベース(たとえば、データベース115)に記憶されている1つまたは複数のデータ構造であり得る。データ記録を維持することは、コンピュータメモリに1つまたは複数のデータ記録を記憶することを含み得る。いくつかの実装形態では、データ処理システムは、少なくとも1つのクライアントデバイス(たとえば、少なくとも1つのクライアントデバイス120)から1つまたは複数のメッセージ(たとえば、要求、指示、データパケットなど)を受信したことに応答してデータ記録を維持することができる。データ処理システムは、メッセージの中に存在する任意の属性とともに、メッセージから少なくとも1つの識別子を抽出し、識別子および属性を含むようにデータ記録を生成することができる。データ処理システムは次いで、データベース、1つまたは複数のデータ構造、または不揮発性コンピュータ可読媒体などのコンピュータメモリにデータ記録を維持する(たとえば、記憶する、ロードする、または別様に記録する)ことができる。
データ処理システムはベクトルを生成することができる(ACT504)。ベクトルを生成するために、データ処理システムは、少なくとも1つのカウンタレジスタを融通するためにメモリの1つまたは複数の領域を割り振ることができる。割り振られたカウンタレジスタは、ベクトルの少なくとも1つの座標に対応し得る。1つまたは複数のカウンタレジスタのためのメモリを生成して割り振ることによって、データ処理システムは、カウンタレジスタを備えるベクトルを生成することができる。データ処理システムは、ベクトルのカウンタレジスタの各々を初期化値、たとえば0または1に初期化することができる。データ処理システムは、任意の数のカウンタレジスタ(「バケット」と呼ばれることがある)を有するように、最小増分数え上げブルームフィルタに対応し得るベクトルを生成することができる。たとえば、データ処理システムは、n個のバケットを伴う最小増分数え上げブルームフィルタを生成せよとの指示を受信することがあり、または、バケットもしくはカウンタレジスタの数によって最小増分数え上げブルームフィルタのサイズを指定する、外部コンピューティングデバイスによって提供される内部構成設定にアクセスすることがある。
データ処理システムはk番目のデータ記録を選択することができる(ACT506)。(ACT502)において維持された各データ記録を処理して、生成された最小増分数え上げブルームフィルタに追加するために、データ処理システムは、データ処理システムによって維持されるデータ記録の各々について繰り返すことができる。データ処理システムは、カウンタレジスタkに基づいて、データ記録の各々について繰り返しループすることができる。たとえば、データ記録の各々は、インデックス値(たとえば、インデックス0、インデックス1、インデックス2など)によってデータ構造においてインデクシングされ得る。データ記録を処理するために、データ処理システムは、カウンタレジスタkに等しいもしくはほぼ等しいインデックス値を含む、またはそれと関連付けられる、データ記録を選択することができる。それがループの最初の反復である場合、カウンタレジスタkは、k番目のデータ記録を選択する前に初期化値(たとえば、k=0、k=1など)に初期化され得る。データ記録を選択することは、データ処理システムの中のコンピュータメモリの異なる領域、たとえばメモリのワーキング領域に、データ記録と関連付けられるデータを複製することを含み得る。データ記録を選択することは、データ記録がデータベースに位置する場合、データベースからデータ記録を取り出すことと、データ処理システムの中のコンピュータメモリの異なる領域、たとえばメモリのワーキング領域へと、サンプルと関連付けられるデータを複製することとを含み得る。
データ処理システムは選択されたデータ記録をハッシュすることができる(ACT508)。データ処理システムは、最小増分数え上げブルームフィルタを埋めるために、1つまたは複数のハッシュ関数を識別して実行することができる。たとえば、ハッシュのリストにおいて識別されるハッシュの各々は、入力値に基づいてランダム性の正規分布または予想を提供することができる。すなわち、たとえば、ハッシュ関数への類似する入力は、ハッシュ関数への類似する出力を必ずしも有しない。ハッシュ関数は、数え上げブルームフィルタのための最適なハッシュ関数として選ばれ得る。たとえば、データ処理システムは、独立な均一に分布したハッシュ関数を選ぶことができる。そのようなハッシュ関数は、たとえば、とりわけmurmurハッシュ、Fowler-Noll-Voシリーズハッシュ、またはJenkinsハッシュを含み得る。データ処理システムは、ある数のハッシュ関数を選択または識別し、各ハッシュ関数を選択されたデータ記録に適用して、ハッシュされたデータ記録集合を生成することができる。
データ処理システムはレジスタ識別子を抽出することができる(ACT510)。ハッシュされたデータ記録集合のハッシュされたデータ記録の各々は、ACT504において生成されたベクトルのカウンタレジスタに対応し得る。対応するカウンタレジスタを識別するために、データ処理システムは、ハッシュされたデータ記録の各々からレジスタ識別子を抽出することができる。データ処理システムは、たとえば、最小増分数え上げブルームフィルタの中のカウンタレジスタの数を用いて各々のハッシュされたデータ識別子に対する剰余演算を実行することによって、レジスタ識別子を抽出することができる。たとえば、ハッシュされたデータ記録のうちの1つが500に等しく、最小増分数え上げブルームフィルタにおいて15個の位置がある場合、データ処理システムは、500%15=5を計算して、ハッシュされたデータ記録が最小増分数え上げブルームフィルタの中の5番目のカウンタレジスタに対応することを決定することができる。いくつかの実装形態では、最小増分ブルームフィルタの中のカウンタレジスタの数が2のべき乗である場合、データ処理システムはlog2(b)に等しいビットの数を選択することができ、bは最小増分数え上げブルームフィルタの中のカウンタレジスタの数に等しい。
最小増分数え上げブルームフィルタの実装形態において、データ処理システムはさらに、バケット値の集合を取り出すために、(ACT510)において抽出されたレジスタ識別子の各々と関連付けられるカウンタレジスタバケットにアクセスすることができる。バケット値のうちのいずれをインクリメントすべきかを決定するために、データ処理システムは、カウンタレジスタバケットの中から、最小値に等しいカウンタレジスタバケットの部分集合を決定することができる。最小値は、カウンタレジスタバケットの各々を比較し、最も小さい(たとえば、最も0に近い値)バケット値を識別することによって決定され得る。たとえば、3、91、30、88、および10というそれぞれの値を伴う5つのバケットがある場合、最小のバケット値は3である。1つのバケットのみが最小値に等しいものとして示されているが、最小値に等しい任意の数のバケットがあり得ることに留意されたい。この概念を例示するために、5つのバケットがそれぞれ5、10、30、5、および28に等しい第2の例を考える。この例では、5に等しい2つのバケットがある。バケットのすべての最小値も5である。データ処理システムは次いで、カウンタレジスタバケットの部分集合に含めるために、最小値に等しいバケットを選択することができる。これは、バケットがそれぞれ3、91、30、88、および10に等しい第1の例では、データ処理システムが最小値である3に等しいバケットを部分集合の中のカウンタレジスタとして選択できることを意味する。5つのバケットがそれぞれ5、10、30、5、および28に等しい第2の例では、データ処理システムは、カウンタレジスタバケットの最小値である5に等しい両方のバケットを選択することができる。カウンタレジスタの選択は、データ処理システムのメモリの中のデータ構造に、対応するバケットを識別するレジスタ識別子を記憶することを含み得る。データ処理システムは次いで、(ACT512)およびそれ以降におけるレジスタ識別子の部分集合のリストにわたって繰り返すことに進むことができる。
データ処理システムはj番目のレジスタ識別子を選択することができる(ACT512)。(ACT510)において抽出されるレジスタ識別子の各々を処理して更新するために、データ処理システムは、レジスタ識別子の各々にわたって繰り返すことができる。データ処理システムは、カウンタレジスタjに基づいて、レジスタ識別子の各々にわたって繰り返しループすることができる。たとえば、レジスタ識別子の各々は、インデックス値(たとえば、インデックス0、インデックス1、インデックス2など)によってデータ構造においてインデクシングされ得る。レジスタ識別子およびその関連するカウンタレジスタバケットを処理するために、データ処理システムは、カウンタレジスタjに等しいもしくはほぼ等しいインデックス値を含む、またはそれと関連付けられる、レジスタ識別子を選択することができる。それがループの最初の反復である場合、カウンタレジスタjは、j番目のレジスタ識別子を選択する前に初期化値(たとえば、k=0、k=1など)に初期化され得る。レジスタ識別子を選択することは、データ処理システムの中のコンピュータメモリの異なる領域、たとえばメモリのワーキング領域に、レジスタ識別子と関連付けられるデータを複製することを含み得る。
データ処理システムは選択されたレジスタ識別子をインクリメントすることができる(ACT514)。レジスタ識別子をインクリメントすることは、レジスタ識別子に対応するカウンタレジスタに1を加算することを含み得る。いくつかの実装形態では、カウンタレジスタに加算される量は、1以外の値であり得る。たとえば、データ処理システムは、本明細書において決定される、生成される、または計算される任意の値に対応し得る他の値を各カウンタレジスタに加算することができる。いくつかの実装形態では、データ処理システムは、本明細書において論じられる様々な理由でカウンタレジスタから減算することができる。いくつかの実装形態では、減算に対する代替として、データ処理システムは、データ処理システムによって現在選択されていない他のカウンタレジスタバケットの各々にある量(たとえば、1、または何らかの他の値など)を加算することができる。
データ処理システムは、カウンタレジスタjがレジスタ識別子の数mに等しいかどうかを決定することができる(ACT516)。データ処理システムが抽出されたレジスタ識別子に対応するカウンタレジスタバケットの各々をインクリメントしたかどうか、または更新したかどうかを決定するために、データ処理システムは、各レジスタ識別子を選択するために使用されるカウンタレジスタ(たとえば、j)を抽出されたレジスタ識別子の総数mと比較することができる。カウンタレジスタjが抽出されたレジスタ識別子の総数mに等しくない(たとえば、それ未満である)場合、データ処理システムは(ACT518)を実行することができる。カウンタレジスタjが抽出されたレジスタ識別子の総数mに等しい(たとえば、それ以上である)場合、データ処理システムは(ACT520)を実行することができる。
データ処理システムはカウンタレジスタjをインクリメントすることができる(ACT518)。いくつかの実装形態では、データ処理システムは、抽出されたレジスタ識別子の集合(たとえば、または抽出されたレジスタ識別子の部分集合など)の中の次の未処理のレジスタ識別子を示すために、1をレジスタjに加算することができる。いくつかの実装形態では、データ処理システムは、次の未処理の抽出されたレジスタ識別子のメモリアドレス値(たとえば、コンピュータメモリの中の位置)にカウンタレジスタjを設定することができる。いくつかの実装形態では、次の未処理の抽出されたレジスタ識別子のメモリアドレス値は、現在の(たとえば、選択された)レジスタ識別子の位置においてデータ構造に含まれ得る。カウンタレジスタjの値をインクリメントした後で、データ処理システムは(ACT512)を実行することができる。
データ処理システムは、カウンタレジスタkがデータ記録の数nに等しいかどうかを決定することができる(ACT520)。データ処理システムが各データ記録を使用して最小増分(たとえば、または標準的な)数え上げブルームフィルタを更新したかどうかを決定するために、データ処理システムは、各データ記録を選択するために使用されるカウンタレジスタ(たとえば、k)をデータ記録の総数nと比較することができる。カウンタレジスタkがデータ記録の総数nに等しくない(たとえば、それ未満である)場合、データ処理システムは(ACT522)を実行することができる。カウンタレジスタkがデータ記録の総数nに等しい(たとえば、それ以上である)場合、データ処理システムは(ACT524)を実行することができる。
データ処理システムはカウンタレジスタkをインクリメントすることができる(ACT522)。いくつかの実装形態では、データ処理システムは、維持されているデータ記録の集合(たとえば、ACT502においてデータ処理システムによって維持されているデータ記録など)の中の次の未処理のデータ記録を示すために、1をレジスタkに加算することができる。いくつかの実装形態では、データ処理システムは、次の未処理のデータ記録のメモリアドレス値(たとえば、コンピュータメモリの中の位置)にカウンタレジスタkを設定することができる。いくつかの実装形態では、次の未処理のデータ記録のメモリアドレス値は、現在の(たとえば、選択された)データ記録の位置においてデータ構造に含まれ得る。カウンタレジスタkの値をインクリメントした後で、データ処理システムは(ACT524)を実行することができる。
データ処理システムはアグリゲートされた暗号鍵を取得することができる(ACT524)。たとえば、データ処理システムは、1つまたは複数のワーカーコンピューティングデバイスによって生成されるアグリゲートされた公開鍵を受信することができる。いくつかの実装形態では、データ処理システムは、他のコンピューティングデバイス(たとえば、他のデータ処理システム、ワーカーコンピューティングデバイスなど)から1つまたは複数の公開鍵を受信し、公開鍵をアグリゲートされた公開暗号鍵へとアグリゲートすることができる。アグリゲートされた鍵は、いくつかの実装形態では、1つまたは複数のベクトル(たとえば、更新されたカウンタレジスタバケットを備える数え上げブルームフィルタベクトルなど)を部分的にまたは完全に暗号化するために使用され得る。いくつかの実装形態では、アグリゲートされた鍵は単に、データ処理システムによって維持される数え上げブルームフィルタを暗号化するためにデータ処理システムに分配される単一の公開鍵であり得る。いくつかの実装形態では、アグリゲートされた暗号鍵は、1つまたは複数のElGamal暗号鍵、または任意の他のタイプの準同型暗号方式を備え得る。いくつかの実装形態では、アグリゲートされた暗号鍵は、閾値復号方式をサポートする任意の種類の公開暗号鍵であり得る。
データ処理システムはベクトルカウンタレジスタを暗号化することができる(ACT526)。最小増分数え上げブルームフィルタの差分プライバシーを確保するために、データ処理システムは、1つまたは複数の暗号化技法を利用して、データ処理システムによって生成され維持されるベクトルを暗号化することができる。たとえば、データ処理システムは、ある暗号化方式(たとえば、ElGamal暗号化、閾値復号をサポートする暗号化方式、準同型暗号化など)を使用して、(ACT526)において取得されたアグリゲートされた公開鍵を使用することができる。いくつかの実装形態では、データ処理システムは、アグリゲートされた暗号鍵を使用して個別に、ベクトルの座標に対応するカウンタレジスタの各々を暗号化することができる。そのような実装形態では、暗号化されたカウンタレジスタの各々は、最小増分数え上げブルームフィルタを表す暗号化されたベクトルを作成するためにアグリゲートされ得る。
データ処理システムは暗号化されたベクトルを送信することができる(ACT528)。暗号化されたベクトルを送信することは、暗号化されたベクトルをワーカーコンピューティングデバイスに提供することを含み得る。データ処理システムは、暗号化されたベクトルを処理するために、1つまたは複数のワーカーコンピューティングデバイスのうちの第1のものとしてワーカーコンピューティングデバイスを選択することができる。いくつかの実装形態では、データ処理システムは、暗号化されたベクトルをバケットごとに送信することができ、すなわち、各バケットはワーカーコンピューティングデバイスに別々に送信される。いくつかの実装形態では、データ処理システムは、バルクトランザクションにおいて暗号化されたベクトルを送信し、このとき、暗号化されるベクトルの大半または全体が、単一のメッセージにおいて送信される。
ここで図6を参照すると、ワーカーコンピューティングデバイスによって暗号化されたベクトルを処理するために暗号鍵を生成してアグリゲートするための方法600のフロー図が示されている。方法600は、たとえば、少なくとも1つのデータ処理システム(たとえば、少なくとも1つのデータ処理システム105など)、または本明細書において説明される任意の他のコンピューティングデバイスによって実行され得る。データ処理システムは合成された鍵を生成することができる(ACT602)。データ処理システムは合成された鍵を識別子サーバに送信することができる(ACT604)。データ処理システムは暗号化されたベクトルを受信することができる(ACT606)。データ処理システムはk番目の暗号化されたベクトルを選択することができる(ACT608)。データ処理システムは準同型暗号化を用いて合計を計算することができる(ACT610)。データ処理システムは、カウンタレジスタkが暗号化されたベクトルの数nに等しいかどうかを決定することができる(ACT612)。データ処理システムは復号ルックアップテーブルを暗号化されたベクトルに付加することができる(ACT614)。データ処理システムは復号ルックアップテーブルを付加することができる(ACT616)。データ処理システムは暗号化されたベクトルを部分的に復号することができる(ACT618)。データ処理システムは確定的暗号化を適用することができる(ACT620)。データ処理システムは暗号化されたベクトルをシャッフルすることができる(ACT622)。データ処理システムは処理された暗号化されたベクトルを第2のワーカーに転送することができる(ACT624)。
データ処理システムは合成された鍵を生成することができる(ACT602)。合成された鍵を生成することは、少なくとも1つの公開鍵および少なくとも1つの秘密鍵を生成することを含み得る。いくつかの実装形態では、データ処理システムは、少なくともElGamal暗号化技法の一部として実装され得る鍵を生成することができる。たとえば、データ処理システムは、ランダム(たとえば、擬似ランダムなど)整数X modulo q(たとえば、楕円曲線群の位数)を生成または選択することができる。データ処理システムは、復号のために秘密鍵として整数Xを使用することができ、gxを公開鍵として使用することができ、gはジェネレータである。ジェネレータは、たとえば、巡回群の元であり得る。公開鍵は、たとえば1つまたは複数の他のワーカーコンピューティングデバイスと共有され得る。他のワーカーコンピューティングデバイスの各々が、固有の公開鍵と秘密鍵のペアを生成して、データ処理システムに送信することができる。合成された鍵を生成するために、データ処理システムは、他のワーカーコンピューティングデバイスから受信された公開鍵の各々をその固有の公開鍵と合成することができる。
データ処理システムは合成された鍵を識別子サーバに送信することができる(ACT604)。識別子サーバは、たとえば、図5に関連して上で本明細書において説明された方法500を実行することを担うデータ処理システムであり得る。識別子サーバは、図1に関連して上で本明細書において説明されたデータ処理システム105A~Nであり得る。いくつかの実装形態では、データ処理システムは、ACT602において生成された合成された鍵の公開鍵の各々を1つずつ送信することができ、公開鍵の各々は単一のメッセージを占有する。いくつかの実装形態では、データ処理システムは、合成された鍵を単一のメッセージ(たとえば、単一のパケット、単一のトランザクションまたは一連のパケットなど)において識別子サーバに送信することができる。
データ処理システムは暗号化されたベクトルを受信することができる(ACT606)。識別子サーバによる暗号化のために合成された鍵を送信した後、データ処理システムは、識別子サーバの各々から少なくとも1つの暗号化されたベクトルを受信することができる。いくつかの実装形態では、データ処理システムは、定期的に、またはバーストトランザクションにおいて、ベクトルを受信することができる。各ベクトルは、ベクトルの受信元である識別子サーバを反映するそれぞれの識別子と関連付けられ得る。識別子サーバから受信された暗号化されたベクトルの各々は、ACT602において生成される合成された公開鍵を使用して暗号化され得る。合成された公開鍵は、各ワーカーが、識別子サーバから受信された暗号化されたベクトルを部分的に復号することを可能にし得る。
データ処理システムはk番目の暗号化されたベクトルを選択することができる(ACT608)。準同型加法を使用してACT606において受信される各々の暗号化されたベクトルを処理してアグリゲートするために、データ処理システムは、データ処理システムによって受信される暗号化されたベクトルの各々について繰り返すことができる。データ処理システムは、カウンタレジスタkに基づいて、暗号化されたベクトルの各々について繰り返しループすることができる。たとえば、暗号化されたベクトルの各々は、インデックス値(たとえば、インデックス0、インデックス1、インデックス2)によってデータ構造においてインデクシングされ得る。暗号化されたベクトルを処理するために、データ処理システムは、カウンタレジスタkに等しいもしくはほぼ等しいインデックス値を含む、またはそれと関連付けられる、暗号化されたベクトルを選択することができる。それがループの最初の反復である場合、カウンタレジスタkは、k番目の暗号化されたベクトルを選択する前に初期化値(たとえば、k=0、k=1など)に初期化され得る。暗号化されたベクトルを選択することは、データ処理システムの中のコンピュータメモリの異なる領域、たとえばメモリのワーキング領域に、暗号化されたベクトルと関連付けられるデータを複製することを含み得る。
データ処理システムは準同型加法を使用して暗号化されたベクトルの合計を計算することができる(ACT610)。データ処理システムは、暗号化されたベクトルの各々をアグリゲート暗号化ベクトルへと累算し、加算し、または別様にアグリゲートすることができる。アグリゲート暗号化ベクトルは、たとえば、識別子サーバによって更新される暗号化されたカウンタレジスタバケットの各々のアグリゲートされた全体を含み得る。識別子サーバは各々、それぞれの識別子サーバと関連付けられるデバイスおよび属性の数を表すように、最小増分数え上げブルームフィルタを維持して更新することを思い出されたい。準同型加法を使用してサーバを暗号化することによって、各識別子サーバは、サーバに関連するデバイスの数または属性のタイプについての、あらゆる情報またはデータを隠すことができる。このステップにおいて、データ処理システム(たとえば、ワーカーコンピューティングデバイスなど)は、暗号化されたベクトルの各々をアグリゲートして、識別子サーバのすべてにわたるデバイスの総数および属性を表すアグリゲートされたベクトルを作成することができる。準同型加法を使用することによって、データ処理システムは、暗号化されたベクトルをアグリゲーションの前に復号する必要がないので、システムの差分プライバシーが保護される。準同型加法を実行するために、データ処理システムは、選択された暗号化されたベクトルを累算器ベクトルと準同型に加算することができる。それがループの最初の反復である場合(たとえば、kが初期化値に等しいなど)、データ処理システムは選択されたベクトルを累算器暗号化ベクトルとして記憶することができる。それがループの最初の反復ではない場合、データ処理システムは、選択されたベクトルと累算器ベクトルとの間で準同型加法を実行し、準同型加法の結果を累算器ベクトルとして記憶することができる。
データ処理システムは、カウンタレジスタkが暗号化されたベクトルの数nに等しいかどうかを決定することができる(ACT612)。データ処理システムが暗号化されたベクトルの各々を準同型に加算したかどうかを決定するために、データ処理システムは、各データ記録を選択するために使用されるカウンタレジスタ(たとえば、k)を暗号化されたベクトルの総数nと比較することができる。カウンタレジスタkが暗号化されたベクトルの総数nに等しくない(たとえば、それ未満である)場合、データ処理システムは(ACT614)を実行することができる。カウンタレジスタkが暗号化されたベクトルの総数nに等しい(たとえば、それ以上である)場合、データ処理システムは(ACT616)を実行することができる。暗号化されたベクトルのすべてを加算した後、データ処理システムは、コンピュータメモリの異なる領域に累算器ベクトルを複製し、それにより、累算された、またはアグリゲートされた、暗号化されたベクトルを生成することができる。
データ処理システムは、復号ルックアップテーブルを暗号化されたベクトルに付加することができる(ACT614)。いくつかの実装形態では、データ処理システムは、暗号化されたベクトルの集合(たとえば、ACT606においてデータ処理システムによって受信された暗号化されたベクトルなど)の中の次の未処理の暗号化されたベクトルを示すために、1をレジスタkに加算することができる。いくつかの実装形態では、データ処理システムは、次の未処理の暗号化されたベクトルのメモリアドレス値(たとえば、コンピュータメモリの中の位置)にカウンタレジスタkを設定することができる。いくつかの実装形態では、次の未処理の暗号化されたベクトルのメモリアドレス値は、現在の(たとえば、選択された)暗号化されたベクトルの位置においてデータ構造に含まれ得る。カウンタレジスタkの値をインクリメントした後、データ処理システムは(ACT608)を実行することができる。
データ処理システムは暗号化されたベクトルバケットを部分的に復号することができる(ACT616)。アグリゲートまたは累算された暗号化されたベクトルの各バケットを確定的暗号化するために、データ処理システムは、データ処理システムに対応する値を部分的に復号することができる。たとえば、アグリゲートされた暗号化されたベクトルのいくつかのバケットは、データ処理システムによって維持される1つまたは複数の鍵を使用して復号されることが可能であり得る。たとえば、1つまたは複数の鍵は、ACT602においてデータ処理システムによって生成される秘密鍵を含み得る。たとえば、ACT602において、データ処理システムは、公開鍵および秘密鍵を生成し、データ処理システムと通信している他のワーカーコンピューティングデバイスと公開鍵を交換することに進んだ。合成された鍵を作成するために、データ処理システムは、秘密鍵を連結し、アグリゲートし、または別様に合成することができる。ElGamal暗号鍵または準同型暗号鍵の性質により、データ処理システムは、アグリゲートされた公開鍵を使用して暗号化される任意の値を部分的に復号することができる。分散準同型暗号化方式を使用する部分的な復号のみを許容することによって、方法600は、識別子サーバによって生成されるベクトルの差分プライバシーを保護することができる。
データ処理システムは確定的暗号化を適用することができる(ACT618)。確定的暗号化は、たとえば、ACT616においてデータ処理システムによって生成された部分的に復号された値に適用され得る。確定的暗号化は、データ処理システムだけに知られている秘密鍵を適用することによって達成され得る。たとえば、データ処理システムは、ACT616において生成された部分的に復号されたバケットのすべてに秘密の指数を適用することができる。この演算は、準同型性(これはジェネレータgを何らかのランダムな群の元に変更することなどと等価である)を介して実行され得る。秘密鍵は閾値秘密鍵であってもよく、これは、ある閾値を満たす値だけを暗号化または復号することができる。このようにして、データ処理システムは、システムの全体のプライバシーおよびセキュリティを保護することができる。秘密鍵は、確定的暗号化、またはワーカーコンピューティングデバイスのすべてにわたるアグリゲートされた確定的暗号化の結果を復号するために使用され得る、ルックアップテーブルとも関連付けられ得る。
データ処理システムは復号ルックアップテーブルを付加することができる(ACT620)。復号ルックアップテーブルは、ACT616において部分的に復号された確定的暗号化されたベクトルに付加され得る。たとえば、ワーカーコンピューティングデバイスのすべてにわたる分散確定的暗号化方式の最終的な出力を復号するために、復号ルックアップテーブルが使用され得る。確定的暗号化方式および値の部分的な復号を使用することによって、データ処理システムは、システムの差分プライバシーを保護し、識別子サーバの最小増分ブルームフィルタにおいて識別子サーバによって示されるあらゆる秘密のデータまたは保護されるデータを守ることができる。復号ルックアップテーブルを付加することは、たとえば、確定的暗号化されたベクトルまたは部分的に復号されたベクトルにルックアップテーブルを連結することを含み得る。ルックアップテーブルは復号に対するワーカーの寄与分しか復号できないので、ワーカーコンピューティングデバイスのいずれの部分集合も、データ集合を完全に復号することはできない。システムのセキュリティはさらに、閾値暗号化が使用されることを考慮することによってさらに改善され、このとき、閾値を満たす値のみが復号されて、ワーカーコンピューティングデバイスに提供される。暗号化されたベクトルバケットをシャッフルする前に、データ処理システムは、図7において以下で本明細書において説明される方法700で概説されるプロセスを使用して、ノイズ値をベクトルに付加することができる。
データ処理システムは暗号化されたベクトルバケットをシャッフルすることができる(ACT622)。暗号化されたベクトルバケットをシャッフルすることは、ベクトルバケットをランダムに並べ替えることを含み得る。たとえば、データ処理システムは、暗号化されたベクトルのバケットの各々にアクセスし、それらの順序をランダムに(たとえば、擬似ランダムに、など)変更することができる。データ処理システムは、他のコンピューティングデバイスが並べ替えられたバケットの並べ替えられた順序を知ることができないように、または決定できないように、バケットを密かにシャッフルし、または並べ替えることができる。暗号化されたベクトルを並べ替えることまたはシャッフルすることは、暗号化されたベクトルに付加されたルックアップテーブルの順序をシャッフルしないことを含み得る。これは、暗号化されたベクトルの値の最終的な決定がルックアップテーブルを使用して計算され得ることを確実にすることができる。
データ処理システムは処理された暗号化されたベクトルを第2のワーカーに転送することができる(ACT624)。ベクトル全体を完全に処理して確定的暗号化するために、暗号化されたベクトルは、ACT602において生成される合成された鍵に寄与した各ワーカーコンピューティングデバイスによって処理され得る。合成された鍵の値は、各ワーカーコンピューティングデバイス(およびデータ処理システムを含む)によって生成される公開鍵の各々を備える。暗号化方式は準同型であるので、ワーカーの秘密鍵の各々が、準同型方式を使用して合成されるアグリゲートされた暗号化されたベクトルを部分的に復号することができるが、ベクトルを完全に復号することのできるワーカーコンピューティングデバイスはない。これは、各ワーカーコンピューティングデバイスが、部分的に復号された値を確定的暗号化して次のワーカーデバイスに転送することを可能にする。ワーカーデバイスが部分的な復号に基づいてベクトルを確定的暗号化することを終えた後、結果がアグリゲートされてもよく、最終的な結果が暗号化されたベクトルに付加されるルックアップテーブルを使用して計算されてもよい。
図7をここで参照すると、ワーカーコンピューティングデバイス間で差分プライバシーをもたらすために、暗号化されたアグリゲートされたベクトルへとノイズを組み込むための方法700のフロー図が示されている。方法700は、たとえば、少なくとも1つのデータ処理システム(たとえば、少なくとも1つのデータ処理システム105など)、または本明細書において説明される任意の他のコンピューティングデバイスによって実行され得る。データ処理システムはノイズベースラインBについて合意することができる(ACT702)。データ処理システムはある数のランダム変数を生成することができる(ACT704)。データ処理システムはノイズアレイを生成することができる(ACT706)。データ処理システムはk番目のノイズアレイ値を選択することができる(ACT708)。データ処理システムはランダム変数を使用してノイズアレイを満たすことができる(ACT710)。データ処理システムは、kがノイズアレイ値の数nに等しいかどうかを決定することができる(ACT712)。データ処理システムはカウンタレジスタkをインクリメントすることができる(ACT714)。データ処理システムはノイズアレイをシャッフルすることができる(ACT716)。データ処理システムはノイズアレイを暗号化することができる(ACT718)。データ処理システムは、部分的な復号の前にノイズを暗号化されたベクトルに付加することができる(ACT720)。
データ処理システムはノイズベースラインBについて合意することができる(ACT702)。ノイズベースラインは、たとえば、個々のワーカーコンピューティングデバイス(たとえば、データ処理システム、他のデータ処理システムなど)によって生成される任意の負のノイズ値より大きい可能性が高いであろう整数であり得る。たとえば、データ処理システムは、いずれの生成されたノイズも閾値を超えないように、または超えることができないように、ノイズ計算のために特定の閾値を使用し得る。ノイズベースラインは、ノイズが加算または減算されたベースライン値(たとえば、整数値)が負の数とならないように構成され得る。ベースラインノイズ値について合意するために、ワーカーコンピューティングデバイスの各々が、ベースラインノイズ値が負の値をもたらさないであろうと各ワーカーが満足するまで、生成されたベースライン値を交換することができる。ワーカーコンピューティングデバイスがベースラインノイズ値について合意する場合、ワーカーコンピューティングデバイスは、ベースラインノイズ値とともに、合意メッセージを他のコンピューティングデバイスにブロードキャストすることができる。合意メッセージがワーカーコンピューティングデバイスの各々から受信された状態になると、デバイスはベースラインノイズ値について合意した状態になる。
データ処理システムはある数のランダム変数を生成することができる(ACT704)。ランダム変数の数は、たとえば、システムによって測定されるべき最大所望頻度(たとえば、K+頻度など)に1を足したものであり得る。これはmax_frequency+1と指定され得る。このランダム変数は任意の種類のランダム変数(たとえば、Polyaランダム変数など)であり得る。このランダム変数はランダム変数の集合として生成され得る。たとえば、ランダム変数の集合は[X0,X1,X2,…,Xi,…,Xmf]として編成されてもよく、Xiは集合のインデクシングされた値(たとえば、ランダム変数の集合の任意のXi)を示し、Xmfはシステムによって測定されるべき最大頻度を示す。
データ処理システムはノイズアレイを生成することができる(ACT706)。データ処理システムは、特定のサイズであるノイズアレイを割り振ることができる。ノイズアレイのサイズは、たとえば、ACT704において生成されたランダム変数の集合の中の各Xiに対してΣ(B-Xi)であり得る。データ処理システムは、たとえば、各ランダム変数とベースラインノイズ値の差を計算し、差の各々を累算することによって、ベースラインからランダム変数を引いたものの総計を決定することができる。ノイズアレイの全体のサイズは差の合計に等しくてもよい。ノイズアレイを生成することは、ノイズアレイのサイズに等しいメモリの領域を割り振ることを含み得る。
データ処理システムはk番目のノイズアレイ値を選択することができる(ACT708)。ACT704において生成された各ランダム変数に基づいてノイズアレイを満たすために、データ処理システムはノイズアレイ値の各々(たとえば、ACT704において生成されたランダム変数の各々など)について繰り返すことができる。データ処理システムは、カウンタレジスタkに基づいてノイズ値の各々について繰り返しループすることができる。たとえば、ノイズ値の各々は、インデックス値(たとえば、インデックス0、インデックス1、インデックス2など)によってデータ構造においてインデクシングされ得る。ノイズ値を処理するために、データ処理システムは、カウンタレジスタkに等しいもしくはほぼ等しいインデックス値を含む、またはそれと関連付けられる、ノイズ値を選択することができる。それがループの最初の反復である場合、カウンタレジスタkは、k番目のノイズ値を選択する前に初期化値(たとえば、k=0、k=1など)に初期化され得る。ノイズ値を選択することは、データ処理システムの中のコンピュータメモリの異なる領域、たとえばメモリのワーキング領域に、ノイズ値と関連付けられるデータを複製することを含み得る。
データ処理システムは、ランダム変数を使用してノイズアレイを満たすことができる(ACT710)。選択されたノイズ値(たとえば、選択されたランダム変数Xk)を使用して、データ処理システムは、ベースラインノイズ値とランダム変数の差を計算することができる。この値は式D=B-Xkを使用して計算することができ、Dはそれぞれの差の値である。データ処理システムは次いで、kのD個のコピーを用いてノイズアレイを満たすことができ、kの値はノイズ値に等しい。これは、たとえば、ノイズアレイの中のk番目の位置にアクセスすることと、k*Dをノイズアレイに加算することとを含み得る。このようにして、ノイズアレイの中の各位置は、ベースライン値およびシステムによって生成されたランダム変数に基づく、擬似ランダムノイズ値によって埋められ得る。
データ処理システムは、kがノイズアレイ値の数nに等しいかどうかを決定することができる(ACT712)。データ処理システムがノイズベクトルの各位置を更新したかどうかを決定するために、データ処理システムは、各ノイズ値を選択するために使用されるカウンタレジスタ(たとえば、k)をノイズ値の総数nと比較することができる。カウンタレジスタkがノイズ値の総数n以下である(たとえば、それ未満である)場合、データ処理システムは(ACT714)を実行することができる。カウンタレジスタkがノイズ値の総数nに等しい(たとえば、それ以上である)場合、データ処理システムは(ACT716)を実行することができる。
データ処理システムはカウンタレジスタkをインクリメントすることができる(ACT714)。いくつかの実装形態では、データ処理システムは、維持されているデータ記録の集合(たとえば、ACT502の中のデータ処理システムによって維持されるデータ記録など)の中の次の未処理のデータ記録を示すために、1をレジスタkに加算することができる。いくつかの実装形態では、データ処理システムは、次の未処理のデータ記録のメモリアドレス値(たとえば、コンピュータメモリの中の位置)にカウンタレジスタkを設定することができる。いくつかの実装形態では、次の未処理のデータ記録のメモリアドレス値は、現在の(たとえば、選択された)データ記録の位置においてデータ構造に含まれ得る。カウンタレジスタkの値をインクリメントした後、データ処理システムは(ACT524)を実行することができる。
データ処理システムはノイズアレイをシャッフルすることができる(ACT716)。ノイズアレイをシャッフルすることは、ノイズアレイの中の値の位置をランダムに(たとえば、擬似ランダムに、など)入れ替えて、それによりランダムに並べ替えられたノイズアレイを生成することができる。ノイズアレイの各位置の値は、kのサイズが大きくなるにつれてより大きくなるようにスケーリングする(たとえば、ノイズアレイの各位置kに対して、ノイズの値はk*Dに等しく、Dはベースラインノイズレベルからランダム変数Xkを引いたものに等しい)。一実施形態では、ノイズアレイをシャッフルすることは、ノイズアレイのランダム(たとえば、擬似ランダムなど)位置を選択して、それをノイズアレイの別の擬似ランダム位置と交換することを含み得る。別の実施形態では、ノイズアレイをシャッフルすることは、第2のノイズアレイの中の位置に擬似ランダムに割り当てられたノイズアレイの値を含む、第2のノイズアレイを生成することを含み得る。これは、アレイ位置に関して少なくとも擬似ランダムに分布するノイズアレイをデータ処理システムが生成することを確実にできる。
データ処理システムはノイズアレイを暗号化することができる(ACT718)。データ処理システムは、図6に関連して上で本明細書において説明された、方法600のACT602において生成された合成された鍵を使用してノイズアレイの各位置を暗号化することができる。いくつかの実装形態では、データ処理システムは、ノイズアレイの位置の各々を個別に暗号化するのではなく、単一のステップにおいて合成された鍵を使用してノイズアレイ全体を暗号化することができる。アグリゲートされたベクトルを暗号化するために使用されるのと同じ公開鍵を使用してノイズアレイを暗号化することによって、データ処理システムは、システムの差分プライバシーを改善するために、今後のステップにおいてアグリゲートされたベクトルとノイズアレイを合成することが可能である。その後、データ処理システムがアグリゲートされた結果を復号するとき、データ処理システムは、その結果からノイズを「抽出する」ために追加の計算を実行することができ、デバイス識別子および属性のK+頻度の微分計算のみが残る。
データ処理システムは、部分的な復号の前にノイズを暗号化されたベクトルに付加することができる(ACT720)。ノイズを暗号化されたベクトルに付加することは、ノイズ自体を暗号化されたベクトル値に加算して、それにより、データの全体の正確さを下げることなく追加のレベルのプライバシーをデータベクトルにもたらすことを含み得る。いくつかの実装形態では、データ処理システムは、部分的な復号ステップ(たとえば、ACT616)の前に、各ノイズ値(たとえば、ノイズアレイの中の各位置)を暗号化されたベクトルに付加することができる。これは、最終的なヒストグラムが累算器コンピューティングデバイスによって構築されるとき、データ処理システムは単に、データからノイズを除去するためにヒストグラムの各バケットからB*ノイズベクトルの数を除去できることを意味し得る。いくつかの実装形態では、データ処理システムは、各ワーカーコンピューティングデバイスからノイズベクトルを受信し、ノイズ値の各々を部分的な復号ステップの前に暗号化されたベクトルに付加することができる。このようにして、データ処理システムは、それがシステム全体を通り抜けるにつれて並べ替えられる多くのノイズ値を伴う、大きなベクトルを作成することができる。どの値がノイズ値であるかをいずれのワーカーデバイスも知らないので、単一のワーカーが、識別子サーバからデータ処理システムに提供される元のデータを決定することはできない。これは、データ分析システムのセキュリティに対する大きな改善である。
図8は、いくつかの実装形態に従って本明細書において論じられるコンピュータシステムのいずれかを実装するために利用され得る、例示的なコンピュータシステム800の全般的なアーキテクチャを示す。コンピュータシステム800は、情報を表示のためにネットワーク110を介して提供するために使用され得る。図8のコンピュータシステム800は、メモリ825に通信可能に結合された1つまたは複数のプロセッサ820、1つまたは複数の通信インターフェース805、ならびに1つまたは複数の出力デバイス810(たとえば、1つまたは複数の表示ユニット)および1つまたは複数の入力デバイス815を備える。プロセッサ820は、たとえば、データ処理システム105A~Nに、または、クライアントデバイス120A~Nなどのシステム100の他のコンポーネントに含まれ得る。
図8のコンピュータシステム800において、メモリ825は、任意のコンピュータ可読記憶媒体を備えてもよく、それぞれのシステムについて本明細書において説明される様々な機能を実装するためのプロセッサ実行可能命令などのコンピュータ命令、ならびに、通信インターフェースもしくは入力デバイス(もしあれば)に関連する、それらによって生成される、またはそれらを介して受信される任意のデータを記憶し得る。図8のシステム800を再び参照すると、データ処理システム105A~Nは、とりわけ、ユーザ識別子、生成されたベクトルの集合に関する情報を記憶するために、メモリ825を含み得る。図8に示されるプロセッサ820は、メモリ825に記憶されている命令を実行するために使用されてもよく、そうする際に、命令の実行に一致して処理または生成される様々な情報をメモリから読み取り、またはメモリに書き込んでもよい。
図8に示されるコンピュータシステム800のプロセッサ820はまた、命令の実行に一致して様々な情報を送信または受信するように、通信インターフェース805に通信可能に結合されてもよく、またはそのように通信インターフェース805を制御してもよい。たとえば、通信インターフェース805は、有線もしくはワイヤレスネットワーク、バス、または他の通信手段に結合されてもよく、したがって、コンピュータシステム800が他のデバイス(たとえば、他のコンピュータシステム)に情報を送信すること、またはそれから情報を受信することを可能にしてもよい。図8のシステムには明示的に示されていないが、1つまたは複数の通信インターフェースは、システム800のコンポーネント間の情報の流れを促進する。いくつかの実装形態では、通信インターフェースは、コンピュータシステム800の少なくともいくつかの態様にアクセスポータルとしてウェブサイトを提供するように(たとえば、様々なハードウェアコンポーネントまたはソフトウェアコンポーネントを介して)構成され得る。通信インターフェース805の例にはユーザインターフェース(たとえば、ウェブページ)があり、ユーザはそれを通じてコンピュータシステム800と通信することができる。
図8に示されるコンピュータシステム800の出力デバイス810は、たとえば、命令の実行に関連して様々な情報が見られること、または別様に知覚されることを可能にするために提供され得る。入力デバイス815は、たとえば、ユーザが手動の調整を行うこと、選択を行うこと、データを入力すること、または、命令の実行の間にプロセッサと種々の方式のいずれかで対話することを可能にするために提供され得る。本明細書において論じられる様々なシステムのために利用され得る一般的なコンピュータシステムアーキテクチャに関する追加の情報が、本明細書においてさらに与えられる。
測定の正確さ
このセクションは、広範な構成にわたってFreqLogLog(FLL)法、CBF法、および最小増分CBF(MICBF)法を比較することに注目する。図9A~図17Bに関する以下の表、データ、および説明は例であり、いかようにも限定的であるものとして解釈されるべきではない。各構成は100回を超える試行にわたってシミュレートされてもよく、各試行は、シミュレーションのパラメータであり得る特定の頻度分布に従って100万個の元を挿入することからなる。たとえば、元1234は、シミュレーションの頻度分布からの描画に応じて1回以上挿入される。これは、以下で論じられる均一な分布では、全体で約220000個の固有の元について、8つの頻度の各々に対しておよそ27500個の固有の元を挿入することを意味する。最後に、その濃度および元の頻度が推定されている集合が各構成に対して同一であることを確実にするために、構成にわたって固定された乱数シードが使用される。
測定の正確さが元頻度の分布に依存しないことを実証するために、以下の頻度分布を考える。これをより決定的に実証するために、より多くのことをここで行うことができるが、全体として、分布が影響を及ぼすようには見えない。したがって、初期のシミュレーションのセットの後は、「UNIFORM 1 to 8」だけが使用される。以下のTable 2(表3)において示される説明は、図9A~図17Aにおいて示されるデータに関連して提供される。
FLLとCBFの両方のいくつかの異なる構成が考えられ得る。FLLでは、主要パラメータは使用すべきバケットの数であり、これは2のべき乗である。したがって、FLL_2_16は、2^16個のバケットが使用されたことを示す。CBFでは、最小増分の特徴を有効にするかどうか、バケットの数(m)、およびハッシュ関数の数(k)という3つのパラメータがある。
以下の表は、シミュレートされた構成のセットをメモリ使用量とともに示す。CBFでは、バケット当たり1バイトを仮定して全体のメモリ使用量を報告するが、測定することを望む最大頻度に応じて、これをバケット当たり4ビットまたは場合によってはそれ未満まで下げることが可能であり得る。しかしながら、この低減の実用性は、本明細書において説明されるような、プレーンテキストサイズとは無関係にバケットに等価な暗号文拡張をもたらすことができるMPCプロトコルの観点から考えると、さほど重要ではない。FLLでは、バケット当たり3バイトを仮定して全体のメモリを報告する。ブルームフィルタは、HLLよりはるかに多くのメモリを利用し得るが、より正確な測定を行うことができ、情報をほとんど漏洩しないセキュアマルチパーティプロトコルへと修正可能である。
図9A~図17Nのチャートは、平均絶対誤差の対数(log10(MAE))、平均絶対誤差率(MAER)、二乗平均平方根誤差の対数(log10(RMSE))、および平均誤差(ME)を示している。誤差を報告するチャートは、10までの値に対するk+リーチを示すが、率を報告するチャートは8までの値しか示さない。これは、シミュレートされる最大頻度が常に8であったので、9+および10+の値に対するあらゆる0ではない値は誤差であるからである。
図9A~図9Bは、CBFおよびFLL_2_14_Uniformのいくつかの構成を考える。CBFを競争力のあるものにするためには、最小増分の特徴が有効にされる必要があり得るので、すべての未来の結果がMICBFを利用し得る。最小増分CBFはFLLよりかなり高性能であることがあるが、FLLの誤差率は約1%にすぎず、これはとても優れている。一方、最良のMICBFはほぼ誤差が0であるが、これはメモリがかなり多くなるという犠牲を伴う。すべての方法が、MEプロットによって示されるように過剰推定の方に偏っている。8という頻度では、MI_CBF_0_4はFLLに匹敵する性能を有するが、~50倍のメモリ使用量を伴う。しかしながら、より低い頻度においては、MICBFがはるかに良好である。
次に、図10A~図10Bにおいて、いくつかのより高いメモリFLLが試験される。MICBFおよび3つのより高いメモリFLLについて、上記と同じメトリクスが示されている。主な所見は、12.6MBのメモリを使用する最高のメモリFLLであるFLL_2_22(黄色の線)ですら、9.6MBのメモリを使用するCBF_MI_0_01より性能が低いということである。別の所見は、FLLがより高い頻度をより不正確に推定するのに対し、MICBFは頻度にわたって誤差がより安定しているということである。最終的な、興味深くいくらか困惑させられる結果は、曲線の形状に関係している。log10(MAE)プロットを見ると、MICBF誤差とFLL誤差の全般的な形状はパラメータ変化にわたって同じであるように見えるが、より詳しく調べると、FLL_2_18の曲線はMICBFの曲線群とよく似ているように見え、CBF_MI_0_1はFLLの曲線群と似ているように見える。これは間違いではなく、結果は何回か確認されている。
ベースラインの測定のセットについての別の考慮事項は、2つの方法が異なる頻度分布に関してどのような性能であるかということである。ここで、FLL_2_14およびCBF_MI_0_01が、上で説明された頻度分布に対して試験され、結果が図11A~図11Bに示されている。全体として、MICBFは頻度分布の変化に対する復元力があり、3つの分布にわたって安定してほぼ0の誤差率を示すが、FLLの誤差率は頻度分布に依存して最大で2.5%変動する。具体的には、頻度分布の密度がより低い場合、FLLは濃度を過剰推定する傾向がより高い。これは、LINEAR_8_1分布に対する1+リーチの過剰推定(~1.5%)、ならびにLINEAR_1_8分布に対する8+リーチの過剰推定(~4.5%)によって示される。1+リーチがすべての頻度を含むのに対して8+は含まず、これは平均の対象のバケットがより少ないことを意味するので、後者はより大きな誤差を示しているものと思われる。
最後に、図12は推定量の変動性を考える。ここで、チャートを繁雑にしないように、対数スケールのプロットは省略されており(MAERおよびMEだけが示されている)、2つの推定だけが示されている。その上、完全に公平な比較にするために、CBF_MI_0_25_UniformがFLL_2_14_Uniformと比較される。明らかなことは、FLLはより高い頻度において変動が大きくなるということであり、これは、上記のように、より高い頻度においては平均の対象として利用可能なバケットがより少なくなるという事実により説明され得る。しかしながら、最低の頻度においても、FLLは、すべての頻度にわたって安定して変動が小さいMICBFより、はるかに変動が大きい。
全体として、FLLと比較すると、MICBFは、より広範囲の頻度分布にわたってより正確でありより変動が小さいが、メモリ使用量がはるかに多い。以下では、差分プライバシーをMICBFにどのように適用するかを考える。
MICBFを差分プライベートにする少なくとも2つの手法が本明細書において提示され、それらの両方が、ノイズの両側幾何分布を使用する。第1の方法は、差分プライバシー(DP)を個別のCBFバケットに適用することであり、これは非常に悪い測定品質をもたらし、その詳細は以下で検討される。一方、バケット値のヒストグラムにDPを適用することである第2の方法は、堅実な結果を有する。
次のセクションにおいて可能であることが示される、濃度推定がバケット値のヒストグラムを使用できることと、バケット値を明らかにすることなくヒストグラムを計算できることとを仮定すると、差分プライバシーは、バケット値ヒストグラム自体に適用され得る。ここで、通常はヒストグラムクエリのセンシティビティは1であり得るが、我々はバケット値のヒストグラムを考慮しており各クライアントデバイス識別子または属性データはk回表されるので、センシティビティは実際にはkであり、または、やはりハッシュ関数の数にすぎない。CBF_MI_0_01群では、この値は7である。
図13A~図13Bは、0.1、0.5、1、および2というイプシロン値に対して与えられる推定を示す。これらは、それぞれ0.0142、0.0689、0.1331、および0.2485という両側幾何分布パラメータに対応する。ノイズをヒストグラムに追加することは、あまり大きくないイプシロンの値に対しては相対的に影響がなく、0.1に等しいイプシロンに対しても、測定結果は穏当である。
最後に、図14A~図14Bは、1というイプシロンに対するMICBFのいくつかのパラメータ変化の正確さを示す。ここで、差分プライバシーがあっても、CBF_MI_0_4は、より高い頻度におけるFLLと同程度に良好な性能であり続ける。
図15は、ノイズが追加されていない(Uniform)、ノイズが追加されており校正されていない(GEO_NOCOR)、およびノイズがあり校正された後(GEO_COR)のCBF_MI_0_01に対するMAEのlog10を示す。1というイプシロンが使用され、クエリのセンシティビティは8に設定され、これは、パラメータ0.1175を伴う両側幾何分布が使用されたことを意味する。基準のために、FLL_2_14も示される。校正の前の幾何ノイズを伴うCBFは使用不可能であるが、無ノイズのバージョンも、FLLより最大で一桁大きい誤差を示す。図16A~図16Bは、チャートの完全なセットを示すが、GEO_NOCORを除去する。平均誤差のプロットを調べることから得られる1つの所見は、頻度が変化するにつれて過剰推定と過少推定の間で推定が変動するということである。
この所見は、無ノイズの体制のもとでの推定の分散についての別の疑問につながり、これは、単一のCBFを採用し100個の異なるノイズベクトルをそれに適用することによって調査された。これは、8というセンシティビティおよびイプシロンの4つの異なる値(0.5、1、2、および3)を伴うクエリに対して行われたが、重要なことは、これらの値が示唆する幾何分布のパラメータであり、これは図17A~図17Bに列挙されている。p=0.06では、推定の標準偏差は平均の周りで約5%変動することがわかる。さらに、クエリのセンシティビティが8よりはるかに高い可能性が高いことを考えると、p=0.06は恐らく、ノイズ分布について予想される最大の値である。
B.カスケーディングリージョン頻度および濃度推定
このセクションにおいて説明される実装形態、技法、システム、方法、またはプロセスは、上のセクションAにおいて説明されたコンピュータシステムのいずれか、もしくはこのセクションにおいて説明される任意のコンピュータシステムによって実施され、実行され、または別様に行われ得る。
識別子サーバは、たとえば、それぞれのクライアントデバイスと関連付けられるクライアント識別子を維持することによって、クライアントデバイスの集合と関連付けられ得る。各クライアント識別子は、各識別子サーバとクライアントデバイスとの間の関連付けを記述する属性情報を含み得る。属性情報は、クライアントデバイスと識別子サーバとの間の関係についての情報(たとえば、ウェブブラウジング履歴、対話データ、アソシエーション時間、ネットワーク分析データなど)を含んでもよく、それぞれのクライアントデバイスから受信される、保護されるまたは別様の秘密の情報を含んでもよい。異なる識別子サーバは、同じそれぞれのクライアントデバイスに対応する異なる属性データおよび異なるクライアント識別子を維持し得る。通常、各識別子サーバ間に重複する属性データがあるかどうかを決定するために、識別子サーバは、保護されるまたは秘密の情報を含み得る属性データを中央サーバと共有して、あらゆるクライアント属性情報を重複排除してもよい。
しかしながら、すべてのクライアント属性データを送信することは、スケーラビリティの問題を生む。クライアント識別子サーバの数が増えるにつれて、ネットワークを介して送信されるクライアントデバイス属性データの量も通常は増える。属性データは、各クライアントデバイスに対して詳細であり比較的大きいことがあるので、そのような情報を大規模に送信することは、ネットワークの帯域幅および計算リソースを消耗させ得る。さらに、ユーザ識別子の総数を計算するだけではなく、特定の属性の頻度などの、特定の属性データ基準を満たすクライアントデバイスの数を、保護されるまたは秘密の属性情報をネットワーク上で送信することなく計算することも、システムにとって有益であろう。加えて、これらの問題を解決するために使用される暗号化された確率的データ構造の実装形態は、実現不可能なほど大きい(たとえば、ギガバイトのオーダーの)スケッチサイズに悩まされる。
前述の問題に対処するために、本技術的解決法のシステムおよび方法の態様は、カスケーディングリージョン方式を利用することができる。本明細書において説明される確率的データ構造は、クライアントデバイス識別子の多重集合の中の元の数に基づいてサイズが対数的に増大し得る。パブリッシャコンピューティングデバイスは、ハッシュされたデバイス識別子の集合を生成するために、クライアントデバイスの関連する集合およびそれらの活動の頻度(たとえば、コンテンツ項目との対話の頻度など)として、そのハッシュを計算することができる。パブリッシャは、ビット値の行列を含むカスケーディングリージョンデータ構造を生成することができる。行列の各行は、各々のハッシュされたデータ記録における下位の0の数に対応し得る。行列の各列は、各々のハッシュされたデータ記録の剰余値に対応し得る。
パブリッシャコンピューティングデバイスは、データ記録における下位の0の数を決定することによって、カスケーディングリージョン行列を埋めることができる。たとえば、行列の中の最初の行は単一の下位の0(たとえば、1111 1110)に対応することがあり、行列の中の2番目の行は2つの下位の0(たとえば、1111 1100)に対応することがある、などである。各デバイス識別子は、均一に分布する出力を生み出すハッシュ関数を使用してハッシュされ得る。したがって、行列の中の行に対応する任意のハッシュされる識別子の確率pは2-kに等しくてもよく、kは行列のインデックスである。たとえば、任意の所与のハッシュされる識別子が、最初の行を埋める50%の確率(たとえば、p=0.5)を有することがあり、行列の2番目の行を埋める25%の確率(たとえば、p=0.25)を有することがある、などである。ハッシュされた識別子が行列の行に対応することをパブリッシャコンピューティングデバイスが決定する場合、パブリッシャは、その行の位置を選択するために、ハッシュされたデータ記録に対して剰余演算を実行して、その位置におけるビットを1に設定することができる。パブリッシャコンピューティングデバイスは、パブリッシャと関連付けられるすべての識別子に対してこの動作を実行することができる。パブリッシャコンピューティングデバイスがすべての識別子を用いて行列を埋めた後で、パブリッシャコンピューティングデバイスは、行列の各行のビットを確率pでランダムに反転させて、それによりスケッチを差分プライベートにすることができる。
カスケーディングリージョンデータ構造を実装する技法は、HyperLogLogの課題に対処することができる。数え上げブルームフィルタに関して本明細書において上で(たとえば、セクションAにおいて、および全体で、など)説明されたように、カスケーディングリージョンデータ構造は、1つまたは複数の識別子サーバ(たとえば、データ処理システム105A~Nなど)によって生成されてもよく、スケッチは、セキュアマルチパーティ計算(たとえば、準同型暗号化などに基づく)と差分プライバシーノイズの加算の組合せを介して、プライバシーを保護する方式で統合され得る。
本明細書のセクションAにおいて上で説明された、数え上げブルームフィルタ(CBF)に基づく手法を使用すると、複数のパブリッシャにわたるプライバシーが確保されたリーチと頻度の重複排除を実現することができる。そのような解決法は、乗法準同型性を伴う暗号化方式を実装することができ、これは、分散型検証技法の計算性能を改善することができる。そのような手法では、スケッチのサイズは、インターネットの総人口のサイズ、または様々な規模の他の人口のサイズに近いサイズのオーディエンスを記憶することができる。そのような手法は、各パブリッシャが各要求に対する数ギガバイトのデータセットをアップロードすること、または何らかの形式のフィードバックループを可能にでき、このとき、システムは、小さいスケッチで開始して、オーディエンスが大きいことがわかった場合、または方法の他の態様に基づいて、より大きいスケッチを後で要求することができる。
HyperLogLog(HLL)に基づく手法は、より計算的に高価な暗号化を利用し得る最小値/最大値演算を実装することができる。HLLの実装形態においてスケッチに配置されるユーザ識別子の差分プライバシーの保護を維持することも、不変の課題であるように見える。
本明細書において説明されるカスケーディングリージョン濃度推定器(CLCE)技法を実装する手法は、数え上げブルームフィルタ(たとえば、本明細書のセクションAなどにおいて上で説明された)とHyperLogLogを組み合わせて、少なくとも前述の問題に対処することができる。したがって、本明細書において詳述されるCLCEの実装形態は、デバイス識別子の差分プライバシーを損なうことなく、データの複数の集合にわたって濃度決定アルゴリズムの改善をもたらす。他の実装形態および技法とは異なり、カスケーディングリージョンスケッチのサイズは、特定の識別子サーバ(たとえば、データ処理システム105など)と関連付けられる識別子の数のサイズとともに対数的に増大し得る。そのような技法を実装するために最小値/最大値演算は必要とされないので、CLCEのために計算的に高価ではない暗号化方式を使用することができる。スケッチの構造は、本明細書のセクションAにおいて上で説明された数え上げブルームフィルタの手法と類似しているので、(たとえば、本明細書のセクションAにおいて上で説明された)CBFのために開発されたマルチパーティ計算(MPC)が、デバイス識別子および標的属性の集合の頻度と濃度を計算するために、CLCEスケッチに適用され得る。
同時に、CLCEによって取得される濃度推定には偏りがないことがあり、和集合演算は交換可能であり、これは、他の実装形態と比較して高品質の結果をもたらし得る。CLCEスケッチは、リージョンの数lおよびリージョンの中の位置の数nという少なくとも2つのパラメータを含み得る。スケッチは、ビットの2次元のn×lアレイであり得る。いくつかの実装形態では、スケッチは、カウンタレジスタの2次元のn×lアレイであってもよく、または、コンピュータメモリ(たとえば、データ処理システム105のメモリなど)の中の1つまたは複数のデータ構造に記憶され得る別のタイプの変数もしくはデータタイプであってもよい。空のスケッチは初期化値(たとえば、0)に初期化され得る。
推定器の例示的な表現が次の擬似コードにおいて以下に含まれる。
class CascadingLegions:
def__init__(self,l,n):
self.l=l #リージョンの数
self.n=n #リージョンの中の位置の数
self.legions=0で満たされた新しいアレイl対n
def Add(self,element):
binary_fingerprint=元のバイナリフィンガープリント
legion=binary_fingerprintの中の下位の0の数
#最後のリージョン以降に属する元は最後のリージョンに配置される
if legion>=self.l:
legion=self.l-1
#位置は、末尾の0および1を除去した後に残るbinary_fingerprintのビットを使用する
position=(binary_fingerprint//2**(legion+1))%self.n
self.legions[legion,position]=1
@staticmethod
def ExpectedBits(num_elements):
#以下は、num_elements要素が加算された後で有効になるビットの予想される数の式であることが、容易に理解される
return sum(
1-exp(num_elements/(2**i*self.n))*self.n
for i in range(1,self.l))+(
1-exp(num_elements/(2**(self.l-1)*self.n))*self.n
def EstimateCardinality(self):
b=self_legionsの中のカウントビット
return int(ExpectedBits)がbに等しい平均のnum_elements
def Merge(self,other_sketch):
self.legions=self_legionsおよびother_sketch_legionsの要素ごとのOR
推定器の上の表現は、推定器の機能(たとえば、カスケーディングリージョンスケッチの構築、スケッチへの元の追加、リージョンに基づくビットの予想される数の決定、スケッチに基づく集合の濃度の推定、および他のスケッチの統合など)が単一のクラスの一部として単一のコンピューティングデバイス上で生じることを示し得るが、上の擬似コードは、たとえば純粋にアルゴリズム的な表現のためにこのように構築されており、そのような技法を実行するあらゆるシステムの構築を記述するものとして解釈されるべきではないことを理解されたい。本明細書において説明されるあらゆるコンピューティングデバイスが、上で説明された機能のいずれかを実行することができ、そのような技法は、1つまたは複数のコンピューティングデバイス(たとえば、データ処理システム105A~N、ワーカーコンピューティングデバイス405A~N、アグリゲータコンピューティングデバイス410など)にわたって分散されてもよいことを理解されたい。上の擬似コードは、本明細書において説明されるシステムおよび方法に関していかようにも限定的であるものとして解釈されるべきではなく、それは、上の表現は純粋に例示が目的であり、本明細書において説明される実装形態の1つまたは複数の態様を説明するだけであり得ることが理解されるべきであるからである。
パラメータ(l,n)を伴うカスケーディングリージョンスケッチは、
に等しい(たとえば、等しい、ほぼ等しいなど)標準偏差を有する相対誤差を伴う2lまでのサイズの集合の濃度を推定することができる。
ここで図18に示されるグラフを参照すると、10個のシミュレーションとともに、スケッチに追加されるデバイス識別子によって占有される理論的に推定されるビット数が示されている。n=10K、l=7のCLCEパラメータが使用される。図18に示されるデータは、純粋に例示的なデータとして考えられるべきであり、本明細書において説明される技法の実装形態は、異なる結果を生み出すことができる。したがって、データは純粋に例示的なデータであり、いかようにも限定的であるものとして解釈されるべきではないことを理解されたい。
図18の線は、視覚的に区別不可能であり得る。図18において、リージョナリーの数からのデバイス識別子推定の相対誤差は2%未満を保っている。簡潔にするために最後のリージョンの外にあるユーザ識別子を省略するので、小さいオーディエンスに対しては誤差が4%に達する。いくつかの実装形態では、最後のリージョンの外にあるユーザ識別子は省略されない。
図19は、32個のリージョンを伴うスケッチからの例示的なデータを示し、現代のデバイス識別子の任意の集合を正確に測定するには10K個の位置で十分であり得る。このスケッチは320キロビットを含むことができるが、変化するパラメータとともに、異なる数のビット、リージョン、またはリージョン位置を含んでもよい。
カスケーディングリージョン濃度または頻度推定を実行するために、システム(たとえば、システム100、システム400A~C、これらの任意の組合せなど)は、以下のプロセスの任意の組合せを実行することができる。まず、システムは、スケッチ(たとえば、本明細書において説明されるようなカスケーディングリージョンスケッチ、本明細書において説明されるデータ構造またはスケッチなど)を生成することができる多数の(たとえば、1、10、100、1000、または10000などより多くの)パブリッシャコンピューティングデバイス(たとえば、データ処理システム105A~N、本明細書において説明される他のコンピューティングデバイス、識別子サーバなど)、およびスケッチを合成するためのセキュアプロトコルを実行するための少数のワーカー(たとえば、ワーカーコンピューティングデバイス405A~N、本明細書において説明される他のコンピューティングデバイスなど)を含み得る。スケッチを合成するためのセキュアプロトコルは、このセクションにおいて説明されるカスケーディングリージョンスケッチを使用する、本明細書のセクションAにおいて上で説明されたMPCプロトコルであり得る。次に、システムは、セクションAにおいて上で説明されたCBF設計のように、ElGamal暗号体系を用いてスケッチを暗号化してよく知られている値を復号することができ、システムは、乗法準同型性を使用して(たとえば、ElGamal暗号化などを使用して)、指数が同じ基数との乗算のもとでは加法的であることに気付くことにより加算を実現することができる。たとえば、2^5*2^5=2^10である。第3に、別個のElGamal公開鍵を合成することができ、復号(またはいくつかの秘密鍵のみが使用される場合などは、部分的な復号)は、その公開鍵が合成の一部であった各秘密鍵に適用できることを思い出されたい。各ワーカーは鍵のペアを生成することができ、合成された公開鍵は、パブリッシャコンピューティングデバイス(たとえば、データ処理システム105A~N、本明細書において説明される他のコンピューティングデバイス、識別子サーバなど)によって、それらのスケッチを暗号化するために使用され得る。
ワーカーコンピューティングデバイス(たとえば、ワーカーコンピューティングデバイス405A~N、アグリゲータコンピューティングデバイス410など)の各々は、アグリゲートされた公開鍵を生成するために、本明細書において説明されるような公開鍵を交換して合成することができる。アグリゲートされた公開鍵(たとえば、合成ElGamalまたは準同型加算暗号化方式の鍵など)が生成され、プロトコルは次のように進み得る。各パブリッシャコンピューティングデバイスは、それらのスケッチを暗号化して、それを少なくとも1つのワーカーコンピューティングデバイス(たとえば、ワーカーコンピューティングデバイス405A、アグリゲータコンピューティングデバイス410など)に提供することができ、これは第1のワーカーコンピューティングデバイスと呼ばれることがあり得る。
第1のワーカーコンピューティングデバイスは、各スケッチを位置ごとに合計して(たとえば、バケットごとに、各カウンタレジスタ、変数、またはデータエントリを、インデックス値もしくは位置、または各々のそれぞれのリージョンの各位置などと合成する)、合成されたスケッチを生成することができる。合成されたスケッチは、識別子サーバ(たとえば、パブリッシャコンピューティングデバイスと呼ばれることがある、データ処理システム105A~Nなど)の各々から受信されたスケッチの各々と同じ次元であってもよく、または、その次元を融通するように構築されてもよい。いくつかの実装形態では、カスケーディングリージョンスケッチがビット行列データ構造である場合、スケッチを合成することは、合成されるべきスケッチのすべてにわたってビットごとのOR演算を実行することを含み得る。いくつかの実装形態では、カスケーディングリージョンスケッチが値行列データ構造(たとえば、別のタイプの変数、値、またはカウンタレジスタなどの行列)である場合、第1のワーカーは、本明細書において説明されるように、合成されるべきスケッチにわたって別のタイプの合成演算(たとえば、加算、乗算、準同型加算など)を実行することができる。
システム(たとえば、システム400A~C)のワーカーコンピューティングデバイス(たとえば、ワーカーコンピューティングデバイス405A~N、アグリゲータコンピューティングデバイス410など)は、セクションAにおいて説明されたMPCプロトコルに関して本明細書において上で説明されたような、確定的暗号化のレイヤを適用して非確定的暗号化のレイヤを除去しながら、合成されたスケッチをシャッフルすることができる。たとえば、第1のワーカーコンピューティングデバイスは、位置およびリージョンにわたってビット(または行列の中の他のタイプのデータなど)をシャッフルすることができ、次いで、結果を第2のワーカーコンピューティングデバイスに渡す。暗号化され合成されたスケッチをシャッフルする前に、各ワーカーコンピューティングデバイスは、アグリゲートされた暗号鍵(たとえば、ワーカーコンピューティングデバイスによって作成されるアグリゲートされたElGamal暗号鍵など)へのそのワーカーの寄与に対応する秘密復号鍵を使用して、スケッチを部分的に復号することができる。秘密復号鍵を使用してスケッチを部分的に復号した後で、スケッチを現在処理しているワーカーコンピューティングデバイスは、確定的暗号化方式をスケッチに適用することができる。確定的暗号化のレイヤを適用した後で、ワーカーコンピューティングデバイスは、暗号化されたデータ構造の中の位置を並べ替え、またはシャッフルすることができる。データ構造がカスケーディングリージョンデータ構造である場合、ワーカーコンピューティングデバイスは、l個のリージョンの各々の中のn個の位置を並べ替えることができる。いくつかの実装形態では、ワーカーコンピューティングデバイスは、l個のリージョンの順序を並べ替えることができる。
このプロセスは、ワーカーコンピューティングデバイス405の各々について続き得る。たとえば、第2のワーカーコンピューティングデバイス(たとえば、ワーカー405Bなど)は、非確定的暗号化のレイヤを除去し、確定的暗号化のレイヤを追加して、任意選択で並べ替えることができる。第2のワーカーは次いで、処理されたスケッチ結果を第3のワーカーコンピューティングデバイス(たとえば、ワーカー405Cなど)に送信することができる。プロセスは、(たとえば、アグリゲートされた暗号鍵を作成するために使用される公開暗号鍵を用いて生成される秘密復号鍵を使用して)ワーカーコンピューティングデバイスの各々が非確定的暗号化のレイヤを除去し、確定的暗号化のレイヤを適用し、スケッチを任意選択で並べ替えるまで、続くことができる。
ワーカー(たとえば、ワーカー405A~N、アグリゲータコンピューティングデバイス410など)は、リング構成で並べられ得る。そのような構成では、第1のワーカーコンピューティングデバイス(たとえば、ワーカー405A、またはアグリゲータコンピューティングデバイス410など)は、暗号化されたスケッチを処理して、出力を第2のワーカーコンピューティングデバイスに送信することができ、第2のワーカーは出力を第3のワーカーコンピューティングデバイスに送信することができ、以下同様である。最後のワーカーコンピューティングデバイス(たとえば、ワーカー405N、Nはワーカーコンピューティングデバイスの数である、など)がスケッチを処理すると、それは出力を第1のワーカーコンピューティングデバイス(たとえば、ワーカーコンピューティングデバイス405A、アグリゲータコンピューティングデバイス410など)に送信することができる。第1のワーカーコンピューティングデバイスは次いで、その非確定的暗号化を除去することができ、確定的暗号化のレイヤを追加することを、プロセスの第1のステップにおいてすでに行われていない場合には行うことできる。いくつかの実装形態では、第1のワーカーコンピューティングデバイスは、スケッチの各々を合成し、合成された暗号化されたスケッチを第2のワーカーコンピューティングデバイスに送信して、リング構成の中のワーカーコンピューティングデバイスの各々によってスケッチが処理された後で、最後の処理ステップとして、非確定的暗号化のレイヤを除去し、確定的暗号化のレイヤを適用することができる。
次に、値0が各ワーカーによって確定的暗号化されるので、スケッチの中の0の数が明らかになる。ここから、濃度の推定値が計算され得る。
いくつかの実装形態では、確定的暗号化なしで0の数を数えることができる。メッセージは指数で表されているので、システムは、0の暗号化が群の識別要素にすぎないという事実を利用することができる。よって、確定的暗号化の代わりに、システムは(確定的暗号化がそうであり得るようにすべてに対して同じ指数を使用するのではなく)1つ1つの暗号文に対してランダムな指数を選ぶことができる。「0」の要素は0のままであってもよく、残りはランダム化されてもよい。これは、0の数を明らかにしてそれ以外のことを何も明らかにしないので、システムの全体のプライバシーを改善することができる。システムは、全体の濃度から「基準リージョン」を決定し、フォームゴールデンアップワードをシャッフルすることができる。
推定のために、システムはバケット値の部分的なヒストグラムを明らかにできることに留意されたい。すなわち、システムは、存在する0のカウントおよびすべての他の値のカウントを知っていることがあり、1であると仮定され得る。次に、スケッチに追加された任意のユーザ識別子に対して、ヒストグラムへのその寄与は、「1」のカウントを最大で1増やすことができることがわかり、ヒストグラムへの任意の単一の識別子の寄与は、ハッシュコリジョンにより実際には0であり得る。したがって、クエリのセンシティビティは1であり得る。
両側幾何分布から描かれ得るノイズの追加は、2つの方法のうちの少なくとも1つで行われ得る。より簡単な実装形態は、ワーカーにヒストグラムを公開して、次いで推定を計算する前に各ヒストグラムバケットに正しい量のノイズを単に加算することを含み得る。これは、計算の出力を差分プライベートにすることができるが、ワーカーは真のヒストグラム値を知る。
ノイズの追加のより複雑な、しかし安全な実装形態は、生成物をワーカーに分配することを含み得る。そのような実装形態では、各ワーカーは2つのPolyaランダム変数(Xi,Yi)を導くことができ、これらはそれぞれ、i番目のワーカーによってヒストグラムに加算される0の数および1の数を表す。負の二項分布の特別な場合であるPolyaランダム変数は、両側幾何ランダム変数へと合計するために構築され得ることに留意されたい。
まず、ワーカーは、各バケットに追加されるべきノイズの任意のベースラインについて合意することによって開始することができる。この値をBと呼ぶ。次いで、シャッフル段階の間に、各ワーカーは、B-X個の0をスケッチに追加し、B-Y個の1をスケッチに追加することができる。最後に、ヒストグラムをアグリゲートするワーカーは、各ヒストグラムバケットから値B*Wを減算することができ、Wはワーカーの数である。そして、これにより、必要とされるノイズ分布が残る。
確率的逆畳み込みおよび頻度ヒストグラム推定を含む、頻度ヒストグラム推定のための少なくとも2つの選択肢がある。
カスケーディングリージョンを使用して多重集合の頻度を推定するための少なくとも1つの技法は、確率的逆畳み込みに基づく。確率的逆畳み込み技法は、ワーカーコンピューティングデバイス(たとえば、ワーカーコンピューティングデバイス405A~N、アグリゲータコンピューティングデバイス410など)によって生成される、最終的な復号された、アグリゲートされた、および任意選択でシャッフルされたカスケーディングリージョンスケッチに基づいて、頻度ヒストグラムを生成することができる。頻度ヒストグラムを推定するために、self.legions(たとえば、リージョンデータ構造など)は、単なる存在のビットではなく、ユーザ識別子と関連付けられる頻度を記憶することができる。そのような実装形態では、カスケーディングリージョンデータ構造は、ビット値の行列ではないが、代わりに、本明細書において説明されるように更新される頻度値の行列となるように生成される。ワーカーコンピューティングデバイス405A~Nによって生成されるアグリゲートされた公開鍵を使用して暗号化されるとき、各リージョンの中の各位置の頻度値は何らかの素数のべき乗になり得る(たとえば、各リージョンの中の各位置は、アグリゲートされた鍵を使用して独立に暗号化される、など)。いくつかの実装形態では、他の暗号化方式が使用され、各リージョンはアグリゲートされた公開鍵を使用して独立に暗号化される。いくつかの実装形態では、全体のカスケーディングリージョンデータ構造が、位置ごとまたはリージョンごとにではなく、アグリゲートされた公開鍵を使用して一度に暗号化される。
システムは、基準リージョン(たとえば、位置の半分未満が有効になる最初のリージョンなど)に達するまで、リージョンを左から右に(たとえば、リージョンインデックスの昇順または降順などで)復号することができる。たとえば、アグリゲートされたデータ構造がワーカーコンピューティングデバイス(たとえば、ワーカーコンピューティングデバイス405、アグリゲータコンピューティングデバイス410など)の各々によって処理されると、アグリゲータコンピューティングデバイスは、カスケーディングリージョンデータ構造の中の各リージョンを増分的に復号することができる。リージョンが復号されると、アグリゲータコンピューティングデバイスは、リージョンの中の埋まっている位置の数を決定することができる。アグリゲータコンピューティングデバイスは、復号されたリージョンの中の各位置について繰り返して、位置値が0に等しい(または閾値未満である、または別の所定の値に等しい、または何らかの他の未充填基準を満たす、など)かどうかを決定することによって、リージョンの中の埋まっている位置の数を決定することができる。アグリゲータコンピューティングデバイスは、ある特定のリージョンの中の位置の半分未満が埋まっている場合、そのリージョンは基準リージョンであると決定することができる。あるリージョンが基準リージョンではないとアグリゲータコンピューティングデバイスが決定する場合、アグリゲータコンピューティングデバイスは、カスケーディングリージョンデータ構造の中の次のリージョンを復号することができる。カスケーディングリージョンデータ構造の中の次のリージョンは、たとえば、次に大きいリージョンインデックスに対応するリージョン、または次のリージョンを識別する何らかの他のメトリクス(たとえば、次のメモリアドレスなど)であり得る。
基準リージョン以降に、少数のコリジョンがあり得る。よって、システムは、すべてのリージョンを一緒にシャッフルして、次いで復号することができる。得られる頻度ヒストグラムを決定するために、頻度がサンプルとして使用される。コリジョンの後の観測されるヒストグラムをもたらした最尤の元のヒストグラムを見つけることによって、何らかの調整が行われ得る。この手法は、1つより多くのユーザが寄与したレジスタ(たとえば、位置など)を除去して、ユーザ頻度のクリーンサンプルを得るための、準同型暗号化を含み得る。
同じ鍵アグリゲーション構造は、暗号化されたカウンタと鍵のペア(E(count),E(key))である。カスケーディングリージョンデータ構造上での加算は次のように定義され得る。
(E(count1),E(key1))+(E(count2),E(key2))=(E(count1+count2+R*(key1-key2)),E(key1+R*(key1-key2))
ここでRは乱数である。この加算演算子は準同型に計算され得る。
この構造は次のように振る舞い得る。
If key1=key2=key then
(E(count1),E(key))+(E(count2),E(key))=(E(count1+count2),E(key))
カスケーディングリージョンを使用して多重集合の頻度を推定するための少なくとも1つの他の技法は、頻度ヒストグラム推定に基づく。頻度ヒストグラム推定に基づく技法は、さらなる推定および処理のために頻度ヒストグラムを生成することによって、特定の目標基準の頻度を推定することができる。各レジスタ(たとえば、リージョン位置など)に対して、システムは同一鍵アグリゲータを追加することができる。パブリッシャコンピューティングデバイス(たとえば、識別子サーバ、データ処理システム105A~Nなど)は、レジスタを開始する仮想idのハッシュを鍵として使用することができる。パブリッシャコンピューティングデバイスがデバイス識別子を有しない場合、それらは特別な空のトークンを追加することができる。レジスタブーリアンがまず合成されて、合成されていないインプレッションアグリゲータがそれらとともにシャッフルされ得る。0ではないレジスタに対して、空のトークンは復号されて廃棄される。残りのインプレッションアグリゲータは合成され得る。次いでカウンタが復号される。
システムは、カスケーディングリージョンデータ構造の各々に差分プライバシー保護を適用して、各カスケーディングリージョンデータ構造の生成に寄与したデバイス識別子および属性を不明瞭にする、またはそれらのプライバシーを別様に保護することができる。たとえば、各パブリッシャコンピューティングデバイス(たとえば、識別子サーバ、データ処理システム105A~Nなど)は、ビットをランダムに反転させることによって差分プライベートノイズをカスケーディングリージョンスケッチに適用して、本明細書のセクションAにおいて上で説明されたブルームフィルタについて行われたことと同様のことを行うことができる。いくつかの実装形態では、スケッチの中の各位置が周波数推定のためのカウンタレジスタである場合、差分プライバシーは、リージョンの中のランダムな位置をランダムに加算し、更新し、または別様にインクリメントすることによって実装され得る。たとえば、そのようなノイズは、所定の量だけ、たとえば、1、2などだけ、または、ある閾値内のランダムな量(たとえば、0と100との間の乱数、または任意の他の範囲など)だけ、インクリメントすることによって追加され得る。
システムは、各リージョンxの位置ビットを確率pで反転させる(たとえば、または上で説明されたようにカウンタレジスタに加算するなど)ことによって、ノイズを適用することができる。k個のスケッチに対して、ビットbの合成があった何らかの位置において、この合成は、確率p^(k-a)*(1-p)^aでのビット(b')の合成を意味し、ここでaはb_i=b'_iである位置iの数である。この原理をカウンタレジスタベースの頻度リージョンに適用するとき、同じ分析が、0に等しいまたは等しくない位置に対して当てはまる(たとえば、この分析では0に等しいすべての位置が二進数の0として扱われてもよく、0に等しくないすべての位置がこの分析では二進数の1として扱われてもよいなど)。したがって、システムは、合成の遷移の確率行列を計算し、反転によってノイズ校正行列を得ることができる。
システムは、基準リージョンに基づいて濃度または頻度を推定することができる。したがって、システムは、ブルームフィルタまたは数え上げブルームフィルタの集合体として、(たとえば、ワーカーコンピューティングデバイスおよびアグリゲータコンピューティングデバイスによる処理の後などの)合成されたカスケーディングリージョンスケッチを扱い、最もノイズの少ないものを選ぶことができる。システムは、基準リージョンを選ぶためにヒューリスティックを使用することができる。基準リージョンは、(ノイズ除去が適用された後)半分未満のビットによって満たされている最初のリージョンとして、またはカウンタレジスタの場合には、その位置の半分未満が埋まっている最初のリージョンとして選択され得る。各リージョンは、充填の確率の降順で分析され得る。たとえば、各リージョンは、に基づいて埋められ得るので
ここで図5を参照すると、デバイス識別子値および属性データに基づいてカスケーディングリージョンデータ構造を生成するための、方法2000のフロー図が示されている。方法2000は、たとえば、少なくとも1つのデータ処理システム(たとえば、少なくとも1つのデータ処理システム105など)または本明細書において説明される任意の他のコンピューティングデバイスによって実行され得る。データ処理システムはデータ記録を維持することができる(ACT2002)。データ処理システムは空のカスケーディングリージョンデータ構造を生成することができる(ACT2004)。データ処理システムはk番目のデータ記録を選択することができる(ACT2006)。データ処理システムは選択されたデータ記録をハッシュすることができる(ACT2008)。データ処理システムはリージョンを選択することができる(ACT2010)。データ処理システムは位置識別子を抽出することができる(ACT2012)。データ処理システムは選択されたレジスタリージョンの中の位置を更新することができる(ACT2014)。データ処理システムは、カウンタレジスタkがデータ記録の数nに等しいかどうかを決定することができる(ACT2016)。データ処理システムはカウンタレジスタkをインクリメントすることができる(ACT2018)。データ処理システムはアグリゲートされた暗号鍵を取得することができる(ACT2020)。データ処理システムはベクトルカウンタレジスタを暗号化することができる(ACT2022)。データ処理システムは暗号化されたベクトルを送信することができる(ACT2024)。
データ処理システムはデータ記録を維持することができる(ACT2022)。データ記録(たとえば、データ記録122A~N)は、たとえば、1つまたは複数のデバイス識別子(たとえば、クライアント識別子125A~N)および1つまたは複数の属性(たとえば、属性127A~N)を含み得る。データ記録は、データ処理システムに通信可能に結合されるデータベース(たとえば、データベース115)に記憶されている1つまたは複数のデータ構造であり得る。データ記録を維持することは、コンピュータメモリに1つまたは複数のデータ記録を記憶することを含み得る。いくつかの実装形態では、データ処理システムは、少なくとも1つのクライアントデバイス(たとえば、少なくとも1つのクライアントデバイス120)から1つまたは複数のメッセージ(たとえば、要求、指示、データパケットなど)を受信したことに応答してデータ記録を維持することができる。データ処理システムは、メッセージの中に存在する任意の属性とともに、メッセージから少なくとも1つの識別子を抽出し、識別子および属性を含むようにデータ記録を生成することができる。データ処理システムは次いで、データベース、1つまたは複数のデータ構造、または不揮発性コンピュータ可読媒体などのコンピュータメモリにデータ記録を維持する(たとえば、記憶する、ロードする、または別様に記録する)ことができる。いくつかの実装形態では、データ処理システムは、1つまたは複数のクライアントデバイス(たとえば、クライアントデバイス120A~Nなど)から1つまたは複数のデータ記録を受信することができる。
データ処理システムはカスケーディングリージョンデータ構造を生成することができる(ACT2004)。カスケーディングリージョンデータ構造を生成するために、データ処理システムは、少なくとも1つのビットアレイ、少なくとも1つのカウンタレジスタアレイ、または少なくとも1つのカウンタレジスタを融通するために、メモリの1つまたは複数の領域を割り振ることができる。割り振られる少なくとも1つのビットアレイ、少なくとも1つのカウンタレジスタアレイ、または少なくとも1つのカウンタレジスタは、カスケーディングリージョンデータ構造の少なくとも1つの座標(たとえば、特定のリージョンの中の位置など)に対応することができる。1つまたは複数のカウンタレジスタのためのメモリを生成して割り振ることによって、データ処理システムは、カウンタレジスタを備えるベクトルを生成することができる。データ処理システムは、ビットのアレイまたはカウンタレジスタのアレイであり得る、少なくとも1つのリージョンを生成することができる。データ処理システムは、各々の生成されたリージョンにリージョンid(たとえば、上で使用されたリージョン識別子lなど)を割り当てることができ、各リージョンの中の各位置(たとえば、各ビット、カウンタレジスタなど)に位置識別子を割り当てることができる。いくつかの実装形態では、位置識別子はリージョン間で同じであり得るが、同じリージョンの中では異なり得る。たとえば、特定のリージョンの中のすべての位置は異なる位置識別子を有し得るが、2つの異なる領域の中の同様の位置は同じ識別子を有し得る。データ処理システムは、カスケーディングリージョンデータ構造の位置(たとえば、ビット値またはカウンタレジスタなど)の各々を初期化値、たとえば0または1に初期化することができる。データ処理システムはカスケーディングリージョンデータ構造を生成することができ、これは、カウンタレジスタまたはビット値の行列に対応することができ、ここで、行列の中の各位置は「バケット(bucket)」または「バケット(buckets)」と呼ばれることがある。たとえば、データ処理システムは、バケット当たりl個のリージョンとn個の位置を伴う、またはl個のリージョンにわたってl×n個のバケットを伴う、カスケーディングリージョンデータ構造を生成するための指示を受信することができる。データ処理システムは、リージョンの数、バケットの数、ビット位置の数、カウンタレジスタの数、または本明細書において説明される任意の他の可能なパラメータによって、カスケーディングリージョンデータ構造のサイズを指定する外部コンピューティングデバイスによって提供される、内部構成設定にアクセスし得る。
データ処理システムはk番目のデータ記録を選択することができる(ACT2006)。(ACT2002)において維持された各データ記録を処理して、生成されたカスケーディングリージョンデータ構造に追加するために、データ処理システムは、データ処理システムによって維持されるデータ記録の各々について繰り返すことができる。データ処理システムは、カウンタレジスタkに基づいて、データ記録の各々について繰り返しループすることができる。たとえば、データ記録の各々は、インデックス値(たとえば、インデックス0、インデックス1、インデックス2など)によってデータ構造においてインデクシングされ得る。データ記録を処理するために、データ処理システムは、カウンタレジスタkに等しいもしくはほぼ等しいインデックス値を含む、またはそれと関連付けられる、データ記録を選択することができる。それがループの最初の反復である場合、カウンタレジスタkは、k番目のデータ記録を選択する前に初期化値(たとえば、k=0、k=1など)に初期化され得る。データ記録を選択することは、データ処理システムの中のコンピュータメモリの異なる領域、たとえばメモリのワーキング領域に、データ記録と関連付けられるデータを複製することを含み得る。データ記録を選択することは、データ記録がデータベースに位置する場合、データベースからデータ記録を取り出すことと、データ処理システムの中のコンピュータメモリの異なる領域、たとえばメモリのワーキング領域へと、サンプルと関連付けられるデータを複製することとを含み得る。
データ処理システムは選択されたデータ記録をハッシュすることができる(ACT2008)。データ処理システムは、カスケーディングリージョンデータ構造を埋める際に使用するためのハッシュ関数を識別して実行することができる。たとえば、ハッシュのリストにおいて識別されるハッシュの各々は、入力値に基づいてランダム性の正規分布または予想を提供することができる。すなわち、たとえば、ハッシュ関数への類似する入力は、ハッシュ関数への類似する出力を必ずしも有しない。ハッシュ関数は、カスケーディングリージョンデータ構造のための最適なハッシュ関数として選ばれ得る。たとえば、データ処理システムは、独立な均一に分布したハッシュ関数を選ぶことができる。そのようなハッシュ関数は、たとえば、とりわけ、murmurハッシュ、Fowler-Noll-Voシリーズハッシュ、またはJenkinsハッシュ、SHA-1ハッシュ、SHA-2ハッシュ、または、均一に分布したもしくは実質的に均一に分布した出力分布を生み出すことができる当技術分野において知られているような任意の他のタイプのハッシュ関数を含み得る。データ処理システムは、ハッシュ関数を選択または識別し、ハッシュ関数を選択されたデータ記録に適用して、ハッシュされたデータ記録を生成することができる。
データ処理システムは、生成されたカスケーディングリージョンデータ構造のリージョンを選択することができる(ACT2010)。カスケーディングリージョンデータ構造は、対応するインデックス値によって各々インデクシングされる、ある数のリージョンを含むように生成され得る。インデックス値が増大するにつれて、値が対応するリージョンの中の位置を更新する確率は下がり得る。たとえば、l個のリージョンを伴うカスケーディングリージョンデータ構造を考える。l個のリージョンの各々は、インデックス値、たとえば1、2、3、…、lによって番号を付けられ得る。いくつかの実装形態では、各リージョンのインデックス値は、異なる数で開始して終了することができる(たとえば、最初のリージョンは0というインデックス値を有し、最後のリージョンはl-1というインデックス値を有する、など)。各々のハッシュされたデータ記録は、カスケーディングリージョンデータ構造の中のリージョンの中の位置を更新することができる。ハッシュされたデータ記録に基づいて更新されるものとしてどのリージョンを選択するかを決定するために、データ処理システムは、ハッシュされたデータ記録の中のいくつかの位置における0の数を決定することができる。たとえば、値「0110 1010 0100」に等しいハッシュされたデータ記録に対して、データ処理システムは、ハッシュされたデータ記録が2つの連続する下位の0を有すると決定することができる。この決定に基づいて、データ処理システムは、2番目に更新するもの(たとえば、インデックス値が2であるカスケーディングリージョンなど)を選択することができる。これは、インデックス値が3であるリージョンに配置される3つの連続する0、およびインデックス値が4であるリージョンに配置される4つの連続する0などについて続く。したがって、ハッシュ関数の出力は均一に分布しているので、任意のハッシュされるデータ記録が1つの下位の0を有する確率は50%であり、任意のハッシュされるデータ記録が2つの連続する下位の0を有する確率は25%であり、任意のハッシュされるデータ記録が3つの連続する下位の0を有する確率は12.5%である、などであり、各リージョンは、任意の所与のハッシュされたデータ記録によって埋められる可能性がますます低くなる。いくつかの実装形態では、カスケーディングリージョンデータ構造を埋めるために使用される各々のハッシュされたデータ記録に対して同じビット位置および連続値の方式が使用される限り、リージョンを同様の方式で選択するために、別の一連のビット(たとえば、連続する上位ビット、または各々のハッシュされたデータ記録全体における一連の連続するもしくは連続しないビットなど)が使用される。
データ処理システムは、ハッシュされたデータ記録から位置識別子を抽出することができる(ACT2012)。ハッシュされたデータ記録は、ACT2010において選択されたリージョンの位置に対応し得る。選択されたリージョンの中の対応する位置を識別するために、データ処理システムは、ハッシュされたデータ記録からレジスタ識別子を抽出することができる。データ処理システムは、たとえば、選択されたリージョンの中の位置の数を用いて各々のハッシュされたデータ識別子についての剰余演算を実行することによって、レジスタ識別子を抽出することができる。いくつかの実装形態では、データ処理システムは、リージョンを選択するために使用されないハッシュされたデータ記録のビットに対して剰余演算を実行することができる。たとえば、ハッシュされたデータ記録が「0110 1010 0100」に等しく、最下位ビットで開始する連続する0の数によってリージョンが選択された場合、データ処理システムは、ハッシュされたデータ記録の残りに対して剰余演算を実行することができ、これはこの例では「0110 1010 01」である。連続する下位の0のビットの数が4であった(たとえば、ハッシュされたデータ記録が「1001 0011 0000」に等しかった)場合、データ処理システムは、リージョンの中の位置を選択するために、リージョンを選択するために使用されないハッシュされたデータ記録のビット(たとえば、「1001 0011」)を使用し得る。リージョンを選択するために使用されるビットが除去された後の残りのビットの数が、位置を選択するために必要とされるビットの数未満である場合、データ処理システムは、リージョンの中の位置を選択するために必要とされる数まで、ランダムな(たとえば、擬似ランダムな、均一に分布した)ビットを生成することができる。たとえば、リージョンの中に16個の位置があるが、残りが抽出された後で2ビットしか残っていない場合、データ処理システムは、さらに2ビットをランダムに(たとえば、擬似ランダムに、など)を生成して、それらを残りの2ビットに連結することができる。この例では、それにより、均一に分布した4ビットのビット文字列が生成され、これは、リージョンの中の16個の位置から選択するために使用され得る。
データ処理システムは、選択されたリージョンの中の選択された位置を更新することができる(ACT2014)。選択された位置を更新することは、たとえば、選択されたリージョンの中の位置識別子に対応するカウンタレジスタに1を加算することを含み得る。いくつかの実装形態では、データ処理システムは、選択されたリージョンの中の位置識別子に対応するビットを設定することができる。いくつかの実装形態では、カウンタレジスタに加算される量は、1以外の値であり得る。たとえば、データ処理システムは、本明細書において決定される、生成される、または計算される任意の値に対応し得る他の値を各カウンタレジスタに加算することができる。いくつかの実装形態では、データ処理システムは、本明細書において論じられる様々な理由でカウンタレジスタから減算することができる。いくつかの実装形態では、減算に対する代替として、データ処理システムは、データ処理システムによって現在選択されていない他のカウンタレジスタバケットの各々にある量(たとえば、1、または何らかの他の値など)を加算することができる。たとえば、データ処理システムは、特定のデータ記録と関連付けられるある回数のアクセスによって値をインクリメントすることができる。デバイス識別子と関連付けられるデバイスがある回数コンテンツの特定の項目にアクセスする場合、データ処理システムは、ハッシュされたデータ記録に対応するデバイスがコンテンツの特定の項目にアクセスした回数だけ、カスケーディングリージョンデータ構造(たとえば、または、任意の他のセクションを含む、本明細書において説明される確率的データ構造の他のいずれかなど)の中の位置をインクリメントすることができる。いくつかの実装形態では、コンテンツの特定の項目がアクセスされた回数は、それぞれのデータ記録に記憶され得る。
データ処理システムは、カウンタレジスタkがデータ記録の数nに等しいかどうかを決定することができる(ACT2016)。データ処理システムが各データ記録を使用してカスケーディングリージョンデータ構造を更新したかどうかを決定するために、データ処理システムは、各データ記録を選択するために使用されるカウンタレジスタ(たとえば、k)をデータ記録の総数nと比較することができる。カウンタレジスタkがデータ記録の総数nに等しくない(たとえば、それ未満である)場合、データ処理システムは(ACT2018)を実行することができる。カウンタレジスタkがデータ記録の総数nに等しい(たとえば、それ以上である)場合、データ処理システムは(ACT2020)を実行することができる。
データ処理システムはカウンタレジスタkをインクリメントすることができる(ACT2018)。いくつかの実装形態では、データ処理システムは、維持されているデータ記録(たとえば、ACT2002においてデータ処理システムによって維持されているデータ記録など)の集合の中の次の未処理のデータ記録を示すために、1をレジスタkに加算することができる。いくつかの実装形態では、データ処理システムは、次の未処理のデータ記録のメモリアドレス値(たとえば、コンピュータメモリの中の位置)にカウンタレジスタkを設定することができる。いくつかの実装形態では、次の未処理のデータ記録のメモリアドレス値は、現在の(たとえば、選択された)データ記録の位置においてデータ構造に含まれ得る。カウンタレジスタkの値をインクリメントした後で、データ処理システムは(ACT2006)を実行することができる。
データ処理システムはアグリゲートされた暗号鍵を取得することができる(ACT2020)。たとえば、データ処理システムは、1つまたは複数のワーカーコンピューティングデバイス(たとえば、ワーカーコンピューティングデバイス405A~N、アグリゲータコンピューティングデバイス410など)によって生成されるアグリゲートされた公開鍵を受信することができる。いくつかの実装形態では、データ処理システムは、他のコンピューティングデバイス(たとえば、他のデータ処理システム、ワーカーコンピューティングデバイスなど)から1つまたは複数の公開鍵を受信して、公開鍵をアグリゲートされた公開暗号鍵へとアグリゲートすることができる。いくつかの実装形態では、ワーカーコンピューティングデバイスは、公開鍵を交換してアグリゲートし、アグリゲートされた公開鍵を生成して、それを、カスケーディングリージョンデータ構造を生成した各データ処理システムに送信することができる。アグリゲートされた鍵は、いくつかの実装形態では、本明細書において説明される1つまたは複数の位置、リージョン、またはカスケーディングリージョンデータ構造を、部分的にまたは完全に暗号化するために使用され得る。アグリゲートされた鍵は単に、いくつかの実装形態では、データ処理システムによって維持されるカスケーディングリージョンデータ構造を暗号化するためにデータ処理システムに分配される単一の公開鍵であり得る。いくつかの実装形態では、アグリゲートされた鍵は、1つまたは複数のElGamal暗号鍵、または別の他のタイプの準同型暗号化方式を備え得る。いくつかの実装形態では、アグリゲートされた暗号鍵は、閾値復号方式をサポートする任意の種類の公開暗号鍵であり得る。
データ処理システムはカスケーディングリージョンデータ構造を暗号化することができる(ACT2022)。カスケーディングリージョンデータ構造の差分プライバシーを確保するために、データ処理システムは、データ処理システムによって生成され維持されるカスケーディングリージョンデータ構造を暗号化するために1つまたは複数の暗号化技法を利用することができる。たとえば、データ処理システムは、ある暗号化方式(たとえば、ElGamal暗号化、閾値復号をサポートする暗号化方式、準同型暗号化など)を使用して、(ACT2020)において取得されたアグリゲートされた公開鍵を使用することができる。いくつかの実装形態では、データ処理システムは、カスケーディングリージョンデータ構造を暗号化するために、アグリゲートされた暗号鍵を使用して個別に、各リージョンの位置に対応するカウンタレジスタまたはビット値の各々を暗号化することができる。そのような実装形態では、暗号化されたカウンタレジスタの各々は、カスケーディングリージョンデータ構造を表す暗号化されたデータ構造を作成するためにアグリゲートされ得る。いくつかの実装形態では、データ処理システムは、カスケーディングリージョンデータ構造をリージョンごとに暗号化することができ、すなわち、各リージョンは、カスケーディングリージョンデータ構造を表す暗号化されたデータ構造へと、独立して暗号化されアグリゲートされ得る。
データ処理システムは、暗号化されたカスケーディングリージョンデータ構造を送信することができる(ACT2024)。暗号化されたカスケーディングリージョンデータ構造を送信することは、暗号化されたカスケーディングリージョンデータ構造をワーカーコンピューティングデバイス(たとえば、ワーカーコンピューティングデバイス405A~Nのいずれか、アグリゲータコンピューティングデバイス410など)に提供することを含み得る。データ処理システムは、暗号化されたカスケーディングリージョンデータ構造を処理するための1つまたは複数のワーカーコンピューティングデバイスのうちの第1のものとして、あるワーカーコンピューティングデバイスを選択することができる。いくつかの実装形態では、データ処理システムは、暗号化されたカスケーディングリージョンデータ構造を位置ごとに送信することができ、すなわち、各リージョンの各位置はワーカーコンピューティングデバイスに別々に送信され得る。いくつかの実装形態では、データ処理システムは、暗号化されたカスケーディングリージョンデータ構造をバルクトランザクションにおいて送信し、このとき、暗号化されるベクトルの大半または全体が、単一のメッセージにおいて送信される。いくつかの実装形態では、データ処理システムは、暗号化されたカスケーディングリージョンデータ構造をリージョンごとに送信することができ、各々の暗号化されたリージョンは、その固有のメッセージにおいてワーカーコンピューティングデバイスに送信される。
C.頻度および濃度の推定のための代替的なカスケーディングリージョン技法
識別子サーバは、たとえば、それぞれのクライアントデバイスと関連付けられるクライアント識別子を維持することによって、クライアントデバイスの集合と関連付けられ得る。各クライアント識別子は、各識別子サーバとクライアントデバイスとの間の関連付けを記述する属性情報を含み得る。属性情報は、クライアントデバイスと識別子サーバとの間の関係についての情報(たとえば、ウェブブラウジング履歴、対話データ、アソシエーション時間、ネットワーク分析データなど)を含んでもよく、それぞれのクライアントデバイスから受信される、保護されるまたは別様の秘密の情報を含んでもよい。異なる識別子サーバは、同じそれぞれのクライアントデバイスに対応する異なる属性データおよび異なるクライアント識別子を維持し得る。通常、各識別子サーバ間に重複する属性データがあるかどうかを決定するために、識別子サーバは、保護されるまたは秘密の情報を含み得る属性データを中央サーバと共有して、あらゆるクライアント属性情報を重複排除してもよい。
しかしながら、すべてのクライアント属性データを送信することは、スケーラビリティの問題を生む。クライアント識別子サーバの数が増えるにつれて、ネットワークを介して送信されるクライアントデバイス属性データの量も通常は増える。属性データは、各クライアントデバイスに対して詳細であり比較的大きいことがあるので、そのような情報を大規模に送信することは、ネットワークの帯域幅および計算リソースを消耗させ得る。さらに、ユーザ識別子の総数を計算するだけではなく、特定の属性の頻度などの、特定の属性データ基準を満たすクライアントデバイスの数を、保護されるまたは秘密の属性情報をネットワーク上で送信することなく計算することも、システムにとって有益であろう。加えて、これらの問題を解決するために使用される暗号化された確率的データ構造の実装形態は、実現不可能なほど大きい(たとえば、ギガバイトのオーダーの)スケッチサイズに悩まされる。
前述の問題に対処するために、本技術的解決法のシステムおよび方法の態様は、米国仮特許出願第62/981,960号において説明されるように生成される、無ノイズカスケーディングリージョンデータ構造を合成することができる。各パブリッシャコンピューティングデバイスは、そのパブリッシャと関連付けられるデバイス識別子を表す確率的行列データ構造を生成できることを思い出されたい。差分プライバシーを維持するために、各パブリッシャは、行列の各行の中のビットをランダムに反転させることができる。データ処理システムは、本明細書においてスケッチと呼ばれることがある有ノイズ行列を、すべてのパブリッシャコンピューティングデバイスから受信し、パブリッシャコンピューティングデバイスのすべてにわたって識別子の多重集合の和または濃度を計算することができる。
各パブリッシャからのスケッチを使用して識別子の多重集合の和を計算する少なくとも1つの実装形態は、各々の有ノイズスケッチの濃度(たとえば、スケッチを生成するために使用される識別子の推定される数)をまず計算し、濃度の降順で有ノイズスケッチをソートすることを含む。データ処理システムは、所定のサイズの群へと有ノイズスケッチを分類することができ、無ノイズのものを推定することができる。データ処理システムは、モンテカルロサンプリングを使用して、スケッチの各群に対する無ノイズ和集合スケッチを推定することができる。推定された無ノイズスケッチが生成されると、データ処理システムは、スケッチを合成して、すべてのパブリッシャコンピューティングデバイスからのすべてのデバイス識別子を表す濃度または和集合を決定することができる。
本明細書において説明される技法は、パブリッシャコンピューティングデバイスが、パブリッシャコンピューティングデバイス(たとえば、データ処理システム105A~N)によって維持されるデータ記録の中のデバイス識別子またはデバイス識別子に関連して記憶されている属性についての情報を何ら明らかにすることなく、パブリッシャコンピューティングデバイスの集合の識別子(たとえば、デバイス識別子、属性など)の総数を見出すことを可能にする。
数学的には、これは、集合S1,…,Skの和の濃度を求めるという、一般的な問題の事例であり、ここで各集合SiはエージェントAi(たとえば、データ処理システム105Iなど)によって維持される。データセットは、データセットのいずれの個々の元についてのどのような情報(たとえば、デバイス識別子、属性データ、任意の個別のまたはアグリゲートデータ記録など)も明らかにしない場合、差分プライベートであると呼ばれる。ユーザの集合のスケッチを、それらが差分プライベートであるように、かつ集合(たとえば、多重集合)の和の濃度が効率的に決定され得るように作成することが、望ましい。差分プライベートである有ノイズのカスケーディングリージョン(たとえば、本明細書のセクションBなどにおいて上で説明されたカスケーディングリージョン)の効率的な和集合のためのアルゴリズムが、このセクションにおいて説明される。セクションBは、識別子の多重集合の濃度および頻度を決定するためのカスケーディングリージョン方式を提供するために、セクションAにおいて概説されたシステムの実装形態を詳述した。このセクションは、データ処理レベルにおいて各カスケーディングリージョンデータ構造(たとえば、スケッチなど)に差分プライベート(DP)ノイズを追加して(たとえば、各データ処理システム105A~Nはノイズをそのそれぞれのカスケーディングリージョンスケッチに追加することができる、など)、最終的な濃度もしくは頻度の推定の正確さに対するDPノイズの影響を減らしまたはなくすことができる技法を使用して多重集合の濃度および頻度を効率的に決定する、技法について詳述する。
k個のDP有ノイズカスケーディングリージョンスケッチの重複排除は、線形時間において達成され得る。このアルゴリズムは計算効率が高い。任意の数のスケッチを重複排除するために使用され得るヒューリスティックが説明される。ある仮定が成り立てば、ノイズは小さい。具体的には、最大の和集合スケッチによって和集合スケッチの濃度が支配される場合、ノイズは小さい。(たとえば、本明細書のセクションAにおいて説明される)ブルームフィルタのための重複排除アルゴリズムの複雑さは、このセクションにおいて説明される技法を使用すると指数時間から線形時間に改善され得る。
ノイズは、各リージョンxの位置を確率pでランダムに反転させることによって追加される。この確率は、差分プライバシーイプシロンと
の関係にあるものと見なされる。
この方式は、カスケーディングリージョンデータ構造をブルームフィルタ(たとえば、または、セクションBなどにおいて説明されるように、カウンタレジスタがビット値の代わりに使用される場合は数え上げブルームフィルタ)へと縮小することによって、効率的にすることができる。カスケーディングリージョンスケッチは、各々がn個の位置を有するl個のリージョンからなり得る。項目(たとえば、デバイス識別子および関連する属性データを備えるデータ記録など)は、1つのリージョンの1つの位置にハッシュされ得る。項目がk番目のリージョンにハッシュされる確率は2-kである。リージョンが与えられれば、任意の所与のデータ記録によって任意の1つの位置が埋められる、または更新される確率は、選択されたリージョンの中の各位置に対して同じである。
セキュアマルチパーティ通信において、1に設定される(たとえば、または0に設定されないなど)位置の総数から、濃度の推定が行われる。差分プライベートである場合には、全体の数の位置のノイズは空のリージョンおよび満たされたリージョンによって支配される。したがって、推定は、充填の過程にあるリージョンから行われ得る。充填の過程にあるリージョンの選択は、セクションBにおいて上で説明されたが、位置の半分未満が値によって埋まっているカスケーディングリージョンデータ構造の最初のリージョンを決定することを含む。それ自体により取られると、充填の過程にあるリージョンは、均一なブルームフィルタ(または、カウンタレジスタが使用される場合、数え上げブルームフィルタなど)であり得る。均一なブルームフィルタの濃度推定のためのアルゴリズムは、以下の純粋に例示的で非限定的な擬似コードによって記述されるようにカスケーディングリージョンに適用され得る。
Input:確率でノイズを追加されたCascadingLegion(l,n)スケッチs[0],...,s[k-1]
Output:和集合の濃度
for legion in range(l):
スケッチの和集合において1に設定されるビットの無ノイズの数としてCを推定する
if C<(n/2):
#これは基準リージョンである
Return 推定のC*2^legion
このアルゴリズムは、ブルームフィルタの位置において観測されるビット合成の量のベクトルに対して機能することができる。このアルゴリズムは次のように進行することができる。
1. ビット合成b1、b2の任意のペアに対して、b1からb2になるランダムな反転の確率が計算される。
2. 1において計算され得る確率が遷移行列Mへと組み立てられる。
3. 遷移行列Cを計算するために遷移行列Mが反転され得る。
4. 所与のスケッチの集合体に対して
a.ビット組合せの量のベクトルが計算される。
b.ビット組合せの量のノイズ追加前のベクトルを推定するために校正行列がベクトルに適用される。
ビット組合せの量のノイズ追加前のベクトルは、データ記録の完全な多重集合を記述している。和集合を計算するために、システムは(0,…,0)を除くすべての組合せを足すことができる。少なくとも1つの実装形態では、校正行列を計算することは、たとえば、以下の例示的で非限定的な擬似コードによって記述されるように実施され得る。
def NoiseCorrection(s,p=0.1):
"""ノイズ校正行列
Args:
s:ブルームフィルタの数
p:DP反転確率
Returns:
DPノイズ前の推定される組合せカウントを復元するために組合せカウントに適用されるべき行列
"""
q=1-p
size=2**s
result=[]
for i in range(size):
row=[]
for j in range(size):
match=~(numpy.uint8(i)^numpy.uint8(j))
match_count=bin(match&(size-1)).count(‘1')
row.append(q**match_count*p**(log2(size) -match_count))
result.append(row)
m=numpy.matrix(result)
return numpy.linalg.inv(m)
別の実装形態では、処理は、組合せベクトルではなく1の数ベクトルに対して行われ得る。1の数に対する遷移確率を決定することは、二項係数を使用して行われ得る。ベクトルの第1の行は、すべてが0であるバケットの無ノイズの数を推定するために使用される。少なくとも1つの実装形態では、1の数の空間において遷移確率を計算することは、以下の例示的な擬似コードによって記述されるように線形時間で達成され得る。
def TransitionProbability(l,s,t,p):
result=0
q=1-p
for i in range(l//2+1):
flip_zeros=max(0,t-s)+i
flip_ones=max(0,s-t)+i
flips=flip_ones+flip_zeros
calms=1-flips
if flip_ones>s or flip_zeros>l-s:
continue
choose_ones=special.comb(s,flip_ones)
choose_zeros=special.comb(l-s,flip_zeros)
choices=choose_ones*choose_zeros
assert choices>0
result+=choices*p**flips*q**calms
return result
本明細書のこのセクションにおいて説明される技法は、確率行列を反転することを含み得る。大きい次元では、そのような反転の結果はノイズが多くなり得る。スケッチの小さい集合体(たとえば、5つのスケッチ)を仮定すると、和集合の無ノイズスケッチのサンプルが取得され得る。以下に示される実施形態は、2つのスケッチのための和集合の無ノイズスケッチを取得するが、以下で示される方法は、任意の数のスケッチに、および、単一のビットではなく整数値(たとえば、カウントなど)である位置を含むスケッチに一般化され得る。この方法は、モンテカルロサンプリングヒューリスティックであり、次の例示的な擬似コードにおいて以下に示される。
def GetCombinationsVector(s1,s2):
"""スケッチの中のビットの組合せのベクトルを計算する"""
v=[0,0,0,0]
for x,y in zip(s1,s2):
v[x+2*y]+=1
return v
def ProbabilityOfOr(bit_a,bit_b,priors_map):
prob_map={}
for true_a in [0,1]:
for true_b in [0,1]:
flip_a_needed=1 if bit_a!=true_a else 0
flip_b_needed=1 if bit_b!=true_b else 0
prob_map[true_a,true_b]=priors_map[true_a,true_b]*(
p**flip_a_needed*q**(1-flip_a_needed)*
p**flip_b_needed*q**(1-flip_b_needed))
prob_00=prob_map[0,0]/sum(prob_map.values())
return 1-prob00
def DenoisedUnion(s1,s2):
v=GetCombinationsVector(s1,s2)
assert p==0.1, "ここではp=0.1である場合のみがシミュレートされる"
v=numpy.matrix([[1.265625,-0.140625,-0.140625,0.015625],
[-0.140625,1.265625,0.015625,-0.140625],
[-0.140625,0.015625,1.265625,-0.140625],
[0.015625,-0.140625,-0.140625,1.265625]])
*numpy.array(v).reshape(4,1)
priors_map={(0,0):v[0],(1,0):v[1],(0,1):v[2],(1,1):v[3]}
probs=[zip(s1,s2)の中のx,yに対するProbabilityOfOr(x,y,priors_map)]
result=[probsの中のxに対するint(random.uniform(0,1)<x)]
return result
上で説明された技法を使用して、システムは、正確さを失うことなく、多数の(たとえば、10個より多くの、など)有ノイズスケッチにわたる和集合を計算することができる。このアルゴリズムは、いくつかの実装形態では、5前後に設定され得るチューニングパラメータkを含み得る。しかしながら、チューニングパラメータkは他の値にも設定され得る。
1. 単一のスケッチの濃度を推定することができる(たとえば、特定のスケッチの遷移確率を決定し、その数を位置から除去し、スケッチの濃度を決定することによって)上で説明された直接推定技法を使用して、各スケッチ単独の濃度を推定する。
2. スケッチをそれらの濃度の降順でソートする(たとえば、スケッチのリストの中の最初のスケッチは最も高い濃度を有し、リストの中の2番目のスケッチは2番目に高い濃度を有する、など)。
3. スケッチをサイズkの群へと分類しながら、それらの濃度の順序を維持する(たとえば、リストの中の最初のk個のスケッチは第1の群の中にあり、リストの中の次のk個のスケッチは第2の群の中にある、など)。これによりスケッチのg個の群が生成される。
4. スケッチのg個の群の各々に対して、モンテカルロ法を使用してそれぞれの群に対する無ノイズ和集合をサンプリングする。これにより、モンテカルロサンプリングされた和集合スケッチが返され得る。
5. ステップ1のように、g個のスケッチの和集合を直接採用する。
モンテカルロサンプリングの正確さは、和をとられているすべての集合の上位集合が提供される場合、さらに改善され得る。そのような実装形態では、それらにデータがマッピングされていないすべてのレジスタが、0で満たされる。
ここで図21を参照すると、差分プライベート有ノイズカスケーディングリージョンスケッチの濃度を推定する方法2100の例示的なフロー図が示されている。この方法は、本明細書のセクションAにおいて説明されたコンピューティングデバイスのいずれか、または、アグリゲータコンピューティングデバイス(たとえば、アグリゲータコンピューティングデバイス410など)などの本明細書において説明された任意の他のコンピューティングデバイス(たとえば、データ処理システム105A~Nの1つまたは複数、クライアントデバイス120A~Nの1つまたは複数、ワーカーコンピューティングデバイス405A~Nの1つまたは複数、アグリゲータコンピューティングデバイス410など)によって実行され、実施され、または別様に行われ得る。アグリゲータコンピューティングデバイスは1つまたは複数の差分プライベートカスケーディングリージョンスケッチを受信することができる(ACT2102)。アグリゲータコンピューティングデバイスはk番目のスケッチを選択することができる(ACT2104)。アグリゲータコンピューティングデバイスは選択されたスケッチの濃度を推定することができる(ACT2106)。アグリゲータコンピューティングデバイスは、カウンタレジスタkがスケッチの数nに等しいかどうかを決定することができる(DECISION 2108)。アグリゲータコンピューティングデバイスはカウンタレジスタkをインクリメントすることができる(ACT2110)。アグリゲータコンピューティングデバイスは濃度によってスケッチをソートすることができる(ACT2112)。アグリゲータコンピューティングデバイスはソートされたスケッチを分類することができる(ACT2114)。アグリゲータコンピューティングデバイスはg番目の群を選択することができる(ACT2116)。アグリゲータコンピューティングデバイスはモンテカルロサンプリングを使用して選択された群の和集合を推定することができる(ACT2118)。アグリゲータコンピューティングデバイスは、カウンタレジスタgが群の数mに等しいかどうかを決定することができる(DECISION 2120)。アグリゲータコンピューティングデバイスはカウンタレジスタgをインクリメントすることができる。アグリゲータコンピューティングデバイスはg個の群和集合値の和集合から濃度を推定することができる(ACT2124)。
アグリゲータコンピューティングデバイスは、1つまたは複数の差分プライベートカスケーディングリージョンスケッチを受信することができる(ACT2102)。いくつかの実装形態では、アグリゲータコンピューティングデバイスは、定期的に、またはバーストトランザクションにおいて、差分プライベート(たとえば、有ノイズなど)カスケーディングリージョンを受信することができる。各カスケーディングリージョンスケッチは、カスケーディングリージョンスケッチがそれから生成されて受信される識別子サーバ(たとえば、データ処理システム105A~Nなど)を反映するそれぞれの識別子と関連付けられ得る。識別子サーバから受信された差分プライベートカスケーディングリージョンスケッチの各々は、アグリゲートされた暗号鍵を使用して暗号化され得る。いくつかの実装形態では、カスケーディングリージョンスケッチは暗号化されず、それぞれの識別子サーバによってカスケーディングリージョンスケッチに追加されるノイズを通じて差分プライバシーが維持される。
アグリゲータコンピューティングデバイスは、k番目のスケッチを選択することができる(ACT2104)。ACT2102において受信された各カスケーディングリージョンスケッチの有ノイズ濃度を処理して決定するために、アグリゲータコンピューティングデバイスは、アグリゲータコンピューティングデバイスによって受信されるスケッチの各々にわたって繰り返すことができる。アグリゲータコンピューティングデバイスは、カウンタレジスタkに基づいて、カスケーディングリージョンスケッチの各々を繰り返しループすることができる。たとえば、カスケーディングリージョンスケッチの各々は、インデックス値(たとえば、インデックス0、インデックス1、インデックス2など)によってデータ構造においてインデクシングされ得る。カスケーディングリージョンスケッチを処理するために、データ処理システムは、カウンタレジスタkに等しいもしくはほぼ等しいインデックス値を含む、またはそれと関連付けられる、カスケーディングリージョンスケッチを選択することができる。それがループの最初の反復である場合、カウンタレジスタkは、k番目のカスケーディングリージョンスケッチを選択する前に初期化値(たとえば、k=0、k=1など)に初期化され得る。カスケーディングリージョンスケッチを選択することは、カスケーディングリージョンスケッチと関連付けられるデータを、アグリゲータコンピューティングデバイスの中のコンピュータメモリの異なる領域、たとえばメモリのワーキング領域に複製することを含み得る。
アグリゲータコンピューティングデバイスは、選択されたスケッチの濃度を推定することができる(ACT2106)。アグリゲータコンピューティングデバイスによって受信されるカスケーディングリージョンスケッチのリストを順位付けるために、アグリゲータコンピューティングデバイスは、選択されたカスケーディングリージョンスケッチの濃度(たとえば、有ノイズ濃度)の推定値を順位付けることができる。そうするために、アグリゲータコンピューティングデバイスは、スケッチの中のl個のリージョンの各々について繰り返すことができ、充填の確率が最高であるリージョン(たとえば、i=1、ここでiは選択されるリージョンである、など)で開始し、充填の確率が最低であるリージョン(たとえば、i=l、ここでiは選択されるリージョンである、など)で終了する。各々の選択されたリージョンに対して、アグリゲータコンピューティングデバイスは、埋まっている位置の数(たとえば、1などの、充填値に等しいビットの数など)を、リージョンの中の埋まっていない位置の数と比較することができる。アグリゲータコンピューティングデバイスが、選択されたリージョンに対して、埋まっている位置の数が埋まっていない位置の数以上であると決定する場合、アグリゲータコンピューティングデバイスは、カスケーディングリージョンデータ構造の中の次のリージョンに移ることができる。埋まっている位置の数が埋まっていない位置の数未満であるとアグリゲータコンピューティングデバイスが決定する場合、アグリゲータコンピューティングデバイスは、現在のリージョンインデックスに関連する基準リージョンとして、選択されたリージョンを記憶することができる(たとえば、アグリゲータコンピューティングデバイスがカスケーディングリージョンデータ構造の中の3番目のリージョンまで繰り返し、最初のリージョンが0というインデックスを有する場合、基準リージョンインデックスは2に等しくてもよい、など)。アグリゲータコンピューティングデバイスは、基準リージョンの中の埋まっている位置の数を2^(golden_legion_index)と乗じることによって、選択された有ノイズリージョンデータ構造の濃度を推定することができる。たとえば、基準リージョンの中に10個の埋まっている位置があり、基準リージョンインデックスが4に等しい場合、アグリゲータコンピューティングデバイスは、10*2^4または160に等しいものとして有ノイズカスケーディングリージョンデータ構造の有ノイズ濃度を推定することができる。
アグリゲータコンピューティングデバイスは、カウンタレジスタkがスケッチの数nに等しいかどうかを決定することができる(DECISION 2108)。アグリゲータコンピューティングデバイスが各々の有ノイズカスケーディングリージョンスケッチを使用して有ノイズ濃度を推定したかどうかを決定するために、アグリゲータコンピューティングデバイスは、各々の有ノイズカスケーディングリージョンスケッチを選択するために使用されるカウンタレジスタ(たとえば、k)を有ノイズカスケーディングリージョンスケッチの総数nと比較することができる。カウンタレジスタkが有ノイズカスケーディングリージョンスケッチの総数nに等しくない(たとえば、それ未満である)場合、アグリゲータコンピューティングデバイスは(ACT2110)を実行することができる。カウンタレジスタkが有ノイズカスケーディングリージョンスケッチの総数nに等しい(たとえば、それ以上である)場合、アグリゲータコンピューティングデバイスは(ACT2112)を実行することができる。
アグリゲータコンピューティングデバイスは、カウンタレジスタkをインクリメントすることができる(ACT2110)。いくつかの実装形態では、アグリゲータコンピューティングデバイスは、受信されたカスケーディングリージョンスケッチ(たとえば、ACT2102においてアグリゲータコンピューティングデバイスによって受信されたカスケーディングリージョンスケッチなど)の集合の中の次の未処理の有ノイズカスケーディングリージョンスケッチを示すために、1をレジスタkに加算することができる。いくつかの実装形態では、アグリゲータコンピューティングデバイスは、次の未処理のカスケーディングリージョンスケッチのメモリアドレス値(たとえば、コンピュータメモリの中の位置)にカウンタレジスタkを設定することができる。いくつかの実装形態では、次の未処理のカスケーディングリージョンスケッチのメモリアドレス値は、現在の(たとえば、選択された)カスケーディングリージョンスケッチの位置においてデータ構造に含まれ得る。カウンタレジスタkの値をインクリメントした後で、アグリゲータコンピューティングデバイスは(ACT2104)を実行することができる。
アグリゲータコンピューティングデバイスは、濃度でスケッチをソートすることができる(ACT2112)。差分プライベートカスケーディングリージョンスケッチの各々の有ノイズ濃度を推定した後、アグリゲータコンピューティングデバイスは、それらの推定される有ノイズ濃度値に基づいて差分プライベートカスケーディングリージョンスケッチのソートされたリストを生成することができる。有ノイズ濃度値は、それぞれのカスケーディングリージョンスケッチに寄与した集合の濃度の正確な表現ではないことがあるが、この方法2100において説明されるようなスケッチのソートが目的であれば十分に正確である。カスケーディングリージョンスケッチをソートすることは、効率的なソートアルゴリズム、たとえばヒープソートを使用して、または任意の他のタイプのソートアルゴリズムを使用して、スケッチの推定される有ノイズ濃度の各々を比較することを含み得る。ソートアルゴリズムを使用して、アグリゲータコンピューティングデバイスは、復号順序でカスケーディングリージョンスケッチのソートされたリストを生成することができる。たとえば、リストの中の最初のエントリは、ACT2106において計算された最大の有ノイズ濃度と関連付けられるカスケーディングリージョンスケッチであってもよく、リストの中の第2のエントリは、第2の最大の有ノイズ濃度と関連付けられるカスケーディングリージョンスケッチであってもよい、などである。
アグリゲータコンピューティングデバイスは、ソートされたスケッチを分類することができる(ACT2114)。カスケーディングリージョンスケッチをソートした後で、アグリゲータコンピューティングデバイスは、スケッチの各々をサイズjのm個の群へと割り当てることができ、jは約5に等しいが、他の値に等しくてもよい。パラメータjは、アグリゲータコンピューティングデバイスのメモリの中の1つまたは複数のデータ構造から取り出され得る。たとえば、アグリゲータコンピューティングデバイスは、リストの中の最初のj個のスケッチを選択し、それを第1の群に割り当てることができる。アグリゲータコンピューティングデバイスは、リストの中の次のj個の分類されていないスケッチを選択し、それを次の群に割り当てる、などのことを、アグリゲータコンピューティングデバイスがサイズjのスケッチのm個の群を作成するまで行うことができる。
アグリゲータコンピューティングデバイスは、g番目の群を選択することができる(ACT2116)。ACT2114において作成された各群のモンテカルロサンプリングされた濃度を処理して決定するために、アグリゲータコンピューティングデバイスは、アグリゲータコンピューティングデバイスによって作成される群の各々にわたって繰り返すことができる。アグリゲータコンピューティングデバイスは、カウンタレジスタgに基づいて群の各々を繰り返しループすることができる。たとえば、群の各々は、インデックス値(たとえば、インデックス0、インデックス1、インデックス2など)によってデータ構造においてインデクシングされ得る。群を処理するために、データ処理システムは、カウンタレジスタgに等しいもしくはほぼ等しいインデックス値を含む、またはそれと関連付けられる、群を選択することができる。それがループの最初の反復である場合、カウンタレジスタgは、g番目の群を選択する前に初期化値(たとえば、g=0、g=1など)に初期化され得る。群を選択することは、群と関連付けられるデータを、アグリゲータコンピューティングデバイスの中のコンピュータメモリの異なる領域、たとえばメモリのワーキング領域に複製することを含み得る。
アグリゲータコンピューティングデバイスは、モンテカルロサンプリングを使用して選択された群の和集合を推定することができる(ACT2118)。モンテカルロサンプリングを使用して濃度を推定することは、群の中のベクトルの組合せベクトルを決定することと、任意の特定の位置においてビットが反転される確率を計算することと、入力スケッチの各々の無ノイズ和集合を推定する無ノイズ推定スケッチを生成することとを含み得る。次の擬似コードにおいて、2つのスケッチのためのプロセスが以下で示されるが、これは、小さな修正によって2つより多くのスケッチに拡張され得る。
def GetCombinationsVector(s1,s2):
"""スケッチの中のビットの組合せのベクトルを計算する"""
v=[0,0,0,0]
for x,y in zip(s1,s2):
v[x+2*y]+=1
return v
def ProbabilityOfOr(bit_a,bit_b,priors_map):
prob_map={}
p=0.1
q=1-p
for true_a in [0,1]:
for true_b in [0,1]:
flip_a_needed=1 if bit_a!=true_a else 0
flip_b_needed=1 if bit_b!=true_b else 0
prob_map[true_a,true_b]=priors_map[true_a,true_b]*(
p**flip_a_needed*q**(1-flip_a_needed)*
p**flip_b_needed*q**(1-flip_b_needed))
prob_00=prob_map[0,0]/sum(prob_map.values())
return 1-prob00
def DenoisedUnion(s1,s2):
p=0.1
q=1-p
v=GetCombinationsVector(s1,s2)
assert p==0.1, "ここではp=0.1の場合のみが計算される"
v=numpy.matrix([[1.265625,-0.140625,-0.140625,0.015625],
[-0.140625,1.265625,0.015625,-0.140625],
[-0.140625,0.015625,1.265625,-0.140625],
[0.015625,-0.140625,-0.140625,1.265625]])
*numpy.array(v).reshape(4,1)
priors_map={(0,0):v[0],(1,0):v[1],(0,1):v[2],(1,1):v[3]}
probs=[zip(s1,s2)の中のx,yに対するProbabilityOfOr(x,y,priors_map)]
result=[probsの中のxに対するint(random.uniform(0,1)<x)]
return result
上の擬似コードは0.1の確率を含むものとして示されているが、組合せベクトルvを乗じるために使用される反転された行列に対して対応する変更が行われる限り、pの値は任意の値に変更され得ることを理解されたい。さらに、2つのスケッチのみが上の擬似コードにおいて合成され得るが、この数は、合成ベクトルのパラメータ、反転される行列のサイズ、およびProbabilityOfOr関数を、2つより多くのベクトルを融通するように変更することによって、拡張され得ることを理解されたい。別の実装形態では、2の群に対する無ノイズ和集合を決定するために使用される方法が使用され得る(たとえば、群サイズを決定するためのパラメータjは2に設定され得る、など)。
アグリゲータコンピューティングデバイスは、カウンタレジスタgが群の数mに等しいかどうかを決定することができる(DECISION 2120)。アグリゲータコンピューティングデバイスがカスケーディングリージョンスケッチの各群を使用して和集合モンテカルロサンプリング値を推定したかどうかを決定するために、アグリゲータコンピューティングデバイスは、各群を選択するために使用されるカウンタレジスタ(たとえば、g)を群の総数mと比較することができる。カウンタレジスタgが群の総数mに等しくない(たとえば、それ未満である)場合、アグリゲータコンピューティングデバイスは(ACT2122)を実行することができる。カウンタレジスタgが群の総数mに等しい(たとえば、それ以上である)場合、アグリゲータコンピューティングデバイスは(ACT2124)を実行することができる。
アグリゲータコンピューティングデバイスは、カウンタレジスタgをインクリメントすることができる。いくつかの実装形態では、アグリゲータコンピューティングデバイスは、カスケーディングリージョンスケッチ群の集合の中のカスケーディングリージョンスケッチの次の未処理の群(たとえば、ACT2114においてアグリゲータコンピューティングデバイスによって作成されたカスケーディングリージョンスケッチの群など)を示すために、1をレジスタgに加算することができる。いくつかの実装形態では、アグリゲータコンピューティングデバイスは、次の未処理の群のメモリアドレス値(たとえば、コンピュータメモリの中の位置)にカウンタレジスタgを設定することができる。いくつかの実装形態では、次の未処理の群のメモリアドレス値は、現在の(たとえば、選択された)群の位置においてデータ構造に含まれ得る。カウンタレジスタgの値をインクリメントした後、アグリゲータコンピューティングデバイスは(ACT2116)を実行することができる。
アグリゲータコンピューティングデバイスは、g個の群和集合値の和集合から濃度を推定することができる(ACT2124)。上で説明されたように、カスケーディングリージョンスケッチのm個の群の各々をモンテカルロサンプリングすることによって生成されるスケッチは、各群のメンバーの無ノイズ和集合を表す。したがって、モンテカルロサンプルスケッチの各々の和集合は、ステップ2102において受信されたすべてのカスケーディングリージョンスケッチの無ノイズアグリゲーションを表す合成された和集合スケッチを決定するために、基本的なアグリゲーション(たとえば、各群にわたるビットごとのOR演算など)によって決定され得る。アグリゲータコンピューティングデバイスは、合成されたカスケーディングリージョンスケッチを生成するために、生成されたモンテカルロサンプルスケッチの各々をアグリゲートする(たとえば、繰り返しビットごとにORをとる、加算するなど)ことができる。アグリゲータコンピューティングデバイスは、ステップ2102において受信されたスケッチの和集合の無ノイズ濃度を決定するために、合成されたスケッチを使用することができる。
そうするために、アグリゲータコンピューティングデバイスは、合成されたスケッチの中のl個のリージョンの各々について繰り返すことができ、充填の確率が最高であるリージョン(たとえば、i=1、ここでiは選択されるリージョンである、など)で開始し、充填の確率が最低であるリージョン(たとえば、i=l、ここでiは選択されるリージョンである、など)で終了する。各々の選択されたリージョンに対して、アグリゲータコンピューティングデバイスは、埋まっている位置の数(たとえば、1などの、ある充填値に等しいビットの数など)を、リージョンの中の埋まっていない位置の数と比較することができる。アグリゲータコンピューティングデバイスが、選択されたリージョンに対して、埋まっている位置の数が埋まっていない位置の数以上であると決定する場合、アグリゲータコンピューティングデバイスは、合成されたスケッチの中の次のリージョンに移ることができる。埋まっている位置の数が埋まっていない位置の数未満であるとアグリゲータコンピューティングデバイスが決定する場合、アグリゲータコンピューティングデバイスは、現在のリージョンインデックスiと関連付けて、基準リージョンとして選択されたリージョンを記憶することができる(たとえば、アグリゲータコンピューティングデバイスが合成されたスケッチの中の3番目のリージョンまで繰り返し、最初のリージョンが0というインデックスを有する場合、基準リージョンインデックスiは2に等しくてもよい、など)。アグリゲータコンピューティングデバイスは、基準リージョンの中の埋まっている位置の数を2^(golden_legion_index)と乗じることによって、合成されたスケッチの無ノイズ濃度を推定することができる。たとえば、基準リージョンの中に10個の埋まっている位置があり、基準リージョンインデックスが4に等しい場合、アグリゲータコンピューティングデバイスは、10*2^4または160に等しいものとして有ノイズカスケーディングリージョンデータ構造の有ノイズ濃度を推定することができる。
アグリゲータコンピューティングデバイスは、要求に応答して方法2100のステップを実行することができる。たとえば、外部コンピューティングデバイスは、識別子サーバ上に存在する識別子と属性データの集合の無ノイズ濃度を求める要求を、アグリゲータコンピューティングデバイスに提供し得る。アグリゲータコンピューティングデバイスは次いで、各識別子サーバ(たとえば、各データ処理システム105A~Nなど)から、カスケーディングリージョンスケッチを要求することができる。データ処理システム105の各々は、本明細書において上で説明されたように、セクションBにおいて説明されるようなカスケーディングリージョンスケッチを生成し、スケッチの中のビットを確率pで反転させることによって確率ノイズを適用することができる。スケッチを生成した後、データ処理システム105は、さらなる処理のためにそれらのスケッチをアグリゲータコンピューティングデバイスに送信することができる。アグリゲータコンピューティングデバイスは次いで、方法2100のステップ2102のように、データ処理システム105からスケッチを受信し、次いで、スケッチに寄与した識別子の濃度を決定するための方法のステップを実行することができる。濃度を決定した後、アグリゲータコンピューティングデバイスは、要求を出した外部コンピューティングデバイスに、多重集合の推定される濃度を送信することができる。
本明細書において説明される技法は、いくつかの技術的な利点をもたらす。各データ処理システム105がネットワークを介して大量のデータを送信して、それによりネットワークリソースを消耗させる代わりに、各データ処理システムは、(1)識別子および属性の完全な集合を表し(2)差分プライベートである、小さいデータ構造を生成するための計算技法を使用することができる。さらに、カスケーディングリージョンスケッチを生成するために本明細書において説明される計算技法は、識別子サーバによって維持される識別子の数とともに計算の複雑さが線形にスケーリングする。データ自体ではなくスケッチを差分プライベートに分配することは、ネットワーキングリソースに対する負荷を減らし、それは、スケッチはそれが表すデータより数桁小さいことがあるからである。これは、ネットワーキング技術に対する改善である。さらに、スケッチは差分プライベートであるので、スケッチによって表されるデータは、いずれの他のコンピューティングデバイスにも分配される必要がなく、それにより、ネットワーキングシステムおよび濃度推定システムのセキュリティを改善する。
D.頻度および濃度の推定のための連続的リキッドリージョン技法
濃度および頻度の推定のための技法が紹介される。これらの方法は、バケットにわたる項目の割振りを幾何学的に分配することによって、ブルームフィルタより小型であり得るスケッチを構築するために、HyperLogLogとブルームフィルタの態様を組み合わせることができる。本明細書において説明されるシステムおよび方法は、バケットごとの合計を使用してスケッチを合成することができ、これは、複数の信用されない参加者にわたってスケッチを合成するために準同型暗号化を利用するセキュアマルチパーティ計算プロトコルの作成を、合意された出力の差分プライベートな推定をそのプロトコルへの参加者が確実に知るようにしながら可能にできる。
デバイス識別子の頻度は、コンテンツの特定の項目にアクセスしたデバイス識別子(以後デバイスまたは識別子と交換可能に呼ばれることがある)の数であり得る。したがって、濃度は関連する値であり、それは、濃度はコンテンツのある項目にアクセスしたユニークデバイス識別子の数であり得、頻度は所定の回数を超えてコンテンツの項目にアクセスしたユニークデバイス識別子の数であり得るからである。たとえば、1+頻度(たとえば、1回よりも多くコンテンツにアクセスしたユニークデバイス識別子の数など)は、異なるパブリッシャコンピューティングデバイスにわたる識別子の集合の多重集合の濃度であり得る。頻度ヒストグラムおよびk+リーチという、コンテンツの頻度を決定する少なくとも2つの方法が、本明細書において説明される。頻度ヒストグラムは、デバイスのうちのどの程度の割合が各頻度を有するかを示すことができるが、k+リーチは、kより大きい頻度を有するデバイスの集合の濃度を表すことができる。データセットにわたって単一のパスだけを用いてある値の範囲に対する頻度を推定することは、推定を実行するために必要とされる計算リソースの量を減らすので、濃度推定コンピュータシステムに対する改善となる。頻度に対して計算される最大値は、所定の最大頻度値に基づいてもよく、それは、コンテンツプロバイダがこのメトリックを使用してコンテンツの公開を制限するのを助けることができるからである。
この技術的解決法のシステムおよび方法は、コンテンツパブリッシャにわたるリーチおよび頻度を決定することができ、ここで、コンテンツパブリッシャコンピューティングデバイス(たとえば、データ処理システム105A~Nのいずれかなど)は、コンテンツをホストして提供するエンティティとして定義される。しかしながら、コンテンツパブリッシャは互いに信用しないことがあるので、濃度および頻度を決定するために使用されるスケッチは、直接共有されないことがある。本明細書において説明される濃度および頻度の測定のためのシステムと方法は、スケッチを構成する識別子またはデバイスのプライバシーを保護することができ、互いについての情報をコンテンツパブリッシャコンピューティングデバイスが知ることを防ぎ、それにより、ネットワーキングシステムの全体的なセキュリティを改善することができる。
1つまたは複数のパブリッシャコンピューティングデバイスにわたって識別子の濃度および頻度をセキュアに、かつプライバシーを保護する方式で決定するための様々な方法が説明され、それらは、濃度および頻度を推定するためのブルームフィルタの幾何学的に分散したアレイであり得るカスケーディングリージョン(たとえば、本明細書のセクションBおよびCなどにおいて上で説明された)、カスケーディングリージョンアルゴリズムの連続的なバージョンであり得るリキッドリージョン(たとえば、このセクションなどにおいて説明される)、マルチパブリッシャリーチを推定するために差分プライバシーを適用するための2つの機構、および、両方のタイプのスケッチを合成して差分プライベートな頻度推定を生み出すためのマルチパーティ計算プロトコルである。
濃度を推定するための1つの他のそのような技法はHyperLogLogである。HyperLogLog(HLL)は、低い誤差率、低い分散、および少ないメモリ使用量によって特徴付けられる濃度推定器である。その上、2つのHLLの和集合は計算が容易であることがあり、これは、HLLが分散型数え上げ用途に理想的であり得ることを意味する。濃度と頻度の両方を推定できるHLLの拡張はFreqLogLogと呼ばれる。これを達成するために、FreqLogLog(FLL)は、カウントおよびフィンガープリントという、レジスタごとに2つの追加の値を記憶することができる。HLLレジスタ値が更新されると、項目のフィンガープリントが記憶され、カウンタは1にリセットされる。次いで、そのレジスタに割り当てられる別の項目が以前の項目と同じ数の先頭の0を有するとき、フィンガープリントが比較される。それらが同じである場合、カウントはインクリメントされる。そうではなく、新しいフィンガープリントが古いフィンガープリントより大きい場合、新しいフィンガープリントが記憶され、カウントは1にリセットされる。それ以外の場合、古いフィンガープリントの方が大きく、何も修正されない。
別のそのような技法は、ブルームフィルタに基づく。HLLのように、ブルームフィルタが、濃度および頻度を計算するために使用されてもよく、比較的高いメモリ要件を有し得る。ブルームフィルタの濃度は、
を評価することによって決定されてもよく、kはブルームフィルタを生成するために使用されるハッシュの数であり、mはブルームフィルタの中のビットの数であり、xはブルームフィルタの中の満たされているバケットの数であり、nはブルームフィルタの濃度の推定値の数である。
kが1になることを許容して関数を反転させることによって、集合サイズが与えられると、アクティブビットの数は次の式を使用して推定され得る。
他のコンピューティングデバイスに送信するときにスケッチの差分プライバシーを維持するために、(たとえば、セクションAなどにおいて説明されたような)ElGamal暗号化が使用され得る。ElGamal暗号化は、閾値復号をサポートするように適合され得る簡単な公開鍵暗号化方式であり得る。これは、Diffie-Hellman鍵交換プロトコルのオフライン変形として見ることができる。ジェネレータGを伴う群に対する基本的な案は次の通りである。
KeyGen:ランダム整数X modulo q(群の位数)を選ぶ。これは、復号のために使用される秘密鍵であり得る。公開鍵はG^Xである。
Encrypt(pk,m):ランダム整数R modulo qを選ぶ。暗号文は(G^R,m pk^R)であってもよく、これは(G^R,m G^(X R))である。
Decrypt(sk,m):秘密鍵を使用してG^(X R)を計算し、そしてm=m pk^R/G^(X R)である。
この方式のN対N閾値バージョンは、公開鍵のすべてを一緒に乗じることによって構築され得る。この閾値の変形の例は、2つの参加者が鍵G^XおよびG^Yを生成できるというものである。これらの公開鍵は、乗じられると、G^(X+Y)となり、これは暗号化のための公開鍵として使用され得る。対応する秘密鍵はX+Yである。復号のために、元の秘密鍵は1対1で(任意の順序で)適用され得るので、いずれの単一の参加者もジョイント秘密鍵を知る必要はない。
ElGamal暗号化は、乗法準同型性をサポートすることができる。2つの暗号文(G^R1,M1 G^X R1)、(G^R2,M2 G^X R2)が与えられると、2つのメッセージの積へと復号するために、値(G^(R1+R2),M1 M2 G^X(R1+R2))を計算することができる。これは、メッセージの離散対数に対する加法準同型性であってもよく、言い換えると、値(G^(R1+R2),G^(M1+M2) G^X(R1+R2))を計算することができ、これは小さいメッセージ空間(離散対数を効率的に計算するのに十分小さい)のために使用され得る。
指数で合計を実行することで十分であり得る。たとえば、2^v1および2^v2として表される値v1、v2を伴う2つの整数を合成して、2^(v1+v2)という合成された暗号文を乗法的に得ることができる。その上、以下で説明されるスケッチは、最大の望まれる頻度より小さい元のカウントを使用し得るので、これらのよく知られている値だけを復号するために、ルックアップテーブルを使用することが可能である。このことには、小さなセキュリティ上の利点もある。アグリゲータは、閾値を超える値のカウントを、それらの値が何であるかを知ることなく知ることができる。そうするために、ワーカーは暗号化(たとえば、Pohlig-Hellman暗号など)を使用することができ、これは、各ワーカーが、部分的に復号されたバケットのすべてに適用される秘密の指数を選ぶことを伴い得る。これは、準同型性を介して実行されてもよく、ジェネレータGを何らかのランダムな群の元に変更することと等価であり得る。
多重集合の濃度および頻度を推定するための別の技法は、カスケーディングリージョンスケッチを使用して実装され得る。ブルームフィルタを正確にするためのビット数は、測定される必要のある集合の濃度とともに線形に増大し得る。CascadingLegions(CL)のレジスタ(すなわち、項目の存在を記録するビット)を2次元アレイ(または行列)へと並べることで、ビット数の線形の増大を軽減することができる。アレイの列はリージョンと呼ばれ、行は位置と呼ばれる。したがって、各項目はリージョンの(リージョン,位置)タプルへとマッピングされ、これはレジスタである。リージョンにわたる確率分布は幾何学的であり、位置にわたる確率分布は均一であるので、各リージョンは単一のハッシュブルームフィルタであり得る。この方式は、一定の相対誤差での濃度の推定を可能にでき、必要とされるスケッチサイズは、測定される必要のある集合の濃度とともに対数的に増大し得る。その上、ブルームフィルタのように、CLスケッチレジスタは、ビットごとのor演算を介して合成されてもよく、またはスケッチがカウンタを含むとき、このことは頻度問題に対しては必須であり、スケッチはレジスタごとに加算することによって合成され得る。
以下で本明細書において(およびセクションなどBにおいて提供される本開示に基づいて)説明されるアルゴリズム1は、CLスケッチの初期化を説明する。これは、レジスタのアレイ(s)の割振りと、同じ鍵アグリゲータのアレイ(b)の割振りとを含み得る。項目がレジスタ(r)へと最初に挿入されるとき、同じ鍵アグリゲータはその項目のフィンガープリントを記憶することができ、s[r]は1に設定される。次いで、項目がそのレジスタに割り振られる次のときに、そのフィンガープリントが既存のフィンガープリントと比較され得る。フィンガープリントが等しい場合、s[r]はインクリメントされ得る。新しいフィンガープリントが既存のものより大きい場合、既存のものは置き換えられてもよくs[r]は1にリセットされてもよい。それ以外の場合、新しいフィンガープリントの方が小さく、修正は行われない。同じ鍵アグリゲータを更新するためのプロセスは、項目がスケッチへとどのように挿入され得るかを記述する、以下のアルゴリズム3の部分として説明される。
アルゴリズム1、スケッチ初期化:
settings:なし
input:リージョンの数l、位置の数m
output:CascadingLegionsスケッチおよび同一鍵アグリゲータ(s,b)
let s=サイズl*nの整数アレイ
let b=SameKeyAggregator構造のアレイ
0でsをinitialize
挿入アルゴリズムについて続ける前に、レジスタ割振りアルゴリズムが導入される。項目をレジスタに割り振るために、まず項目がハッシュされ得る。次に、リージョンは、ハッシュ値の中の先頭の0の数(たとえば、上位、下位など)を決定することによって割り当てられ得る。次に、最初の0ではないビットは削除され、残りのビットmod位置の数が、リージョンにおける位置を決定する。本明細書において以下で説明されるアルゴリズム2を参照されたい。項目は、リージョンを決定する方法としてハッシュ値の中のアクティブビットの合計を使用することによって、二項分布を使用してリージョンに割り振られ得る。
アルゴリズム2、レジスタ割振り:
settings:リージョンの数l、位置の数m
input:割り振るべき項目のフィンガープリント(f)
output:CascadingLegionsレジスタ(i,j)
let i=0
while f%2==0 and i<l-1:
let i+=1
let f/=2
let f/=2
let j=f%m
return(j,i)
挿入は、項目をレジスタ(i,j)に割り振ることによって進行することができる。次のステップは、上で説明されたような同一鍵アグリゲータを確認し、それに従ってレジスタ値を調整することである。このアルゴリズムは、カウンタの使用を想定し得るが、頻度が望まれない(たとえば、濃度が望まれる、など)実装形態では、各リージョンはビットアレイによって表され得る。
アルゴリズム3、項目挿入:
input:item
output:修正されたスケッチ(s,b)
f=fingerprint(item)
let(i,j)=allocateRegister(f)
let r=i*m+j
if b[r]==null or b[r]==f
s[r]+=1
b[r]=f
elif b[r]<f:
s[r]=1
bf[r]=f
項目の集合の濃度を推定するために、ある濃度によってアクティブ化される予想されるレジスタの数を導くことができる。各リージョンは均一なブルームフィルタであり得るので、tj個の項目がリージョンjの中にある場合、レジスタのうち
の割合がアクティブ化され得る。そして、リージョンlは、項目のうちの2^-(j+1)の割合についてヒットすると予想されるので、アクティブ化されるレジスタの総数は
に等しくなり得る。
F(t)は単調であり得るので、アクティブ化されたレジスタの観測された数が与えられた状態で濃度tを効率的に見出すために、二分探索が使用され得る。本明細書において以下で説明されるアルゴリズム4を参照されたい。
アルゴリズム4、カスケーディングリージョンスケッチからの濃度推定
settings:リージョンの数l、位置の数m
input:CascadingLegionsスケッチs
output:sに記憶されている集合の推定される濃度
define function F(t):
return sum((1-exp(-t*2^(-t*2^(-(j+1))/m))*m for j in range(l))
define function InverseF(c):
return F(t)=cであるようなtの二分探索の結果
let c=sの中の0ではないもののカウント
let t=InverseF(c)
return t
頻度推定のために、カウントの分布がレジスタから抽出されてもよく、頻度分布がサンプルから補間されてもよい。
これらのスケッチは、ランダムノイズの導入を通じて差分プライベートとなるように拡張され得る。ランダムノイズは、カスケーディングリージョンスケッチの中に存在するビットをランダムに反転させることによって導入され得る。スケッチは、スケッチの各ビットを確率p
で反転させることによって、パラメータεを用いて差分プライベートにされ得る。
たとえば、ln(3)というDPイプシロンに対して、ビットは確率0.25で反転され得る。アルゴリズム4において、そのすべてのビットが確率pで反転されているフィルタSのリストが与えられると、和集合の中の0のレジスタの数は、ノイズを全体として除去することによって推定され得る。この戦略はスケッチ全体に適用され得るが、完全に満たされている、または完全に0である多くのリージョンがあることが予想されるので、そのような推定の誤差は大きい。代わりに、ノイズ除去が各リージョンに別々に適用されてもよく、充填の過程にあるリージョン(たとえば、その値の半分未満が埋まっている最初のリージョンなど)が推定を行うために使用されてもよい。
アルゴリズム5、有ノイズカスケーディングリージョンスケッチの基準リージョンを使用して和集合の濃度を推定する:
settings:リージョンの数l、位置の数m、反転確率p
input:ビットが確率pで反転されたCascadingLegionsスケッチSのリスト
output:Sに記憶されている集合の和集合の推定される濃度
let InversF=アルゴリズム3からのInverseF関数
define function OneCountsVolumesVector(S,j):
let v=[0]*lens(S)
for i in range(m):
let c=j番目のリージョンのi番目の位置において1を有するSの中のスケッチの数
let v[c]+=1
return v
define function TransitionProbability(a,b):
#簡潔にするために、この関数は高水準アルゴリズムの説明から省かれる。
#この関数の例示的なPythonによる実装が付録に含まれる。
return a個の1を伴うベクトルがビットを確率pで反転した後にb個の1を有するようになる確率
define function CorrectionMatrix():
let N 遷移確率の行列,すなわちN(a,b)=Transition Probability(a,b)
return Nの線形代数逆行列
for g in range(l):
let v=OneCountsVolumesVector(S)
let estimated_zero_count=CorrectionMatrix()*vの第1の座標
if j<l-1 and estimated_zero_count<0.4*m:
#リージョンjは過剰に満たされているので、続ける
continue
#リージョンgは過不足なく満たされているので、これは基準リージョンである
return InverseF(m-estimated_zero_count)
別のそのような技法であるリキッドリージョンは、連続的な分布を使用したカスケーディングリージョン技法の拡張である。リージョンが1/2のステップで低下する割振り確率を有するという決定は、恣意的である。これにより、リージョンの予想される数に対する式Fが、l個の項を伴う加算を使用することが可能になる。代わりに、項目は、変化する減衰係数を伴う幾何分布を使用してレジスタに割り振られ得る。境界のある幾何分布
を考える。
このサンプリングを効率的に実行して分析を簡単にするために、分解能mとともに、区間[0,1]へと打ち切られた指数分布
が使用され得る。
項目をレジスタに割り振るために、i番目の区間がi番目のレジスタに対応すると仮定して、区間[0,1]は等しい長さのm個の区間へと分割され得る。指数分布から実数値の数をサンプリングすることができ、その実数が含まれる間隔に対応するレジスタに項目を割り振ることができる。
実数値の分布から数をサンプリングするために、区間[0,1]からの数を均一にサンプリングすることができ、逆累積分布関数(CDF)を適用することができる。上記の打ち切られた指数分布の逆CDFは
に等しくてもよい。
したがって、LiquidLegionsスケッチのためのリージョナリーをサンプリングするためのアルゴリズム1Lに到達する。
アルゴリズム1L:リキッドリージョンレジスタ割振り:
settings:減衰パラメータa、位置の数m
input:割り振るべきitem
output:CascadingLegionsレジスタ(i,j)
let f=fingerprint64bit(item)
let u=f/2^64
let x=1-log(exp(a)+u*(1-exp(a)))/a
return x*(m+1)の整数フロア
リキッドリージョンのためのスケッチ作成のアルゴリズムは、適切なレジスタ割振り関数を伴うカスケーディングリージョンと同一であり得る。濃度推定のために、関数は、アクティブ化されたレジスタの予想される数rに濃度をマッピングすることができる。
t=c/mをr/mにマッピングする関数は、積分
を介して任意の分布Pについて取得され得る。
この式は、i番目のレジスタが少なくとも1つの項目によって割り振られる確率を書き、mが無限大になるときの極限をとることによって、取得することができる。
以下では、濃度推定のためのアルゴリズムが説明される。これは、濃度関数の置換を除き、カスケーディングリージョンの対応するものと同一であり得る。
アルゴリズム3L補遺。LiquidLegionsスケッチからの逆濃度推定関数:
define function F(t):
ruturn 1-(-expi(-a*t/(exp(a)-1))
+expi(-a*exp(a)*t/(exp(a)-1)))/a
リキッドリージョンスケッチの差分プライベートバージョンは、基準リージョンが連続的にスライドすることができその長さが推定の最低の分散に対して最適化され得ることを除き、カスケーディングリージョンと同一であり得る。最適な基準リージョンは、逆濃度推定関数を微分することと、アクティブ化されたレジスタの数の増分的な増大の確率と乗じられた導関数が最大となるような点を発見することとを介して、発見され得る。データ処理システムは、本明細書のセクションCにおいて上で説明されたアルゴリズムのいずれかとともに、またはそれらの代替として、アルゴリズムのいずれかまたはすべてを利用することができる。たとえば、スケッチの濃度を決定するためのアルゴリズムを、このセクションのアルゴリズムで、または、リキッドリージョンスケッチを埋めるためのアルゴリズムを、カスケーディングリージョンの実装形態によって使用されるアルゴリズムで、ならびに本明細書において説明される任意の他のもので置き換えることによって。データ処理システム105A~Nのいずれか、ワーカーコンピューティングデバイス405、またはアグリゲータコンピューティングデバイス410が、このセクションにおいて説明される機能のいずれかまたはすべてを実行できることを理解されたい。
リキッドリージョンスケッチ分析のために使用される技法は、レジスタにわたる項目の任意の分布に適用され得る。その上、任意の分布が、活動空間においてDirac Mixtureを用いて近似され得る。したがって、べき乗された確率関数は積分可能である必要はなく、Dirac Mixtureによる精密な近似が使用され得る。
暗号同一鍵アグリゲータを使用すると、本明細書のシステムは、1つより多くのデバイス識別子が寄与したレジスタを除去してデバイス頻度のクリーンサンプルを決定するために、準同型暗号化を利用することができる。鍵アグリゲーション構造は、暗号化されたカウンタと鍵のペア(E(count),E(key))であり得る。
この構造上での加算は次のように定義され得る。
(E(count1),E(key1))+(E(count2),E(key2))=(E(count1+count2+R*(key1-key2)),E(key1+R*(key1-key2))
ここでRは乱数である。
この加算演算は準同型に計算され得る。構造は次いで、次のように振る舞い得る。
If key1=key2=key then
(E(count1),E(key))+(E(count2),E(key))=(E(count1+count2),E(key))
それ以外の場合、カウンタはランダム性により破壊され得る。
これらのスケッチの生成を担うパブリッシャコンピューティングデバイス(たとえば、データ処理システム105A~Nなど)間で差分プライバシーを維持するために、システムは、パブリッシャ間でスケッチをアグリゲートして多重集合の濃度および頻度を推定するために、セキュアマルチパーティ計算プロトコルを実装することができる。上で示されたように、同じパラメータ化を伴うスケッチは、それらを位置ごとに加算することによって和集合をとることができる。我々のプロトコルの中核の演算としてElGamal暗号化の準同型の性質を使用して、軽量なMPCプロトコルがジョイントスケッチを計算するために使用され得る。高水準な手法は、N対N閾値鍵をまず準備して、次いでスケッチ提供者の各々に公開鍵を使用してそれらの入力を暗号化させることである。各秘密鍵のシェア保持者は次いで、ジョイントスケッチを部分的に復号し、準同型の性質を使用して確定的暗号を適用し、結果を次のシェア保持者に転送することができる。すべての復号鍵のシェアが使用されると、その結果は確定的暗号化されたスケッチであり、それから、望まれる統計を計算することができる。差分プライベート出力がどのように計算され得るかを含むプロトコルが、本明細書において以下で説明される。
いくつかの実装形態では、スケッチ提供者の数は多いことがある。いくつかの実装形態では、少数の独立に運用されるワーカーがプロトコルを実行し、大半のスケッチ提供者は暗号化された入力をワーカーの少なくとも1つに送信することができる。ワーカーの間で、通信グラフはリングトポロジーに従い得る。例の残りでは、本開示は、ワーカー1がワーカー2と通信し、ワーカー2がワーカー3と通信し、ワーカー3がワーカー1と通信するように、3つのワーカーがあるという仮定のもとで動作する。しかしながら、プロトコルに参加することができる任意の数のワーカーがあってもよいことを理解されたい。
始めに、各ワーカーは、上で説明されたような、または本明細書においてセクションAにおいて説明されたような、ElGamal鍵ペア(pki,ski)を生成することができる。各ワーカーは、その鍵を他のワーカーの各々にブロードキャストすることができる。ワーカーの各々は合成された公開鍵を形成することができ、スケッチ提供者はワーカーのいずれからも鍵をフェッチすることができる。この合成された公開鍵は、スケッチ提供者によってそれらのスケッチを暗号化するために使用され得る。
スケッチ提供者(たとえば、データ処理システム105A~N)の各々は、以下のこと(たとえば、セクションA~Cに関連して本明細書において説明されるような)を行うことができる。
1. ワーカー(たとえば、ワーカーコンピューティングデバイス405A~Nなど)から合成された(たとえば、アグリゲートされた)公開鍵を取り出す
2. (たとえば、本明細書において説明されるものなどのような)バケットフィンガープリントを含むスケッチを作成する
3. 各々の0ではない位置が(位置,値,フィンガープリント)の3タプルとして表されるようなスパース表現へとスケッチをパッケージングする
4. 合成された暗号鍵を伴う各3タプルにElGamal暗号化を適用する
5. 暗号化されたスパーススケッチを第1のワーカー(たとえば、ワーカーコンピューティングデバイス405Aなど)に送信する
スケッチ提供者にそれらのスケッチをランダムワーカーへ送信させて、次いで、各ワーカーに、それらの受信されたスケッチを、プロトコルで開始する単一のワーカーへ送信する前にシャッフルさせることへと一般化することが可能であることに留意されたい。この例示的な説明では、すべてのスケッチ提供者がスケッチを単一のワーカーに送信すると仮定される。しかしながら、任意の数のスケッチ提供者が任意の数のワーカーにスケッチを送信できることを理解されたい。第1のワーカーが各パブリッシャの暗号化されたスパーススケッチを受信すると、プロトコルは開始することができる。
1. 以後単に「3タプル」と呼ばれる、すべてのパブリッシャからのすべての3タプルに対して、第1のワーカー(たとえば、ワーカー405A)は、3タプルをシャッフルする(たとえば、並べ替える)ことができ、それらを次のワーカーに渡す。
2. そして次のワーカーが以下のステップを実行する:
a.そのElGamal鍵シェア(たとえば、秘密鍵など)を使用して各位置id(たとえば、各3タプルの)を部分的に復号する。
b.ElGamal準同型性を使用して確定的暗号化のレイヤを各位置id(たとえば、各3タプルの)に適用する。
c.3タプルをシャッフルする。
d.3タプルを次のワーカーに渡す。
3. このプロセスは、第1のワーカーが3タプルを再び受信するまで続き得る(たとえば、リング構成など)。
4. 次いで、第1のワーカーが、その鍵シェアを使用して3タプルを復号することができ、今や確定的暗号化された位置IDにタプルを接合し、これにより、各位置に対して、以下の構造(Enon_det(position),[(E(value1),E(fingerprint1)),(E(value2),E(fingerprint2)),…])が得られる。
5. 第1のワーカーが次いで、本明細書において上で説明された同一鍵アグリゲータ法を使用して、暗号化された(値,フィンガープリント)タプルを合成する。これは、合成されたスケッチの中の各々の0ではない位置IDに対して、(Enon_det(position_id),E(value),E(fingerprint))をもたらし得る。
6. 第1のワーカーが、通信の第2のラウンドを開始する。
a.合成された3タプルから暗号化された鍵(たとえば、E(key))を脱落させることによって開始し、これは、各々の0ではない位置IDに対して(Enon_det(position_id),E(count))という合成された2タプルをもたらす。
b.次いで、「2タプル」と以後呼ばれる合成された2タプルを次のワーカーに渡す。
7. 次いで、次のワーカーが以下のステップを実行する。
a.各カウントから非確定的暗号化を除去する
b.確定的暗号化を各カウントに適用する
c.タプルが第1のラウンドにおいてすでにシャッフルされたのでシャッフルは必要ではないことに留意されたい
8. このプロセスは第1のワーカーが非確定的暗号化された2タプルの集合を受信するまで続く。
9. ここから、濃度の推定値を得ることが可能である。
10. 次に、ワーカーが頻度分布を決定するために協調することができる。
a.まず、ワーカーが、以前のラウンドと同じ鍵を使用して整数値[1,max_frequency)を確定的暗号化することができ、これは、よく知られている値[1,max_frequency)に対する暗号文から平文へのルックアップテーブルをもたらし得る。
b.次いで、ルックアップテーブルが、確定的暗号化されたスケッチから頻度ヒストグラムを構築するために使用され得る。このヒストグラムは次いで、スケッチの頻度分布を決定するために使用され得る。
c.ルックアップテーブルの中の値にマッピングしないスケッチの中に存在するすべての値が、max_frequencyに等しいと考えられる。
これは、図4A~図4Cおよび図5~図7に関連して本明細書において上で説明されたMPCプロトコルの拡張である。すなわち、本明細書において説明されるコンピューティングデバイスのいずれか、たとえば、とりわけデータ処理システム105A~N、ワーカーコンピューティングデバイス405A~N、アグリゲータコンピューティングデバイスが、このセクションにおいて説明されるような機能のうちの1つまたは複数を実行することができる。さらに、セクションA~Cの方法、システム、または技法のいずれかもしくはすべてが、このセクションにおける機能に適用され得ることを理解されたい。
同一鍵アグリゲータは、所与の位置に対する鍵が同じであるかどうかを決定するために簡単な品質テストを使用できることに留意されたい。各ヒストグラムビンに対して両側幾何ランダム変数を生成してそれをそのビンに加算することによって、差分プライバシーが頻度ヒストグラムに直接追加され得る。クエリセンシティビティは1であり、これは、いずれの識別子も頻度ヒストグラムにおいて多くて一度しか表すことができないので必須である。
ノイズを追加するために、ワーカーは、各バケットに追加されるべき任意のベースラインBについて合意することによって開始することができる。上記のプロトコルのステップ1および2は、各ワーカーにmax_frequencyランダム変数(X1、Xi、Xmax_freq)を描かせることによって拡張され得る。これらは、特定のワーカーに対する値[1,max_frequency]の計算に加算すべきノイズ値の数を表し得る。これを達成するために、各ワーカーは、値iを伴うB-Xiタプルをスケッチに追加することができる。次いで、ステップ9において、第1のワーカーは各ヒストグラムバケットから値B*Wを減算することができ、ここでWはワーカーの数である。これは次いで、必要とされるノイズ分布をもたらす。これは、ノイズベースラインが減算された後で濃度が推定され得ることも意味する。各ワーカーがノイズを計算にどのように追加できるかの詳細については、本明細書において以下で説明されるアルゴリズム5を参照されたい。図7に関連して、同様の技法がセクションAにおいて本明細書において上で説明される。たとえば、以下のアルゴリズムが、頻度の計算の間に分布ノイズを生成して付加するためにワーカーコンピューティングデバイス405A~Nによって使用され得る。
アルゴリズム5、ワーカーにより生成される分布ノイズ:
noise_tuples=[]
for v in [0,max_frequency]:
x=drawPolyaRv()
for i in range(B-x):
noise_tuples.append((random(),v,random()))
個別のスケッチ寄与者の濃度の漏洩を防ぐために、各スケッチ提供者は値(sentienl_position,0,0)を伴ういくつかの3タプルを暗号化することができ、sentinel_valueはよく知られているレジスタ値である。次いで、センチネル位置がステップ4の終わりにおいてワーカーによって確定的暗号化されてもよく、その位置を伴うすべてのタプルが廃棄されてもよい。
いくつかの実装形態では、すべてのバケットがスケッチプロバイダによって暗号化され得るような、プロトコルのデンスバージョンが使用され得る。しかしながら、スケッチが1/3未満埋まっている一般的な事例では、スパース法が、よりリソース効率が高いことがある。
本明細書において上で説明された同一鍵アグリゲータ技法はさらに、分布データを収集することに一般化され得る。たとえば、識別子の分布は、1つまたは複数の属性(たとえば、デバイス情報、デバイスメタデータ、デバイスについての情報など)に基づいて選択され得る。属性ごとにスケッチを作成する代わりに、属性は同一鍵アグリゲータに記憶されてもよく、これは、計算リソースを節約することができ、濃度および頻度決定コンピュータシステムに対する改善である。トレードオフは、大まかなカウントではなく属性バケットにわたる大まかな分布が知られるということである。よって、ある属性が多重集合の小さい部分である場合、カテゴリまたは属性へのリーチの相対誤差の保証はないことがある。分布デモを記憶するために、アグリゲータは次のように調整され得る。カテゴリ(たとえば、属性)は一貫してオブジェクトに割り当てられ得ると想定することができる。
(E(category1),E(key1))+(E(category2),E(key2))=
(E(category1+R*(key1-key2)),E(key1+R*(key1-key2))
システムは、要素ごとに演算を適用する同一鍵アグリゲータに、任意の数のスケッチおよびカテゴリクラスを記憶することができる。たとえば、
(E(count1_a),E(count1_b),E(category1_c),E(E(key1))+
(E(count2_a),E(count2_b),E(category2_c),E(E(key2))=
(E(count1_a+count2_a+R*(key1-key2)),
E(count1_b+count2_b+R*(key1-key2)),
E(category1_c+R*(key1-key2)),
E(key1+R*(key1-key2))
である。
説明を目的に、このアルゴリズムは同一鍵アグリゲータと呼ばれてもよく、同一鍵アグリゲータは任意のカウントおよびカテゴリ分布をアグリゲートすると仮定されてもよい。構造統合の動作は「+」記号を介して表記され、上で説明されたようなカテゴリのカウントおよび統合の追加を示唆する。アルゴリズムの平文バージョン
いくつかの実装形態では、同一鍵アグリゲータは、暗号化された鍵の代わりに使用され得る浮動小数点値のハッシュを含み得る。単一のカウンタに対しては、それは次のように見える。
(hash_1,count_1)+(hash_2,count_2)=
((hash_1,count_1+count_2)
if(hash_1==hash_2) else min((hash_1,count_1),(hash_2,count_2)))
本明細書において説明されるシステムおよび方法は、セクションA~Cにおいて提供された実装形態を修正または拡張するためにこのセクションにおいて説明された技法を実装し、ならびに、以前のセクションにおいて説明されなかった他の実装形態を実装できることを理解されたい。
E.頻度および濃度の推定のための指数一般化ブルームフィルタ
本技術的解決法のこのセクションは、本明細書において説明されるような全体的な頻度および濃度を計算する際に使用するための指数一般化ブルームフィルタデータ構造を説明する。本技術的解決法の他のセクション(たとえば、セクションA~D)において説明されるように、各パブリッシャコンピューティングデバイス(たとえば、データ処理システム105A~N)は、1つまたは複数のデバイス識別子または属性を表すことができる固有のプライバシーが保たれたスケッチを生成することができる。デバイス識別子または属性は、デバイス識別子によりとられる1つまたは複数の行動、たとえば、コンテンツの特定の項目またはウェブアドレスにアクセスすることと関連付けられ得る。パブリッシャコンピューティングデバイスの各々は、受信されたスケッチにわたるユニークデバイス識別子の重複排除された数を推定する重複排除サービス(たとえば、ワーカーコンピューティングデバイス405、アグリゲータコンピューティングデバイス410などのいずれか)にスケッチを送信することができる。このスケッチは差分プライバシーが保たれ得る。結果として、スケッチを信用されないエンティティに送信するときであってもスケッチの差分プライバシーを維持することができ、これはネットワーキングシステムのセキュリティに対する改善である。
本技術的解決法において説明される技法は、指数一般化ブルームフィルタ(exp-GBF)をスケッチとして使用することができる。本明細書において説明される技法は、exp-GBFスケッチによって表される多重集合の濃度を推定するためにアグリゲータコンピューティングデバイスが使用できる差分プライバシーの保たれたスケッチとして、exp-GBFを生成することを可能にできる。本明細書において説明される技法は、複数のパブリッシャにわたってexp-GBFを合成し、または和集合をとるための、システムおよび方法を提供する。
本明細書において説明される技法は、幾何一般化ブルームフィルタ(exp-GBF)を使用することができる。GBFは、ハッシュされた識別子空間の異なる部分をビットベクトルの中のビットがカバーすることを可能にするように、古典的なブルームフィルタを一般化する。具体的には、i番目のビットがハッシュされた識別子空間のpiをカバーする。piは任意の分数であり得る。パブリッシャコンピューティングデバイス(たとえば、データ処理システム105A~N)は、piの指数関数、pi=kappa*exp(-kappa*i/m)を使用することができ、mはビットベクトルの長さである。kappaは、exp-GBFスケッチの形状を決定できるパラメータである。
本明細書において説明されるコンピューティングデバイス(たとえば、アグリゲータコンピューティングデバイス410、またはワーカーコンピューティングデバイス405、データ処理システム105A~N、任意の他のコンピューティングデバイスなど)は、次の式を使用して所与のexp-GBFの重複排除された濃度を計算することができ、
ここでCはexp-GBFに寄与した識別子の集合の濃度であり、xはexp-GBFスケッチの中のビット集合の数であり、mはスケッチの中のビット位置の総数である。
差分プライバシーを維持するために、パブリッシャコンピューティングデバイス(たとえば、データ処理システム105A~N)は、exp-GBFスケッチの中の各ビットを確率pで反転させることができる。たとえば、パブリッシャコンピューティングデバイスは、「1」ビットを「0」に確率pで反転させることができ、「0」ビットを「1」ビットに確率qで反転させることができる。この差分プライベートexp-GBFスケッチは、dp-exp-GBFと呼ばれ得る。exp GBFスケッチの中の各ビットを差分プライベートにするために反転した後で、パブリッシャコンピューティングデバイスは、dp-exp-GBFスケッチをアグリゲータコンピューティングデバイスに送信して、他のパブリッシャコンピューティングデバイスにわたって重複排除された濃度を計算することができる。
所与のdp-exp-GBFスケッチのユニークカウントを計算するために、アグリゲータコンピューティングデバイスは、次の式を使用してdp-exp-GBFスケッチの校正された1ビット値を計算することができ、
ここでCBは濃度推定において使用されるべき1ビットの校正された数であり、qは0ビットが1ビットに反転される確率であり、pは1ビットが0ビットに反転される確率であり、xは「1」に設定されたスケッチの中のビットの数であり、zは「0」に設定されたスケッチの中のビットの数である。次いで、アグリゲータコンピューティングデバイスは、次の式を使用して、校正された数の1のビットを用いてdp-ex-GBFの重複排除されたリーチを計算することができ
ここでDCはdp-exp-GBFの濃度であり、CBは上の式を使用して計算された1のビットの校正された数であり、mはdp-exp-GBFの中のビット位置の数である。
このセクションにおいて説明されるスケッチは、「あらゆる分布ブルームフィルタ」(ADBF)とも一般に呼ばれ得る。このセクションにおいて説明されるスケッチは、均一な関数または指数関数以外の代替的な分布関数を融通することができるビット分布を許容することを含み得る。たとえば、本明細書において説明される技法は、線形に減衰するブルームフィルタ(BF)、双曲線BF、または均一なBFと指数BFの混合物を実装することができる。ノイズ校正は、1つまたは複数のアグリゲータまたはワーカーコンピューティングデバイス(たとえば、アグリゲータコンピューティングデバイス410、ワーカーコンピューティングデバイス405A~Nなど)によって効率的に適用され得る。
さらに、アグリゲータコンピューティングデバイス(たとえば、ワーカーコンピューティングデバイス405、アグリゲータコンピューティングデバイス410など)によって実施される推定技法は、基準リージョンのビットのみが使用される基準リージョンベースの実装形態とは異なり、スケッチのすべてのビットが濃度推定に寄与できるように実装され得る。基準リージョンを選択する代わりに、アグリゲータコンピューティングデバイスは、スケッチの中の各ビットの重みを調節することができ、ここで、重み値は、最終的な濃度推定に対するスケッチの中のビットの寄与を示す。スケッチのパラメータに基づいて、アグリゲータコンピューティングデバイスは、濃度推定の全体的な正確さを改善するために、スケッチの中の各ビットに対する最適な重みを導くことができる。
ADBFの実装形態を説明する目的で、本技術的解決法は、いくつかの代替的な手法を説明することによって開始する。まず、確率的数え上げおよび確率論的平均化(PSCA)を実装するスケッチが説明される。
PSCAベースの技法は、ビットマップデータ構造を利用することができる。以下は、PCSA 3x2ビットマップを示す。各セル値は、1または0のいずれかに等しいビットであり得る。ここで、特定のセルの位置を記述するために、一般的な指示子「行」および「列」が使用される。行はレジスタとも呼ばれ得る。PSCAスケッチでは、識別子がセルのビットシーケンスに基づいてセルに割り当てられ得る。たとえば、各行は、全領域の識別子のうちの1/nrows(我々の例では1/3)の割合を獲得することができる。列は、全領域の識別子のうちの指数関数的に減衰する割合を有し得る。たとえば、列1は1/2を有してもよく、列2は1/4を有してもよい、などである。したがって、セルは、領域のうちの1/nrows*(1/2)^column_idの割合を獲得する。3x2 PSCAスケッチの例示的な表現が以下に含まれる。
PSCAビットマップは、以下で示されるようにビットベクトルへと平坦化され得る。ベクトルは、セルを列の順序で並べる。3つのセルの最初の区間は、最初の列からのものである。それらは領域のidのうちの1/6を獲得する。3つのセルの2番目の区間は、2番目の列からのものである。それらは領域のうちの1/12を獲得する。ビットマップおよびビットベクトルは等価であり、互いに1対1でマッピングされ得ることが明らかである。
ADBFスケッチは、そのようなスケッチの一般化された形式であり得る。ADBFスケッチは、以下で示されるように、領域のあらゆる確率を取り入れることができる。
スケッチの中の各位置に対する確率の分布はあらゆる値に一般化され得るので、本明細書において説明される他の構造が結果として生じ得る。たとえば、すべての確率値が等しく1/mに重み付けられる場合、古典的なブルームフィルタの実装形態が生じ、ここでmはスケッチの中の位置の数である。同様に、「滝」のような確率が各区間に割り当てられるとき、PSCAのようなスケッチが生じる。さらに、
であるように指数pの値が使用され、iがスケッチにおける位置のインデックスであり、cが正規化係数であり、mがスケッチにおける位置の数である場合、リキッドリージョンタイプのスケッチが生じる。
本明細書において以下で説明される指数ブルームフィルタの事例は、エレガントな統計モデルおよび解釈を伴う閉形式最尤法を有する。次に、識別子からADBFを構築し、ノイズを追加し、1つのADBFのユニークカウントを計算し、多数の合成されたADBFのユニークカウントを計算することを含む、ADBFおよびいくつかの理論的な定式化が説明される。ブルームフィルタ、PCSA/CL、およびADBFを比較するためのシミュレーション結果が与えられる。
一般化ブルームフィルタ(ADBF)は、パブリッシャコンピューティングデバイス(たとえば、データ処理システム105A~N)によって次のように構築され得る。kappaパラメータは、1という値に設定され得るが1未満であってもよい調節可能なパラメータである。データ処理システムは、ADBFデータ構造を構築するために利用すべき1つまたは複数のデータ記録(たとえば、識別子および属性、またはある基準を満たす識別子など)にアクセスすることができる。たとえば、データ処理システムは、構築されたADBFスケッチへと挿入するために使用すべき1つまたは複数のデータ記録にアクセスするために、データベース(たとえば、データベース115など)にアクセスすることができる。ADBFスケッチは、データ処理システムのメモリに維持されてもよく、異なるスケッチの実装形態に関して本明細書の先行するセクションにおいて説明されたように初期化値に初期化されてもよい。たとえば、ADBFスケッチを構築するための手順は、カスケーディングリージョンスケッチまたはリキッドリージョンスケッチと実質的に同様であってもよく、データ処理システムのメモリに記憶されている、またはワーカーコンピューティングデバイス405、アグリゲータコンピューティングデバイス410、もしくはクライアントデバイス120から受信された、パラメータに基づき得る。
構築の後で、データ記録は、次の技法を使用してADBFの中の位置にマッピングされ得る。ADBFスケッチは、バケットの数kおよびあらゆる確率ベクトル(p1,p2,…,pk)を含むように構築されてもよく、iが1からkの範囲にある場合のすべてのpiの合計はkappaに等しい。kappaの値は1に等しくてもよいが、1に等しい必要はない。確率ベクトルは、確率ベクトルの中の各座標が、ADBFスケッチの中の単一のバケットまたはレジスタに割り当てられ得るようなものである。データ記録(たとえば、データベース115に維持されているデータ記録など)の各識別子は、確率piでADBFスケッチのバケットiに挿入され得る。実際には、hを、識別子空間(たとえば、データ記録空間など)を均一に(0,2^64)にマッピングするデータ処理システム105によって識別されるハッシュとする。次いで、式
が満たされる場合、データ記録xはバケットiへと挿入され得る。データ記録の集合(データ記録は「識別子」という用語と交換可能に使用され得る)に対して、その対応するNBFは、集合の中の少なくとも1つのデータ記録がバケットiへと挿入される場合は要素i=1を有し、それ以外の場合は0に等しい。本明細書のセクションDにおいて説明されたリキッドリージョン技法は、piが指数分布に基づいて決定されるようなADBFの場合であり得ることに留意されたい。
このセクションにおいて説明されるBLIP技法は、差分プライバシーが保たれ得る。具体的には、ADBF+BLIPは、生のNBFの各バケットを反転させることによって得られる。同じ確率pで、二進の0が二進の1に反転されてもよく、二進の1が二進の0に反転されてもよい。いくつかの実装形態では、二進の0の値は確率pで二進の1に反転されてもよく、二進の1の値は確率qで二進の0に反転されてもよい。
ABDFスケッチの和集合の濃度は、このセクションにおいて本明細書で以下で説明される式(1)または(3)の根を見つけることによって推定され得る。この推定器は、たとえば、1つまたは複数のアグリゲータコンピューティングデバイス410または1つまたは複数のワーカーコンピューティングデバイス405によって実行され得る。このセクションにおいて説明される推定器技法は、均一であるものとしての、および指数関数的であるものとしての特別な分布に対する閉形式の解(近似を伴う)を有することができ、以前のセクションにおいて説明された均一なブルームフィルタおよび指数ブルームフィルタの既存の推定量を包含する。ビットの任意の確率分布に対して、この推定量は閉形式の解を有しないことがあるが、本明細書において説明されるコンピューティングデバイスによって数値的に解かれ得る。推定器は、推定器を実行するコンピューティングデバイス(たとえば、ワーカーコンピューティングデバイス405、アグリゲータコンピューティングデバイス410など)のメモリからの一連の調節パラメータを含み、またはそれを取り出すことができる。濃度推定量の分散を最小にするための最適なパラメータが、本明細書において以下で導出され説明される。
本明細書において説明される1つまたは複数のコンピューティングデバイスによって実行され、実施され、または別様に行われる推定器は、無ノイズADBFスケッチ(たとえば、ノイズが組み込まれていないADBFスケッチなど)を重複排除することができる。無ノイズADBFスケッチを統合するとき、和集合のADBFはb=[b1,b2,…,bk]と表記されることがわかる。1≦i≦kに対して、和集合からの少なくとも1つのデータ記録がそのバケットにマッピングされる場合はbi=1であり、それ以外の場合は0に等しい。b1,b2,…,bkからの和集合を推定するための、モーメント法が使用され得る。piは、いずれかのデータ記録がバケットiへとマッピングされる確率を表記するために使用されることを思い出されたい。uの和集合濃度を考慮すると、u個のデータ記録のいずれもがバケットiの中にない確率は(1-pi)uに等しい。すなわち、P(bi=0)=(1-pi)uであるので、E(bi=1|u)=1-(1-pi)uである。したがって、全体の1の数は期待値
である。したがって、観測されるbiを代入して、次の式を逆に解くことによって、uの推定値を得ることができる。
式1:
統計用語を使用すると、これは、「統計
に基づいて、ビット確率分布pi(1≦i≦m)のもとでのuのモーメント推定量」と呼ばれ得る。一般的な分布pi(1≦i≦m)に対して、推定量は閉形式の解を有しないことがある。しかしながら、均一な分布および指数分布などのいくつかの分布に対しては、推定量は、本明細書の以前のセクションにおいて上で説明された推定量と正確に一致する近似解を有し得る。
当技術分野において知られているように、xが無限大に近づくと、式
はe-1に向かう。したがって、各piが十分小さい(たとえば、非常に小さいが0ではないなど)とき、
はほぼe-1であり、そして(1-pi)uはほぼexp(-piu)である。この近似により、式(1)は式(2):
へと簡略化され得る。ここで
はブルームフィルタの中の1の数である。
均一なブルームフィルタに対して、各pi=1/kであり、そして式(2)の解は
である。
その式は、均一なブルームフィルタに対する和集合の推定量であり得る。
指数一般化ブルームフィルタに対して、各pi=-cln(i/k)であり、ここでcは正規化定数である。kが十分大きいとき、
であり、ここで積分は部分積分を介して解くことができる。したがって、exp(-piu)=exp[(1/k)ln(i/k)u]=(i/k)u/kであり、そして
である。
この場合、式(2)はk/(u/k+1)=k-yへと簡略化され、すなわちu/k+1=k/(k-y)であり、これはu=ky/(k-y)=y/(1-y/k)を与える。これは式(3)において与えられる解であり得る。
双曲線一般化ブルームフィルタに対して、各
であり、ここでaはあらかじめ指定された率であり、cは正規化定数である。kが十分に大きいとき、
である。
b=cu=[1-exp(-a)]u/(ak)と表記すると、
であり、そして
であり、ここで
は指数積分関数である。したがって、式(2)は
へと簡略化され、Ei関数の実装形態を使用すると、bの根を解くことができる。そして、uの値はu=abk/[1-exp(-a)]と推定され得る。
上記の導出を要約すると、式(1)はビット分布pi(1≦i≦m)のもとでの和集合の推定の概略を与える。推定量は、統計の期待値
に基づくモーメント法に基づいて、取得または導出され得る。推定量は、均一なADFおよび指数ADFに対する少なくとも近似形の解を有し、こうして取得または導出される近似形は、本明細書のセクションA~Dにおいて上で説明された推定量であり得る。
cが正規化定数である、ビットの別の分布のもとでのADBFであるpi=c(i/k)。この分布では、ビット確率は、ビットインデックスiの線形関数として減衰していてもよい。このADBFに対する閉形式の推定量も存在する。まず、kが十分大きいとき、正規化定数
である。これに従うと、
であり、a=2u/kである。したがって、式(2)は
である場合に成立し得る。これは、uの超越関数であることがあり、閉形式の解を有しないことがある。それでも、これは数値的に解くことができ、それは、これがuの単調関数により与えられ得るからである。一般に、式(2)はuの単調関数によって与えられ得るので、二等分法を使用して解くことができる。
とりわけ、ワーカーコンピューティングデバイス405またはアグリゲータコンピューティングデバイス410によって実行される無ノイズADBFのための推定器は、biの各々に重みを加えることによってさらに拡張され得る。和集合の生のブルームフィルタがb=[b1,b2,…,bk]として表される場合の、和集合の推定を考える。上で説明された推定器は、全体のビットの期待値
間の関係を活用する。そのような実装形態では、最も確率の高いビットから最も確率の低いビットまで、1つ1つのビットが等しく重み付けられ得る。これは、不均一なブルームフィルタに対しては効率的ではないことがある。不均一なブルームフィルタを実装する技法では、最初のいくつかのビットに対する確率(pi)はすべてのビットの平均(1/k)よりはるかに高いことがあるが、最後のいくつかのビットに対する確率は平均よりはるかに低いことがある。したがって、ブルームフィルタスケッチが半分満たされているとき、最初のいくつかのビットは1に等しい可能性が高く、最後のいくつかのビットは0に等しい可能性が高い。そのような実装形態では、スケッチの両側のビットはほとんど情報を伝えないことがあるが、スケッチの中央のパターンは濃度推定(たとえば、基準リージョンの選択など)のための中心点であり得る。したがって、直和
ではなく加重和
のモーメントに基づく推定量は、濃度推定方式の正確さおよび柔軟性を改善することができ、これは他の濃度推定システムを上回る改善である。
E(bi)=1-(1-pi)uであるので、
に基づく方法のモーメントは、以下の式(3)の根としてuの推定値を与えることができる。
いくつかの実装形態では、重みwiは定数であり得る。重みを定数値として考えて、
かつ
であるものとする。したがって、上の式(3)はfw(u)=Bwと書き直すことができる。Bwはランダム変数であり得ることに留意されたい。実際には、ある仮定のもとでは、Bwは
の分散を伴う変数であり得る。この場合、Bwの分布がfw(u)=Bwの根の分布を決定できること(たとえば、u=fw
-1(Bw)など)を、デルタ法が示す。
Bwはランダム変数であってもよく、
かつ
であることに留意されたい。十分に大きいkを考えると、
であることに留意されたい。ここで、
は真の和集合を表記し得る。簡潔にするためにg=fw
-1と表記すると、デルタ法によって、
である。この分布において、θおよびσ2の値は上で説明され、g'(θ)=1/f'(g(θ))である。
上記を考慮すると、
Var(U)≒wTSw/(aTw)2
であり、ここで行列Sは、
・任意の1≦i≦kに対してSii=(1-pi)u-(1-pi)2u
・任意のi≠jに対してSij=(1-pi-pj)u-(1-pi)u(1-pj)u
であり、ベクトルaは各要素ai=ln(1-pi)(1-pi)uを有し得る。最適な重みベクトルは
w=S-1a
であってもよく、この重みのもとでは、Var(U)=(aTS-1a)-1である。
さらに、Var(U)=(aTS-1a)-1は、p=(p1,…,pk)の関数として最小化され得る。
それらのスケッチの差分プライバシーを維持するために、パブリッシャコンピューティングデバイス(たとえば、データ処理システム105A~Nなど)の各々は、所定の確率でいくつかのビットを反転させることができる。ノイズを追加するためにビットを反転させるプロセスは、本明細書では「ブリッピング」と呼ばれてもよく、確率的ビット反転を通じてノイズが導入されたスケッチは、「ブリッピングされた」ものとして言及されることがある。アグリゲータコンピューティングデバイス(たとえば、ワーカーコンピューティングデバイス405、アグリゲータコンピューティングデバイス410など)によって実装される推定器は、データ処理システム105によって生成される有ノイズ(たとえば、ブリッピングされた)ADBFスケッチの和集合の濃度を正確に計算するために、さらに拡張され得る。
データ処理システム105によって生成されるADBFはブリッピングされ得る。したがって、上で論じられたように、生のADBFに基づく推定量を直接適用することはできない。そのような実装形態では、アグリゲータコンピューティングデバイスは、和集合(たとえば、最後の2つのサブセクションにおけるbベクトルなど)の生のADBFを推定することができる。有ノイズブルームフィルタがc1,c2,…,csとして表され、ブリップ確率(たとえば、ADBFスケッチの中の任意の所与の「0」のビットが「1」に反転される確率、およびADBFスケッチの中の任意の所与の「1」のビットが「0」に反転される確率など)がpであると仮定すると、bベクトルは、アグリゲータコンピューティングデバイス(たとえば、ワーカーコンピューティングデバイス405、アグリゲータコンピューティングデバイス410など)によって、
として推定され得る。
推定されるbベクトルは、有ノイズ(たとえば、ブリッピングされた)スケッチの和集合サイズuを推定するために、本明細書において上で説明された式(1)または式(3)とともに使用され得る。
ノイズはさらに、分散を推定量に加え得る。ノイズにより、推定量の分散はwTSw/(aTw)2として表すことができ、ここでベクトルaはai=ln(1-pi)(1-pi)uとして表すことができ、行列Sは
として表すことができ、
は上記のベクトルである。
分散を取得し、次いで分散を最小にする最適な重みを取得するには、各
を取得することで十分である。しかしながら、そのような共分散はもはや、和集合リーチだけによって決定することはできない。それは、異なるADBF間の相関に依存し、そのような相関はベン図全体に依存する。
パブリッシャコンピューティングデバイス(たとえば、データ処理システム105など)の各々にわたる識別子(たとえば、データ記録)の多重集合の和にわたるノイズの分散の分析は、各データ処理システム105間のデータ記録の各集合の重複に基づいて変化し得る。異なるデータ処理システムのデータ記録間の分散の分析を助けるために、以下の表記を考える。
・nvは、v番目のデータ処理システム105(たとえば、データ処理システム105Vなど)から得られるADBFスケッチのデータ記録の濃度である。
・bv,iは、v番目のデータ処理システムから得られる無ノイズADBFのi番目のビットである。
・cv,iは、v番目のデータ処理システムからの有ノイズADBFのi番目のビットである(たとえば、cv,iは、一定の確率pでbv,iを反転させることによって取得される、など)
以下の式および導出は、多重集合の濃度の推定に分散がどのように影響するかを理解するのを助けることができる。和集合の推定されるADBF
は、
として定義されるi番目の元を有し得る。したがって、独立の濃度のシナリオのもとでは、
であり、ここで
であるので、
である。
を考え、ここで
である。
したがって、
である。
ここで、
を考え、
であり、ここで任意のデータ処理システムvに対して
である。それは、
であるからである。
であることを考える。
であることも考える。したがって、
である。まとめると、
である。まとめると、
である。まとめると、
であり、これは
に等しくてもよい。これは、推定量の不偏性と矛盾しない。まとめると、
である。
要約すると、以下が得られる。
これらの式からの分析に従うと、
である。領域が大きいことを考慮すると、
であり、u*は濃度の真の和集合である。
であることをさらに考慮する。領域が大きいことを考慮すると、
であり、これは無ノイズの場合の共分散と同じであり得る。
以下は、データ処理システム105A~N、ワーカーコンピューティングデバイス405A~N、アグリゲータコンピューティングデバイス410、クライアントデバイス120A~N、または本明細書において説明される任意の他のコンピュータデバイスのいずれかで実装され得る、アルゴリズムの実装形態および擬似コードを含む。さらに、データ処理システム105A~N、システム100、システム400A~Cのコンポーネントのいずれか、およびそれらの任意のコンポーネントが、このセクションにおいて詳述される機能のいずれをも実行することができる。
ADBFスケッチはmビットを有するように生成されると仮定する。均一なブルームフィルタ(たとえば、普通のブルームフィルタ)および指数ブルームフィルタ(たとえば、リキッドリージョンなど)についての0、1、…、m-1からのiに対する確率値piは、データ処理システム105によって生成される、またはネットワーク110を介して外部コンピューティングデバイス(たとえば、本明細書において説明される任意のコンピューティングデバイスなど)によって提供され、データ処理システム105、またはこのセクションにおいて説明される機能を実行する任意の他のコンピューティングデバイスのメモリに記憶される、所定の値であり得る。指数ブルームフィルタの実装形態では、簡潔にするためにkappa=1という値が使用され得るが、いくつかの実装形態では他の値が使用され得る。
それぞれのpiの値を生成する少なくとも1つの例示的な実装形態は、次の擬似コードにおいて以下で与えられる。
if method=='exponential':
p=-np.log((np.arange(bit_size)+1)/bit_size)
if method=='uniform':
p=np.ones(bit_size)
p=p/sum(p)
データ記録の任意の集合に対して、次の例示的な擬似コードによって記述されるように、正規化された値が計算されてADBFビット位置へと加算され得る。
#idを正規化された値へとマッピングする
values=hash64(ids)/2^64
#ビットに対する値の限界
bit_bounds=np.cumsum(p)
#値に対するビットインデックスを識別する
bit_indices=np.searchsorted(bit_bounds,values)
#各idに対するそれぞれのビットを設定する
ADBF=np.zeros(bit_size)
for i in bit_indices:
ADBF[i]=1
所与のADBFスケッチに対して、スケッチに追加されたユニークデータ記録の数が、スケッチの中の1のビットの数に基づいて推定され得る。これは、次の例示的な擬似コードによって記述される。
def_UniqueCountFromOnes(ones,bit_size,method):
if method=='exponential':
return ones/(1-ones/bit_size)
elif method=='uniform':
return np.log(1-ones/bit_size)/np.log(1-1/bit_size)
ノイズは、ビットを確率pで反転させることによって各スケッチに追加され得る。ビットが反転される確率pは、以前に説明された確率の割当てpiとは異なることに留意されたい。ADBFスケッチに対するランダムに反転されたビットは、それを差分プライバシーが保たれたものにすることができる。ビット反転プロセスは、次の例示的な擬似コードによって記述され得る。
#blip:反転の確率:1->0;および0->1
def Flip(ADBF,flip):
for i in np.arange(len(ADBF)):
if np.random.uniform()<flip:
ifADBF[i]==1:
ADBF[i]=0
else:
ADBF[i]=1
いくつかの実装形態では、上の実装形態は、「0」ビットを「1」ビットに反転する確率と、「1」ビットを「0」ビットに反転する確率を別々にすることを可能にするように拡張され得る。そのような実装形態が、次の例示的な擬似コードにおいて以下で示される。
def Flip(ADBF,flip0to1_prob,flip1to0_prob):
"""forループより効率的であり得る"""
num_bits=len(ADBF)
flip0to1=np.random.choice([True,False],size=num_bits,p=[flip0to1_prob,1-flip0to1_prob])
flip1to0=np.random.choice([True,False],size=num_bits,p=[flip1to0_prob,1-flip1to0_prob])
return ADBF*(1-flip1to0)+(1-ADBF)*flip0to1
確率pでビットが反転されることを通じてノイズが導入された所与のADBFスケッチに対して、スケッチに追加されたユニークデータ記録の数は、スケッチの中の1のビットの校正された数に基づいて推定され得る。これは、次の例示的な擬似コードによって示される。
def _UniqueCount(ADBF,blip=None,method='exponential'):
one_bits=sum(ADBF)
zero_bits=len(ADBF)-one_bits
bit_size=len(ADBF)
if blip:
q=1-blip
corrected_one_bits=(q*one_bits-blip*zero_bits)/(q-blip)
return _UniqueCountFromOnes(corrected_one_bits,bit_size,method)
以下の技法は、任意の数(たとえば、m個)のデータ処理システム105にわたるデータ記録の集合を重複排除するために、スライスの中のすべての0の数を計算することができる。スライスは、m個のパブリッシャにわたるビット位置に対するmビットベクトルであり得る。スライスがm個のデータ処理システムのすべての0のビットを有する場合、データ記録はこのスライスに寄与していない。目標は、ノイズの観測結果から、すべてが0のビットであるスライスの数を推定することである。そうすることの例示的な方法は、次の擬似コードにおいて以下で明示される。
def _ComputeOnesFromPubs(ADBFs,blip,verbose=False):
"""1の数を校正する"""
m=len(ADBFs)
#1つの1、2つの1、3つの1などのスライスに対するビット位置のカウントを計算する
sum_ADBF=functools.reduce(lambdaa,b:a+b,ADBFs.values())
unique_values,freq_count=np.unique(sum_ADBF,return_counts=True)
freqs=np.zeros(m+1)
freqs[[int(v)forvinunique_values]]=freq_count
q=1-blip
s=0
for k in np.arange(m+1):
s+=np.power(q,m-k)*np.power(-blip,k)*freqs[k]
n0=s/np.power(q-blip,m)
return len(ADBFs[0])-n0
次いで、多くのデータ処理システムにわたってADBFスケッチを生成するために使用されるデータ記録の和集合が計算され得る。以下に含まれる例示的な擬似コードは、多くのデータ処理システムからの「ブリッピングされた」ADBFスケッチにわたるデータ記録の和集合を表すスケッチを決定および生成する少なくとも1つの方法を実施する。
def EstimateUnionADBFFromPubs(ADBFs,blip0to1_probs_arr,blip1to0_probs_arr):
"""各ADBFはnumpyアレイであり得る"""
num_pubs=len(ADBFs)
num_bits=len(ADBFs[0])
d_vector=np.ones(num_bits)
for j in range(num_pubs):
d_vector*=(-blip1to0_probs_arr[j]*ADBFs[j]+(1-blip1to0_probs_arr[j])*(1-ADBFs[j]))
return d_vector/np.prod(1-blip1to0_probs_arr-blip0to1_probs_arr)
以下は、このセクションおよび先行するセクションにおいて本明細書で説明された様々な確率的データ構造の重複排除された頻度を計算するために、本明細書において説明されるワーカーコンピューティングデバイスまたはアグリゲータコンピューティングデバイス(たとえば、ワーカーコンピューティングデバイス405、アグリゲータコンピューティングデバイス410など)によって使用可能な様々な実装形態およびプロセスの説明を含む。上で説明されたように、アグリゲータコンピューティングデバイス410またはワーカーコンピューティングデバイス405などのアグリゲータコンピューティングデバイスは、様々な識別子サーバ(たとえば、データ処理システム105A~Nなど)から1つまたは複数のデータ構造を受信することができる。これらのデータ構造の各々は、1つまたは複数の属性を含む識別子を表すことができる。それらの属性は、たとえば、それらの対話に割り当てられる、またはそれと関連付けられるデバイスによる、オンライン活動または対話を記述することができる。データ記録(たとえば、データ記録122など)は、それぞれのデータ処理システム105によって維持され得る。アグリゲータコンピューティングデバイス410またはワーカーコンピューティングデバイス405は、識別子サーバ(たとえば、データ処理システム105)から受信されたそれらのデータ構造の構築によって表される情報に基づいて、識別子の属性の頻度を計算することができる。本明細書において説明される計算され得る1つのメトリックは、多くの識別子サーバにわたって維持される識別子の頻度属性である。頻度は、たとえば、指定されたコンテンツの項目とのあるタイプのオンライン活動(たとえば、対話)を実行した、識別子の特定の群に対して計算され得る。本明細書において上で説明された方法などの、スケッチをアグリゲートする様々な方法または順序が以下に含まれる。
データ処理システム105によってアグリゲータコンピューティングデバイス410(または場合によってはワーカーコンピューティングデバイス405)に送信される各データ構造に寄与する識別子のリーチは、実質的に独立であることを、少なくとも1つの方法は仮定する。そのような方法は、データ処理システム105から受信されたデータ構造の逐次的な重複排除を実施することができ、以下の畳み込みプロセスを通じて説明されてもよく、ここでfiはi番目のデータ処理システムの頻度分布である。そのような実装形態では、頻度は、f1_2=(f1*f2)(k)などのように繰り返し決定されてもよく、ここでkは所望の頻度属性値(たとえば、コンテンツの特定の項目とk回以上対話したユニーク識別子の数など)である。頻度分布データ構造をアグリゲートすることを担うコンピューティングデバイスは、たとえば、各識別子サーバ(たとえば、データ処理システム105)からの頻度分布が決定されるまで、f1_2_3=(f1_2*f3)(k)などとなるようにプロセスを実行することができる。
そのような実装形態では、データ処理システム105の各々によって送信されるスケッチは、本明細書において上で説明されたようなアグリゲータコンピューティングデバイス410またはワーカーコンピューティングデバイス405によって逐次合成され得る。この方法の簡潔な説明を助けるために、以下の動作が、スケッチによって表されるデータ記録の集合に対する様々な集合演算を示すためにスケッチに関連して利用される。そのような演算は、積(∩)、和(∪)、または集合の差(\)を含み得る。
2つの識別子サーバ(たとえば、2つのデータ処理システム105)を考える。第1のデータ処理システム105はスケッチ{x1,…,xk-1,xk+}を送信し、第2のデータ処理システム105は{y1,…,yk-1,yk+}を送信する。各パブリッシャのすべてのスケッチが排反集合であるとすると、1+リーチのスケッチを得ることは簡単であり、たとえば
かつ
である。
次に、アグリゲータコンピューティングデバイス410またはワーカーコンピューティングデバイス405は、第1のデータ処理システム105および第2のデータ処理システム105から受信された2つのスケッチの和集合のリーチ頻度を推定することができる。
たとえば、1≦j<kに対して、頻度=jの和集合リーチは、intersect(x0,yj)およびintersect(x1,yj-1)、…、intersect(xi,yj-i)、…、intersect(xj-1,y1)、およびintersect(xj,y0)という積集合の推定に由来する(そしてそれらは排反である)。
intersect(x0,yj)およびintersect(xj,y0)に対して、x0またはy0はさらに分解される必要があり得る。たとえば、
intersect(x0,yj)=difference(yj,intersect(x1+,yj))
intersect(xj,y0)=difference(xj,intersect(xj,y1+))
である。
よって、頻度の濃度=jは
である。
頻度>=kに対して、頻度の和集合リーチは、次の積集合に由来する。
intersect(x0,yk+)
intersect(x1,yk-1),intersect(x1,yk+),
…
intersect(xk-2,y2),…,intersect(xk-2,yk-1), intersect(xk-2,yk+),=
intersect(xk-1,y1+\y1)
intersect(xk-1,y1),…,intersect(xk-1,yk-1),intersect(xk-1,yk+),=
intersect(xk-1,y1+)
intersect(x0,yk+)について、これはさらに
intersect(x0,yk+)=difference(yk+,intersect(x1+,yk+))
へと分解され得る。すべての区分的濃度推定が与えられると、k+リーチは、加算され、合成され、または別様に計算され得る。2つより多くのパブリッシャへと拡張することは、本明細書において上で説明されたように、スケッチを統合して、次いで第3の識別子サーバ(たとえば、データ処理システム105)を用いて重複排除を実行することを含み得る。統合動作は、たとえば、j=1:k-1に対して、
であり得る。
2つより多くのスケッチを統合するための少なくとも1つの他の方法は、Chow-Liuモデルに基づき得る。この方法は、たとえば、アグリゲータコンピューティングデバイス410またはワーカーコンピューティングデバイス405を含む、本明細書において説明されるコンピューティングデバイスのいずれによっても実施され得る。本明細書では、関数Rはリーチを示し、f1,…,fsは各データ処理システム105における各識別子の頻度を示す。したがって、
となる。
たとえば、
R(f1+f2+f3=3)
=R(f1=0,f2=0,f3=3)+R(f1=0,f2=3,f3=0)+R(f1=3,f2=0,f3=0)+R(f1=0,f2=1,f3=2)+R(f1=0,f2=2,f3=1)+R(f1=1,f2=0,f3=2)+R(f1=2,f2=0,f3=1)+R(f1=1,f2=2,f3=0)+R(f1=2,f2=1,f3=0)+R(f1=1,f2=1,f3=1)
R(f1=j1,f2=j2,…,fs=js)の形式の各項は、Chow-Liuモデルを使用して推定され得る。Chow-Liuモデル:
P(f1=j1,f2=j2,…,fs=js)=P(f1=j1)P(f2=j2|f1=j1)…P(fs=js|fs-1=js-1)=P(f1=j1)[P(f1=j1,f2=j2)/P(f1=j1)]…[P(fs-1=js-1,fs=js)/P(fs-1=js-1)]
これは、次のことを示唆する。
R(f1=j1,f2=j2,…,fs=js)=R(f1=j1)R(f2=j2|f1=j1)…R(fs=js|fs-1=js-1)=R(f1=j1)[R(f1=j1,f2=j2)/R(f1=j1)]…[R(fs-1=js-1,fs=js)/R(fs-1=js-1)]
これは、識別子サーバの線形木s 1→2→…→sのもとでのChow-Liuモデルであり得る。マージナルリーチおよび二者積集合が上の式に関わる。したがって、各識別子サーバlが、fl=jlであるすべての識別子および属性(本明細書では「id」と呼ばれることがある)を知ると、それらは、これらのidのデータ構造を表す暗号化または処理されたデータ構造を送信することができ、次いで、式(1)のすべての項が、本明細書において上で説明され以下で説明される推定量を使用して取得され得る。任意のjl≧1に対して、fl=jlであるidは、データ記録122から識別され得る。しかしながら、各データ処理システム105は、頻度=0であるすべてのidを知らないことがある。データ処理システム105は、データ記録の共通のリストを共有しないことがある。データ処理システム105Aによって維持されるデータ記録122ですらない記録は、データ処理システム105Aにおいて頻度=0としても割り当てられるべきであるが、データ処理システム105Aは、それらのidを表すデータを維持または保有しないことがある。
この問題は、R(f1=0,f2=j)=R(f2=j)-R(f1≧1,f2=j)であることに留意することによって対処することができる。f1≧1を表すデータ構造を取得することができるので、j≠0であるときは常に、R(f1≧1,f2=j)を推定することができる。
j1、j2、…、jsの中に複数の0がある場合、0のjと0ではないjを分離することができる。j1,j2,…,jr=0であり、一方でjr+1,jr+2,…js>0であると仮定する。線形木1→2→…→sのChow-Liuモデルは、
P(f1=j1,f2=j2,…,fs=js)=P(f1=…=fr=0)P(fr+1=jr+1|fr=0)P(fr+2=jr+2|fr+1=jr+1)…P(fs=js|fs-1=js-1)=P(f1=…=fr=0,fr+1=jr+1)P(fr+2=jr+2|fr+1=jr+1)…P(fs=js|fs-1=js-1)=[P(fr+1=jr+1)-P(f1+…+fr≧1,fr+1=jr+1)]P(fr+2=jr+2|fr+1=jr+1)…P(fs=js|fs-1=js-1)
であることを述べる。
そして、
R(f1=j1,f2=j2,…fs=js)=[R(fr+1=jr+1)-R(f1+…+fr≧1,fr+1=jr+1)]×[R(fr+2=jr+2,fr+1=jr+1)/R(fr+1=jr+1)]×…×[R(fs=js,fs-1=js-1)/R(fs-1=js-1)]
である。
したがって、jr+1,jr+2,…js>0が関与する項は、fr+1=jr+1,…からfs=jsまでを表すデータ構造を使用して計算され得る。これらは、最初を除くすべての項である。最初の項R(fr+1=jr+1)-R(f1+…+fr≧1,fr+1=jr+1)は、2つの集合A={fr+1=jr+1}およびB={f1+…+fr≧1}の重複解除である。これらの2つの集合を重複解除するために、データ処理システム105Aによって送信されるデータ構造は、データ処理システム105r+1に直接由来する。一方、集合Bのデータ構造の表現は、f1≧1、f2≧1、fr≧1までを表すデータ構造を統合することによって推定され得る。したがって、R(f1=j1,f2=j2,…,fs=js)が推定され得る。この方法の例示的で非限定的な実装形態は、次の例示的な擬似コードにおいて以下で説明される。
freq_combinations=FindCombinations(frequency_target,num_servers)
#我々の表記を使用する、これはj1,j2,...,jsのすべての組合せを見つけるためである
target_freq_reach=0
for freq_combination in freq_combinations:
zero_servers,nonzeros_servers=FindZeros(freq_combination)
#zero_serversおよびnon_zeros_seversはそれぞれj=0およびj>0であるサーバのインデックスリストである
data_structure_to_dedup_with=np.zeros(num_buckets)
for server_index in zero_servers:
data_structure_to_dedup_with=Merge(data_structure_to_dedup_with,GetOnePlusData_structure(server_index))
#そして頻度が0ではない最初のパブリッシャとの重複を排除する
first_nonzero_server_index=nonzeros_servers[0]
data_structure_firstnon_zero_server=GetData_structureAtCertainFreq(first_nonzero_server_index,freq_combination)
intersection=sum(Data_structure_first_nonzero_server)-EstimateOverlap(data_structure_to_dedup_with,data_structure_first_non_zero_server)
#そして式(2)においてR(fr+2=jr+2,fr+1=jr+1)/R(fr+1=jr+1)からR(fs=js,fs-1=js-1)/R(fs-1=js-1)まで乗じる
for server_index in remaining_nonzero_servers:
overlap_rate=EstimateOverlap(previous_data_structure,current_data_structure)
intersection*=overlap_rate
target_freq_reach+=intersection
return target_freq_reach
#R(f1+f2++fs=k)の最終的な推定
差分プライバシーは、たとえば、本明細書において上で説明された差分プライバシーベースの方法のいずれかを使用してもたらされ得る。たとえば、データ処理システム105の各々は、本明細書において上で説明されたように、それぞれのデータ処理システム105によって送信されるk+1個のスケッチに差分プライベートノイズを追加することができる。
本明細書において説明される主題および動作の実装形態は、デジタル電子回路において、または、本明細書およびそれらの構造的均等物において開示される構造を含む、有形媒体、ファームウェア、もしくはハードウェアで具現化されるコンピュータソフトウェアにおいて、または、それらの1つまたは複数の組合せにおいて実装され得る。本明細書において説明される主題の実装形態は、データ処理装置による実行のために、またはデータ処理装置の動作を制御するために、コンピュータ記憶媒体に符号化される1つまたは複数のコンピュータプログラム、すなわち、コンピュータプログラム命令の1つまたは複数のコンポーネントとして実装され得る。プログラム命令は、データ処理装置による実行のために適切な受信機装置への送信のための情報を符号化するように生成される、人工的に生成された伝播信号、たとえば機械で生成された電気信号、光信号、または電磁信号で符号化され得る。コンピュータ記憶媒体は、コンピュータ可読記憶デバイス、コンピュータ可読記憶基板、ランダムもしくはシリアルアクセスメモリアレイもしくはデバイス、またはこれらの任意の組合せであってもよく、またはそれらに含まれてもよい。その上、コンピュータ記憶媒体は伝播信号ではないが、コンピュータ記憶媒体は、人工的に生成される伝播信号において符号化されるコンピュータプログラム命令のソースまたはデスティネーションを含み得る。コンピュータ記憶媒体はまた、1つまたは複数の別個の物理的なコンポーネントまたは媒体(たとえば、複数のCD、ディスク、フラッシュメモリ、ソリッドステートメモリ、または他のストレージデバイス)であってもよく、またはそれらに含まれてもよい。
本明細書において開示される特徴は、ラップトップコンピュータもしくは他のパーソナルコンピュータ、スマートフォン、他の携帯電話、ハンドヘルドコンピュータ、タブレットPC、または他のコンピューティングデバイス上で実装され得る。
本明細書において説明される動作は、1つまたは複数のコンピュータ可読記憶デバイスに記憶されている、または他のソースから受信されるデータに対して、データ処理装置によって実行される動作として実施され得る。
「データ処理装置」、「データ処理システム」、「ユーザデバイス」、「クライアントデバイス」、「ワーカーデバイス」、「ワーカー」、「ワーカーコンピューティングデバイス」、「パブリッシャ」、または「コンピューティングデバイス」という用語は、プログラマブルプロセッサ、コンピュータ、システムオンチップ、または前述のものの複数もしくは組合せを例として含む、データを処理するためのすべての種類の装置、デバイス、および機械を包含する。装置は、専用論理回路、たとえばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)を含み得る。装置はまた、ハードウェアに加えて、対象のコンピュータプログラムのための実行環境を作成するコード、たとえば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、クロスプラットフォームランタイム環境、仮想マシン、またはこれらの任意の組合せを含み得る。装置および実行環境は、ウェブサービス、分散型コンピューティングインフラストラクチャ、およびグリッドコンピューティングインフラストラクチャなどの、様々な異なるコンピューティングモデルインフラストラクチャを実現することができる。
コンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプト、またはコードとしても知られている)は、コンパイル型言語もしくはインタプリタ型言語、宣言型言語、関数型言語、または手続型言語を含む、任意の形式のプログラミング言語で書かれてもよく、スタンドアロンプログラムとして、または、モジュール、コンポーネント、サブルーチン、オブジェクト、もしくはコンピューティング環境において使用するのに適した他のユニットとしてを含めて、任意の形式で展開され得る。コンピュータプログラムは、ファイルシステムの中のファイルに対応し得るが、そうである必要はない。プログラムは、他のプログラムまたはデータを保持するファイルの一部分に(たとえば、マークアップ言語ドキュメントに記憶されている1つまたは複数のスクリプト)、対象のプログラムに専用の単一のファイルに、または複数の協調したファイル(たとえば、1つまたは複数のモジュール、サブプログラム、またはコードの部分を記憶するファイル)に記憶され得る。コンピュータプログラムは、1つの場所に位置する、または複数の場所に分散しており通信ネットワークによって相互接続される、1つのコンピュータまたは複数のコンピュータ上で実行されるように展開され得る。
本明細書において説明される処理および論理フローは、入力データに対して作用し出力を生成することによって活動を実行するための1つまたは複数のコンピュータプログラムを実行する1つまたは複数のプログラマブルプロセッサによって実行され得る。専用論理回路、たとえばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)によって、プロセスおよび論理フローは実行されてもよく、それらとして装置は実装されてもよい。
コンピュータプログラムの実行に適したプロセッサは、例として、汎用マイクロプロセッサと専用マイクロプロセッサの両方、および任意の種類のデジタルコンピュータの任意の1つまたは複数のプロセッサを含む。一般に、プロセッサは、読取り専用メモリまたはランダムアクセスメモリまたは両方から、命令およびデータを受信する。コンピュータの要素は、命令に従って活動を実行するためのプロセッサと、命令およびデータを記憶するための1つまたは複数のメモリデバイスとを含む。一般に、コンピュータは、データを記憶するための1つまたは複数の大容量記憶デバイス、たとえば、磁気ディスク、磁気光学ディスク、フラッシュメモリ、ソリッドステートドライブ、もしくは光学ディスクも含み、または、それらからデータを受け取り、もしくはそれらにデータを移し、もしくはそれらの両方を行うように動作可能に結合される。しかしながら、コンピュータはそのようなデバイスを有する必要はない。その上、コンピュータは、別のデバイス、たとえば携帯電話、携帯情報端末(PDA)、モバイルオーディオもしくはビデオプレーヤ、ゲームコンソール、全地球測位システム(GPS)受信機、またはポータブルストレージデバイス(たとえば、ユニバーサルシリアルバス(USB)フラッシュドライブ)に組み込まれ得る。コンピュータプログラム命令およびデータを記憶するのに適したデバイスは、半導体メモリデバイス、たとえば、EPROM、EEPROM、およびフラッシュメモリデバイス、磁気ディスク、たとえば、内部ハードディスクまたはリムーバブルディスク、磁気光学ディスク、ならびにCD-ROMディスクおよびDVD-ROMディスクを例として含む、すべての形式の不揮発性メモリ、媒体、およびメモリデバイスを含む。プロセッサおよびメモリは、専用論理回路によって補完され、または専用論理回路に組み込まれ得る。
ユーザとの対話を可能にするために、本明細書において説明される主題の実装形態は、ユーザに情報を表示するための表示デバイス、たとえばCRT(陰極線管)、プラズマ、またはLCD(液晶ディスプレイ)モニタ、ならびに、ユーザがそれによって入力をコンピュータに与えることができるキーボードおよびポインティングデバイス、たとえば、マウスまたはトラックボールを有する、コンピュータ上で実装され得る。他の種類のデバイスもユーザとの対話を可能にするために使用されてもよく、たとえば、ユーザに提供されるフィードバックは、任意の形式の感覚フィードバック、たとえば視覚フィードバック、可聴フィードバック、または触覚フィードバックを含んでもよく、ユーザからの入力は、音響入力、発話入力、または触覚入力を含む、任意の形式で受け取られてもよい。加えて、コンピュータは、ユーザによって使用されるデバイスに文書を送信し、それから文書を受信することによって、たとえば、ウェブブラウザから受信された要求に応答してユーザのクライアントデバイス上のウェブブラウザにウェブページを送信することによって、ユーザと対話することができる。
本明細書において説明される主題の実装形態は、バックエンドコンポーネントを、たとえばデータサーバとして含む、または、ミドルウェアコンポーネント、たとえばアプリケーションサーバを含む、または、フロントエンドコンポーネント、たとえば、ユーザがそれを通じて本明細書において説明される主題の実装形態と対話することができるグラフィカルユーザインターフェースまたはウェブブラウザを有するクライアントコンピュータ、または、1つまたは複数のそのようなバックエンドコンポーネント、ミドルウェアコンポーネント、もしくはフロントエンドコンポーネントの任意の組合せを含む、コンピューティングシステムにおいて実装され得る。システムのコンポーネントは、任意の形式または媒体のデジタルデータ通信、たとえば、通信ネットワークによって相互接続され得る。通信ネットワークの例は、ローカルエリアネットワーク(「LAN」)およびワイドエリアネットワーク(「WAN」)、インターネットワーク(たとえば、インターネット)、およびピアツーピアネットワーク(たとえば、アドホックピアツーピアネットワーク)を含む。
データ処理システム105などのコンピューティングシステムは、クライアントおよびサーバを含み得る。たとえば、データ処理システム105は、1つまたは複数のデータセンターまたはサーバファームの中の1つまたは複数のサーバを含み得る。クライアントおよびサーバは一般に、互いに離れており、典型的には通信ネットワークを通じて対話する。クライアントとサーバの関係は、それぞれのコンピュータ上で実行され互いにクライアントとサーバの関係を有するコンピュータプログラムによって生じる。いくつかの実装形態では、サーバは、データ(たとえば、HTMLページ)をクライアントデバイスに(たとえば、クライアントデバイスと対話するユーザにデータを表示し、そのユーザからユーザ入力を受け取る目的で)送信する。クライアントデバイスにおいて生成されるデータ(たとえば、ユーザ対話の結果)は、サーバにおいてクライアントデバイスから受信され得る。
本明細書は多くの特定の実装形態の詳細を含むが、これらは、任意の実装形態の範囲に対する制約として、または特許請求され得るものの範囲に対する制約として解釈されるべきではなく、むしろ、本明細書において説明されるシステムおよび方法の特定の実装形態に特有の特徴の説明として解釈されるべきである。別個の実装形態の文脈で本明細書において説明されるいくつかの特徴は、単一の実装形態において組合せでも実装され得る。逆に、単一の実装形態の文脈で説明される様々な特徴が、複数の実装形態において別々に、または任意の適切な部分組合せでも実装され得る。その上、特徴はいくつかの組合せで機能するものとして上で説明されることがあり、最初にそのように特許請求されることすらあるが、特許請求される組合せからの1つまたは複数の特徴が組合せから除外されてもよく、特許請求される組合せは部分組合せまたは部分組合せの変形を対象とすることがある。
同様に、動作は特定の順序で図面において示されるが、これは、望ましい結果を達成するために、そのような動作が示される特定の順序または逐次的な順序で実行されること、またはすべての示される動作が実行されることを要求するものとして理解されるべきではない。いくつかの場合、特許請求の範囲において記載される活動は、異なる順序で実行されてもよく、それでも望ましい結果を達成することができる。加えて、添付の図面において示されるプロセスは、望ましい結果を達成するために、示される特定の順序、または逐次的な順序を必ずしも必要としない。
いくつかの状況では、マルチタスキングおよび並列処理が有利であり得る。その上、上で説明された実装形態における様々なシステムコンポーネントの分離は、すべての実装形態においてそのような分離を必要とするものとして解釈されるべきではなく、説明されるプログラムコンポーネントおよびシステムは一般に、単一のソフトウェア製品へと一緒に統合されてもよく、または複数のソフトウェア製品へとパッケージングされてもよいことを理解されたい。たとえば、データ処理システム105は、単一のモジュール、1つまたは複数の処理モジュールを有する論理デバイス、1つまたは複数のサーバ、またはクラウドコンピューティング環境の一部であり得る。
いくつかの例示的な実装形態を説明したが、例として提示された前述のことは例示的であり限定的ではないことが明らかである。具体的には、本明細書において提示された例の多くが、方法の活動とシステム要素の特定の組合せに関わり、それらの活動およびそれらの要素は、同じ目的を達成するために他の方法で組み合わせられてもよい。1つの実装形態のみに関連して論じられる活動、要素、および特徴が、他の実装形態において同様の役割から除外されることは意図されない。
本明細書において使用される語法および用語は、説明を目的としており、限定するものとして見なされるべきではない。「含む」「備える」「有する」「含有する」「関与する」「によって特徴付けられる」「という点で特徴付けられる」および本明細書におけるそれらの変形の使用は、その後に列挙される項目、それらの均等物、および追加の項目、ならびに、その後に列挙される項目からなる代替の実装形態を排他的に包含することが意図される。一実装形態では、本明細書において説明されるシステムおよび方法は、説明される要素、活動、もしくはコンポーネントのうちの1つ、1つより多くの組合せ、またはすべてからなる。
本明細書において単数形で言及されるシステムおよび方法の実装形態または要素または活動に対するどのような言及も、複数のこれらの要素を含む実装形態を受け入れてもよく、本明細書における複数形でのどのような実装形態または要素または活動に対するどのような言及も、単一の要素しか含まない実装形態を受け入れてもよい。単数形または複数形での言及は、ここで開示されるシステムまたは方法、それらのコンポーネント、活動、または要素を、単数または複数の構成に限定することは意図されない。任意の情報、活動、または要素に基づくものとしての、任意の活動または要素への言及は、活動または要素が任意の情報、活動、または要素に少なくとも一部基づくような実装形態を含み得る。
本明細書において開示される任意の実装形態が、任意の他の実装形態と組み合わせられてもよく、「ある実装形態」「いくつかの実装形態」「代替的な実装形態」「様々な実装形態」「一実装形態」などへの言及は、必ずしも相互に排他的ではなく、実装形態に関連して説明される特定の特徴、構造、または特性が、少なくとも1つの実装形態に含まれ得ることを示すことが意図される。本明細書において使用されるそのような用語は、すべてが必ずしも同じ実装形態を指すとは限らない。本明細書において開示される態様および実装形態と矛盾しない任意の方式で、任意の実装形態が任意の他の実装形態と包摂的または排他的に組み合わせられ得る。
「または」への言及は、「または」を使用して説明されるあらゆる用語が、説明される用語のうちの1つ、1つより多く、およびすべてのいずれをも示し得るように、包摂的であるものとして解釈され得る。
図面、詳細な説明、またはあらゆる請求項における技術的な特徴の後に参照符号がある場合、参照符号は、図面、詳細な説明、および特許請求の範囲の理解度を高めるためだけに含まれている。したがって、参照符号も、参照符号がないことも、請求項の要素の範囲を限定する効果を有しない。
本明細書において説明されるシステムおよび方法は、それらの特性から逸脱することなく、他の特定の形式で具現化され得る。本明細書において提供される例は、情報リソースのコンテンツの表示を制御することに関係するが、本明細書において説明されるシステムおよび方法は他の環境に適用されることを含み得る。前述の実装形態は、説明されるシステムおよび方法の限定ではなく例示である。したがって、本明細書において説明されるシステムおよび方法の範囲は、前述の説明ではなく添付の特許請求の範囲によって示され、特許請求の範囲の均等性の意味および範囲内にある変化が本明細書において受け入れられる。
上で説明されたシステムおよび方法は、1つまたは複数の製造物品、たとえば、コンピュータ可読媒体に記録される1つまたは複数のコンピュータプログラムにおいて命令として提供され得ることを理解されたい。製造物品は、フロッピーディスク、ハードディスク、CD-ROM、フラッシュメモリカード、PROM、RAM、ROM、または磁気テープであり得る。一般に、コンピュータプログラムは、LISP、Perl、Python、C、C++、C#、PROLOGなどの任意のプログラミング言語、またはJAVA(登録商標)などの任意のバイトコード言語で実装され得る。ソフトウェアプログラムは、オブジェクトコードとして1つまたは複数の製造物品に記憶され得る。
方法およびシステムのいくつかの実施形態を説明したが、これで、本開示の概念を組み込む他の実施形態が使用され得ることが、当業者に明らかになるであろう。したがって、本開示は、いくつかの実施形態に限定されるべきではなく、むしろ、以下の請求項の趣旨および範囲だけによって限定されるべきである。