(57)【特許請求の範囲】
【請求項１】
クライアント装置（１２０）のデータ処理ハードウェア（１２４）が、データ・ブロック（１０２）に対するクエリ（ｑ）を実行するための命令（３００）を実行する工程と、
ダウンロード・フェーズ中、前記データ処理ハードウェア（１２４）が、前記データ・ブロック（１０２）が前記クライアント装置（１２０）に存在するメモリ・ハードウェア（１２２）上のブロック・スタッシュ（３７０）に記憶されているか否かを判定する工程と、
前記データ・ブロック（１０２）が前記ブロック・スタッシュ（３７０）に記憶されている場合、
前記データ処理ハードウェア（１２４）が、前記ブロック・スタッシュ（３７０）から前記データ・ブロック（１０２）を除去し、
前記データ処理ハードウェア（１２４）が、前記データ処理ハードウェア（１２４）と通信状態にある分散型システム（１４０）に偽クエリ（３０４）を送信し、前記偽クエリ（３０４）は、前記分散型システム（１４０）のメモリ（１１４）に記憶されているランダムなデータ・ブロック（１０２）を取り出し、
前記データ処理ハードウェア（１２４）が、前記分散型システム（１４０）から取り出された前記ランダムなデータ・ブロック（１０２）を破棄する、工程と、
オーバライト・フェーズ中、前記データ処理ハードウェア（１２４）が、前記ブロック・スタッシュ（３７０）から除去されたまたは前記分散型システム（１４０）の前記メモリ（１１４）から取り出された前記データ・ブロック（１０２）に対する読出または書込動作を実行する工程と、
前記データ処理ハードウェア（１２４）が、確率に基づいて、前記データ・ブロック（１０２）の現在のバージョンを、前記クライアント装置（１２０）に存在する前記メモリ・ハードウェア（１２２）上の前記ブロック・スタッシュ（３７０）に記憶するか、前記分散型システム（１４０）の前記メモリ（１１４）上に記憶するかを決定する工程と、
前記データ・ブロック（１０２）の前記現在のバージョンが前記ブロック・スタッシュ（３７０）に記憶される場合、
前記データ処理ハードウェア（１２４）が、前記分散型システム（１４０）の前記メモリ（１１４）に記憶されている別のランダムなデータ・ブロック（１０２）を取り出すために前記分散型システム（１４０）に偽クエリ（３０４）を送信し、
前記データ処理ハードウェア（１２４）が、取り出された前記ランダムなデータ・ブロック（１０２）を復号し、
前記データ処理ハードウェア（１２４）が、フレッシュなランダム性で前記ランダムなデータ・ブロック（１０２）を再暗号化し、
前記データ処理ハードウェア（１２４）が、前記分散型システム（１４０）の前記メモリ（１１４）上へ再暗号化した前記ランダムなデータ・ブロック（１０２）を再アップロードする、工程と、を備える方法。
【請求項２】
前記データ・ブロック（１０２）が前記ダウンロード・フェーズ中に前記ブロック・スタッシュ（３７０）に記憶されていない場合、前記データ処理ハードウェア（１２４）が、前記分散型システム（１４０）の前記メモリ（１１４）から前記データ・ブロック（１０２）を取り出すために、前記分散型システム（１４０）に真のクエリ（３０２）を送信する工程をさらに備える、請求項１に記載の方法。
【請求項３】
前記オーバライト・フェーズ中、前記データ・ブロック（１０２）に対する読出または書込動作を実行する工程は、前記データ・ブロック（１０２）の新しいバージョンにより前記データ・ブロック（１０２）を更新することによって書込動作を実行する工程を含む、請求項１または２に記載の方法。
【請求項４】
前記確率は（Ｃ／Ｎ）未満であり、ここでＣは前記ブロック・スタッシュ（３７０）のストレージ容量であり、Ｎは前記分散型システム（１４０）上のストレージ用に前記データ処理ハードウェア（１２４）によってアウトソーシングされるデータ・ブロック（１０２）の数である、請求項１〜３のいずれか一項に記載の方法。
【請求項５】
前記データ・ブロック（１０２）の前記現在のバージョンが前記オーバライト・フェーズ中に前記ブロック・スタッシュ（３７０）に記憶されない場合、
前記データ処理ハードウェア（１２４）が、前記分散型システム（１４０）の前記メモリ（１１４）から前記データ・ブロック（１０２）を取り出すために、前記分散型システム（１４０）に真のクエリ（３０２）を送信する工程と、
前記データ処理ハードウェア（１２４）が、前記データ・ブロック（１０２）の前記現在のバージョンを暗号化する工程と、
前記データ処理ハードウェア（１２４）が、前記分散型システム（１４０）の前記メモリ（１１４）上へ前記データ・ブロック（１０２）の暗号化された前記現在のバージョンをアップロードする工程と、をさらに備える、請求項１〜４のいずれか一項に記載の方法。
【請求項６】
前記分散型システム（１４０）の前記メモリ（１１４）から取り出された前記データ・ブロック（１０２）を破棄する工程をさらに備える、請求項５に記載の方法。
【請求項７】
クライアント装置（１２０）のデータ処理ハードウェア（１２４）が、データ・ブロック（１０２）に対するクエリ（ｑ）を実行するための命令（４００）を実行する工程と、
ダウンロード・フェーズ中、前記データ処理ハードウェア（１２４）が、前記データ・ブロック（１０２）が前記クライアント装置（１２０）に存在するメモリ・ハードウェア（１２２）上のブロック・スタッシュ（３７０）に記憶されているか否かを判定する工程と、
前記データ・ブロック（１０２）が前記ブロック・スタッシュ（３７０）に記憶されている場合、
前記データ処理ハードウェア（１２４）が、前記ブロック・スタッシュ（３７０）から前記データ・ブロック（１０２）を除去し、
前記データ処理ハードウェア（１２４）が、前記データ処理ハードウェア（１２４）と通信状態にある分散型システム（１４０）に偽クエリ（４０４）を送信し、前記偽クエリ（４０４）は、前記分散型システム（１４０）のメモリ（１１４）に記憶されている２つのランダムなデータ・バケツ（３５０）をダウンロードし、前記データ・バケツ（３５０）の各々は複数のデータ・ブロック（１０２）を含み、
前記データ処理ハードウェア（１２４）が、前記分散型システム（１４０）から取り出された前記ランダムなデータ・バケツ（３５０）を破棄する、工程と、
オーバライト・フェーズ中、前記データ処理ハードウェア（１２４）が、前記ブロック・スタッシュ（３７０）から除去された前記データ・ブロック（１０２）または前記分散型システム（１４０）のメモリ（１１４）から取り出された対応するデータ・バケツ（３５０）から取得された前記データ・ブロック（１０２）に対する読出または書込動作を実行する工程と、
前記データ処理ハードウェア（１２４）が、確率に基づいて、前記データ・ブロック（１０２）の現在のバージョンを、前記ブロック・スタッシュ（３７０）に記憶するか、前記分散型システム（１４０）の前記メモリ（１１４）上に記憶するかを決定する工程と、
前記データ・ブロック（１０２）の前記現在のバージョンが前記ブロック・スタッシュ（３７０）に記憶される場合、
前記データ処理ハードウェア（１２４）が、前記分散型システム（１４０）の前記メモリ（１１４）に記憶されている別の２つのランダムなデータ・バケツ（３５０）をダウンロードするために前記分散型システム（１４０）に偽クエリ（４０４）を送信し、各データ・バケツ（３５０）は複数のデータ・ブロック（１０２）を含み、
前記データ処理ハードウェア（１２４）が、前記ランダムなデータ・バケツ（３５０）内の前記データ・ブロック（１０２）の全てを復号し、
前記データ処理ハードウェア（１２４）が、フレッシュなランダム性で前記ランダムなデータ・バケツ（３５０）内の前記データ・ブロック（１０２）を再暗号化し、
前記データ処理ハードウェア（１２４）が、前記分散型システム（１４０）の前記メモリ（１１４）上へ再暗号化した前記データ・ブロック（１０２）を含む前記ランダムなデータ・バケツ（３５０）を再アップロードする、工程と、を備える方法。
【請求項８】
前記ダウンロード・フェーズ中に前記データ・ブロック（１０２）が前記ブロック・スタッシュ（３７０）に記憶されていない場合、
前記データ処理ハードウェア（１２４）が、前記分散型システム（１４０）の前記メモリ（１１４）から一対のデータ・バケツ（３５０）をダウンロードするために前記分散型システム（１４０）に真のクエリ（４０２）を送信する工程であって、前記真のクエリ（４０２）に応答して前記分散型システム（１４０）からダウンロードされる前記データ・バケツ（３５０）の各々は、複数のデータ・ブロック（１０２）と、前記データ・ブロック（１０２）の識別子（ｉｄｉ）に関連付けられている対応する暗号識別子（Ｆ（ｉｄｉ））とを含む、工程と、
前記データ処理ハードウェア（１２４）が、前記２つのデータ・バケツ（３５０）内の前記データ・ブロック（１０２）の全てを復号する工程と、
前記データ処理ハードウェア（１２４）が、前記２つのデータ・バケツ（３５０）のうちの１つが前記データ・ブロック（１０２）を含むか否かを判定する工程と、
前記データ・バケツ（３５０）のうちの１つが前記データ・ブロック（１０２）を含む場合、
前記データ処理ハードウェア（１２４）が、前記対応するデータ・バケツ（３５０）から前記データ・ブロック（１０２）を除去し、
前記データ処理ハードウェア（１２４）が、前記データ・バケツ（３５０）から残りの前記データ・ブロック（１０２）を破棄する、工程と、をさらに備える、請求項７に記載の方法。
【請求項９】
前記データ・ブロック（１０２）の前記識別子は文字列を含む、請求項７または８に記載の方法。
【請求項１０】
前記オーバライト・フェーズ中に前記データ・ブロック（１０２）に対する読出または書込動作を実行する工程は、前記データ・ブロック（１０２）の新しいバージョンにより前記データ・ブロック（１０２）を更新することによって書込動作を実行する工程を含む、請求項７〜９のいずれか一項に記載の方法。
【請求項１１】
前記確率は（Ｃ／Ｎ）未満であり、ここでＣは前記ブロック・スタッシュ（３７０）のストレージ容量であり、Ｎは前記分散型システム（１４０）上のストレージ用に前記データ処理ハードウェア（１２４）によってアウトソーシングされるデータ・ブロック（１０２）の数である、請求項７〜１０のいずれか一項に記載の方法。
【請求項１２】
前記データ・ブロック（１０２）の前記現在のバージョンが前記オーバライト・フェーズ中に前記ブロック・スタッシュ（３７０）に記憶されない場合、
前記データ処理ハードウェア（１２４）が、前記分散型システム（１４０）の前記メモリ（１１４）から一対のデータ・バケツ（３５０）をダウンロードするために前記分散型システム（１４０）に真のクエリ（４０２）を送信する工程であって、前記真のクエリ（４０２）に応答して前記分散型システム（１４０）からダウンロードされる前記データ・バケツ（３５０）の各々は、複数のデータ・ブロック（１０２）と、前記データ・ブロック（１０２）の識別子（ｉｄｉ）に関連付けられている対応する暗号識別子（Ｆ１（ｉｄｉ），Ｆ２（ｉｄｉ））とを含む、工程と、
前記データ処理ハードウェア（１２４）が、前記データ・バケツ（３５０）内の前記データ・ブロック（１０２）の全てを復号する工程と、
前記データ処理ハードウェア（１２４）が、前記データ・バケツ（３５０）のうちの１つ内の前記データ・ブロック（１０２）の以前のバージョンを、前記データ・ブロック（１０２）の前記現在のバージョンで置換する工程と、
前記データ処理ハードウェア（１２４）が、前記データ・バケツ（３５０）内の前記データ・ブロック（１０２）の前記現在のバージョンを含む前記データ・ブロック（１０２）の全てを再暗号化する工程と、
前記データ処理ハードウェア（１２４）が、前記分散型システム（１４０）の前記メモリ（１１４）上へ再暗号化した前記データ・ブロック（１０２）を含む前記データ・バケツ（３５０）をアップロードする工程と、をさらに備える、請求項７〜１１のいずれか一項に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、差分プライバシーを備えるメモリ上に記憶されているデータ・ブロックに関連する。
【背景技術】
【０００２】
企業および個人は、複数のメモリ位置の上にあるメモリ上にデータを記憶するために、分散型のストレージ・システム（すなわち、クラウド・ストレージ・サービス）を使用している。そうした企業および個人の多くは、分散型のストレージ・システムの上にアップロードする前に、自身のデータを暗号化する。クラウド・ストレージ・サービスによって提示される不可欠な機能（記憶されているデータに対し検索クエリを実行することなど）を用いるために、企業は、クラウド・ストレージ・サービスに平文のアクセスを提供することを要求される。結果として、多くの政府および機密に関わる民間部門（健康、金融、および法律など）は、簡便性およびコスト優位性が高まるにもかかわらず、クラウド・ストレージ・サービスを使用したがらない。これに加えて、暗号化単独では、データ・プライバシを保証するには十分でない場合がある。単にデータのアクセス・パターンに関する知識だけでも、そのデータについて有意な量の情報を提供することが可能であり、データを復号する必要は全くないためである。
【図面の簡単な説明】
【０００３】
【図１Ａ】分散型システムの非一時的なデータ・ストレージ上に記憶されているデータ・ブロックに対するクエリを忘却的に実行するための一例のシステムの概略図。
【図１Ｂ】１または複数のクライアントが分散型ストレージ・システムの非一時的なデータ・ストレージ上に記憶されているデータ・ブロックに対するクエリを忘却的に実行することを可能とするための一例のシステムの概略図。
【図２Ａ】単一のサーバの非一時的なデータ・ストレージ上に記憶されているクエリを忘却的に実行するための一例の差分プライベート（ＤＰ）プライベート情報取出（ＰＩＲ）ルーチンの概略図。
【図２Ｂ】複数のサーバの非一時的なデータ・ストレージ上に記憶されているクエリを忘却的に実行するための一例の差分プライベート（ＤＰ）プライベート情報取出（ＰＩＲ）ルーチンの概略図。
【図３Ａ】分散型システムの非一時的なデータ・ストレージ上に記憶されているクエリを忘却的に実行するための一例のＤＰ忘却型ランダム・アクセス・メモリ（Ｏ−ＲＡＭ）ルーチンの概略図。
【図３Ｂ】分散型システムの非一時的なデータ・ストレージ上に記憶されているクエリを忘却的に実行するための一例のＤＰ忘却型ランダム・アクセス・メモリ（Ｏ−ＲＡＭ）ルーチンの概略図。
【図３Ｃ】分散型システムの非一時的なデータ・ストレージ上に記憶されているクエリを忘却的に実行するための一例のＤＰ忘却型ランダム・アクセス・メモリ（Ｏ−ＲＡＭ）ルーチンの概略図。
【図３Ｄ】分散型システムの非一時的なデータ・ストレージ上に記憶されているクエリを忘却的に実行するための一例のＤＰ忘却型ランダム・アクセス・メモリ（Ｏ−ＲＡＭ）ルーチンの概略図。
【図４Ａ】分散型システムの非一時的なデータ・ストレージ上に暗号化された形式によりデータ・ブロックを忘却的に入力するための一例のＤＰ忘却型ストレージ・ルーチンの概略図。
【図４Ｂ】分散型システムの非一時的なデータ・ストレージ上に暗号化された形式によりデータ・ブロックを忘却的に入力するための一例のＤＰ忘却型ストレージ・ルーチンの概略図。
【図４Ｃ】分散型システムの非一時的なデータ・ストレージ上に暗号化された形式によりデータ・ブロックを忘却的に入力するための一例のＤＰ忘却型ストレージ・ルーチンの概略図。
【図５Ａ】データ・ブロックに対するクエリを実行するためにクライアント装置上で実行する一例のＤＰ忘却型ストレージ命令の概略図。
【図５Ｂ】データ・ブロックに対するクエリを実行するためにクライアント装置上で実行する一例のＤＰ忘却型ストレージ命令の概略図。
【図５Ｃ】データ・ブロックに対するクエリを実行するためにクライアント装置上で実行する一例のＤＰ忘却型ストレージ命令の概略図。
【図５Ｄ】データ・ブロックに対するクエリを実行するためにクライアント装置上で実行する一例のＤＰ忘却型ストレージ命令の概略図。
【図６】対応するバケツの中へ暗号化された形式によりデータ・ブロックを入力し、データ・ブロックに対するクエリを実行することにより、二分木を初期化する一例のアルゴリズムを提供する図。
【図７】一例の逆指数関数木の概略図。
【図８】対応するＮ個のバケツの中へ暗号化された形式によりデータ・ブロックを入力し、データ・ブロックに対するクエリを実行することにより、逆指数関数木を初期化する一例のアルゴリズムを提供する図。
【図９】本明細書に記載のシステムおよび方法を実装するために用いられ得る一例のコンピューティング・デバイスの概略図。
【発明を実施するための形態】
【０００４】
様々な図面における類似の参照符合は類似の要素を示す。
本開示の一態様では、差分プライバシーを有する忘却型アクセスのための方法を提供する。方法は、クライアント装置のデータ処理ハードウェアが、データ・ブロックに対するクエリ（ｑ）を実行するための命令を実行する工程を備える。方法はまた、ダウンロード・フェーズ中、データ処理ハードウェアが、データ・ブロックがクライアント装置に存在するメモリ・ハードウェア上のブロック・スタッシュに記憶されているか否かを判定する工程を備える。データ・ブロックがブロック・スタッシュに記憶されている場合、方法はさらに次を備える：データ処理ハードウェアが、ブロック・スタッシュからデータ・ブロックを除去する工程；データ処理ハードウェアが、データ処理ハードウェアと通信状態にある分散型システムに偽クエリを送信する工程；および、データ処理ハードウェアが、分散型システムから取り出されたランダムなデータ・ブロックを破棄する工程。偽クエリは、分散型システムのメモリに記憶されているランダムなデータ・ブロックを取り出す。オーバライト・フェーズ中、方法は、データ処理ハードウェアが、ブロック・スタッシュから除去されたまたは分散型システムのメモリから取り出されたデータ・ブロックに対する読出または書込動作を実行する工程を備える。方法はさらに、データ処理ハードウェアが、確率に基づいて、データ・ブロックの現在のバージョンを、クライアント装置に存在するメモリ・ハードウェア上のブロック・スタッシュに記憶するか、分散型システムのメモリ上に記憶するかを決定する工程を備える。データ・ブロックがブロック・スタッシュに記憶されている場合、方法はさらに次を備える：データ処理ハードウェアが、分散型システムのメモリに記憶されている別のランダムなデータ・ブロックを取り出すために分散型システムに偽クエリを送信する工程；データ処理ハードウェアが、取り出されたランダムなデータ・ブロックを復号する工程；データ処理ハードウェアが、フレッシュなランダム性でランダムなデータ・ブロックを再暗号化する工程；および、データ処理ハードウェアが、分散型システムのメモリ上へ再暗号化したランダムなデータ・ブロックを再アップロードする工程。
【０００５】
本開示の実装は、次の随意の機能のうちの１つ以上を含んでよい。いくつかの実装では、データ・ブロックがダウンロード・フェーズ中にブロック・スタッシュに記憶されていない場合、方法は、データ処理ハードウェアが、分散型システムのメモリからデータ・ブロックを取り出すために、分散型システムに真のクエリを送信する工程を備える。オーバライト・フェーズ中にデータ・ブロックに対する読出または書込動作を実行するとき、方法は、データ・ブロックの新しいバージョンによりデータ・ブロックを更新することによって書込動作を実行する工程も含んでよい。いくつかの構成では、確率は（Ｃ／Ｎ）未満であり、Ｃはブロック・スタッシュのストレージ容量であり、Ｎは分散型システム上の記憶用にデータ処理ハードウェアによってアウトソーシングされるデータ・ブロックの数である。
【０００６】
いくつかの例では、データ・ブロックの現在のバージョンがオーバライト・フェーズ中にブロック・スタッシュに記憶されていない場合、方法はさらに次も備える：データ処理ハードウェアが、分散型システムのメモリからデータ・ブロックを取り出すために、分散型システムに真のクエリを送信する工程；データ処理ハードウェアが、データ・ブロックの現在のバージョンを暗号化する工程；および、データ処理ハードウェアが、分散型システムのメモリ上へデータ・ブロックの暗号化された現在のバージョンをアップロードする工程。ここで、方法はさらに、分散型システムのメモリから取り出されたデータ・ブロックを破棄する工程も備えてよい。
【０００７】
本開示の別の態様では、差分プライバシーを有する忘却型アクセスのための方法を提供する。方法は、クライアント装置のデータ処理ハードウェアが、データ・ブロックに対するクエリ（ｑ）を実行するための命令を実行する工程を備える。ダウンロード・フェーズ中、方法は、データ処理ハードウェアが、データ・ブロックがクライアント装置に存在するメモリ・ハードウェア上のブロック・スタッシュに記憶されているか否かを判定する工程を備える。データ・ブロックがブロック・スタッシュに記憶されている場合、方法は次も備える：データ処理ハードウェアが、ブロック・スタッシュからデータ・ブロックを除去する工程、データ処理ハードウェアが、データ処理ハードウェアと通信状態にある分散型システムに偽クエリを送信する工程、および、データ処理ハードウェアが、分散型システムから取り出されたランダムなデータ・バケツを破棄する工程。偽クエリは、分散型システムのメモリに記憶されている２つのランダムなデータ・バケツをダウンロードし、データ・バケツの各々は複数のデータ・ブロックを含む。オーバライト・フェーズ中、方法はさらに、データ処理ハードウェアが、ブロック・スタッシュから除去されたデータ・ブロックまたは分散型システムのメモリから取り出された対応するデータ・バケツから取得されたデータ・ブロックに対する読出または書込動作を実行する工程を備える。方法はまた、データ処理ハードウェアが、確率に基づいて、データ・ブロックの現在のバージョンを、ブロック・スタッシュに記憶するか、分散型システムのメモリ上に記憶するかを決定する工程も備える。現在のバージョンのデータ・ブロックがブロック・スタッシュに記憶されている場合、方法は次を備える：データ処理ハードウェアが、分散型システムのメモリに記憶されている別の２つのランダムなデータ・バケツをダウンロードするために分散型システムに偽クエリを送信し、各データ・バケツは複数のデータ・ブロックを含む；データ処理ハードウェアが、ランダムなデータ・バケツ内のデータ・ブロックの全てを復号する；データ処理ハードウェアが、フレッシュなランダム性でランダムなデータ・バケツ内のデータ・ブロックを再暗号化する；および、データ処理ハードウェアが、分散型システムのメモリ上へ再暗号化したデータ・ブロックを含むランダムなデータ・バケツを再アップロードする。
【０００８】
本開示の実装は、次の随意の特徴のうちの１つ以上を含んでもよい。いくつかの構成では、データ・ブロックがダウンロード・フェーズ中にブロック・スタッシュに記憶されていない場合、方法は、データ処理ハードウェアが、分散型システムのメモリから一対のデータ・バケツをダウンロードするために、分散型システムに真のクエリを送信する工程；データ処理ハードウェアが、２つのデータ・バケツ内のデータ・ブロックの全てを復号する工程；および、データ処理ハードウェアが、２つのデータ・バケツのうちの１つがデータ・ブロックを含むか否かを判定する工程を備える。ここで、真のクエリに応答して分散型システムからダウンロードされるデータ・バケツの各々は、複数のデータ・ブロックと、データ・ブロックの識別子に関連付けられている対応する暗号識別子とを含む。これらの構成では、データ・バケツのうちの１つがデータ・ブロックを含む場合、方法はさらに、データ処理ハードウェアが、対応するデータ・バケツからデータ・ブロックを除去する工程；および、データ処理ハードウェアが、データ・バケツから残りのデータ・ブロックを破棄する工程を備える。
【０００９】
いくつかの例では、データ・ブロックの識別子は文字列を含む。オーバライト・フェーズ中にデータ・ブロックに対する読出または書込動作を実行する工程は、データ・ブロックの新しいバージョンによりデータ・ブロックを更新することによって書込動作を実行する工程も含んでよい。確率は（Ｃ／Ｎ）未満であってよく、Ｃはブロック・スタッシュのストレージ容量であり、Ｎは分散型システム上の記憶用にデータ処理ハードウェアによってアウトソーシングされるデータ・ブロックの数である。
【００１０】
いくつかの実装では、現在のバージョンのデータ・ブロックがオーバライト・フェーズ中にブロック・スタッシュに記憶されていない場合、方法は、データ処理ハードウェアが、分散型システムのメモリから一対のデータ・バケツをダウンロードするために、分散型システムに真のクエリを送信する工程を備える。ここで、真のクエリに応答して分散型システムからダウンロードされるデータ・バケツの各々は、複数のデータ・ブロックと、データ・ブロックの識別子に関連付けられている対応する暗号識別子とを含む。この実装では、データ・ブロックの現在のバージョンがオーバライト・フェーズ中にブロック・スタッシュに記憶されていない場合、方法は：データ処理ハードウェアが、データ・バケツ内のデータ・ブロックの全てを復号する工程；前記データ処理ハードウェアが、前記データ・バケツのうちの１つ内のデータ・ブロックの以前のバージョンを、データ・ブロックの現在のバージョンで置換する工程；データ処理ハードウェアが、データ・バケツ内のデータ・ブロックの現在のバージョンを含むデータ・ブロックの全てを再暗号化する工程；および、データ処理ハードウェアが、分散型システムのメモリ上へ再暗号化したデータ・ブロックを含むデータ・バケツを再アップロードする工程も備える。
【００１１】
本開示のさらに別の態様では、差分プライバシーを有する忘却型アクセスのための方法を提供する。方法は、クライアント装置のデータ処理ハードウェアが、サーバ上に記憶されているデータ・ブロックに対するクエリ（ｑ）を実行するための命令を実行する工程を備える。方法は、サーバ上に記憶されている、クエリの行われたデータ・ブロック以外のＫ個のブロックに対する第１のダウンロード要求を送信する工程と、クエリの行われたデータ・ブロックおよびＫ−１の他のブロックに対する第２のダウンロード要求を送信する工程とも備える。方法はさらに、サーバ（１１０）から第１のダウンロード要求のＫ個のブロックについて第１のダウンロード・シーケンスを受信する工程と、サーバから第２のダウンロード要求のクエリの行われたデータ・ブロックとＫ−１個の他のブロックとについて、第２のダウンロード・シーケンスを受信する工程と、を備える。
【００１２】
本開示の実装は、次の随意の特徴のうちの１つ以上を含んでもよい。いくつかの例では、サーバは信頼済みでなく、サーバは、暗号化されていない複数の公開利用可能なデータ・ブロックを記憶している。方法は、データ処理ハードウェアが、サーバから受信される第１のダウンロード・シーケンスのうちのＫ個のブロックを破棄する工程を備えてもよい。これに加えてまたはこれに代えて、方法は、データ処理ハードウェアが、サーバから受信される第２のダウンロード・シーケンスのうちのＫ−１個の他のブロックを破棄する工程も含んでよい。Ｋの値は、セキュリティ・パラメータと、０より大きいエラー確率とに基づいてよい。
【００１３】
忘却型ランダム・アクセス・メモリ（Ｏ−ＲＡＭ）は、クライアントに所有されクライアントに暗号化された、信頼済みでないメモリ上に記憶されているデータに対するクライアントのアクセス・パターンを秘匿することができるものの、Ｏ−ＲＡＭに関連した大きな帯域幅オーバーヘッドおよび／または大きなクライアントストレージの要件のため、Ｏ−ＲＡＭを広範囲に展開することは制限されている。多くのシナリオでは、データ・コンテンツおよびアクセス・パターンが完全に隠されたままであることを保証するというＯ−ＲＡＭの安全保障は、強力すぎる。例えば、他のチャンネル（例えば、データのユーザ／クライアントに関する先験的な知識）を通じて漏れているアクセス・パターンに関する情報を秘匿することは、無意味である場合がある。その場合、クエリの小さな組のみが実際に機密であるときには、アクセス・シーケンス全体を隠すことは不要である。本明細書における実装は、一部の不要なセキュリティ要件を緩和することによって指数関数的に小さな帯域幅オーバーヘッドを達成するために、信頼済みでないメモリ上に記憶されているデータ・ブロックに対し差分プライベート・アクセスを用いることに関する。信頼済みでないメモリは、分散型システム（例えば、クラウド環境）の複数のメモリ位置にわたって存在するストレージ抽象化を生じる場合があり、クライアントは、それら複数のメモリ位置にわたって暗号化されたデータ・ブロックを記憶している場合がある。信頼済みでないメモリはまた、暗号化されていない、公開され知られているデータ・ブロックも記憶している場合がある。それらのシナリオでは、公開され知られている暗号化されていないデータのアクセス・パターンを信頼済みでないメモリから秘匿するために、差分プライベート・アクセスがプライベート情報取出（ＰＩＲ）とともに用いられてもよい。図１Ａおよび図１Ｂには、クライアント１０４によって所有されているＮ個のデータ・ブロック（Ｂ）１０２を分散型システム１４０上に記憶するとともに、クライアント１０４によるデータ・ブロック１０２に対する検索機能を保持しつつ、アクセス・パターンを秘匿するために差分プライベート・アクセスを用いてデータ・ブロック（Ｂ）１０２に対するクエリを忘却的に実行するための一例のシステム１００を示す。クライアント１０４に関連付けられているクライアント装置１２０（例えば、コンピュータ）は、ネットワーク１３０を介して、スケーラブル／エラスティックな非一時的ストレージ抽象化１５０を有する分散型システム１４０と通信する。クライアント装置１２０は、関連するメモリ・ハードウェア１２２および関連するデータ処理ハードウェア１２４も備え得る。ストレージ抽象化１５０（例えば、キー／値ストア、ファイル・システム、データ・ストアなど）は、ストレージ・リソース１１４上にあり、１または複数のクライアント装置１２０によるストレージ・リソース１１４のスケーラブルな使用を可能とする。
【００１４】
システム１００は、随意では、公開され知られている暗号化されていないＮ個のデータ・ブロック１０２を１または複数のストレージ・リソース１１４にわたって記憶してもよい。したがって、クライアント装置１２０はデータ・ブロック１０２を所有しなくてもよく、データ・ブロック１０２のコンテンツが複数の構成において公開利用可能である。しかしながら、データ・ブロック１０２が１または複数のストレージ・リソース１１４から取り出される場合、差分プライベート・アクセスの使用によって同様にアクセス・パターンが隠されてもよい。
【００１５】
いくつかの実装では、分散型システム１４０は、ストレージ抽象化１５０に対するアクセスを管理するコンピューティング・デバイス１１２を実行する。例えば、クライアント装置１２０は、データ・ブロック１０２を暗号化してストレージ抽象化１５０上に記憶してもよく、また、ストレージ抽象化１５０からデータ・ブロック１０２を取り出して復号してもよい。示した例では、分散型システム１４０に関連付けられている信頼済みでない側とネットワーク１３０を介して通信状態にあるクライアント装置１２０に関連付けられている信頼済みの側とを有するシステム１００を示しているが、システム１００は、これに代えて、信頼済みのコンピューティング・デバイス（ＣＰＵ）と信頼済みでないデータ・ストレージとを有する大きなイントラネット上に実装されてもよい。分散型システム１４０またはデータ・ストレージに関連付けられている信頼済みでない側は、コンピューティング・デバイス１１２がプロトコルに正直に従うものの、追加の知見を得るために、分散型システム１４０によって漏らされた情報を用いて任意の確率的多項式時間アルゴリズムを実行し得るという点で、「正直だが好奇心に富む（ｈｏｎｅｓｔ−ｂｕｔ−ｃｕｒｉｏｕｓ）」と考えられる。
【００１６】
いくつかの実装では、分散型システム１００は、リソース１１０，１１０ａ−ｚを備える。リソース１１０は、ハードウェア・リソースおよびソフトウェア・リソースを含んでよい。ハードウェア・リソース１１０は、コンピューティング・デバイス１１２（データ処理装置およびデータ処理ハードウェアとも呼ばれる）を含んでもよく、非一時的なメモリ１１４（メモリ・ハードウェアおよびストレージ・リソースとも呼ばれる）を含んでもよい。ソフトウェア・リソース１１０は、ソフトウェア・アプリケーション、ソフトウェア・サービス、アプリケーション・プログラム・インタフェース（ＡＰＩ）などを含んでもよい。ソフトウェア・リソース１１０は、ハードウェア・リソース１１０に存在してもよい。例えば、ソフトウェア・リソース１１０がメモリ・ハードウェア１１４に記憶されてもよく、ハードウェア・リソース１１０（例えば、コンピューティング・デバイス１１２）がソフトウェア・リソース１１０を実行していてもよい。
【００１７】
ソフトウェア・アプリケーション（すなわち、ソフトウェア・リソース１１０）は、コンピューティング・デバイスにタスクを実行させるコンピュータ・ソフトウェアを指す場合がある。いくつかの例では、ソフトウェア・アプリケーションは、「アプリケーション」、「アプリ（ａｐｐ）」または「プログラム」と呼ばれる場合がある。アプリケーションの例は、次に限定されないが、システム診断アプリケーション、システム管理アプリケーション、システム保守アプリケーション、文書処理アプリケーション、表計算アプリケーション、メッセージング・アプリケーション、メディア・ストリーミング・アプリケーション、ソーシャル・ネットワーキング・アプリケーション、およびゲーム・アプリケーションを含む。
【００１８】
メモリ・ハードウェア１１４，１２２は、コンピューティング・デバイス１１２および／またはクライアント装置１２０（すなわち、クライアント装置１２０のデータ処理ハードウェア１２４）による使用のため、プログラム（例えば、命令のシーケンス）またはデータ（例えば、プログラム状態情報）を一時的にまたは永続的に記憶するために用いられる物理デバイスであってよい。メモリ・ハードウェア１１４，１２２は、揮発性および／または不揮発性のアドレス可能な半導体メモリであってよい。不揮発性のメモリの例は、次に限定されないが、フラッシュ・メモリおよび読出専用メモリ（ＲＯＭ）／プログラマブル読出専用メモリ（ＰＲＯＭ）／消去可能プログラマブル読出専用メモリ（ＥＰＲＯＭ）／電子的に消去可能なプログラマブル読出専用メモリ（ＥＥＰＲＯＭ）（例えば、ブート・プログラムなど典型的にはファームウェアに用いられる）を含む。揮発性メモリの例は、次に限定されないが、ランダム・アクセス・メモリ（ＲＡＭ）、忘却型ランダム・アクセス・メモリ（ＯＲＡＭ）、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、相変化メモリ（ＰＣＭ）、およびディスクまたはテープを含む。
【００１９】
ネットワーク１３０は、ローカル・エリア・ネットワーク（ＬＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、および／またはインターネットなど、様々な種類のネットワークを含んでよい。ネットワーク１３０は、長距離（ｌｏｎｇ  ｒａｎｇｅ）ネットワーク（例えば、インターネットまたはＷＡＮ）を表わす場合もあるが、いくつかの実装では、ネットワーク１３０は、ローカル・エリア・ネットワーク（ＬＡＮ）など、より短い距離のネットワークを含む。いくつかの実装では、ネットワーク１３０は、標準的な通信技術および／またはプロトコルを用いる。したがって、ネットワーク１３０は、イーサネット（登録商標）、ＷｉＦｉ（Ｗｉｒｅｌｅｓｓ  Ｆｉｄｅｌｉｔｙ）（例えば、８０２．１１）、ＷｉＭＡＸ（ｗｏｒｌｄｗｉｄｅ  ｉｎｔｅｒｏｐｅｒａｂｉｌｉｔｙ  ｆｏｒ  ｍｉｃｒｏｗａｖｅ  ａｃｃｅｓｓ）、３Ｇ、ＬＴＥ（Ｌｏｎｇ  Ｔｅｒｍ  Ｅｖｏｌｕｔｉｏｎ）、デジタル加入者線（ＤＳＬ）、非同期転送モード（ＡＴＭ）、インフィニバンド（ＩｎｆｉｎｉＢａｎｄ）、ＰＣＩエクスプレス・アドバンスド・スイッチ（ＰＣＩ  Ｅｘｐｒｅｓｓ  Ａｄｖａｎｃｅｄ  Ｓｗｉｔｃｈｉｎｇ）、ＢＬＥ（Ｂｌｕｅｔｏｏｔｈ（登録商標）  Ｌｏｗ  Ｅｎｅｒｇｙ）などの技術を用いるリンクを含む。同様に、ネットワーク１３０上において用いられるネットワーク・プロトコルは、ＭＰＬＳ（ｍｕｌｔｉｐｒｏｔｏｃｏｌ  ｌａｂｅｌ  ｓｗｉｔｃｈｉｎｇ）、ＴＣＰ／ＩＰ（ｔｒａｎｓｍｉｓｓｉｏｎ  ｃｏｎｔｒｏｌ  ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  ｐｒｏｔｏｃｏｌ）、ＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）、ＨＴＴＰ（ｈｙｐｅｒｔｅｘｔ  ｔｒａｎｓｐｏｒｔ  ｐｒｏｔｏｃｏｌ）、ＳＭＴＰ（ｓｉｍｐｌｅ  ｍａｉｌ  ｔｒａｎｓｆｅｒ  ｐｒｏｔｏｃｏｌ）、ＦＴＰ（ｆｉｌｅ  ｔｒａｎｓｆｅｒ  ｐｒｏｔｏｃｏｌ）などを含むことが可能である。ネットワーク１３０上において交換されるデータは、ＨＴＭＬ（ｈｙｐｅｒｔｅｘｔ  ｍａｒｋｕｐ  ｌａｎｇｕａｇｅ）、ＸＭＬ（ｅｘｔｅｎｓｉｂｌｅ  ｍａｒｋｕｐ  ｌａｎｇｕａｇｅ）を含む技術および／またはフォーマットを用いて表現されることが可能である。加えて、それらのリンクの全部または一部は、ＳＳＬ（ｓｅｃｕｒｅ  ｓｏｃｋｅｔｓ  ｌａｙｅｒ）、ＴＬＳ（ｔｒａｎｓｐｏｒｔ  ｌａｙｅｒ  ｓｅｃｕｒｉｔｙ）、ＶＰＮ（ｖｉｒｔｕａｌ  ｐｒｉｖａｔｅ  ｎｅｔｗｏｒｋ）、ＩＰｓｅｃ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ  ｓｅｃｕｒｉｔｙ）など、従来の暗号化技術を用いて暗号化されることが可能である。他の例では、ネットワーク１３０は、上述のものに代えてまたは加えて、カスタマイズされたおよび／または専用のデータ通信技術を用いる。
【００２０】
データ・ブロック１０２はアトム単位のデータに相当し、各々がＢバイト毎のサイズを有する。例えば、分散型システム上のストレージに対する典型的なＢの値は、６４ＫＢ〜２５６Ｂである。表記Ｎは、クライアント１０４に関連付けられており（または個人情報取出においてストレージ・リソース１１４に関連付けられており）忘却型ランダム・アクセス・メモリ（Ｏ−ＲＡＭ）または忘却型ストレージ（ＯＳ）を用いてストレージ抽象化１５０上に記憶されている、データ・ブロック１０２の総数を示す。より詳細に以下に記載するように、ＯＳは、データ・ブロック１０２がＯ−ＲＡＭによって用いられる単純なインデックス識別子の代わりに一意な文字列識別子によって識別されるという自然な拡張をＯＳが考慮することを除き、Ｏ−ＲＡＭと同じフレームワーク（すなわち、トランスクリプトおよびセキュリティ定義）を用いることができる。したがって、Ｎは、ストレージ抽象化１５０上のＯ−ＲＡＭまたはＯＳの容量を意味する場合がある。Ｎ個のデータ・ブロック１０２の各々は、メモリ・ハードウェア１１４にわたって存在するストレージ抽象化１５０の対応するメモリ位置１１８，１１８Ａ−Ｎ（図１Ｂ）において記憶される。いくつかの実装では、Ｎ個のデータ・ブロック１０２は個人情報取出（ＰＩＲ）ストレージに関連付けられ、その場合、そのＮ個のデータ・ブロック１０２は、１または複数のストレージ・リソース１１４上に記憶されており、暗号化されておらず、公開利用可能である。
【００２１】
従来の暗号化スキームによって機密性が提供される一方、従来の暗号化スキームは、機密性の高い情報を信頼済みでない分散型システム１４０に対し暴露し得るデータ・アクセス・パターンを隠すには有効でない。さらに、従来の暗号化スキームでは、分散型システム１４０上に記憶されている暗号化されたデータ１０２を検索することがクライアント１０４に可能となるのは、クライアント１０４が分散型システム１４０にデータ１０２に対する平文のアクセスを提供した場合のみである。データ１０２がクライアント装置１２０に由来するので、クライアント装置１２０は信頼済みであると見なされる。
【００２２】
いくつかの実装では、クライアント装置１２０および分散型システム１４０は、暗号化されたデータ・ブロック１０２をストレージ抽象化１５０において忘却的に移動させてデータ・アクセス・パターン（それらのデータ・ブロック１０２の読出／書込が行われた）を分散型システム１４０から完全に隠すために、忘却型転字ルーチン４５０を実行する。例えば、忘却型転字ルーチン４５０は、分散型システム１４０に、アレイＡに配置された、再転字されたＮ個のデータ・ブロック１０２を記憶するためのストレージ抽象化１５０の新しいメモリ位置１１８を割り当てさせてもよく、ストレージ抽象化１５０を複数のデータ・バケツ３５０へと編成、分割、区分させてもよく、その両方であってもよい。いくつかの実装では、忘却型転字ルーチン４５０は、各データ・バケツ３５０が１または複数の真のデータ・ブロック１０２と１または複数のダミーのデータ・ブロック１０３との両方を記憶することが可能であるように、ストレージ抽象化１５０を、θ（ｌｏｇ（ｌｏｇＮ））個のメモリ位置１１８を各々含むＮ個のデータ・バケツ３５０へと編成する。これらの実装では、ストレージ抽象化１５０は、θ（Ｎ×ｌｏｇ（ｌｏｇＮ））に等しい総容量を有する。
【００２３】
信頼済みの側において、クライアント装置１２０は、忘却型転字ルーチン４５０を実行する一方、一対の擬似ランダム関数Ｆ１，Ｆ２および対応する識別子ｉｄを用いて、一度に２個のデータ・バケツ３５０を分散型システム１４０から反復的にダウンロードし、メモリ・ハードウェア１２２に対しブロック・スタッシュ３７０を割り当てることができる。受信される各データ・バケツ３５０について、クライアント装置１２０は、転字されたデータ・ブロックを生成するために、ランダムな転字を復号し、対応するデータ・バケツ３５０内のデータ・ブロック１０２に対し適用するとともに、各々の転字されたデータ・ブロック１０２に対する対応するバッファ・バケツ３６０を決定する。ストレージ抽象化１５０において暗号化されたデータ・ブロック１０２を忘却的に移動させるための忘却型転字ルーチンを実行する追加の詳細は、２０１７年４月２７日に出願した米国特許出願６２／４９０，８０４（その全体を引用によって本明細書に援用する）に見出される。いくつかの実装では、さらにクライアント装置１２０は、バケツ３５０の対からデータ・ブロック１０２をダウンロードすることによってローカルメモリ・ハードウェア１２２における忘却型シャッフルを初期化するとともに、新しく選択される擬似ランダム関数Ｆ’１，Ｆ’２を用いる新しいランダムに選択される転字に対しそれにしたがって再暗号化されたデータ・ブロック１０２をシャッフルする前にデータ・ブロック１０２を復号／再暗号化する。その後、クライアント装置１２０は、新しく選択された擬似ランダム関数Ｆ’１，Ｆ’２に基づいて、再転字されたデータ・ブロック１０２を対応するバッファ・バケツ３６０にアップロードする。古いバケツ３５０は、シャッフルが完了した後、削除されてもよい。この忘却型シャッフルは、忘却型転字ルーチン４５０をクライアント装置１２０および分散型システム１４０上で実行する時に生じてもよい。ストレージ抽象化１５０においてＮ個のデータ・ブロック１０２を忘却的にシャッフルする追加の詳細は、２０１７年５月１９日に出願した、米国特許出願６２／５０８，５２３（その全体を引用によって本明細書に援用する）に見出される。
【００２４】
いくつかの実装では、クライアント装置１２０がストレージ抽象化１５０上に記憶されている暗号化されたデータ・ブロック１０２にアクセス（読出／書込）する必要がある場合、クライアント装置１２０のデータ処理ハードウェア１２４は、データ・ブロック１０２に対するクエリ（ｑ）を実行するために命令３００，４００を実行する。命令３００，４００を実行することによって、クライアント装置１２０は、データ・ブロック１０２のコンテンツやクライアント装置１２０によって実行されるクエリ（ｑ）のシーケンスを分散型システム１４０に暴露することなく、データ・ブロック１０２を取り出すことができる。クエリ（ｑ）は、２つのフェーズ、すなわち、（１）ダウンロード・フェーズと、（２）オーバライト・フェーズとからなるので、分散型システム１４０は対応する動作が読出であるか書込であるかを意識しない。さらに、命令３００，４００の実行は、いずれのデータ・ブロック１０２が分散型システム１４０から読出／書込を行われたかを不要とする。命令３００，４００の実行には、クライアント装置１２０がデータ・ブロック１０２に対する対応するクエリ（ｑ）を実行する場合、クライアント装置１２０と分散型システム１４０との間の２回のラウンドトリップが必要である。例えば、各クエリ（ｑ）がダウンロード・フェーズとオーバライト・フェーズとを含むので、書込動作に関連付けられているオーバライト・ブロックのコンテンツは、ダウンロード・フェーズ中のダウンロードされるブロックのコンテンツに依存しない。したがって、２つのブロックは、１回のラウンドトリップを用いて要求されることが可能であり、２回目のラウンドトリップは、ストレージ抽象化１５０にオーバライト・ブロックをアップロードするために用いられることができる。
【００２５】
図１Ｂを参照すると、いくつかの実装では、分散型のストレージ・システム１４０は、疎結合メモリ・ホスト１１０，１１０ａ−ｚ（例えば、コンピュータまたはサーバ）を備え、各メモリ・ホストは、データをキャッシュするために用いられ得るストレージ・リソース１１４（例えば、メモリ・ハードウェア、メモリ・ハードウェア、フラッシュ・メモリ、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、および／またはディスク）と通信状態にある、コンピューティング・リソース１１２（例えば、１または複数のプロセッサまたは中央処理装置（ＣＰＵ））を有する。ストレージ・リソース１１４上にあるストレージ抽象化１５０は、１または複数のクライアント装置１２０，１２０ａ−ｎによるストレージ・リソース１１４のスケーラブルな使用を可能とする。クライアント装置１２０は、ネットワーク１３０を通じて（例えば、リモート・プロシージャ・コール（ＲＰＣ）を介して）メモリ・ホスト１１０と通信してもよい。
【００２６】
いくつかの実装では、分散型のストレージ・システム１４０は「シングル・サイド型（ｓｉｎｇｌｅ−ｓｉｄｅｄ）」であり、クライアント装置１２０がデータ・ブロック１０２に対するクエリ（ｑ）を実行するための命令３００，４００を実行するときに、クライアント装置１２０からの真のクエリ３０２，４０２および／または偽クエリ３０４，４０４に応答してストレージ抽象化１５０からデータ・ブロック１０２および／またはダミーのデータ・ブロック１０３を取り出すための、サーバ・ジョブの必要が除かれる。「シングル・サイド型」とは、メモリ・ホスト１１０に対する要求処理のほとんどが、メモリ・ホスト１１０のＣＰＵ１１２上でのソフトウェアによってではなく、ハードウェアにおいて行われ得る方法を指す。シングル・サイド型の分散型キャッシング・システムに関連する追加の概念および特徴は、米国特許９，１６４，７０２（その全体を引用によって本明細書に援用する）に見出される。
【００２７】
分散型システム１４０は、リモート・メモリ・ホスト１１０（例えば、ストレージ抽象化２００）のストレージ・リソース１１４（例えば、メモリ・ハードウェア）においてデータ・ブロック１０２を忘却的に移動させるとともに、ＲＰＣを介して、またはリモート・ダイレクト・メモリ・アクセス（ＲＤＭＡ）可能なネットワーク・インタフェース・コントローラ（ＮＩＣ）１１６を介して、リモート・メモリ・ホスト１１０からデータ・ブロック１０２を得ることができる。ネットワーク・インタフェース・コントローラ１１６（ネットワーク・インタフェース・カード、ネットワーク・アダプタ、またはＬＡＮアダプタとしても知られている）は、ネットワーク１３０にコンピューティング・デバイス／リソース１１２を接続するコンピュータ・ハードウェア・コンポーネントであってもよい。メモリ・ホスト１１０ａ−ｚおよびクライアント装置１２０の両方は、各々、ネットワーク通信用のネットワーク・インタフェース・コントローラ１１６を有してもよい。命令３００，４００および／またはハードウェア・リソース１１０の物理的なプロセッサ１１２上で実行する忘却型転字ルーチン４５０は、メモリ１１４の１組のリモート・ダイレクト・メモリ・アクセス可能な領域／位置１１８Ａ−Ｎをネットワーク・インタフェース・コントローラ１１６に登録する。各メモリ位置１１８は、対応するデータ・ブロック１０２を記憶するように構成されている。
【００２８】
いくつかの実装では、クライアント装置１２０がデータ・ブロック１０２に対するクエリ（ｑ）を実行するために命令３００，４００を実行し、クライアント装置１２０のメモリ・ハードウェア１２２におけるブロック・スタッシュ３７０上にデータ・ブロック１０２がローカルに記憶されていると判定する場合、クライアント装置１２０は、ブロック・スタッシュ３７０からデータ・ブロック１０２を取り出すとともに、ローカルメモリ・ハードウェア１２２におけるブロック・スタッシュ３７０からのデータ・ブロック１０２の取出を秘匿するべく、ランダムなブロック１０２（または、真のブロックおよび／または偽ブロック１０２，１０３を含むランダムなデータ・バケツ３５０）を取り出すために偽クエリ３０４，４０４をＮＩＣ１１６に送信する。クライアント装置１２０は、偽クエリ３０４，４０４によりダウンロードされるランダムなブロック１０２を破棄してもよい。一方、データ・ブロック１０２がストレージ抽象化１５０上に記憶されているとクライアント装置１２０が判定する場合、クライアント装置１２０は、ストレージ抽象化１５０から対応するデータ・ブロック１０２を取り出すために、ＮＩＣ１１６に真のクエリ３０２，４０２を送信してもよい。
【００２９】
図２Ａおよび図２Ｂは、１または複数の談合（ｃｏｌｌｕｄｉｎｇ）ストレージ・リソース１１４（図２Ａ）または非談合複数のストレージ・リソースのうちの１つ（図２Ｂ）上に記憶されているデータ・ブロック１０２に対するダウンロード要求２０２，２０４を実行するためにクライアント装置１２０上において実行する、差分プライベート情報の情報取出（ＤＰ−ＩＲ）命令の一例を提供するＯ−ＲＡＭおよびＯＳとは異なり、Ｎ個のデータ・ブロック１０２のコンテンツが任意の敵対者を含む全てのパーティによって知られていると仮定される。この場合、信頼済みでないサーバは、クライアント装置１２０に対するアクセスを提供する前に、Ｎ個のデータ・ブロックを生成する。通常、ＰＩＲクライアント装置１２０は、データ・ブロック１０２が暗号化されておらず、それらのメモリ位置が公開利用可能であるので、ステートレスである。
【００３０】
Ｎ個のデータ・ブロック１０２を生成および記憶する単一のサーバ１１０（例えば、１つのストレージ・リソース１１４）について、図２Ａには、ストレージ・リソース１１４ａからブロックＢ３（１０２）をダウンロードするためにＤＰ−ＩＲ命令２００を実行するクライアント装置１２０を示す。ここで、ブロックＢ３は、１つのストレージ・リソース１１４ａ上に記憶されている９個のＮブロックＢ１−Ｂ９のうちの１つに相当する。クライアント装置１２０は、クエリされたブロック１０２に関連付けられているインデックスｉ（例えば、ｉ＝１，２，３．．．、または９）を呼び出してもよい。ＤＰ−ＩＲ命令２００は、下限に向かって漸近的に密になる一定なエラー確率（α）に対するセキュリティ・パラメータεを有する差分プライバシーを含む。セキュリティ・パラメータεは０以上であってよく、エラー確率αは０より大きくてよい。ダウンロードされたブロックＢ３に対するアクセス・パターンを秘匿するために、ＤＰ−ＰＩＲ命令２００は、ブロックＢ３以外のＫ個のブロックに対する確率αのダウンロード要求２０２と、ブロックＢ３およびＫ−１個の他のブロックに対する確率１−αの別のダウンロード要求２０４とを実行することによって、真のクエリを偽装する。従って、各ダウンロード要求２０２，２０４は、ストレージ・リソース１１４上に記憶されているＮ個のデータ・ブロック１０２のあいだの帯域幅のちょうどＫ個のブロックを要求する。ダウンロード要求２０２，２０４は、ブロックＢ３が、クライアント装置１２０がダウンロードすることを望むブロックＢ３に対し実際にクエリされるものである、という事実を秘匿する任意の順番で生じてよい。Ｋの値は、セキュリティ・パラメータεと、エラー確率（α）とに基づく。例えば、Ｋは以下のように表現されてもよい。
【００３１】
【数１】
0006911158.tif 000002
【００３２】
単一のサーバの例では、クライアント装置１２０は、エラー確率αに関連付けられており、クエリされたブロックＢ３以外のＫ個のブロックＢ１，Ｂ２，Ｂ５を返す第１のダウンロード・シーケンス２１２と、エラー確率１−αに関連付けられており、ブロックＢ３およびＫ−１個の他のブロックＢ６，Ｂ９に対する第２のダウンロード・シーケンス２１４とを受信する。第２のダウンロード・シーケンス２１４は、クライアント装置１２０によって、第１のダウンロード・シーケンス２１２を受信する前に受信されてもよく、後に受信されてもよい。エラー確率αに関連付けられている第１のダウンロード・シーケンス２１２において返されるＫ個のブロックＢ１，Ｂ２，Ｂ５と、エラー確率１−αに関連付けられている第２のダウンロード・シーケンス２１４において返されるＫ−１個の他のブロックＢ６，Ｂ９とは、クライアント装置１２０上において実行するＤＰ−ＩＲ命令２００によって、各々一様ランダムに選択されてよい。
【００３３】
いくつかの実装では、複数のサーバ１１０，１１０ａ−ｎを運用するエンティティまたは組織（例えば、それぞれのサーバ１１０に関連付けられている２つ以上のストレージ・リソース１１４，１１４ａ−ｎ）は、複数のサーバのうちのフラクションｔのコラプションを生じる該複数のサーバのうちの１つを含む。互いに談合する様々なストレージ・リソース１１４ａ−ｎからデータ・ブロック１０２をダウンロードする場合にクライアント装置１２０によるアクセス・パターンを秘匿するこのシナリオにおいて、図２Ａには、談合するストレージ・リソース１１４ａ−ｎの全てを分けて均等にブロックＢ３を要求するのではなく、一様ランダムに選択されたストレージ・リソース１１４にダウンロード要求２０２，２０４を送信することによって、ブロックＢ３（または別のブロックＢｉ）をダウンロードするためにＤＰ−ＩＲ命令２００を実行するクライアント装置１２０を示す。したがって、複数の談合するサーバの設定においてダウンロードされたブロックＢ３に対するアクセス・パターンを秘匿するために、ＤＰ−ＰＩＲ命令２００は、ブロックＢ３以外のＫ個のブロックに対する確率αを有するダウンロード要求２０２とブロックＢ３およびＫ−１個の他のブロックに対する確率１−αを有する他のダウンロード要求２０４とを実行することによって、一様ランダムに選択されたストレージ・リソース１１４に対し送信される真のクエリを偽装する。クライアント装置からのダウンロード要求２０２，２０４の各々を受信することに応じて、一様ランダムに選択されたストレージ・リソース１１４は、単一のサーバの設定に関連して上述したのと同じようにして、クエリされたブロックＢ３以外のＫ個のブロックＢ１，Ｂ２，Ｂ５に対するエラー確率αに関連付けられている対応するダウンロード・シーケンス２１２と、ブロックＢ３およびＫ−１個の他のブロックＢ６，Ｂ９に対するエラー確率１−αに関連付けられている対応するダウンロード・シーケンス２１４とを返す。
【００３４】
図２Ｂを参照すると、クライアント装置１２０は、複数の非談合サーバ１１０（相互に信頼済みでなく、したがって、互いに情報を共有しない）のうちの１つ（例えば、２つ以上のストレージ・リソース１１４）からのデータ・ブロックＢｑ（１０２）をクエリする。例えば、非談合サーバ１１０は、クライアント装置１２０に対しアクセス可能であるが、契約上の義務または他の理由のために互いに情報を共有しない、別個のエンティティによって所有され得る。各非談合サーバ１１０は、各サーバ１１０がその対応するストレージ・リソース１１４上において実行されるメモリ・アクセス・パターンを全て監視できるように、対話しない敵対者に関連付けられてもよい。ダウンロードされたブロックＢｑに対するアクセス・パターンを秘匿するために、ＤＰ−ＰＩＲ命令２００は、談合しないストレージ・リソース１１４の各々に対し送信される対応するダウンロード要求２２４（各ストレージ・リソース１１４から帯域幅のちょうどｃ個のランダムなブロックをダウンロードすることを要求する）を実行することによって、真のクエリを偽装する。クエリされたブロックＢｑを記憶するストレージ・リソース１１４について、対応するダウンロード要求２２４は、クエリされたブロックＢｑと、ｃ−１個の他のブロックとに対するものである。残りのストレージ・リソース１１４について、各対応するダウンロード要求２２４は、クエリされたブロックＢｑ以外のｃ個のブロックに対するものである。各談合しないストレージ・リソース１１４に対するｃの値は、セキュリティ・パラメータεと、非談合サーバの総数Ｄと、各ストレージ・リソース１１４上に記憶されているＮ個のデータ・ブロック１０２の対応する数とに基づく。例えば、各談合しないストレージ・リソース１１４については、ｃは次のように表現されてよい。
【００３５】
【数２】
0006911158.tif 000003
【００３６】
いくつかの実装では、Ｏ−ＲＡＭは、クライアント装置１２０が、クライアントに所有されクライアントに暗号化されたデータ・ブロック１０２を、分散型システム１４０のストレージ抽象化１５０にわたって対応するメモリ位置１１８上にプライベートで記憶することを可能とする。図２Ａおよび図２ＢのＤＰ−ＩＲの例とは対照的に、Ｏ−ＲＡＭに記憶されているデータ・ブロック１０２は、クライアント装置１２０によってプライベート・キーを用いて暗号化されており、各データ・ブロック１０２に関連付けられているメモリ位置１１８は、信頼済みでない分散型システム１４０から隠される。図３Ａ〜図３Ｄには、分散型システム１４０にデータ・ブロック１０２のコンテンツやクライアント装置１２０によって実行されるクエリ（ｑ）のシーケンスを暴露することなく、一例のクライアント装置１２０上において実行するストレージ抽象化１５０上に記憶されている暗号化されたデータ・ブロック１０２にアクセス（読出／書込）するクエリ（ｑ）を実行するための差分プライベート−忘却型ランダム・アクセス・メモリ（ＤＰ−ＯＲＡＭ）命令３００を示す。クエリ（ｑ）は、２つのフェーズ、すなわち、（１）ダウンロード・フェーズと、（２）オーバライト・フェーズとからなるので、分散型システム１４０は対応する動作が読出であるか書込であるかを意識せず、またクエリされたデータ・ブロックＢｉが存在しない場合のミスを暴露する。クライアント装置１２０（例えば、データ処理ハードウェア１２４上）において実行するＤＰ−ＯＲＡＭ命令３００は、最初に暗号化モジュール３０５を用いて長さｋのプライベート・キーＫ，Ｋ１，Ｋ２を生成し、Ｎ個の空のブロック・スロット（例えば、空のメモリ位置１１８）からなるストレージ抽象化１５０上のアレイＡを初期化し、クライアント装置１２０のメモリ・ハードウェア１２２上のブロック・スタッシュ３７０を初期化してもよい。アレイＡの各々の空のブロック・スロットは、対応するインデックスＡｉを含んでよい。各々の空のブロック・スロットは、随意では、ダミーのブロック（例えば、０に等しい暗号化を有するブロック）で最初に満たされてもよい。
【００３７】
いくつかの例では、クライアント装置１２０および分散型システム１４０は、忘却型転字ルーチン４５０を実行して、分散型システム１４０に、転字されたデータ・ブロック１０２または再転字されたデータ・ブロックの記憶のためにストレージ抽象化１５０の新しいメモリ位置１１８を割り当てさせ、ストレージ抽象化１５０を複数のＭ個のデータ・バケツ３５０，３５０ａ−ｎへと編成、分割、区分させる。各データ・バケツ３５０は、Ｎ個のデータ・ブロック１０２のうちの指定された数を記憶してもよい。いくつかの例では、データ・ブロック１０２は、Ｍ個のデータ・バケツ３５０へのストレージ抽象化１５０の分割が信頼済みでない分散型システム１４０に不明瞭／忘却型であるように、以前の忘却型転字ルーチン４５０中にクライアント装置１２０において実行された擬似ランダムな転字πによって各データ・バケツ３５０に対しランダムに割り当てられる。より小さなデータ・バケツ３５０によって、分散型システム１４０およびクライアント装置１２０が忘却型転字ルーチン４５０および命令３００の実行中に転字動作を実行している時、帯域幅を増加させるためにストレージ抽象化１５０のＯ−ＲＡＭがさらに分割される。分散型システム１４０において初期化されるＭ個のデータ・バケツ３５０の数は、セキュリティおよび／または帯域幅の要件に基づいて調整可能である。
【００３８】
ブロック・スタッシュ３７０は、クライアント装置１２０のメモリ・ハードウェア１２２上にＣと等しいスペース／サイズ／容量を占有し、各データ・ブロック１０２は、ブロック・スタッシュ３７０（ストレージ抽象化１５０に加えて）に記憶される確率ｐを有する。ブロック・スタッシュ３７０の容量Ｃは、セキュリティおよび／または帯域幅の要件に基づいて調整可能である。例えば、ブロック・スタッシュ３７０の容量Ｃを増加させることによって、増加した帯域幅を犠牲にしてセキュリティが増大する。ブロック・スタッシュ３７０に記憶されているデータ・ブロックの確率ｐは、次のように表現されてよい。
【００３９】
【数３】
0006911158.tif 000004
【００４０】
ＤＰ−ＯＲＡＭ命令３００は、各暗号化されたデータ・ブロック１０２の実際の位置が分散型システム１４０から隠されるように、クライアント装置１２０に、プライベート・キーＫを用いて各データ・ブロック１０２を暗号化させるとともに、転字πに基づき、各暗号化されたデータ・ブロックＢｉ（１０２）をストレージ抽象化１５０上の対応するランダムに選択された空のブロック・スロットＡｉに反復的にアップロードさせる。さらに、データ・ブロック１０２が、クライアントに所有されたプライベート・キーＫを用いてクライアント装置１２０によって信頼済みの側において暗号化されるので、ストレージ抽象化１５０上に記憶されているＮ個のデータ・ブロック１０２のコンテンツは、分散型システム１５０にも知られない。クライアント装置１２０は、要求されたデータ・ブロック１０２に関連付けられている対応するインデックスｉとともに転字πを適用することによって、ストレージ抽象化１５０上に記憶されている対応するデータ・ブロック１０２に単純にアクセスしてもよい。
【００４１】
図３Ａを参照すると、データ・ブロック（Ｂｉ）１０２がクライアント装置１２０のメモリ・ハードウェア１２２上のブロック・スタッシュ３７０に記憶されている場合、データ処理ハードウェア１２４は、ダウンロード・フェーズ中にデータ・ブロック（Ｂｉ）１０２に対するクエリ（ｑ）を実行する。Ｂｉは、暗号化されてストレージ抽象化１５０のアレイＡの上に記憶されているＮ個のデータ・ブロック１−１６のうちのいずれにも相当し得る。データ・ブロックＢｉ（１０２）は確率ｐでブロック・スタッシュ３７０に記憶されているので、データ処理ハードウェア１２４は、ストレージ抽象化１５０上に記憶されている何らかのランダムなデータ・ブロック１０２をダウンロードしてブロック・スタッシュ３７０からのデータ・ブロック（Ｂｉ）の取出を難読化するために、ブロック・スタッシュ３７０から、要求されたデータ・ブロック（Ｂｉ）１０２を除去し、信頼済みでない分散型システム１４０に偽クエリ３０４を送信する。示した例では、偽クエリ３０４は、ストレージ抽象化１５０上に記憶されているＮ個のブロック１０２からなるアレイＡの第３のデータ・バケツ３５０ｃから、ブロック１１をランダムに選択し、ダウンロードする。ここで、偽クエリ３０４は、ストレージ抽象化１５０にＡ［ｊ］を要求し、ここで、ｊ（例えば、示した例ではｊは「１１」に等しい）は一様ランダムに選択される。ダウンロードされたデータ・ブロック（例えば、ブロック１１）を偽クエリ３０４により受信すると、データ処理ハードウェア１２４は、クライアント装置１２０が単にランダムにブロックをダウンロードしてブロック・スタッシュ３７０からデータ・ブロック（Ｂｉ）の実際の読出を難読化することがあるので、単純にデータ・ブロック１０２を破棄してもよい。したがって、信頼済みでない分散型システム１４０は、取り出されたブロック（例えば、ブロック１１）が真のクエリ３０２に応じてダウンロードされたか、偽クエリ３０４に応じてダウンロードされたかを、意識しない。データ処理ハードウェア１２４は、ブロック・スタッシュ３７０から取り出されたデータ・ブロック（Ｂｉ）に対し、読出動作または書込動作を実行するとともに、オーバライト・フェーズ中、確率ｐでブロック・スタッシュ３７０に、またはストレージ抽象化１５０に現在のバージョンのデータ・ブロック（Ｂｉ）を記憶してもよい。
【００４２】
一方、図３Ｂには、データ・ブロック（Ｂｉ）１０２がクライアント装置１２０のメモリ・ハードウェア１２２上のブロック・スタッシュ３７０にローカルに記憶されていない場合、データ処理ハードウェア１２４が、ダウンロード・フェーズ中にデータ・ブロック（Ｂｉ）１０２に対するクエリ（ｑ）を実行することを示す。データ・ブロックＢｉ（１０２）がブロック・スタッシュ３７０に記憶されていないので、データ処理ハードウェア１２４は、ストレージ抽象化１５０上に記憶されているデータ・ブロックＢｉをダウンロードするために、信頼済みでない分散型システム１４０に真のクエリ３０２を送信する。示した例では、Ｂｉは、ストレージ抽象化１５０の第２のデータ・バケツ３５０ｂにおけるブロック６に対応する。ここで、真のクエリ３０２は、ストレージ抽象化１５０にＡ［ｉ］を要求し、ｉ（例えば、示した例ではｉは「６」に等しい）はクライアント装置１２０がアクセスを望むデータ・ブロック（Ｂｉ）１０２のインデックス／識別子に対応する。真のクエリ３０２によりデータ・ブロックＢｉ（１０２）を取り出す／ダウンロードすることに応じて、データ処理ハードウェア１２４はブロックＢｉを復号する。例えば、データ処理ハードウェア１２４は、ブロック６のコンテンツを復号するために、暗号化モジュール３０５上にローカルに記憶されているプライベート・キーＫにアクセスしてもよい。クライアント装置１２０は、取り出したブロックＢｉ（例えば、ブロック６）を保持してもよい（例えば、メモリ・ハードウェア１２２に）。
【００４３】
図３Ｃを参照すると、データ処理ハードウェア１２４は、オーバライト・フェーズ中、確率ｐでブロック・スタッシュ３７０における現在のバージョンのデータ・ブロック（Ｂｉ’）をクライアント装置１２０のメモリ・ハードウェア１２２上に記憶する。オーバライト・フェーズは、対応するダウンロード・フェーズ（ブロック・スタッシュ３７０（図３Ａ）から、またはストレージ抽象化１５０（図３Ｂ）から以前のバージョンのデータ・ブロック（Ｂｉ）を取り出した）に続く。いくつかの例では、クライアント装置１２０は、新しいバージョン（Ｂｉ’）によりデータ・ブロックを更新するために、ダウンロード・フェーズ中に取り出されたデータ・ブロック（Ｂｉ）に対し書込動作を実行する。本明細書で用いられるところでは、新しいバージョンＢｉ’により以前のバージョンＢｉを更新することは、新しいバージョンＢｉ’により以前のバージョンＢｉを置換して破棄することを含む。それらの例では、更新された新しいバージョン（Ｂｉ’）は、オーバライト・フェーズ中、確率ｐでブロック・スタッシュ３７０上に記憶される。他の例では、クライアント装置１２０は、ダウンロード・フェーズ中に取り出されたデータ・ブロック（Ｂｉ）に対する読出動作を単純に実行する。これらの例では、ブロック・スタッシュ３７０において記憶されている現在のバージョンは、ダウンロード・フェーズ中に取り出されたバージョンから変化していない。
【００４４】
信頼済みでない分散型システム１４０から確率ｐでブロック・スタッシュ３７０における現在のバージョンのデータ・ブロック（Ｂｉ’）を記憶することを難読化するために、データ処理ハードウェア１２４は、ストレージ抽象化１５０上に記憶されている何らかのランダムなデータ・ブロック１０２をダウンロードするべく、信頼済みでない分散型システム１４０に別の偽クエリ３０４を送信する。示した例では、偽クエリ３０４は、ストレージ抽象化１５０上に記憶されているＮ個のブロック１０２からなるアレイＡの第２のデータ・バケツ３５０ｂから、ブロック８をランダムに選択し、ダウンロードする。ここで、偽クエリ３０４は、ストレージ抽象化１５０にＡ［ｊ］を要求し、ここで、ｊ（例えば、示した例ではｊは「８」に等しい）は一様ランダムに選択される。偽クエリ３０４によりダウンロードされたデータ・ブロック（例えば、ブロック８）を受信すると、データ処理ハードウェア１２４は、ランダムなフレッシュ性によりブロックを復号および再暗号化し、次いで、分散型システム１４０のストレージ抽象化１５０上へ、再暗号化されたデータ・ブロック（例えば、ブロック８）をアップロードして戻す。ここで、データ処理ハードウェア１２４は、ブロックが読出／書込アクセスについて偽クエリ３０４に応じてアップロードされたか真のクエリ３０２に応じてアップロードされたかを分散型システム１４０が意識しないように、コンテンツを変化させることなく、データ・ブロック（例えば、ブロック８）を単純に再暗号化する。別の言い方をすると、データ処理ハードウェア１２４には、再暗号化されたデータ・ブロック１０２がオーバライトの結果として更新されたコンテンツを含むのか否かを、またはコンテンツが変化しているのか否かを知る方法がない。
【００４５】
対して、現在のバージョンのデータ・ブロック（Ｂｉ’）がブロック・スタッシュ３７０に記憶されていない場合、図３Ｄには、クライアント装置１２０が現在のバージョンのデータ・ブロック（Ｂｉ’）を保持する（例えば、メモリ・ハードウェア１２２に）一方、データ処理ハードウェア１２４が、ストレージ抽象化１５０から対応するデータ・ブロック（Ｂｉ）（例えば、ブロック６）を取り出すために、信頼済みでない分散型システム１４０に真のクエリ３０２を送信することを示す。その後、データ処理ハードウェア１２４は、ストレージ抽象化１５０上のストレージ用に分散型システム１４０に現在のバージョンのデータ・ブロック（Ｂｉ’）を暗号化してアップロードするとともに、真のクエリ３０２により取り出された対応する以前のバージョンのデータ・ブロック（Ｂｉ）を破棄する。いくつかの例では、現在のバージョンのデータ・ブロック（Ｂｉ’）は、ダウンロード・フェーズ中に取り出された以前のバージョンのデータ・ブロック（Ｂｉ）に対する書込動作を実行した後にクライアント装置１２０によって更新されたブロック６の新しいバージョンに相当する。他の例では、クライアント装置１２０がダウンロード・フェーズ中に取り出されたデータ・ブロック（Ｂｉ）に対する読出動作しか実行しない場合、分散型システム１４０に対しアップロードされた現在のバージョンのデータ・ブロック（Ｂｉ’）（例えば、ブロック６）は、フレッシュに計算された暗号文（例えば、異なる暗号化）を有することを除き、対応する破棄されたデータ・ブロックＢｉから変化していない場合がある。したがって、信頼済みでない分散型システム１４０は、クライアント装置１２０がプライベート・キーを用いてローカルにデータ・ブロック（Ｂｉ’）をフレッシュに暗号化したので、アップロードされた現在のバージョンのデータ・ブロック（Ｂｉ’）のコンテンツが変化しているか否かを意識しない。
【００４６】
図３Ａ〜図３ＤのＯ−ＲＡＭの構築には、クライアント１０４によってアウトソーシングされたＮ個のデータ・ブロック１０２の各々が一意なブロック識別子ｉを有する必要があるものの、この忘却型ストレージ（ＯＳ）の構築により、データ・ブロック１０２が文字列によって識別されることが可能となる。さらに、ＯＳプロトコルは、動作がストレージ抽象化１５０上の現在記憶されているデータ・ブロック１０２を参照するか存在していないデータ・ブロックを参照する（すなわち、ブロック・ミス）かを敵対者が学習することが不可能であるように、現在記憶されているいずれのブロックにも対応しない識別子を参照する動作（読出／書込）を扱う必要がある。いくつかの実装では、このＤＰ−ＯＲＡＭ構築／プロトコルでは、クライアント装置１２０に対する位置マップ（一意なインデックス［Ｎ］をＮ個のブロックの各々に割り付ける）を（例えば、メモリ・ハードウェア１２２に）記憶することによって、ＤＰ−ＯＳ構築／プロトコルに変換される。ここで、位置マップは、各ブロック識別子を対応するインデックスに翻訳し、以前に説明したＤＰ−ＯＲＡＭのように、クエリの残りの部分が正確に続くことを可能とする。これらの実装は、しかしながら、位置マップを記憶するのに大量のクライアント側ストレージが必要であるため、実用的でないことがある。対応するインデックスに対するブロック識別子（例えば、文字列）の１対１の位置マップをクライアントが記憶することを緩和するために、ここでの実装は、擬似ランダム関数（ＰＲＦ）を用いてブロック識別子を小さな領域からのインデックスに翻訳することに向けられる。ＰＲＦが単一キーのストレージを必要とするので、クライアントのストレージ要件は、位置マップを記憶することと比較して、著しく低減される。
【００４７】
図４Ａ〜図４Ｃには、ストレージ抽象化１５０上に暗号化された形式によりＮ個のデータ・ブロック１０２を記憶するべくクライアント装置１２０および分散型システム１４０を初期化するためにクライアント装置１２０上において実行する、一例の差分プライベート−忘却型ストレージ（ＤＰ−ＯＳ）命令４００を示す。図５Ａ〜図５Ｄには、データ・ブロック１０２のコンテンツやクライアント装置１２０によって実行されるクエリ（ｑ）のシーケンスを分散型システム１４０に暴露することなく、ストレージ抽象化１５０上に記憶されている暗号化されたデータ・ブロック１０２のうちの１つにアクセス（読出／書込）するクエリ（ｑ）を実行するために、ＤＰ−ＯＳ命令４００を実行するクライアント装置１２０を示す。
【００４８】
図４Ａを参照すると、データ処理ハードウェア１２４によるＤＰ−ＯＳ命令４００の実行によって、クライアント装置１２０に、暗号化モジュール３０５から取得された１または複数のプライベート・キーを用いてＮ個のデータ・ブロック１０２の各々を暗号化させ、クライアント装置１２０のメモリ・ハードウェア１２２上のブロック・スタッシュ３７０を初期化させ、確率ｐで、暗号化されたデータ・ブロック１０２のサブセットをブロック・スタッシュ３７０に記憶させる。確率ｐは、上述の式（３）を用いて表現されてよい。ＯＲＡＭの場合のように、クライアント装置１２０におけるブロック・スタッシュ３７０は、セキュリティおよび帯域幅の要件に基づいて調整可能であるＯ（Ｃ）個のブロックのストレージの容量を有する。クライアント装置１２０（例えば、データ処理ハードウェア１２４）は、命令４００を実行する場合、追加で、ブロック・スタッシュ３７０に記憶されている各データ・ブロック１０２に対応する一意な文字列識別子ｉｄを記憶するために識別子スタッシュ３７２を初期化する。
【００４９】
各データ・ブロック１０２は、文字列として表現される対応する識別子ｉｄを含む。ＤＰ−ＯＳの初期化中、命令４００がクライアント装置１２０にさらにＰＲＦ（Ｆ１，Ｆ２）をランダムに生成させる一方、分散型システム１４０は、対応する暗号化されたブロック１０２，１０３を記憶するために、ちょうどｍ個のメモリ・スロットを各々有しラベル１−Ｎを有するＮ個のバケツ３５０，３５０Ａ−Ｎを初期化する。示した例では、各バケツ３５０のメモリ・スロットｍの数は次のように表現される。
【００５０】
【数４】
0006911158.tif 000005
【００５１】
したがって、対応するバケツ３５０における各メモリ・スロットｍは、暗号化された形式により真のデータ・ブロック１０２を記憶するか、または暗号化された形式によりダミーのデータ・ブロック１０３を記憶する。Ｎ個のバケツ３５０が初期化される場合、各バケツ３５０は、最初にダミーのブロック１０３で満たされてもよい。各ブロック１０２，１０３のメタデータおよびコンテンツは一緒に記憶されるので、各ブロック１０２，１０３は、そのブロックが真であるか偽（すなわち、ダミー）であるかを示す対応するタグを含んでもよい。分散型システム１４０は、Ｎ対のバケツ識別子の位置マップ３５５を記憶し、第ｉ番目の対としてＰｏｓＭａｐ［ｉ］を示してもよい。
【００５２】
クライアント装置１２０は、データ・ブロック１０２や追加のキーＫ１，Ｋ２のストレージを各々必要とするＰＲＦ（Ｆ１，Ｆ２）を暗号化／復号するための暗号キーを記憶するように、さらに構成されている。簡便のため、Ｆ１（Ｋ１，ｘ）およびＦ２（Ｋ２，ｘ）を用いることに代えて、キーのパラメータが省かれてもよい。明白であろうように、クライアント装置１２０によって生成されクライアント装置１２０上に記憶されるＰＲＦ（Ｆ１，Ｆ２）の使用によって、識別子ｉｄｉを有するデータ・ブロックＢｉが、Ｆ１（ｉｄｉ）およびＦ２（ｉｄｉ）のラベルを有するかまたはブロック・スタッシュ３７０に記憶されている２個のバケツのうちの１個に常にあることが保証される。本明細書では、簡便のため、Ｆ（ｉｄｉ）によって、（Ｆ１（ｉｄｉ），Ｆ２（ｉｄｉ））の対を表す。
【００５３】
ブロックを暗号化し、Ｎ個のバケツ３５０Ａ−Ｎを初期化し、ＰＲＦ（Ｆ１，Ｆ２）をランダムに生成した後、命令４００によって、分散型システム１４０のストレージ抽象化１５０上の忘却型ストレージのため、データ処理ハードウェア１２４にＮ個のデータ・ブロック１０２の各々を通じて反復させる。データ・ブロック（Ｂｉ）の配置に対応する現在の反復について、図４Ｂには、インデックスｓ１＝Ｆ１（ｉｄｉ）およびｓ２＝Ｆ２（ｉｄｉ）を有する１対のデータ・バケツ３５０を返す／ダウンロードするためにＰＲＦ（Ｆ１，Ｆ２）を用いるとともに、次いで、２個のバケツのいずれのロードが最少であるかを判定するために、ダウンロードされたデータ・バケツｓ１，ｓ２内のブロック１０２，１０３の全てを復号するデータ処理ハードウェア１２４を示す。本明細書で用いられるところでは、ロードが最少のバケツは、最少量の真のデータ・ブロック１０２を有するデータ・バケツを指す。示した例では、データ・バケツｓ１はより大きな数の真のデータ・ブロック１０２を含むので、データ・バケツｓ２のロードが最少である（例えば、データ・バケツｓ１は１個の真のデータ・ブロック１０２を含み、データ・バケツｓ２は０個の真のデータ・ブロック１０２を含む）。したがって、データ処理ハードウェア１２４は、ロードが最少のバケツｓ２からのダミーのブロック１０３のうちの１つを、現在の反復のデータ・ブロック（Ｂｉ）で置換する。置換されたダミーのブロック１０３は破棄されてもよい。一方、ダウンロードされたデータ・バケツｓ１，ｓ２の各々が等しい数のダミーのブロック１０３を含む場合、クライアント装置１２０は、データ・ブロック（Ｂｉ）１０２の入力のために一方のバケツをランダムに選んでもよい。
【００５４】
いくつかのシナリオでは、また特にデータ・バケツ３５０が真のデータ・ブロック１０２で一杯になっている後の方の反復では、現在の反復の２つのバケツｓ１＝Ｆ１（ｉｄｉ）およびｓ２＝Ｆ２（ｉｄｉ）は、ダミーのブロック１０３を含んでおらず、それによって、バケツを完全に一杯にするとともに、バケツに真のデータ・ブロック１０２を均等にロードする。これらのシナリオでは、命令４００は単純に失敗し、現在処理されているデータ・ブロック（Ｂｉ）を入力するためのロードが最少のバケツを識別するために２個の新しいバケツがダウンロードされるように、中断される。
【００５５】
図４Ｃには、ダウンロードされたバケツｓ１，ｓ２内のブロック１０２，１０３の全てをフレッシュなランダム性で再暗号化し、次いで、バケツｓ１，ｓ２をストレージ抽象化１５０内の同じ位置において分散型システム１４０へ再アップロードして戻すデータ処理ハードウェア１２４を示す。確率ｐで、Ｂｉがブロック・スタッシュ３７０に記憶され得る。残りの確率（すなわち、１−（Ｃ／Ｎ））では、Ｂｉは破棄される。分散型システム１４０はさらに、位置マップＰｏｓＭａｐ［ｉ］をＦ（ｉｄｉ）と等しく設定してもよく、ここで、Ｆ（ｉｄｉ）は（Ｆ１（ｉｄｉ），Ｆ２（ｉｄｉ））の対を表す。
【００５６】
ストレージ抽象化１５０上に暗号化された形式によりＮ個のデータ・ブロック１０２を忘却的に記憶し、確率ｐでブロック・スタッシュ３７０にデータ・ブロック１０２のサブセットを記憶することによって、ＤＰ−ＯＳを初期化した後、図５Ａには、データ・ブロック（Ｂｉ）１０２がクライアント装置１２０のメモリ・ハードウェア１２２上のブロック・スタッシュ３７０に記憶されている場合、データ処理ハードウェア１２４がダウンロード・フェーズ中にデータ・ブロック（Ｂｉ）１０２に対するクエリ（ｑ）を実行することを示す。クエリ（ｑ）は、ブロックＢｉに対する識別子ｉｄと、そのブロックに対する動作（読出／書込）とを含む。現在のバージョンを表す新しいブロックも、動作が書込動作である場合、クエリ（ｑ）に含まれてよい。ここで、データ処理ハードウェア１２４は、データ・ブロックＢｉ（１０２）がブロック・スタッシュ３７０に記憶されているかを判定するためにブロック・スタッシュ３７０をクエリするか、データ処理ハードウェア１２４は、データ・ブロックＢｉ（１０２）に関連付けられている対応する識別子ｉｄ（例えば、文字列）を特定するために識別子スタッシュ３７２をクエリする。データ処理ハードウェア１２４は、ブロック・スタッシュ３７０からデータ・ブロックＢｉ（１０２）を除去する。確率ｐでデータ・ブロックＢｉ（１０２）がブロック・スタッシュ３７０に記憶されている（および／またはｉｄが識別子スタッシュ３７２に記憶されている）ので、データ処理ハードウェア１２４は、ストレージ抽象化１５０上に記憶されている２個のランダムなデータ・バケツ３５０をダウンロードしてブロック・スタッシュ３７０からのデータ・ブロック（Ｂｉ）の取出を難読化するために、信頼済みでない分散型システム１４０に偽クエリ４０４を送信する。示した例では、偽クエリ４０４はバケツ１とバケツ３とをランダムにダウンロードする。クライアント装置１２０は、２個のランダムにダウンロードされたバケツ３５０（例えば、バケツ１およびバケツ３）およびそれぞれのコンテンツを単純に破棄してもよい。
【００５７】
一方、図５Ｂには、データ・ブロック（Ｂｉ）がローカルのブロック・スタッシュ３７０に記憶されておらず、また、対応する識別子ｉｄがクライアント装置１２０の識別子スタッシュ３７２にない場合、データ処理ハードウェア１２４がダウンロード・フェーズ中にデータ・ブロック（Ｂｉ）１０２に対するクエリ（ｑ）を実行することを示す。データ・ブロックＢｉ（１０２）がブロック・スタッシュ３７０に記憶されていない（また、識別子ｉｄが識別子スタッシュ３７２にない）ので、データ処理ハードウェア１２４は、インデックスｓ１＝Ｆ１（ｉｄｉ）およびｓ２＝Ｆ２（ｉｄｉ）を有するデータ・バケツ３５０の対をダウンロードするために信頼済みでない分散型システム１４０に真のクエリ４０２を送信し、次いで、データ・ブロック（Ｂｉ）がバケツｓ１，ｓ２のうちの１つに記憶されているか否かを判定するために、ダウンロードされたデータ・バケツｓ１，ｓ２内のブロック１０２，１０３の全てを復号する。データ処理ハードウェア１２４は、暗号化モジュール３０５上にローカルに記憶されているプライベート・キーにアクセスすることによって、バケツの各々内のブロック１０２，１０３の全てを復号してもよい。示した例では、データ処理ハードウェア１２４は、ダウンロードされたバケツｓ１からデータ・ブロック（Ｂｉ）を発見して除去する。除去されたデータ・ブロック（Ｂｉ）はメモリ・ハードウェア１２２におけるクライアント装置１２０上に一時的に記憶されてよく、各ダウンロードされたバケツｓ１，ｓ２からの残りのブロック１０２，１０３が破棄されてもよい。いくつかのシナリオ（示していない）では、ブロック（Ｂｉ）に対するクエリ４０２によって、ブロック（Ｂｉ）が返されたバケツｓ１，ｓ２に発見されない場合、ミスとなる。それらのシナリオでは、オーバライト・フェーズは、存在しないブロック（Ｂｉ）に関するミスをクライアント装置１２０が信頼済みでない分散型システム１４０に暴露しないように、クライアント装置１２０が２個のランダムに選択されたバケツに対し偽のオーバライトを実行することを含む。
【００５８】
図５Ｃを参照すると、いくつかの実装では、図５Ｂのダウンロード・フェーズ中のブロック（Ｂｉ）に対するクエリ４０２によってミス（ブロック（Ｂｉ）が存在しないことを示す）となる場合、データ処理ハードウェア１２４は、このミスに関連付けられている識別子ｉｄを識別子スタッシュ３７２に追加する。識別子スタッシュ３７２に対する識別子ｉｄの追加を難読化するとともに、ブロック（Ｂｉ）のミスを信頼済みでない分散型システム１４０に暴露しないために、データ処理ハードウェア１２４は、ストレージ抽象化１５０上に記憶されている２個のランダムなデータ・バケツ３５０（例えば、バケツ１およびバケツ３）をダウンロードするべく、信頼済みでない分散型システム１４０に偽クエリ４０４を送信する。データ処理ハードウェア１２４は、次いで、ストレージ抽象化１５０内の同じ位置において分散型システム１４０にバケツ（例えば、バケツ１およびバケツ３）をアップロードする前に、ランダムにダウンロードされたバケツ内のブロック１０２，１０３の全てを復号し、フレッシュなランダム性で再暗号化する。２個のランダムなバケツに対するダウンロード、復号、および再暗号化は、ランダムにダウンロードされたバケツ（例えば、バケツ１およびバケツ３）のコンテンツが変化していない（フレッシュに計算された暗号文（例えば、異なる暗号化）を有することを除いて）ので、分散型システム１４０からブロック・ミスを秘匿するための偽のオーバライトと呼ばれる。したがって、信頼済みでない分散型システム１４０は、取り出されたデータ・バケツ（例えば、バケツ１およびバケツ３）が真のクエリ４０２に応じてダウンロードされたか偽クエリ４０４に応じてダウンロードされたか否かを、意識しない。
【００５９】
他の実装では、データ・ブロック（Ｂｉ）が存在する場合、図５Ｃには、データ処理ハードウェア１２４が、オーバライト・フェーズ中、確率ｐでブロック・スタッシュ３７０における現在のバージョンのデータ・ブロック（Ｂｉ）をクライアント装置１２０のメモリ・ハードウェア１２２上に記憶することを示す。オーバライト・フェーズは、対応するダウンロード・フェーズ（ブロック・スタッシュ３７０（図５Ａ）から、またはストレージ抽象化１５０（図５Ｂ）からデータ・ブロック（Ｂｉ）を取り出した）に続く。いくつかの例では、クライアント装置１２０は、データ・ブロックの新しいバージョン（Ｂｉ’）によりデータ・ブロック（Ｂｉ）を更新するために、ダウンロード・フェーズ中に取り出されたデータ・ブロック（Ｂｉ）に対し書込動作を実行する。それらの例では、更新された新しいバージョンのデータ・ブロック（Ｂｉ’）は、オーバライト・フェーズ中、確率ｐでブロック・スタッシュ３７０上に記憶される。他の例では、クライアント装置１２０は、ダウンロード・フェーズ中に取り出されたデータ・ブロック（Ｂｉ）に対する読出動作を単純に実行する。これらの例では、ブロック・スタッシュ３７０において記憶されている現在のバージョンは、ダウンロード・フェーズ中に取り出されたバージョンから変化していない。
【００６０】
信頼済みでない分散型システム１４０から確率ｐでブロック・スタッシュ３７０における現在のバージョンのデータ・ブロック（Ｂｉ’）を記憶することを難読化するために、データ処理ハードウェア１２４は、ストレージ抽象化１５０上に記憶されている２つのランダムなデータ・バケツ３５０（例えば、バケツ１およびバケツ３）をダウンロードするべく、信頼済みでない分散型システム１４０に偽クエリ４０４を送信する。データ処理ハードウェア１２４は、バケツ（例えば、バケツ１およびバケツ３）をストレージ抽象化１５０内の同じ位置において分散型システム１４０へアップロードして戻す前に、ランダムにダウンロードされたバケツ内のブロック１０２，１０３の全てを復号し、フレッシュなランダム性で再暗号化する。２個のランダムなバケツに対するダウンロード、復号、および再暗号化は、ランダムにダウンロードされたバケツ（例えば、バケツ１およびバケツ３）のコンテンツが変化していない（フレッシュに計算された暗号文（例えば、異なる暗号化）を有することを除いて）ので、現在のバージョンのデータ・ブロック（Ｂｉ’）をブロック・スタッシュ３７０に記憶することを分散型システム１４０から秘匿するための偽のオーバライトと呼ばれる。したがって、信頼済みでない分散型システム１４０は、取り出されたデータ・バケツ（例えば、バケツ１およびバケツ３）が真のクエリ４０２に応じてダウンロードされたか偽クエリ４０４に応じてダウンロードされたか否かを、意識しない。
【００６１】
対して、残りの確率１−（Ｃ／Ｎ）で現在のバージョンのデータ・ブロック（Ｂｉ’）がブロック・スタッシュ３７０に記憶されていない場合、図５Ｄには、クライアント装置１２０が現在のバージョンのデータ・ブロック（Ｂｉ’）を保持する（例えば、メモリ・ハードウェア１２２に）一方、データ処理ハードウェア１２４がインデックスｓ１＝Ｆ１（ｉｄｉ）およびｓ２＝Ｆ２（ｉｄｉ）を有するデータ・バケツ３５０の対をダウンロードするために信頼済みでない分散型システム１４０に真のクエリ４０２を送信することを示す。データ・バケツｓ１，ｓ２を受信すると、データ処理ハードウェア１２４は、ブロック１０２，１０３の全てを復号し、バケツｓ１，ｓ２のうちの対応する１つにおける以前のバージョンのデータ・ブロック（Ｂｉ）を新しいバージョンのデータ・ブロック（Ｂｉ’）で置換し、データ・バケツｓ１，ｓ２内の新しいバージョンのデータ・ブロック（Ｂｉ’）を含むブロック１０２，１０３の全てをフレッシュなランダム性で再暗号化する。データ処理ハードウェア１２４は、次いで、ストレージ抽象化１５０内の同じ位置において分散型システム１４０にバケツｓ１，ｓ２を再アップロードして戻す。
【００６２】
ブロック・スタッシュ３７０のサイズを小さくしておくために、ＤＰ−ＯＳ命令４００がθ（Ｎ×ｌｏｇＮ）個のクエリ（ｑ）を実行した後、命令４００は、新しいシード（Ｋ’１，Ｋ’２）をランダムに選択すること（すなわち、新しいＰＲＦ（Ｆ’１，Ｆ’２）を生成して識別子スタッシュ３７２をリセットすること）および新しいシードに基づいてブロック１０２をバッファ・バケツ３６０に再び割り当てることによってシステムをリフレッシュするべくブロック・シャッフル（例えば、忘却型転字ルーチン４５０を実行することによって）を用いてもよい。ここで、分散型システム１４０は、各データ・ブロック１０２に関連付けられているキーのリストを維持する。したがって、各キーについて、キー（Ｋ１，Ｋ２）に関連付けられている２個のバケツ３５０がダウンロードされ、ブロック１０２，１０３は対応するデータ・ブロック１０２を特定して再暗号化するために復号される。その後、キー（Ｋ’１，Ｋ’２）に関連付けられている２個のバッファ・バケツ３６０がダウンロードされて復号され、２個のバケツ３５０を再暗号化して分散型システム１４０に再アップロードして戻す前に、データ・ブロック１０２が２個のバケツ３５０のうちロードが最少のものに追加される。したがって、命令４００がＮ個のクエリ（ｑ）を実行した後、シャッフル・バッファによって、新しいブロックおよび識別子スタッシュ３７０，３７２が初期化され、新しいＰＲＦ（Ｆ’１，Ｆ’２）に基づいて古いバケツ３５０から新しいデータ・バケツ３６０へデータ・ブロック１０２が全て移動され、古いデータ・バケツ３５０が削除される。クライアント装置１２０は、シャッフル・バッファを実行する時、データ処理ハードウェア１２４上に記憶されているＰｏｓＭａｐを用いてもよい。
【００６３】
いくつかの実装では、ＤＰ−ＯＳは、オーバーラップするＬ個のバケツからなるハッシュ・スキーム（Ｎ個のデータ・ブロック１０２の各々が一意な有限の文字列識別子ｋ１−ｋｎに関連付けられており、Ｌ個のバケツのうちの１つへとハッシュされる）を用いる。このＬ個のバケツが信頼済みでない分散型システム１４０に対しアウトソーシングされてもよく、識別子ｋ１−ｋｎの値に関する情報を分散型システム１４０が推測可能でないように、各バケツが同じサイズを有してもよい。ハッシュ・スキームは、データ・ブロック１０２に対する識別子ｋ１−ｋｎの値を隠すように構成される。ハッシュ・スキームは、葉ノードがレベル０を占有して木の根に向かってレベルが増大する、二分木または逆指数関数木を用いてもよい。木の根は、木の最大のレベルを占有する。
【００６４】
Ｎ≦Ｌ≦２Ｎ個の葉を有する二分木について、木の各ノードはちょうど１つのブロック１０２を記憶してよい。木は、０の暗号化を有するブロックなど、ダミーのブロック１０３で最初に満たされてもよい。木の葉の番号は左から右に１からＬまで付けられてよく、各葉はＬ個のバケツのうちの１つに対応してよい。ここで、第ｉ番目のバケツは、第ｉ番目の葉から木の根まで一意な経路上のノードに記憶されている全てのブロックを含んでよい。これに加えて、クライアント装置１２０は、随意では、木からオーバフローするブロックを記憶するためにブロック・スタッシュ３７０を維持してもよい。図６には、対応するＬ個のバケツの中へ暗号化された形式によりデータ・ブロック１０２を入力し、データ・ブロック（Ｂｉ）に対するクエリ（ｑ）を実行することにより、二分木を初期化する一例のアルゴリズム６００を提供する。
【００６５】
逆指数関数木は、記憶されているデータ・ブロックの数Ｎおよび選択の数Ｄによってパラメータ化されてもよい。図７には、Ｎ＝７個のデータ・ブロックおよびＤ＝２個の選択を有する一例の逆指数関数木７００を示す。各レベルにおける子の数は、木を上ってゆくとき、２倍に指数関数的に増加する。Ｌ個のレベルについて、全てのノードはレベル１において最大Ｃ１：＝Ｄ個の子を有し、全てのノードはレベル２において最大Ｃ２＝（Ｃ１）２：＝Ｄ２個の子を有する。レベルｉにおいて、全てのノードは最大Ｃｉ＝（Ｃｉ−１）２：＝（Ｄ２）ｉ−１を有する。レベル０において、葉のノードは存在しない。０より大きな全てのレベルは次のように表現できる。
【００６６】
【数５】
0006911158.tif 000006
【００６７】
木は、各レベルがちょうど１つのノードを有する後に停止してよく、これは、レベル［ｌｏｇ２（ｌｏｇＤＮ）］において生じる。レベルｉの各ノードには、左から右に１からＮｉまでのラベルが付される。１以上のレベルｉにおいて、ノードｊ∈｛１，．．．．，Ｎｉ｝は、レベルｉ＋１において（ｊ−１）・Ｃｉ＋１からｊ・Ｃｉのラベルが付されたＣｉ個の子ノードを有することになる。０以上の各レベルｉの各ノードＮｉは、丸めのためＣｉ個未満の子しか有しない場合がある。逆指数関数木は、Ｎ個のバケツ（第ｉ番目のバケツ（１≦ｉ≦Ｎ）が、根からｉのラベルが付けられた葉ノードまでの一意な経路上の全てのノードを含む）をさらに有する。クライアント装置１２０は、随意では、オーバフロー・ブロック１０２を記憶するためにブロック・スタッシュ３７０を記憶してもよい。図８は、対応するＮ個のバケツの中へ暗号化された形式によりデータ・ブロック１０２を入力し、データ・ブロック（Ｂｉ）に対するクエリ（ｑ）を実行することにより、逆指数関数木を初期化する一例のアルゴリズム８００を提供する。
【００６８】
図９は、本明細書に記載のシステムおよび方法を実装するために用いられ得る一例のコンピューティング・デバイス（例えば、データ処理ハードウェア）の概略図である。コンピューティング・デバイス９００は、ラップトップ、デスクトップ、ワークステーション、携帯情報端末、サーバ、ブレードサーバ、メインフレーム、および他の適切なコンピュータなど、様々な形態のデジタル・コンピュータを表すことが意図される。ここに示したコンポーネント、それらの接続および関係、ならびにそれらの機能は、例示的な意味でしかなく、本開示において記載され特許を請求される発明の実装を限定することを意味するものではない。
【００６９】
コンピューティング・デバイス９００は、プロセッサ９１０、メモリ９２０、ストレージ・デバイス９３０、メモリ９２０および高速拡張ポート９５０に接続する高速インタフェース／コントローラ９４０、ならびに低速バス９７０およびストレージ・デバイス９３０に接続する低速インタフェース／コントローラ９６０を備える。コンポーネント９１０，９２０，９３０，９４０，９５０、および９６０の各々は、様々なバスを用いて相互接続されており、共通のマザーボード上に、または他の適切な手法により、取り付けられてよい。プロセッサ９１０は、高速インタフェース９４０に結合されているディスプレイ９８０などの外部入力／出力装置上にグラフィカル・ユーザ・インタフェース（ＧＵＩ）用のグラフィック情報を表示するためにメモリ９２０にまたはストレージ・デバイス９３０上に記憶されている命令を含む、コンピューティング・デバイス９００内における実行用の命令を処理することが可能である。他の実装では、複数のメモリおよびメモリ種類に加えて、適切であるように複数のプロセッサおよび／または複数のバスが用いられてよい。また、各デバイスが必要な動作の一部分を提供する複数のコンピューティング・デバイス９００が接続されてもよい（例えば、サーバ・バンク、ブレードサーバのグループ、またはマルチプロセッサ・システムとして）。
【００７０】
メモリ９２０は、コンピューティング・デバイス９００内に情報を非一時的に記憶する。メモリ９２０は、コンピュータ可読媒体、揮発性メモリユニット、または不揮発性メモリユニットであってよい。非一時的なメモリ９２０は、コンピューティング・デバイス９００による使用のため、プログラム（例えば、命令のシーケンス）またはデータ（例えば、プログラム状態情報）を一時的にまたは永続的に記憶するために用いられる物理デバイスであってよい。不揮発性のメモリの例は、次に限定されないが、フラッシュ・メモリおよび読出専用メモリ（ＲＯＭ）／プログラマブル読出専用メモリ（ＰＲＯＭ）／消去可能プログラマブル読出専用メモリ（ＥＰＲＯＭ）／電子的に消去可能なプログラマブル読出専用メモリ（ＥＥＰＲＯＭ）（例えば、ブート・プログラムなど典型的にはファームウェアに用いられる）を含む。揮発性メモリの例は、次に限定されないが、ランダム・アクセス・メモリ（ＲＡＭ）、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、相変化メモリ（ＰＣＭ）、およびディスクまたはテープを含む。
【００７１】
ストレージ・デバイス９３０（例えば、メモリ・ハードウェア）は、コンピューティング・デバイス９００にマス・ストレージを提供することができる。いくつかの実装では、ストレージ・デバイス９３０はコンピュータ可読媒体である。様々な異なる実装では、ストレージ・デバイス９３０は、フロッピー（登録商標）ディスク装置、ハードディスク装置、光学ディスク装置、もしくはテープ装置、フラッシュ・メモリまたは他の同様のソリッド・ステート・メモリ装置、またはストレージ・エリア・ネットワークもしくは他の構成における装置を含む装置のアレイであってよい。追加の実装では、コンピュータ・プログラム製品は情報キャリアにより有形に具体化される。コンピュータ・プログラム製品は、実行時に上述のものなど１または複数の方法を実行する、命令を含む。情報キャリアは、メモリ９２０、ストレージ・デバイス９３０、またはプロセッサ９１０上のメモリなど、コンピュータ可読媒体または機械可読媒体である。
【００７２】
高速コントローラ９４０がコンピューティング・デバイス９００用の帯域幅集約的な動作を管理する一方、低速コントローラ９６０は、より帯域幅集約的でない動作を管理する。そのような役割の割当は単に例示に過ぎない。いくつかの実装では、高速コントローラ９４０は、メモリ９２０、ディスプレイ９８０（例えば、グラフィックス・プロセッサまたはアクセラレータを通じて）、および高速拡張ポート９５０（様々な拡張カード（示していない）を受け入れることができる）に結合されている。いくつかの実装では、低速コントローラ９６０は、ストレージ・デバイス９３０および低速拡張ポート９７０に結合されている。低速拡張ポート９７０（様々な通信ポート（例えば、ＵＳＢ、Ｂｌｕｅｔｏｏｔｈ（登録商標）、イーサネット（登録商標）、無線イーサネット（登録商標））を含んでよい）は、１または複数の入力／出力デバイス（キーボード、ポインティング・デバイス、スキャナなど）またはネットワーク・デバイス（スイッチもしくはルーターなど）に対し、結合されてよい（例えば、ネットワーク・アダプタを通じて）。
【００７３】
コンピューティング・デバイス９００は、図に示すように、多くの異なる形態により実装されてよい。例えば、１つの標準的なサーバ９００ａとして実装されてもよく、そのようなサーバ９００ａのグループにより複数回実装されてもよく、ラップトップ・コンピュータ９００ｂとして、またはラック・サーバ・システム９００ｃの一部として実装されてもよい。
【００７４】
ソフトウェア・アプリケーション（すなわち、ソフトウェア・リソース）は、コンピューティング・デバイスにタスクを実行させるコンピュータ・ソフトウェアを指す場合がある。いくつかの例では、ソフトウェア・アプリケーションは、「アプリケーション」、「アプリ（ａｐｐ）」または「プログラム」と呼ばれる場合がある。アプリケーションの例は、次に限定されないが、システム診断アプリケーション、システム管理アプリケーション、システム保守アプリケーション、文書処理アプリケーション、表計算アプリケーション、メッセージング・アプリケーション、メディア・ストリーミング・アプリケーション、ソーシャル・ネットワーキング・アプリケーション、およびゲーム・アプリケーションを含む。
【００７５】
非一時的なメモリは、コンピューティング・デバイスによる使用のため、プログラム（例えば、命令のシーケンス）またはデータ（例えば、プログラム状態情報）を一時的にまたは永続的に記憶するために用いられる物理デバイスであってよい。非一時的なメモリは、揮発性および／または不揮発性のアドレス可能な半導体メモリであってよい。不揮発性のメモリの例は、次に限定されないが、フラッシュ・メモリおよび読出専用メモリ（ＲＯＭ）／プログラマブル読出専用メモリ（ＰＲＯＭ）／消去可能プログラマブル読出専用メモリ（ＥＰＲＯＭ）／電子的に消去可能なプログラマブル読出専用メモリ（ＥＥＰＲＯＭ）（例えば、ブート・プログラムなど典型的にはファームウェアに用いられる）を含む。揮発性メモリの例は、次に限定されないが、ランダム・アクセス・メモリ（ＲＡＭ）、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、相変化メモリ（ＰＣＭ）、およびディスクまたはテープを含む。
【００７６】
本明細書に記載のシステムおよび技術の様々な実装は、デジタルな電子回路および／または光回路、集積回路、特別に設計されたＡＳＩＣ（特定用途向けＩＣ）、コンピュータ・ハードウェア、ファームウェア、ソフトウェア、および／またはそれらの組み合わせにより実現可能である。それらの様々な実装は、ストレージ・システム、１つ以上の入力装置、および１つ以上の出力装置との間でデータおよび命令を送受信するように結合されている、１つ以上のプログラム可能な（専用または汎用の）プロセッサを備えるプログラム可能なコンピュータ上において実行可能および／または解釈可能である、１または複数のコンピュータ・プログラムによる実装を含むことが可能である。
【００７７】
それらのコンピュータ・プログラム（プログラム、ソフトウェア、ソフトウェア・アプリケーション、またはコードとしても知られている）は、プログラム可能なプロセッサ用の機械命令を含み、高レベルの手続的および／またはオブジェクト指向のプログラミング言語により、アセンブリ／機械語により、またはそのバケツにより実装されることが可能である。本明細書で用いられるところでは、用語「機械可読媒体」および「コンピュータ可読媒体」は、機械可読信号として機械命令を受信する機械可読媒体を含め、プログラム可能なプロセッサに機械命令および／またはデータを提供するために用いられる、任意のコンピュータ・プログラム製品、非一時的なコンピュータ可読媒体、装置、および／またはデバイス（例えば、磁気ディスク、光ディスク、メモリ、プログラム可能論理回路（ＰＬＤ））を指す。用語「機械可読信号」は、プログラム可能なプロセッサに機械命令および／またはデータを提供するために用いられる任意の信号を指す。
【００７８】
本明細書に記載の処理および論理フローは、入力データに対する演算と出力の生成とによって機能を実行するように１または複数のコンピュータ・プログラムを実行する１または複数のプログラム可能なプロセッサによって実行されることが可能である。処理および論理フローは、専用の論理回路（例えば、ＦＰＧＡ（ｆｉｅｌｄ  ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ）またはＡＳＩＣ（特定用途向けＩＣ））によって実行されることが可能である。コンピュータ・プログラムの実行に適切なプロセッサは、例として、汎用および専用のマイクロプロセッサ、および任意の種類のデジタル・コンピュータの１または複数のプロセッサの両方を含む。一般に、プロセッサは、読出専用メモリ、ランダム・アクセス・メモリ、またはその両方から命令およびデータを受け取るであろう。コンピュータの必須要素は、命令を実行するためのプロセッサと、命令およびデータを記憶するための１または複数のメモリ・デバイスとである。一般に、コンピュータは、データを記憶するための１または複数のマス・ストレージ（例えば、磁気、光磁気ディスク、または光ディスク）を備えるか、データの受信、データの送信、またはその両方を行うように、該マス・ストレージに対し動作可能に結合されている。しかしながら、コンピュータがそのようなデバイスを備える必要はない。コンピュータ・プログラム命令およびデータを記憶するために適切なコンピュータ可読媒体は、例として、半導体メモリ・デバイス（例えば、ＥＰＲＯＭ、ＥＥＰＲＯＭおよび、フラッシュメモリ・デバイス）、磁気ディスク（例えば、内部ハードディスクまたはリムーバブル・ディスク）、光磁気ディスク、ならびにＣＤ−ＲＯＭおよびＤＶＤ−ＲＯＭディスクを含む、全ての形式の不揮発性メモリ、メディア、およびメモリ・デバイスを含む。プロセッサおよびメモリは、専用論理回路によって補足されるか、専用論理回路に組み込まれることが可能である。
【００７９】
ユーザとの対話を提供するため、本開示の１または複数の態様は、ユーザに情報を表示するためのディスプレイ・デバイス（例えば、ＣＲＴ（陰極線管）、ＬＣＤ（液晶ディスプレイ）モニタ、またはタッチ・スクリーン）を有する、また随意では、それによってユーザがコンピュータに入力を提供可能であるキーボードおよびポインティング・デバイス（例えば、マウスまたはトラックボール）を有する、コンピュータ上に実装されることが可能である。他の種類のデバイスもユーザとの対話を提供するために用いられることが可能である。例えば、ユーザに対し提供されるフィードバックは、任意の形態の感覚フィードバック（例えば、視覚フィードバック、聴覚フィードバック、または触覚フィードバック）であることが可能であり、ユーザからの入力は、音響、音声、または触覚の入力を含む、任意の形態により受信されることが可能である。加えて、コンピュータは、ユーザによって用いられるデバイスとの間でドキュメントを送受信することによって（例えば、ウェブ・ブラウザから受信される要求に応じてユーザのクライアント装置上のウェブ・ブラウザにウェブ・ページを送信することによって）、ユーザと対話することが可能である。
【００８０】
多くの実装について記載した。しかしながら、様々な変更が本開示の精神および範囲から逸脱することなくなされ得ることが理解されるであろう。したがって、他の実装は添付の特許請求の範囲内にある。
【図１Ａ】
0006911158.tif 000007
【図１Ｂ】
0006911158.tif 000008
【図２Ａ】
0006911158.tif 000009
【図２Ｂ】
0006911158.tif 000010
【図３Ａ】
0006911158.tif 000011
【図３Ｂ】
0006911158.tif 000012
【図３Ｃ】
0006911158.tif 000013
【図３Ｄ】
0006911158.tif 000014
【図４Ａ】
0006911158.tif 000015
【図４Ｂ】
0006911158.tif 000016
【図４Ｃ】
0006911158.tif 000017
【図５Ａ】
0006911158.tif 000018
【図５Ｂ】
0006911158.tif 000019
【図５Ｃ】
0006911158.tif 000020
【図５Ｄ】
0006911158.tif 000021
【図６】
0006911158.tif 000022
【図７】
0006911158.tif 000023
【図８】
0006911158.tif 000024
【図９】
0006911158.tif 000025