様々な図面における同様の参照記号は、同様の要素を示す。
本明細書の実施形態は、各々が非同期の状態を有する複数のクライアントデバイスが、サービスプロバイダによって管理される信頼されていない(アントラスト)メモリに記憶されているデータブロックを秘匿的に取り出すことを可能にするシングル‐サーバ非公開情報検索(PIR)ルーチンに向けられている。アントラストメモリは、クライアントデバイスがアクセスできるクラウド環境で実行される分散ストレージシステムのストレージ資源を含んでもよい。アントラストメモリに記憶されているデータブロックは、公に知られており、かつ、暗号化されていない(例えば、プレーンテキスト)。したがって、独立したストレージ(例えば、非同期の状態)を有する複数のクライアントデバイスを備えたシングル‐サーバのPIRルーチンは、アントラストメモリから、公に知られ、かつ、暗号化されていないデータアクセスのパターンを効果的に隠す。1つの例では、ストレージ資源(例えば、アントラストメモリ)を管理するサービスプロバイダは、クライアントデバイスに提供するための機械学習モデルを生成してもよい。ここで、サーバプロバイダは、生成された機械学習モデルをストレージ資源上のデータブロックとして記憶してもよく、クライアントデバイスは、クライアントに関する非公開情報を使用して特定の機械学習モデルに対してクエリ照会することができる。シングル‐サーバのPIRルーチンは、機械学習モデルを提供するサービスプロバイダが、クライアントデバイスによって取り出された機械学習モデルを学習することを防ぐ。別の例では、出荷時設定へのリセットが行われているクライアントデバイスは、クライアントデバイスが企業グループまたは個人に関連付けられているかどうかを検査することがしばしばある。クライアントデバイスの製造元(またはクライアントデバイス上で実行されるオペレーティングシステムまたはその他のソフトウェアのプロバイダ)は、企業識別子と関連付けられているクライアント識別子のセットをプレーンテキストとして記憶することができる。クライアントデバイスが特定の企業グループに属している場合、出荷時設定へのリセットを完了するために追加の操作が必要になる場合がある一方で、クライアントデバイスが企業グループに属しない場合は、シングル‐サーバのPIRルーチンは、クライアントデバイスに関連付けられたクライアント識別子が製造元に決して漏洩されないことを確実にする。
非同期の状態は、アントラストメモリに記憶されたデータに対してクエリ照会を実行した後、クライアントデバイスが互いに独立して状態を更新できるようにするために、他のクライアントデバイスから独立したストレージを有する各クライアントデバイスを参照する。同様に、クライアントデバイスが状態を解放することを決定した場合、他のすべてのクライアントデバイスのクエリは、アントラストメモリを管理するサーバから隠されたままである。シングル‐サーバのPIRルーチンを構築し、後により効率的なオンラインクエリを提供するために、クライアントデバイスは、最初に非公開バッチ合計取得ルーチンを実行して状態を初期化し、その後、制約付き疑似ランダム区分け命令を実行し、これにより、クライアントデバイスがアントラストメモリに記憶されているデータブロックに対してクエリ照会を実行するときに、クライアントデバイスがアントラストメモリを管理するサービスへ固定のパーティションを通信することを可能にする。
図1および図2は、分配システム140上の公に知られ、かつ、暗号化されていないn個のデータブロック(B)102を記憶するための例示的なシステム100であって、非同期の状態250を保持している複数のクライアントデバイス120,120a-nが、クライアントデバイス120によるデータブロック(B)102上の検索機能を維持しつつ、アクセスのパターンを秘密にしてデータブロック(B)を秘匿的に取り出す非公開情報検索(PIR)を使用することを可能にするシステム100を示す。つまり、クライアントデバイス120は、データブロック102を所有しておらず、データブロック102のコンテンツは、構成されて公に利用可能である。クライアント10に関連付けられているクライアントデバイス120(例えば、コンピュータ)は、ネットワーク130を通じてスケーラブル/エラスティックな非一時的な抽象化ストレージ150を有する分配システム140と通信する。クライアントデバイス120は、関連付けられているメモリハードウェア122および関連付けられているデータ処理ハードウェア124を含んでもよい。クライアントデバイス120の各々は、抽象化ストレージ150に記憶されているデータブロック(B)102に対して問い合わせるためのクエリ命令300を実行するとき、1以上のデータブロック(B)102を記憶するために関連付けられているメモリハードウェア122を活用して状態250を保持する。抽象化ストレージ150(例えば、ファイルシステム、データストア等)は、ストレージ資源114の上に重ねられ、1以上のクライアントデバイス120によるストレージ資源114のスケーラブルな使用を可能にする。
いくつかの実施形態では、分配システム140は、抽象化ストレージ150へのアクセスを管理するコンピューティングデバイス112(例えば、サーバ)を実行する。例えば、サーバは、データブロックを生成し、プレーンテキスト形式で抽象化ストレージ上に記憶し、クライアントデバイス120は、抽象化ストレージ150からデータブロック102をプレーンテキスト形式で取り出す。本例示は、ネットワーク130を通じて分配システム140に関連付けられているアントラスト(信頼されていない)側と通信するクライアントデバイス120に関連付けられているトラスト(信頼されている)側を有するシステム100を示すが、システム100は、代替的に、トラストコンピューティングデバイス(CPU)およびアントラストデータストレージを有する大規模イントラネットに実装されてもよい。分配システム140またはデータストレージに関連付けられているアントラスト側は、「honest-but-curious」として考慮されており、これは、コンピューティングデバイス112は、正直にプロトコルに従うが、分配システム140によって漏洩した情報を使用して追加的な洞察を得るためにいずれかの多項式時間乱択アルゴリズムを行う。
いくつかの実施形態では、分配システム100は、資源110,110a-zを含む。資源110は、ハードウェア資源およびソフトウェア資源を含む。ハードウェア資源110は、コンピューティングデバイス112(データ処理デバイスおよびデータ処理ハードウェアとしても参照される)または非一時的メモリ114(メモリハードウェアおよびストレージ資源としても参照される)を含んでもよい。ソフトウェア資源11は、ソフトウェアアプリケーション、ソフトウェアサービス、アプリケーションプログラミングインタフェース(API)またはこれに類するものを含んでもよい。ソフトウェア資源110は、ハードウェア資源110内に常駐してもよい。例えば、ソフトウェア資源110は、メモリハードウェア114内に記憶されてもよく、またはハードウェア資源110(例えば、コンピューティングデバイス112)は、ソフトウェア資源110を実行してもよい。
ソフトウェアアプリケーション(すなわち、ソフトウェア資源110)は、コンピューティングデバイスにタスクを実行させるコンピュータソフトウェアを参照する。いくつかの例では、ソフトウェアアプリケーションは、「アプリケーション」、「アプリ」、または「プログラム」として参照されてもよい。アプリケーションの例は、限定するものではないが、システム診断アプリケーション、システム管理アプリケーション、システムメンテナンスアプリケーション、ワード処理アプリケーション、スプレッドシートアプリケーション、メッセージングアプリケーション、メディアストリーミングアプリケーション、ソーシャルネットワーキングアプリケーション、およびゲーミングアプリケーションを含む。
メモリハードウェア114,122は、プログラム(例えば、命令のシーケンス)またはデータ(例えば、プログラムの状態情報)をコンピューティングデバイス112および/またはクライアントデバイス120(すなわち、クライアントデバイス120のデータ処理ハードウェア124)による使用のために一時的または永続的に記憶するために使用される物理的なデバイスであってもよい。メモリハードウェア114,122は、揮発的および/または不揮発的なアドレス可能な半導体メモリであってもよい。不揮発性メモリの例は、限定するものではないが、フラッシュメモリ、リードオンリーメモリ(ROM)/プログラム可能リードオンリーメモリ(PROM)/消去可能なプログラム可能リードオンリーメモリ(EPROM)/電気的に消去可能なプログラム可能リードオンリーメモリ(EEPROM)(例えば、ブートプログラム等のファームウェアに対して通常に使用される)を含む。揮発性メモリの例は、限定するものではないが、ディスクまたはテープと同様に、ランダムアクセスメモリ(RAM)、忘却型ランダムアクセスメモリ(ORAM)、ダイナミックアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、相変化メモリ(PCM)を含む。
ネットワーク130は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)および/またはインターネット等の様々なタイプのネットワークを含んでもよい。ネットワーク130は、長い範囲のネットワーク(例えば、インターネットまたはWAN)を表してもよいが、いくつかの実施形態では、ネットワーク130は、ローカルエリアネットワーク(LAN)等のより短い範囲のネットワークを含む。いくつかの実施形態では、ネットワーク130は、標準通信技術および/またはプロトコルを使用する。つまり、ネットワーク130は、イーサーネット(登録商標)、ワイヤレスフィディリティー(WiFi)(例えば、802.11)、ワールドワイドインターオペラビリティフォーマイクロウェーブアクセス(WiMax)、3G、ロングタームエボリューション(LTE)、デジタルサブスクライバーライン(DSL)、非同期転送モード(ATM)、インフィニバンド、PCIエクスプレスアドバンストスイッチング、ブルートゥース(登録商標)、ブルートゥースローエナジー(BLE)等の技術を使用したリンクを含むことができる。同様に、ネットワーク130に使用されるネットワーキングプロトコルは、マルチプロトコルラベルスイッチング(MPLS)、伝送制御プロトコル/インターネットプロトコル(TCP/IP)、ユーザデータグラムプロトコル(UDP)、ハイパーテキスト転送プロトコル(HTTP)、簡易メール転送プロトコル(SMTP)、ファイル転送プロトコル(FTP)等を含むことができる。ネットワーク130を通じたデータ交換は、ハイパーマックアップ言語(HTML)、拡張可能なマーク付け言語(XML)等を含む技術および/または形式を使用して表されることができる。加えて、リンクのすべてまたはいくつかは、セキュアソケットレイヤ(SSL)、転送レイヤセキュリティ(TLS)、仮想プライベートネットワーク(VPN)、インターネットプロトコルセキュリティ(IPsec)等の従来の暗号化技術を使用して暗号化されることができる。他の例では、ネットワーク130は、上述した技術に替えて、または、加えて、カスタムおよび/または専用のデータ通信技術を使用する。
データブロック102は、データの原子単位系に対応し、各々が、それぞれBバイトのサイズを有する。例えば、分配システム上のストレージに対するBの代表値は、64キロバイト(KB)から256バイト(B)であってもよい。nの表記は、ストレージ資源114に関連付けられ、および、PIRを使用して抽象化ストレージ150に記憶されているデータブロック102の数を表示する。n個のデータブロック(B)102の各々は、メモリハードウェア114に亘って重ねられている抽象化ストレージ150の対応するメモリ位置118,118a-n(図1B)に記憶されている。とりわけ、n個のデータブロック(B)102は、PIRストレージに関連付けられており、ここで、n個のデータブロック(B)102は、1以上のストレージ資源114に記憶され、および、暗号化されておらず、公に利用可能である。例えば、暗号化されていない、公のデータブロック(B)は、分配システム140によって生成された機械学習モデルに関連付けられ、および、クライアントデバイス120によってダウンロードのために入手可能であってもよい。
分配システム140の抽象化ストレージ150(例えば、データベース)によって記憶された公に知られているプレーンテキストのデータブロック120に対してより効率的なクエリ照会を提供するために、各クライアントデバイス120は、非公開バッチ合計検索(BSR)命令を実行することによって対応する状態250を初期化し、これによって、クライアントデバイス120は、クライアントデバイス120のメモリハードウェア122においてストレージのための抽象化ストレージ150からデータブロック120Oのc個の合計を計算する。ここで、計算されたc個の合計Oの各々は、対応するサブセットSの丁度k個のデータブロック120の合計を含む。いくつかの実施形態では、各クライアントデバイス120は、データブロック102のc個の合計O1,O2,...,OCの各々を計算する前に、ランダム置換(π1,π1,..,πk)を生成し、対応するサブセットS1,S2,...,SCにおけるk番目の各ブロックに対して適用する 。クライアントデバイス120は、後の時間においてデータブロック102に対してより効率的なクエリ照会を提供するために、停止期間(例えば、夜間)に状態250を初期化し、非公開BSR命令200を実行してもよい。しきい値の数のクエリ照会を行った後に、各クライアントデバイス120は、他のクライアントデバイス120の状態250とは独立したその状態250を他のクライアントデバイス120によるクエリ照会を妨げることなく再び初期化する。
クライアントデバイス120は、限定するものではないが、データベースのサイズ(例えば、データブロック102のnの数)、計算要件、および/または、帯域要件を含む1以上の要素に基づいて、様々な非公開BSR命令200を選択してもよい。例えば、非公開BSR命令200は、抽象化ストレージ150からすべてのn個のデータブロック102をクラス分けして、データブロックのc個の合計Oの各々を計算するための対応するc個のサブセットSに選択したデータブロック102を割り当てるクラス分け非公開BSR200a,200(図2A)を含んでもよい。他の例では、非公開BSR命令200は、データブロックOのc個の合計を計算するためにm個のデータブロック102を抽象化ストレージ150からダウンロードするバッチ非公開BSR命令200b,200(図2B)を含んでもよい。さらに他の例では、非公開BSR命令200は、抽象化ストレージ150をk個のバケットに区分けし、c個の合計を計算されるデータブロック102の各々のOのために、k個のバケットの各々からt個のデータブロックをダウンロードしてメモリハードウェア122上のストレージのために(すなわち、状態250内に)データブロック120の対応するOの合計を計算するバッチコード非公開BSR命令200c,200(図2C~図2E)を含んでもよい。一般的に、小さなサイズのデータベースに対しては、クラス分け非公開BSR命令200aが最も効率的である一方で、より大きなサイズのデータベースに対しては、バッチコード非公開BSR命令200cが最も効率的である。バッチ非公開BSR命令200bは、中程度の大きさのデータベースに対して最も効率的なクエリ照会を提供する。
状態250を初期化した後、クライアントデバイス120は、抽象化ストレージ200に記憶されているクエリブロックBqを秘匿的に取り出すためにクエリ命令300を実行する。ここで、クライアントデバイス120は、対応する状態250を繰り返し検索して、クエリブロックBqを含まないc個の合計Oの1つを識別する。クエリブロックBqを含まないc個の合計Oを識別するに際し、クライアントデバイス120は、n個のデータブロックの抽象化ストレージを疑似ランダムに区分けして各々がk+1個のデータブロックを含むn/(k+1)個のパーティション350にするよう命令する要求320を抽象化ストレージ150を管理しているサーバ(例えば、サーバ)160に対して送信してもよく、n/(k+1)個のパーティションの各々におけるk+1個のデータブロックを合計して、n/(k+1)個のパーティションの各々に対する対応する暗号化されたデータブロック合計302を決定する。n/(k+1)個のパーティションのパーティション350は、二次元配列を含んでもよい。有利には、区分け要求320は、n/(k+1)個のパーティションの1つの識別されたc個の合計Oを含む固定のパーティションを組み込んでもよく、ここで、識別されたc個の合計Oは、二次元配列のランダムな行(例えば、r番目の行)に組み込まれる。秘匿的に、サービス160は、クエリブロックBq(例えば、+1ブロック)と共に、データブロック102(すなわち、k個のデータブロック)の識別されたc個の合計Oに対する固定のパーティションを含む暗号化されたデータブロック合計302を返す。暗号化されたデータブロック合計302の受信に応答して、クライアントデバイス120は、(例えば、データ処理ハードウェア124を通じて)復号化し、暗号化されたデータブロック合計302をデータブロック102の識別されたc個の合計Oから減算し、クエリブロックBqを得る。つまり、命令300を実行することによって、クライアントデバイス120は、クライアントデバイス120による分配システム140に対して実行されたクエリ照会のシーケンスと共に、データブロック102のコンテンツを明らかにすることなく、データブロックBqを取り出すことができる。サービス160は、データ処理ハードウェア112において実行されてもよい。
図1Bを参照して、いくつかの実施形態において、分配ストレージシステム140は、緩く結合されたメモリホスト110,110a-z(例えば、コンピュータまたはサーバ)を含み、各々は、データをキャッシュするために使用されてもよいストレージ資源114(例えば、メモリハードウェア、メモリハードウェア、フラッシュメモリ、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)および/またはディスク)と通信するコンピューティング資源112(例えば、1以上のプロセッサまたは中央処理装置(CPU))を有する。抽象化ストレージ150は、ストレージ資源114の上に重ねられてストレージ資源114の1以上のクライアントデバイス120,120a-nによるスケーラブルな使用を可能にする。クライアントデバイス120は、ネットワーク130を通じて(例えば、遠隔手続き呼出し(RPC)を通じて)メモリホスト110と通信してもよい。コンピューティング資源112は、サービス160を実行してもよい。
いくつかの実施形態では、分配ストレージシステム140は、「シングル-サイド」であり、これは、クライアントデバイス120がデータブロック102に対してクエリ(q)を実行する命令300を実行したとき、クライアントデバイス120からのクエリに応答するための抽象化ストレージ150からデータブロック102を取り出すいかなるサービスジョブの必要性も省く。「シングル-サイド」は、メモリホスト110において処理される要求のほとんどに対してメモリホスト110のCPU112においてソフトウェアによって行われるよりもハードウェアにおいて行われる方法を参照する。シングル-サイド分配キャッシュシステムに関するさらなる概念および特徴は、ここで参照によりその全体を本明細書に援用する米国特許第9,164,702号において確認することができる。
分配システム140は、データブロック102を遠隔メモリホスト110(例えば、抽象化ストレージ200)のストレージ資源114(例えば、メモリハードウェア)の周辺で秘匿的に移動させ、ネットワークインターフェイスコントローラ(NIC)116の機能を有するRPCを通じて、または、リモートダイレクトメモリアクセス(RDMA)を通じて、遠隔メモリホスト110からデータブロック102を取得する。ネットワークインターフェイスコントローラ116(ネットワークインタフェースカード、ネットワークアダプタ、またはLANアダプタとしても知られている)は、コンピューティングデバイス/資源112をネットワーク130に接続させるコンピュータハードウェア要素であってもよい。メモリホスト110a-zおよびクライアントデバイス120の両方は、各々がネットワーク通信のためのネットワークインタフェースコントローラ116を有してもよい。ハードウェア資源110の物理的なプロセッサにおいて実行される命令300は、メモリ114のリモートダイレクトメモリアクセス可能な領域/ロケーション118A-Nの1つのセットをネットワークインタフェースコントローラ116と共に登録する。各メモリロケーション118は、対応するデータブロック102を記憶するように構成される。
図2Aは、クライアントデバイス120上で実行され、各々の合計が丁度k個のデータブロックを含むデータブロック102のOのc個の合計を計算するためにPIR抽象化ストレージ114,150(例えば、抽象化ストレージ/データベース)のコンテンツ全体をクラス分けする、クラス分け非公開BSR命令200aの例を提供する。n個のデータブロック102のクラス分けを初期化するために、クライアントデバイス102は、ストリーム要求202をPIR抽象化ストレージ150を管理するサービス160に送信してもよい。n個のデータブロック102のすべてがクラス分けされるので、命令200aは、サーバ160に対してどのデータブロック102がクライアントデバイス120によってアクセスされたかを隠す必要がない。クライアントデバイス120は、クラス分けにおいて選択されたデータブロック102をデータブロック102のc個のサブセットの中からサブセットS1,S2,...,Scの対応するサブセットに対して割り当ててもよい。次いで、クライアントデバイス120は、対応するサブセットS1,S2,...,Scに割り当てられた選択されたk個のデータブロックを合計することによって、c個の合計O1,O2,...,Oc(例えば、出力)の各々を計算する。サブセットSの各々について、クライアントデバイス120は、サブセットSに含められているデータブロックB1,B2,...,Bkの各々に対して、対応するランダム置換をさらに適用してもよい。クライアントデバイスのメモリハードウェア122に記憶されているデータブロックの総数mは、サブセットSの総数cに各サブセットに割り当てられたデータブロックkの数を乗じたものに等しい。クラス分け非公開BSR命令200aは、クライアントデバイス120において帯域O(n),加算O(m),およびローカルメモリO(c)を使用してもよい。
図2Bは、クライアントデバイス120上で実行され、各々がk個のデータブロックを含む合計であるデータブロック102のOのc個の合計を計算するために丁度m個のデータブロックをPIR抽象化ストレージ114,150からダウンロードするダウンロード要求204をクライアントデバイス120に送信させるバッチ非公開BSR命令200bの例を提供する。したがって、クラス分け非公開BSR命令200bがPIR抽象化ストレージ114,150からすべてのn個のデータブロックをクラス分けする一方で、バッチ非公開BSR命令200bは、クライアント状態250のc個のサブセットSを組み立てるのに必要なm個のデータブロック102だけをダウンロードする。クライアントデバイスによってダウンロードされたデータブロックの数であるmは、データブロックの数kとデータブロックのOを合計した数であるcとの積に等しいので、命令200bは、丁度k個のデータブロックをデータブロック102のc個のサブセットの中からサブセットS1,S2,...,Scの対応するサブセットに対して割り当てる。次いで、クライアントデバイス120は、対応するサブセットS1,S2,...,Sc(例えば、入力)に割り当てられた選択されたk個のデータブロックを合計することによって、c個の合計O1,O2,...,Oc(例えば、出力)の各々を計算する。サブセットSの各々について、クライアントデバイス120は、サブセットSに含められているデータブロックB1,B2,...,Bkの各々に対して、対応するランダム置換をさらに適用してもよい。バッチ非公開BSR命令200bは、計算の帯域O(mlogn+λ+mB)およびO(n)を使用してもよい。
図2C~図2Eは、クライアントデバイス120上で実行され、n個のデータブロックのPIR抽象化ストレージ114,150をk個のバケット260へと区分け/分割/セグメント化し、クライアントデバイス120上のストレージのために計算されるデータブロック102のc個の合計Oの各々のためにt個のデータブロックをk個のバケット260の各々からダウンロードしてデータブロック102の対応する合計Oを計算するバッチコード非公開BSR命令200bの例を提供する。より小さなバケット260は、クライアントデバイス120がバッチコード非公開BSR命令200bの実行の間に状態250を初期化するとき、抽象化ストレージ150を小分けして帯域を増加させる。クライアントデバイス120によって区分けされた分配システム140におけるk個のバケット260の数は、保守および/または帯域要件に基づいて調整可能である。示す例では、抽象化ストレージ150のn個のデータブロック102は、4つのバケット260,260a―dに区分けされ、4つのバケット260,260a-dは、集合的にN(例えば、16)個のデータブロック102A-102Nを含む。さらに、k個のバケット260の各々の中のデータブロック102は、符号化関数を使用して暗号化される。
図2Cは、バッチコード262をサービス160に送信することによって命令200bを初期化し、これによって、サービス160に抽象化ストレージ150をk個のバケット250a-dへと区分けさせ、かつ、符号化関数を使用してすべてのk個のバケットに現れるN個のブロック102を符号化させるクライアントデバイスを示す。バッチコード262は、最大m個のアイテムを伴うサブセットSのいずれに対しても、k個のバケット260の各々における最大t個のアイテムを読み出すことによって、対応するサブセットSに割り当てられたブロックのセットが取り出されることを確実にする。ここで、実施形態は、tを1に等しく設定する。いくつかの例では、 バッチコード262は、カッコーバッチコードを含む。クライアントデバイス120は、データ処理ハードウェア124と通信している暗号化モジュール305を含み、バッチコード262を提供する。暗号化モジュール305は、データ処理ハードウェア124上で実行するソフトウェアを含むか、または、データ処理ハードウェア124と通信する分離したハードウェアを含んでもよい。例えば、図2Cは、第1および第2のサブセットS1,S2(例えば、cは2つのサブセットSに等しい)のための丁度k個のデータブロックを取り出すために初期化しているクライアントデバイス120の状態250をさらに示す。2つのサブセットのみが例として示されるが、他の例では、2つを超えるサブセットが含まれてもよい。
図2Dは、バッチコード非公開BSR命令200cを実行するに際し、第1のサブセットS1のためのk個のバケット260a-260dの各々からt個のデータブロック102をダウンロードするためにサービス260にPIR要求を送信するクライアントデバイス120を示す。示されていないが、クライアントデバイス120は、第2のサブセットS2に入力するためのk個のバケットの各々からt個のデータブロック102をダウンロードするために対応するPIR要求264も送信する。PIR要求264の受信に応答して、サービスは、k個のバケット260から取り出されたt個のデータブロック102の各々を暗号化して、第1のサブセットS1に関連付けられている対応する非公開情報検索結果r1,r2,r3,r4として記憶する。したがって、結果は、分配システム140のストレージ資源114上に記憶される。示される例では、tは、1に等しく、サービス160は、ブロック2をバケット1 260aからPIR結果r1としてランダムにダウンロードし、暗号化し、および、記憶し;ブロック7をバケット2 260bからPIR結果r2としてランダムにダウンロードし、暗号化し、および、記憶し;ブロック12をバケット3 260cからPIR結果r3としてランダムにダウンロードし、暗号化し、および、記憶し;ならびに、ブロック15をバケット4 260dからPIR結果r4としてランダムにダウンロードし、暗号化し、および、記憶する。
第1のサブセットS1のためのバケット260の各々からt個のデータブロック102をダウンロードするためにPIR要求304を送信した後、クライアントデバイスは、加法準同型暗号のベクトル266生成し、その加法準同型暗号のベクトル(e1,e2,e3,e4)266を分配システム140(例えば、抽象化ストレージ150)にアップロードする。いくつかの例では、計算される合計Oiがバケット260のi番目から合計Oiの一部としてブロック102を必要とする場合に限り、準同型暗号ejは、1の暗号であり、そうでない場合、準同型暗号ejは、ゼロ(0)の暗号である。加法準同型暗号のベクトル(e1,e2,e3,e4)266は、サービス160に、第1のサブセットS1に関連付けられている非公開情報検索結果r1,r2,r3,r4に対して加法準同型暗号のベクトル(e1,e2,e3,e4)266を使用して、加法準同型暗号計算268を実行させる。加法準同型暗号計算268は、データブロックの対応するc個の合計Oに対する暗号化テキスト値に対応する。加法準同型暗号は、サービス160に加法準同型暗号計算268を行わせ、これによって、k個のバケット260からダウンロードされた符号化された結果が合計され、よって、暗号化演算を行うことに関連する計算コストを軽減させる。示される例において、加法準同型暗号計算268は、ドット積演算を含む。次いで、サービス160は、対応するデータブロックのc個の合計O(例えば、図2Dの例における合計O1)に対する暗号化テキスト値をクライアントデバイス120に返し、クライアントデバイス120は、暗号化テキスト値を復号化してデータブロックのc個の合計O(例えば、図2Dの例における合計O1)をローカルのメモリハードウェア122上のストレージのために計算して、状態250を初期化する。この処理は、計算されるデータブロックのc個の合計Oの各々に対して繰り返される。
図3A~図3Cは、図2A~図2Eの非公開BSR命令200の実行を通じて状態150を初期化した後に抽象化ストレージ150からクエリブロックBqを取り出すクライアントデバイス120上で実行するクエリ命令300の例を提供する。図3Aは、クエリブロックBqを含まないc個の合計Oのうちの1つを識別するために、メモリハードウェア122に記憶されているデータブロック1-2のc個の合計Oの各々を繰り返し処理するクライアントデバイス120を示す。示される例では、3番目の合計O3がクエリブロックBqを含まないことを識別すると、クライアントデバイス120は、c個の合計Oを繰り返し処理することを中止する。合計O1,O2およびOcのすべてはクエリブロックqを含む。抽象化ストレージ150は、n個のデータブロック102,102a-nのデータベースを含む。本開示における抽象化ストレージ150のデータベースは、部分合計の効率的な構造、アイテムの更新、および効率的な値の選択を可能にする1からnのオーダーの整数のオンラインの部分合計データ構造を含んでもよい。
図3Bは、クエリブロックBqを含まないc個の合O(例えば、合計O3)を識別した後、鍵κのベクトルを生成(PRPartition.GenerateKey(n,k+1,S))するクライアントデバイス120を示す。図4Aは、鍵κのベクトルを生成するための例示的なアルゴリズム400aを提供する(PRPartition.GenerateKey(n,k+1,S))。クエリ命令200の実行の間にクライアントデバイス120によって生成された鍵κのベクトルは、アントラストストレージデバイスのn個のデータブロックを各々がk+1個のデータブロック102を含むn/k+1個のパーティション350へとランダムに区分けするための命令を含む。より詳細には、n/(k+1)個のパーティション350は、パーティションの1つが、クエリブロックBqを含まないデータブロックの識別されたc個の合計O(例えば、合計O3)を含む固定のパーティションである、制約付き疑似ランダムパーティションの2次元行列を含む。したがって、鍵κのベクトルは、抽象化ストレージ150および抽象化ストレージ150を管理しているサービス160から記憶していない態様で、クエリブロックBqを含まないデータブロックの識別されたc個の合計O(例えば、合計O3)に対応するサブセットS(例えば、サブセットS3)を固定のパーティションとしてパーティション350のr(ランダム)番目の行に埋め込む。有意には、クライアントデバイス120は、抽象化ストレージ150を区分けするための鍵κのベクトルをいずれの計算も必要とすることなく分配システム140においてローカルに生成してもよい。
クライアントデバイス120は、制約付き疑似ランダム区分けを実行するようにサービス160に命令して空間効率的な表現で所与のサイズのデータのランダムなサブセットのサンプリングを行う。つまり、鍵κのベクトルは、[n]個の整数(例えば、ランダム鍵/シードκおよびセット{F(κ,1),...,F(κ,k)}を使用して、データブロック102)の抽象化ストレージ150(例えば、データベース)内の置換の疑似ランダムファミリーを使用する。結果として、要求320は、サービス160に、[n]個の整数をk+1のサイズのn/(k+1)個のセットの整数に、各行が対応するパーティションを2次元行列として区分けさせる。2次元行列は、初期は、空であり疑似ランダム置換は、行を選択してランダムに選択された順序でサブセットS入力を埋め込む。[n]個の整数の残りの要素は、空の行列にランダムに分配されるべきである。n/(k+1)個のパーティションのうちの1つは、丁度k個のデータブロック102の入力サブセットSに固定される。この固定された入力サブセットSは、クライアントデバイス120のメモリハードウェア122上にローカルに記憶されたデータブロック102の計算されたc個の合計Oのうちの1つに対応する。とりわけ、CPP命令300の実行は、ピボット,...,ピボット+(n/k)-1において生成された置換のn/(k+1)個のパーティションのうちの1つが所望の固定のサブセットSの入力であるようにピボットを選択することによって、固定のサブセットSの入力がBSR命令によって以前に計算されたc個の合計Oのうちの1つに対応することを確実にする。したがって、サブセットSの固定の入力は、n/(k+1)個の指標における置換の計算に対応する。
いくつかの例では、固定の要素sに関連付けられているピボットを見つけるために、生成されたサブセットにおいてsが出現することを確実にするように、ピボットは、π-1(s)-rに設定されてもよく、このとき、rは、{0,...,(n/k)-1}からランダムに一様に選択される。固定の要素の周辺において生成されたサイズ(n/k)-1のランダムなサブセットがサブセットの入力からのいずれの他の要素も含まないときだけ、サンプリングは成功する。ランダムサブセットがサブセット要素の入力を含まない確率は、以下のように記載されることができる。
この手法に基づいて、置換鍵は、すべての列サブセットが行列の行のうちの1つに埋め込まれた固定されたサブセットSの入力からの丁度1つの要素を含むように、行列の各列におけるサブセットを表してもよい。さらに、すべての列サブセットは、対として交わりを有しないものでなくてはならない。いくつかの例では、命令300は、すべての取り得る残りのアイテムに亘る疑似ランダム置換のためのランダム鍵を生成する。疑似ランダム置換li:=F(K,i)の計算は、li番目に大きな残りの要素にマッピングを行う。置換πから指定されたkのサイズのサブセットは、単純にl1番目,...,lk番目に大きな残りの要素を含むセットであり、これによって、すべての将来的なサンプルのサブセットが以前に固定されたいずれのサブセット列とも交わりを有しないことを確実にする。交わりを有しないサンプルのサブセットを確実にする能力により、各サブセット列は、定数のサンプルを使用して生成されることができる。
すべての未使用な要素の明示的な記憶が線形のストレージを必要とする一方で、命令300は、サブセット入力からの残りの未使用のアイテムの知識を必要とするだけである。とりわけ、残りのサブセット入力要素の各々について、順位として凹んだ値がより小さい未使用のアイテムの数に関する知識が必要とされる。指標iまでの特定の合計がサブセット入力のi番目に大きな要素の順位と等しいというように、サブセット入力のアイテムは、記憶された順序で記憶される。データ構造を初期化するとき、記憶されたサブセット入力の隣り合った要素の間の差分が記憶され、 部分合計クエリを行うことによって順位が取り出されることを確実にする。未使用の要素のセットから1つの要素を除去することは、入力サブセットのすべての要素の順位を下げることを必要とし、これは、除去された要素よりも1つ大きい。これは、除去される要素よりも大きな入力サブセットにおける最も小さなアイテムの指標から単純に1を減算することによって実現できる。結果として、より大きな入力サブセットのすべての要素の順位もまた1つ小さくなる。除去された要素よりも大きな入力サブセットから最も小さな要素を見つけることは、単一のPartialSums.Select演算を必要とする一方で、順位を取り出し、エントリを更新することは、それぞれ、単一のPartialSums.Sum演算およびPartialSums.Update演算を必要とする。全体のデータ構造が入力サブセットのアイテムの各々について単一のエントリの記憶だけを必要とすることは、入力サブセットのサイズにおいて記憶要件が線形であることを意味する。
続いて図3Bを参照すると、クライアントデバイス120は、疑似ランダム置換区分け鍵κのベクトルを含む要求320をサービス160に送信する。サービス160によって受信されるとき、要求320は、サービス160に抽象化ストレージ150のn個のデータブロック102をn/(k+1)個のパーティション350へと疑似ランダム区分け(PRPartition.GetPartition(κ))を行わせ、n/(k+1)個のパーティション350の1つは、クエリブロックBqを含まないデータブロック102の識別されたc個の合計O(例えば、合計O3)を含む固定のパーティションを含む。図4Bは、疑似ランダム置換区分け鍵κのベクトルを使用して抽象化ストレージ150をn/(k+1)個のパーティション350に疑似ランダム区分けする例示的なアルゴリズム400bを提供する。示される例では、n/(k+1)個のパーティション350の3番目のパーティションP3は、クエリブロックBqと、クエリブロックBqを含まないデータブロック102の識別されたc個の合計O(例えば、合計O3)とを含む固定のパーティションを含む。ここで、3番目のパーティションP3は、データブロック102の識別されたc個の合計Oのk個のブロックと、クエリブロックBqを含む1つの追加的なブロックとを含む。3番目のパーティションP3は、n/(k+1)個のパーティション350を表す2次元行列の3番目の行に対応する。サービス160によるPIR抽象化ストレージ150(例えば、データベース)の疑似ランダム区分けは、サービス160が、パーティション350の各々におけるk+1個のデータブロックを合計して、パーティションP1,P2,...,P(n/(k+1))の各々について、対応するデータブロックの暗号化された合計T1,T2,...,T(n/(k+1))302を決定することをさらに含む。
図3Cは、データブロック102の識別されたc個の合計Oのk個のブロックと、1つのクエリブロックBqとを含む1つの追加的なブロックとを含む3番目のパーティションP3のためのデータブロックの暗号化された合計T3302を秘匿的に返す。データブロックの暗号化された合計T3302の受信に応答して、クライアントデバイス120は、データブロックの暗号化された合計T3302を復号化し、クエリブロックBqを含まないデータブロック102の識別されたc個の合計O(例えば、合計O3)を取り出し、k個のデータブロック102の識別されたc個の合計O3からデータブロックの復号化された合計T3302を減算してクエリブロックBqを得る。
図4Cは、上述の説明の非公開BSR命令200,200a,200b,200cの1つを実行することによって、クライアント状態250を初期化する例示的なアルゴリズム400cを提供する。図4Dは、クエリブロックBqを取り出すためのクエリ(q)を実行するための例示的なアルゴリズム400dを提供する。例示的なアルゴリズム400dは、疑似ランダム区分け鍵κのベクトルをクライアントデバイス120においてローカルに生成するPRPartition.GenerateKey(n,k+1,S)工程と、疑似ランダム区分け鍵κのベクトルを使用してPIRストレージを疑似ランダム区分けするための後続のPRPartition.GetPartition(κ)工程とを含む。
他の実施形態では、制約付き疑似ランダム区分けは、疑似ランダム関数を使用する秘匿制約付き区分けに置き換えられる。mサイズのブロックの順序付き対象を抽象化ストレージ150のn個のデータブロック102から抽出することによって、サブルーチンが秘匿制約付きパーティションを生成してもよく、m個の別個の値に遭遇するまで疑似ランダム関数(PRF)を連続した入力に対して計算するためにいずれかのシード/鍵κが与えられる。シード/鍵κによって生成されるセットTκが与えられ、ルーチンは、Tκのr番目の要素をいずれかの値に固定してもよく、再び配向されたサブセットのr番目の値は、iであり、残りのm-1個の要素は、ランダムである。よって、ランダムκをサンプリングし、Tκを生成し、および、r番目の要素をn/(k+1)個のパーティション350を表す2次元行列に固定することによって、ランダム制約付きサブセットが生成されることができる。ここで、ランダムに生成された制約付きサブセットと固定の要素を超えた制約付きサブセットとが関わったかどうかを決定する検査のみが必要とされるので、サンプリングは、制約付きサブセットからの残りの未使用アイテムの知識のみを必要とする。言い換えれば、サンプリングは、残りの制約付きサブセット要素の各々よりも値の小さな未使用数の数の知識だけを必要とする。この知識は、各制約付きサブセット要素のクランクに対応する。よって、制約付きサブセットおよびすべての未使用アイテムにおける対応する順位だけが明示的なストレージを必要とする。したがって、サブセット列が固定となると、すべてのサブセット入力要素の順位は、もう使用されていないすべての固定のアイテムを反映させるために更新されなければならない。つまり、制約付きサブセットのすべての要素の順位は、列におけるより小さなすべてのアイテムだけ下がらなくてはならない。結果として、秘匿制約付き区分けを生成するためのサブルーチンは、順位を維持するためにO(k)ストレージのみを必要とする。
秘匿制約付き区分けを生成するためのルーチンは、鍵を生成するための鍵生成工程(OCP.GenerateKey)および固定されたパーティションを抽出するためのパーティション抽出工程(OCP.ExtractPartition)を含んでもよい。図4Eは、鍵を生成するためのOCP.GenerateKey工程の例示的なアルゴリズム400eを提供し、図4Fは、固定されたパーティションを抽出するための例示的なアルゴリズム400fを提供する。いくつかの実施形態では、クエリ命令300を実行してデータブロックBqを取り出すための例示的なアルゴリズム400dは、本開示の範囲から逸脱することなく、疑似ランダム区分けに替えて疑似ランダム関数を使用する秘匿制約付き区分けに置き換えてもよい。ここで、アルゴリズム400dは、鍵を生成するために、PRPartition.GenerateKey(n,k+1,S)工程(図4A)をOCP.GenerateKey工程(図4F)に置き換えてもよく、PIRストレージを秘匿的に区分けし、PRF鍵に基づいて固定されたパーティションを抽出するために、続くPRPartition.GetPartition(κ)工程(図4B)をパーティション抽出工程OCP.ExtractPartition(図4F)に置き換えてもよい。
図5は、非公開情報検索(PIR)を使用して、アントラストストレージデバイス114,150上にプレーンテキストとして記憶された公に知られたデータブロック102を取り出す方法500のための演算の例示的な構成のフローチャートである。アントラストストレージデバイスは、分配システム140上の抽象化ストレージ150を実装する1以上のストレージデバイス114,150を含んでもよい。アントラストストレージデバイス114,150は、複数のクライアントデバイスがアクセスのために利用可能な公に知られ、かつ、暗号化されていないデータブロックを記憶するいずれかのデータストアまたはデータベースであってもよい。PIRの態様は、アントラストストレージデバイス150またはストレージデバイス150を管理しているサービス160がアクセスのパターンまたはストレージデバイス150から取り出されたデータを学習しないことを確実にする。各クライアントデバイス120のデータ処理ハードウェア124は、メモリハードウェア122上に記憶されている命令を実行することによって、方法500の演算を実行してもよい。演算502において、方法502は、非公開バッチ合計検索命令200を実行して、アントラストストレージデバイス50からのデータブロック102のc個の合計Oを計算することによって、クライアントデバイス120のクライアント状態250初期化する工程を含み、計算された合計Oの各々は、クライアントデバイス120のメモリハードウェア122上に記憶され、かつ、対応するサブセットSの丁度k個のデータブロック102の合計を含む。
演算504において、方法500は、クエリ命令300を実行して、クエリブロックBqを含まないc個の合計Oのうちの1つを識別するためにメモリハードウェア124上に記憶されているデータブロック102のc個の合計Oの各々を通じて繰り返すことによって、アントラストストレージデバイス150上に記憶されたクエリブロックBqを取り出す工程を含む。演算506において、クエリ命令300の実行は、アントラストストレージデバイス150を管理しているサービス160に対して、アントラストストレージデバイス150のn個のデータブロックを各々がk+1個のデータブロック102を含むn/(k+1)個のパーティション350に疑似ランダムに区分けするよう命令する工程と、n/(k+1)個のパーティション350の各々におけるk+1個のデータブロック102を合計して対応するデータブロックの暗号化された合計302を決定する工程と、をさらに含み、n/(k+1)個のパーティション350のうちの1つは、クエリブロックBqを含まないデータブロックの識別されたc個の合計Oを含む固定されたパーティションを含む。演算506は、図4Aおよび図4Bのアルゴリズム400a,400bによって制約付き疑似ランダム区分けまたは図4Eおよび図4Fのアルゴリズム400e,400fによって秘匿制約付き区分けに基づいてパーティション350を生成してもよい。
演算508において、クエリ命令300の実行は、固定のパーティションを含むn/(k+1)個のパーティションのためのデータブロックの暗号化された合計302をアントラストストレージデバイス150を管理するサービスから検索する工程をさらに含む。演算510において、クエリ命令300の実行は、データブロックの暗号化された合計302を復号化して、クライアントデバイス120のメモリハードウェア122上に記憶されているデータブロックの識別されたc個の合計Oから減算して、クエリブロックBqを得る工程をさらに含む。方法は、クエリ(q)の数がクエリしきい値を超えるかどうかを決定し、クエリ(q)の数がクエリしきい値を超えているとき、クライアント状態250を再び初期化する工程を含んでもよい。
図6は、本文書において記載されるシステムおよび方法を実装するあめに使用される例示的なコンピューティングデバイス600(例えば、データ処理ハードウェア)の図解である。コンピューティングデバイス600は、ラップトップ、デスクトップ、ワークステーション、パーソナルデジタルアシスタント、ブレードサーバ、メインフレームおよび他の適切なコンピュータなどの様々な形式のデジタルコンピュータを表すことを意図する。ここで示す構成要素、それらの接続および関係、ならびにそれらの機能は、例示的な目的でのみ示されており、本文書において記載され、および/または主張する発明の実施形態に限定することを意図するものではない。
コンピューティングデバイス600は、プロセッサ610、メモリ620、ストレージデバイス630、メモリ620および高速拡張ポート650に接続されている高速インタフェース/制御部640、ならびに低速バス670およびストレージデバイス630に接続されている低速インタフェース/制御部660を含む。構成要素610,620,630,640,650,および660の各々は、様々なバスを使用して、または、他の適切な態様で相互接続されており、および、これらは、共通のマザーボードに装着されてもよい。プロセッサ610は、高速インタフェース640に結合されているディスプレイ680などの外部入出力デバイス上にグラフィカルユーザインタフェース(GUI)のためのグラフィカルな情報を表示するためのメモリ620内またはストレージデバイス630上に記憶されている命令を含むコンピューティングデバイス600内の実行のための命令を処理することができる。他の実施形態では、複数のメモリおよびメモリのタイプとともに、複数のプロセッサおよび/または複数のバスが適切に使用されてもよい。また、複数のコンピューティングデバイス600は、必要な作業部分(例えば、サーババンク、ブレードサーバのグループ、またはマルチプロセッサシステム)を提供する各デバイスに接続されていてもよい。
メモリ620は、コンピューティングデバイス600内に非一時的に情報を記憶する。メモリ620は、コンピュータ読み取り可能媒体、揮発性メモリユニット、または不揮発性メモリユニットであってもよい。非一時的メモリ620は、プログラム(例えば、命令のシーケンス)またはデータ(例えば、プログラム状態情報)をコンピューティングデバイス600による使用のために一時的または持続的に記憶するための物理的なデバイスであってもよい。不揮発性メモリの例は、これに限定されるものではないが、フラッシュメモリおよびリードオンリーメモリ(ROM)/プログラム可能リードオンリーメモリ(PROM)/消去可能なプログラム可能リードオンリーメモリ(EPROM)/電気的に消去可能なプログラム可能リードオンリーメモリ(EEPROM)(例えば、ブートプログラム等のファームウェアに対して通常に使用される)を含む。揮発性メモリの例は、限定するものではないが、ディスクまたはテープと同様に、ランダムアクセスメモリ(RAM)、ダイナミックアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、相変化メモリ(PCM)を含む。ストレージデバイス630(例えば、メモリハードウェア)は、コンピューティングデバイス600のための大容量ストレージを提供することができる。いくつかの実施形態では、ストレージデバイス630は、コンピュータ読み取り可能媒体である。様々な異なる実施形態では、ストレージデバイス630は、ストレージエリアネットワークまたは他の構成におけるデバイスを含む、フロッピー(登録商標)ディスクドライブ、ハードディスクドライブ、光ディスクドライブ、またはテープデバイス、フラッシュメモリまたは他の類似するソリッドステートメモリデバイス、またはデバイスのアレイであってもよい。追加的な実施形態では、コンピュータブログラム製品は、情報搬送においてタンジブルに具現化されている。命令を含むコンピュータプログラム製品は、実行されるとき、上述したように、1以上の方法が行われる。情報搬送は、メモリ620、ストレージデバイス630、またはプロセッサ610上のメモリなどのコンピュータまたは機械読み取り可能媒体である。
高速制御部640は、コンピューティングデバイス600のための帯域に集中した作業を管理する一方で、低速制御部660は、より低い帯域に集中した作業を管理する。そのような役割の割り当ては例示目的のみである。いくつかの実施形態では、高速制御部640は、メモリ620、ディスプレイ680(例えば、グラフィックプロセッサまたは加速器)および様々な拡張カード(図示せず)を受け入れてもよい高速拡張ポート650に結合されている。いくつかの実施形態では、低速制御部660は、ストレージデバイス630および低速拡張ポート670に結合されている。様々な通信ポート(例えば、USB、ブルートゥース、イーサーネット、無線イーサーネット)を含んでもよい低速拡張ポート670は、ぃーボード、ポインティングデバイス、スキャナ、またはスイッチまたはルータ(例えば、ネットワークアダプタを通じた)などのネットワーキングデバイスなどの1以上の入出力デバイスに結合されてもよい。
コンピューティングデバイス600は、図に示されるように、いくつかの異なる形態において実装されてもよい。例えば、標準サーバ600aとしてまたはそのようなサーバ600aのグループにおいて複数回実装されてもよく、ラップトップコンピュータ600bとして、または、ラックサーバシステム600cの一部として実装されてもよい。
ソフトウェアアプリケーション(すなわち、ソフトウェア資源)は、コンピューティングデバイスにタスクを行わせるコンピュータソフトウェアを参照する。いくつかの例において、ソフトウェアプリケーションは、「アプリケーション」、「アプリ」、または「プログラム」として参照されてもよい。アプリケーションの例は、限定するものではないが、システム診断アプリケーション、システム管理アプリケーション、システムメンテナンスアプリケーション、ワード処理アプリケーション、スプレッドシートアプリケーション、メッセージングアプリケーション、メディアストリーミングアプリケーション、ソーシャルネットワーキングアプリケーション、およびゲーミングアプリケーションを含む。
ここで記載したシステムおよび技術の様々な実施形態は、デジタル電気および/または光学回路、集積回路、特別に設計されたASIC(特定用途向け集積回路)、コンピュータハードウェア、ファームウェア、ソフトウェア、および/またはこれらの組み合わせにおいて実現されることができる。これらの様々は実施形態は、特定または汎用目的であってもよく、データおよび命令をそこから受信するために、および、データおよび命令をそれに対して送信するために、ストレージシステムに結合される少なくとも1つのプログラム可能プロセッサ、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを含むプログラム可能システム上で実行可能および/または解釈可能な1以上のコンピュータプログラムにおける実施形態を含むことができる。
これらのコンピュータプログラム(プログラム、ソフトウェアアプリケーション、またはコードとしても知られている)は、プログラム可能なプロセッサのための機械命令を含み、高級手続き型および/またはオブジェクト指向プログラミング言語および/またはアセンブリ/機械言語において実装されることができる。ここで使用される「機械読み取り可能媒体」および「コンピュータ読み取り可能媒体」の用語は、機械命令を機械読み取り可能信号として受信する機械読み取り可能媒体を含む、プログラム可能プロセッサに機械命令および/またはデータを提供するために使用されるいずれのコンピュータプログラム製品、非一時的コンピュータ読み取り可能媒体、装置および/またはデバイス(例えば、磁気ディスク、光ディスク、メモリ、機械命令および/またはプログラマブルロジックデバイス(PLD))も参照する。「機械読み取り可能信号」の用語は、機械命令および/またはデータをプログラム可能プロセッサに提供するために使用されるいずれの信号にも参照する。
本明細書における処理およびロジックフローは、入力データを演算して出力を生成する関数を実行する1以上のコンピュータプログラムを実行する1以上のプログラム可能プロセッサによって行われることができる。処理およびロジックフローは、特定目的のロジック回路、例えば、FPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)によって行われることもできる。コンピュータプログラムの実行のために適したプロセッサは、例として汎用および特定目的のマイクロプロセッサ、ならびにデジタルコンピュータのいずれかの種類の1以上のプロセッサを含む。一般的に、プロセッサは、リードオンリーメモリ、ランダムアクセスメモリ、またはその両方から命令およびデータを受信する。コンピュータの基本要素は、命令を実行するためのプロセッサならびに命令およびデータを記憶するための1以上のメモリデバイスである。一般的に、コンピュータは、また、データを記憶するための1以上の大容量ストレージデバイス例えば、磁気ディスク、磁気光ディスク、または光ディスクを含む。すなわち、その大容量ストレージデバイスからデータを受信し、または、データを転送し、またはその両方を行うように、その大容量ストレージデバイスに動作可能に結合されている。しかしながら、コンピュータは、そのようなデバイスを有する必要がない。コンピュータプログラム命令およびデータを記憶するためのコンピュータ読み取り可能媒体は、すべての形式の不揮発性メモリ、例として、例えば、EPROM、EEPROM、およびフラッシュメモリデバイスを含む半導体メモリデバイス;磁気ディスク、例えば、内部ハードディスクまたは取り出し可能ディスク;磁気光ディスク;ならびにCDROMおよびDVD‐ROMディスクを含む。プロセッサおよびメモリは、特定目的ロジック回路によって補足され、または、これに取り入れられることができる。
ユーザとの対話を提供するために、本開示の1以上の態様は、ディスプレイデバイス、例えば、ユーザに情報を表示するためのCRT(陰極線管)、LCD(液晶ディスプレイ)モニタ、またはタッチスクリーン、任意選択的に、ユーザがこれによってコンピュータに入力を提供することができるためのキーボードおよびポインティングデバイス、例えば、マウスまたはトラックボールを有するコンピュータ上に実装されることができる。他の種類のデバイスもまたユーザとの対話を提供するために使用されることができ、例えば、ユーザに提供されるフィードバックは、例えば、ビジュアルフィードバック、オーディオフィードバック、または触覚フィードバックのセンサによるフィードバックのいずれかの形式であることができ;ユーザによる入力は、音響、発言、または触覚による入力を含むいずれかの形式により受信されることができる。さらに、コンピュータは、例えば、ウェブブラウザから受信した要求に応答して、ウェブページをユーザのクライアントデバイス上のウェブブラウザに送信することによって、ユーザによって使用されているデバイスと文書の送受信を行うことによってユーザと対話することができる。
いくつかの実施形態が記載された。それでも、本開示の精神および範囲から逸脱することなく様々は変形が行われてもよいことが理解されるであろう。したがって、他の実施形態は、以下の請求の範囲内のものである。