(57)【要約】      （修正有）【課題】暗号化ファイルのユーザ不可知暗号化及び非複製化をサポートするクラウドストレージシステムを提供する。【解決手段】クラウドストレージシステムは、ユーザが他のユーザに各ファイルを送ることなくユーザがファイル、１群のファイル、又はファイルシステム全体を他のユーザと共有する。クラウドストレージシステムは、更に、転送される暗号化データがクラウドストレージシステムに既に存在するか否かを決定することにより、クライアントデバイスが帯域幅の利用を最小にする。更に、クライアントデバイスがデータを要求する時にクラウドストレージシステムが待ち時間を少なくして利用可能にすることができるように、どのデータが将来必要とされる可能性が高いかをクライアントデバイスからクラウドストレージシステムに知らせる機構を含む。【選択図】図１
2018060573.tif 000002
【特許請求の範囲】
【請求項１】
クラウドストレージシステムに少なくとも部分的に常駐するクラウドファイルシステムに複数のファイルを保存するためにクライアントデバイスにおいてクラウドストレージクライアントによって実行される方法であって、
前記複数のファイルの各々に対して、
そのファイルを複数のチャンクに分割し、
前記複数のチャンクの各々に対して、
そのチャンクに関するデータに基づいて暗号化キーを生成し、
前記生成された暗号化キーを使用してそのチャンクを暗号化し、
前記暗号化チャンク内のデータに基づいてチャンク識別子を生成し、
前記暗号化キー及び前記チャンク識別子を前記ファイルのマニフェストに含め、
前記クラウドストレージシステムが前記暗号化チャンクを含むか否かを決定し、かつ
前記クラウドストレージシステムに前記暗号化チャンク及びチャンク識別子を該クラウドストレージシステムが該暗号化チャンクを含まないと決定された場合にのみ送信する、  ことを実行し、
前記ファイルマニフェストは、前記複数のチャンクのための前記暗号化キー及び対応するチャンク識別子のリストを含み、
前記ファイルマニフェスト内の前記データに基づいてファイルマニフェスト暗号化キーを生成し、
前記ファイルマニフェスト暗号化キーを使用して前記ファイルマニフェストを暗号化し、
前記暗号化ファイルマニフェスト内のデータに基づいてファイルマニフェスト識別子を生成し、
前記ファイルマニフェスト暗号化キー及び前記ファイルマニフェスト識別子をファイルシステムマニフェストに含め、
前記クラウドストレージシステムが前記暗号化ファイルマニフェストを含むか否かを決定し、かつ
前記クラウドストレージシステムに前記暗号化ファイルマニフェスト及び前記ファイルマニフェスト識別子を該クラウドストレージシステムが該暗号化ファイルマニフェストを含まないと決定された場合にのみ送信する、
ことを実行する段階、
を含み、
前記ファイルシステムマニフェストは、前記複数のファイルの各々のための前記ファイルマニフェストのリストと該複数のファイルの経路とを含み、
方法が、更に、
前記ファイルシステムマニフェストを暗号化する段階と、
前記暗号化ファイルシステムマニフェストを前記クラウドストレージシステムに送信する段階と、
を含む、
ことを特徴とする方法。
【請求項２】
各チャンクに対して生成された前記暗号化キーは、そのチャンクをハッシュする結果に基づいていることを特徴とする請求項１に記載の方法。
【請求項３】
各チャンクに対して前記生成されたチャンク識別子は、前記暗号化チャンクをハッシュする結果に基づいていることを特徴とする請求項１に記載の方法。
【請求項４】
前記ファイルシステムマニフェストは、前記クライアントデバイス又は該クライアントデバイスのユーザに固有の暗号化キーを使用して暗号化されることを特徴とする請求項１に記載の方法。
【請求項５】
前記複数のファイルをそれらの複数のファイルを前記クラウドファイルシステムに保存した後に前記クライアントデバイスのローカルストレージシステムから除去する段階、
を更に含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記クラウドストレージシステムが前記暗号化チャンクを含むか否かを決定する段階は、
前記暗号化チャンクに対応する前記チャンク識別子が前記クラウドストレージシステムに存在するか否かを示す情報を要求する質問を該クラウドストレージシステムに送信する段階と、
前記チャンク識別子が前記クラウドストレージシステムに存在するか否かを示す応答を受信する段階と、
を含む、
ことを特徴とする請求項１に記載の方法。
【請求項７】
クライアントデバイスのプロセッサによって実行された場合に該プロセッサをして請求項１から請求項６のいずれか１項に記載の方法を実行させることになる命令を与える少なくとも１つの固定機械可読ストレージ媒体。
【請求項８】
クラウドファイルシステムに複数のファイルを保存するように構成されたクライアントデバイスであって、
命令を実行するプロセッサと、
前記プロセッサに結合され、実行された時に該プロセッサをして請求項１から請求項６のいずれか１項に記載の方法を実行させる１つ又はそれよりも多くの命令を格納する少なくとも１つの固定機械可読ストレージ媒体と、
を含むことを特徴とするクライアントデバイス。
【請求項９】
クラウドストレージシステムに少なくとも部分的に常駐するクラウドファイルシステムに格納されたファイルを読み取るためのクライアントデバイスのクラウドストレージクライアントにおける方法であって、
前記クラウドファイルシステムに格納されたファイルを読み取るために前記クライアントデバイスのオペレーティングシステムから命令を受信する段階と、
複数の暗号化キーと前記ファイルの複数のチャンクに対応する複数のチャンク識別子とのリストを含むファイルマニフェストを識別する該ファイルに対応するファイルマニフェスト識別子を決定する段階であって、前記クラウドファイルシステムに格納されたファイルのファイルマニフェストとそれらのファイルのための経路とのリストを含むファイルシステムマニフェストにアクセスする段階を含む前記決定する段階と、
前記ファイルマニフェスト識別子に対応する暗号解読ファイルマニフェストと該ファイルマニフェスト識別子に対応する暗号化ファイルマニフェストとが前記クラウドファイルシステムに使用される前記クライアントデバイスのローカルキャッシュに存在しないと決定することに応答して、該クラウドストレージシステムから該暗号化ファイルマニフェストをダウンロードする段階と、
前記暗号化ファイルマニフェストを暗号解読するのに使用されるキーを取り出す段階と、
前記取り出されたキーを使用して前記暗号化ファイルマニフェストを暗号解読する段階と、
前記暗号解読ファイルマニフェストから前記複数のチャンク識別子を決定する段階と、
前記複数のチャンク識別子の各々に対して、そのチャンク識別子に対応する暗号解読チャンク又は暗号化チャンクが前記クラウドファイルシステムに使用される前記クライアントデバイスの前記ローカルキャッシュに存在するか否かを決定する段階と、
対応する暗号解読チャンク又は暗号化チャンクが前記クラウドファイルシステムに使用される前記クライアントデバイスの前記ローカルキャッシュに存在しない場合に前記複数のチャンク識別子の各々に対して、
前記クラウドストレージシステムからその暗号化チャンクをダウンロードし、
その暗号化チャンクを暗号解読するキーを前記暗号解読ファイルマニフェストから取り出し、かつ
前記取り出されたキーを使用して前記暗号化チャンクを暗号解読する、
ことを実行する段階と、
対応する暗号化チャンクが前記クラウドファイルシステムに使用される前記クライアントデバイスの前記ローカルキャッシュに存在する場合に前記複数のチャンク識別子の各々に対して、
前記暗号化チャンクを前記ローカルキャッシュから取り出し、
その暗号化チャンクを暗号解読するキーを前記暗号解読ファイルマニフェストから取り出し、かつ
前記取り出されたキーを使用して前記暗号化チャンクを暗号解読する、
ことを実行する段階と、
暗号解読チャンクが前記クラウドファイルシステムに使用される前記クライアントデバイスの前記ローカルキャッシュに存在する場合に前記複数のチャンク識別子の各々に対して、その暗号解読チャンクを該ローカルキャッシュから取り出す段階と、
要求されたファイルを前記クラウドファイルシステムに戻す段階と、
を含むことを特徴とする方法。
【請求項１０】
前記クラウドファイルシステムに使用される前記クライアントデバイスの前記ローカルキャッシュに各暗号解読チャンクを格納する段階を更に含むことを特徴とする請求項９に記載の方法。
【請求項１１】
前記クラウドストレージシステムから各暗号化チャンクをダウンロードする段階は、
その暗号化チャンクに対応するチャンク識別子をダウンロード待ち行列に含め、
対応するチャンクが前記暗号解読ファイルマニフェスト内のその暗号化チャンクの近くに位置付けられた１組の１つ又はそれよりも多くの他のチャンク識別子を決定するために該暗号解読ファイルマニフェストにアクセスし、
前記他のチャンク識別子の組を前記ダウンロード待ち行列に含め、かつ
前記ダウンロード待ち行列に従って前記クラウドストレージシステムから前記暗号化チャンクをダウンロードする、
ことを実行する段階を含む、
ことを特徴とする請求項９に記載の方法。
【請求項１２】
前記クラウドストレージシステムからダウンロードされた前記暗号化チャンクの各々に対して、該クラウドストレージシステムから１組の１つ又はそれよりも多くの付加的な暗号化チャンクをダウンロードする段階、
を更に含むことを特徴とする請求項９に記載の方法。
【請求項１３】
前記クラウドストレージシステムからダウンロードされた前記暗号化チャンクの各々に対して、該暗号化チャンクがアクセスされる時にアクセスされることになる可能性が高い前記付加的な暗号化チャンクの組を示す解析モデルを使用する段階、
を更に含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
クラウドストレージプールに１つ又はそれよりも多くのチャンクをプリフェッチするように前記クラウドストレージシステムに命令する段階、
を更に含むことを特徴とする請求項９に記載の方法。
【請求項１５】
クライアントデバイスのプロセッサによって実行された場合に該プロセッサをして請求項９から請求項１４のいずれか１項に記載の方法を実行させることになる命令を与える少なくとも１つの固定機械可読ストレージ媒体。
【請求項１６】
クラウドファイルシステムに格納されたファイルを読み取るように構成されたクライアントデバイスであって、
命令を実行するプロセッサと、
前記プロセッサに結合され、実行された時に該プロセッサをして請求項９から請求項１４のいずれか１項に記載の方法を実行させる１つ又はそれよりも多くの命令を格納する少なくとも１つの固定機械可読ストレージ媒体と、
を含むことを特徴とするクライアントデバイス。
【請求項１７】
クラウドストレージシステムに少なくとも部分的に常駐するクラウドファイルシステムに複数のファイルを保存するためにクライアントデバイスにおいてクラウドストレージクライアントによって実行される方法であって、
前記複数のファイルの各々に対して、
そのファイルを複数のチャンクに分割し、
前記複数のチャンクの各々に対して、
そのチャンクに関するデータに基づいて暗号化キーを生成し、
前記生成された暗号化キーを使用してそのチャンクを暗号化し、
前記暗号化チャンク内のデータに基づいてチャンク識別子を生成し、
前記暗号化キー及び前記チャンク識別子を前記ファイルのマニフェストに含め、
前記クラウドストレージシステムが前記暗号化チャンクを含むか否かを決定し、かつ
前記クラウドストレージシステムに前記暗号化チャンク及びチャンク識別子を該クラウドストレージシステムが該暗号化チャンクを含まないと決定された場合にのみ送信する、
ことを実行し、
前記ファイルマニフェストは、前記複数のチャンクのための前記暗号化キー及び対応するチャンク識別子のリストを含み、
前記ファイルマニフェスト内の前記データに基づいてファイルマニフェスト暗号化キーを生成し、
前記ファイルマニフェスト暗号化キーを使用して前記ファイルマニフェストを暗号化し、
前記暗号化ファイルマニフェスト内のデータに基づいてファイルマニフェスト識別子を生成し、
前記ファイルマニフェスト暗号化キー及び前記ファイルマニフェスト識別子をファイルシステムマニフェストに含め、
前記クラウドストレージシステムが前記暗号化ファイルマニフェストを含むか否かを決定し、かつ
前記クラウドストレージシステムに前記暗号化ファイルマニフェスト及び前記ファイルマニフェスト識別子を該クラウドストレージシステムが該暗号化ファイルマニフェストを含まないと決定された場合にのみ送信する、
ことを実行する段階、
を含み、
前記ファイルシステムマニフェストは、前記ファイルマニフェストのリストを含み、
方法が、更に、
前記ファイルシステムマニフェスト内のデータに基づいてファイルシステムマニフェスト暗号化キーを生成する段階と、
前記生成されたファイルシステムマニフェスト暗号化キーを用いて前記ファイルシステムマニフェストを暗号化する段階と、
前記暗号化ファイルシステムマニフェスト内のデータに基づいてファイルシステムマニフェスト識別子を生成する段階と、
前記クライアントデバイスのユーザに関連付けられて該ユーザが前記クラウドファイルシステムを実装した実装ポイントを示す情報を含むユーザマニフェストに前記ファイルシステムマニフェストキー及び前記ファイルシステムマニフェスト識別子を含める段階と、
前記ユーザ特定のキーを用いて前記ユーザマニフェストを暗号化する段階と、
前記クラウドストレージシステムに前記暗号化ユーザマニフェストを格納する段階と、
を含む、
ことを特徴とする方法。
【請求項１８】
各チャンクに対して生成された前記暗号化キーは、そのチャンクをハッシュする結果に基づいていることを特徴とする請求項１７に記載の方法。
【請求項１９】
各チャンクに対して前記生成されたチャンク識別子は、前記暗号化チャンクをハッシュする結果に基づいていることを特徴とする請求項１７に記載の方法。
【請求項２０】
前記ファイルシステムマニフェストは、前記クライアントデバイス又は該クライアントデバイスのユーザに固有の暗号化キーを使用して暗号化されることを特徴とする請求項１７に記載の方法。
【請求項２１】
前記複数のファイルをそれらの複数のファイルを前記クラウドファイルシステムに保存した後に前記クライアントデバイスのローカルストレージシステムから除去する段階、
を更に含むことを特徴とする請求項１７に記載の方法。
【請求項２２】
前記クラウドストレージシステムが前記暗号化チャンクを含むか否かを決定する段階は、
前記暗号化チャンクに対応する前記チャンク識別子が前記クラウドストレージシステムに存在するか否かを示す情報を要求する質問を該クラウドストレージシステムに送信する段階と、
前記チャンク識別子が前記クラウドストレージシステムに存在するか否かを示す応答を受信する段階と、
を含む、
ことを特徴とする請求項１７に記載の方法。
【請求項２３】
前記ユーザマニフェストは、指標を識別する情報を更に含むことを特徴とする請求項１７に記載の方法。
【請求項２４】
クライアントデバイスのプロセッサによって実行された場合に該プロセッサをして請求項１７から請求項２３のいずれか１項に記載の方法を実行させることになる命令を与える少なくとも１つの固定機械可読ストレージ媒体。
【請求項２５】
クラウドファイルシステムに複数のファイルを保存するように構成されたクライアントデバイスであって、
命令を実行するプロセッサと、
前記プロセッサに結合され、実行された時に該プロセッサをして請求項１７から請求項２３のいずれか１項に記載の方法を実行させる１つ又はそれよりも多くの命令を格納する少なくとも１つの固定機械可読ストレージ媒体と、
を含むことを特徴とするクライアントデバイス。
【請求項２６】
クラウドストレージシステムに少なくとも部分的に常駐するクラウドファイルシステムへのアクセスをユーザに与えるためのクライアントデバイスのクラウドストレージクライアントにおける方法であって、
別のユーザによって共有されていたファイルシステムマニフェストに対応する暗号化ファイルシステムマニフェストと、ファイルシステムマニフェスト暗号化キーとを取り出す段階と、
前記ファイルシステムマニフェスト暗号化キーを使用して前記ファイルシステムマニフェストを暗号解読し、該暗号解読ファイルシステムマニフェストが、１組の１つ又はそれよりも多くの暗号化ファイルマニフェストと１組の１つ又はそれよりも多くのファイルマニフェストキーとのリストを含む段階と、
前記ファイルマニフェストキーの組を使用して前記暗号化ファイルマニフェストの組を暗号解読し、各暗号解読ファイルマニフェストが、１組の暗号化キーとファイルのチャンク識別子の対応する組とを含み、該ファイルが、暗号化ファイルチャンクを前記クラウドストレージシステムで複数のユーザにわたって非複製化させるためにユーザ不可知方式で暗号化されたものである段階と、
前記ユーザのユーザマニフェストに前記暗号解読ファイルシステムマニフェストを追加する段階と、
を含むことを特徴とする方法。
【請求項２７】
前記ユーザ特定のキーを用いて前記ユーザマニフェストを暗号化する段階と、
前記クラウドストレージシステムに前記暗号化ユーザマニフェストを送信する段階と、
を更に含むことを特徴とする請求項２６に記載の方法。
【請求項２８】
前記暗号解読ファイルシステムマニフェストは、そのファイルシステムマニフェストのための実装ポイントを示すメタデータに関連付けられることを特徴とする請求項２６に記載の方法。
【請求項２９】
前記ユーザの前記ユーザマニフェストに前記暗号解読ファイルシステムマニフェストを追加する段階は、
データが前記示された実装ポイントの位置に現在常駐していると決定することに応答して、前記暗号解読ファイルシステムマニフェストを異なる位置に実装する段階、
を含む、
ことを特徴とする請求項２８に記載の方法。
【請求項３０】
前記異なる位置は、前記クラウドストレージクライアントによって自動的に選択されることを特徴とする請求項２９に記載の方法。
【請求項３１】
前記異なる位置は、前記クライアントデバイスの前記ユーザによって選択されることを特徴とする請求項２９に記載の方法。
【請求項３２】
前記ファイルシステムマニフェストキーは、前記クラウドストレージシステムに対して普遍的に固有の識別子であることを特徴とする請求項２６に記載の方法。
【請求項３３】
前記ファイルシステムマニフェストキーは、前記別のユーザによって与えられ、
前記ファイルシステムマニフェストキーは、前記別のユーザから受信される、
ことを特徴とする請求項２６に記載の方法。
【請求項３４】
クライアントデバイスのプロセッサによって実行された場合に該プロセッサをして請求項２６から請求項３３のいずれか１項に記載の方法を実行させることになる命令を与える少なくとも１つの固定機械可読ストレージ媒体。
【請求項３５】
クラウドファイルシステムへのアクセスをユーザに与えるように構成されたクライアントデバイスであって、
命令を実行するプロセッサと、
前記プロセッサに結合され、実行された時に該プロセッサをして請求項２６から請求項３３のいずれか１項に記載の方法を実行させる１つ又はそれよりも多くの命令を格納する少なくとも１つの固定機械可読ストレージ媒体と、
を含むことを特徴とするクライアントデバイス。
【請求項３６】
クライアントデバイス上で該クライアントデバイスからリモートのクラウドストレージシステムに少なくとも部分的に常駐するクラウドファイルシステム（ＣＦＳ）を使用する方法であって、
前記ＣＦＳのローカルキャッシュとして作用するようにデータを格納するためのスペースを前記クライアントデバイスのローカルストレージシステムに割り当てる段階と、
前記ローカルファイルシステムに格納されたフォルダの指定を前記クライアントデバイスにおいて実行されているファイルブラウザインタフェースに受信してそれとその下にある複数のファイルとを前記ＣＦＳに変換し、該フォルダ及び該複数のファイルが、前記ローカルストレージシステムに格納され、該フォルダが、該ローカルファイルシステム内の位置で識別される段階と、
前記ローカルストレージシステム内のストレージから前記ＣＦＳの前記クラウドストレージシステム内のストレージに前記複数のファイルを含む前記フォルダを変換し、該複数のファイルが、ユーザ不可知方式で暗号化された複数の暗号化ファイルチャンクを使用して該クラウドストレージシステムに格納され、該暗号化ファイルチャンクを該クラウドストレージシステムにおいて複数のユーザにわたって非複製化させる段階と、
前記複数の暗号化ファイルチャンクのうちの前記クラウドストレージシステムに存在しないものである該複数の暗号化ファイルチャンクのうちの１つ又はそれよりも多くを該クラウドストレージシステムに送信する段階と、
前記フォルダと前記複数のファイルとを識別するファイルシステムマニフェストを前記ＣＦＳの前記ローカルキャッシュに格納する段階と、
前記複数のファイルの各々にそのファイルが以前にアクセス可能であった論理経路によってアクセスすることができるように、前記ローカルファイルシステムの前記位置に前記フォルダの表示を維持する段階と、
前記ローカルファイルシステムの前記位置から前記複数のファイルを除去する段階と、
前記クラウドストレージシステムに現在位置付けられた前記複数のファイルの各々へのアクセスをそのファイルが以前にアクセス可能であった前記論理経路を通じて与えるために、前記フォルダへのアクセスを前記クライアントデバイス上で実行されているＣＦＳクライアントモジュールに向ける段階と、
を含むことを特徴とする方法。
【請求項３７】
前記複数のファイルチャンクのうちの１つ又はそれよりも多くを前記ＣＦＳの前記ローカルキャッシュに入れる段階と、
前記複数のファイルチャンクのうちの１つのアクセスに対する要求を受信することに応答して、
そのファイルチャンクが前記ＣＦＳの前記ローカルキャッシュに入れられない場合にそのファイルチャンクを前記クラウドストレージシステムから取り出し、かつ
前記ＣＦＳの前記ローカルキャッシュにない前記複数のファイルチャンクのうちの他のものを前記クラウドストレージシステムから予測的に取り出す、
ことを実行する段階と、
を更に含むことを特徴とする請求項３６に記載の方法。
【請求項３８】
前記複数のファイルチャンクのうちの他のものを前記クラウドストレージシステムから予測的に取り出す前記段階は、前記ファイルシステムマニフェストにアクセスしてどのチャンクが前記要求されたチャンクの近くに位置するかを決定する段階、及び該クラウドストレージシステムにそれらのチャンクの少なくとも一部を要求する段階を含むことを特徴とする請求項３７に記載の方法。
【請求項３９】
前記複数のファイルチャンクのうちの他のものを前記クラウドストレージシステムから予測的に取り出す前記段階は、前記要求されたチャンクがアクセスされた時にアクセスされることになる可能性が高い１組の１つ又はそれよりも多くのチャンクを示す解析モデルを使用する段階、及び該クラウドストレージシステムにそれらの組のチャンクの少なくとも一部に要求する段階を含むことを特徴とする請求項３７に記載の方法。
【請求項４０】
前記複数のチャンクのうちの前記他のものを識別するプリフェッチ指令を前記クラウドストレージシステムに通信する段階、
を更に含むことを特徴とする請求項３７に記載の方法。
【請求項４１】
前記クラウドストレージシステムに格納された前記フォルダに利用可能なスペースの量の要求を受信する段階と、
前記クラウドストレージシステムに格納された前記フォルダに利用可能な前記スペースの量として前記ユーザに提示する前記ローカルストレージシステム上で利用可能な量より大きい値を生成する段階と、
を更に含むことを特徴とする請求項３７に記載の方法。
【請求項４２】
前記値は、ストレージのためにそのオペレーティングシステムによってサポートされる最大値であることを特徴とする請求項４１に記載の方法。
【請求項４３】
前記ＣＦＳにおける前記ローカルキャッシュとして作用する前記スペースの量を設定するためのインタフェースを前記クライアントデバイスのユーザに与える段階と、
前記ＣＦＳにおける前記ローカルキャッシュとして作用する前記スペースの量の表示を該ＣＦＳにおいて該ローカルキャッシュとして作用する該スペース量を設定するための前記インタフェースを通じて受信する段階と、
を更に含むことを特徴とする請求項３７に記載の方法。
【請求項４４】
前記ユーザが前記フォルダをドラッグ及びドロップしてそれを前記ＣＦＳに変換されるように指定することを可能にする該フォルダを前記ＣＦＳに変換するためのインタフェースを与える段階、
を更に含むことを特徴とする請求項３７に記載の方法。
【請求項４５】
前記フォルダの前記指定は、該フォルダに関連付けられたコンテクストメニュー内の選択を通じて受信されることを特徴とする請求項３７に記載の方法。
【請求項４６】
クライアントデバイスのプロセッサによって実行された場合に該プロセッサをして請求項３６から請求項４５のいずれか１項に記載の方法を実行させることになる命令を与える少なくとも１つの固定機械可読ストレージ媒体。
【請求項４７】
クラウドファイルシステムを使用するように構成されたクライアントデバイスであって、
命令を実行するプロセッサと、
前記プロセッサに結合され、実行された時に該プロセッサをして請求項３６から請求項４５のいずれか１項に記載の方法を実行させる１つ又はそれよりも多くの命令を格納する少なくとも１つの固定機械可読ストレージ媒体と、
を含むことを特徴とするクライアントデバイス。
【請求項４８】
クラウドストレージゲートウェイと１組の１つ又はそれよりも多くのクラウドストレージプールとを含み、複数のクライアントデバイスにクラウドファイルシステムの少なくとも一部を与えるクラウドストレージシステムにおける方法であって、
複数の暗号化ファイルチャンク及び複数のファイルチャンク識別子をユーザ不可知非複製化方式で格納する段階であって、該暗号化ファイルチャンクの各々が、同一非暗号化ファイルチャンクの存在が同一ファイルチャンク識別子を通して認識されるようにユーザ不可知方式で非複製化される前記格納する段階と、
前記複数のクライアントデバイスのうちの１つからの取り出し要求に対して該取り出し要求において識別される前記複数の暗号化ファイルチャンクのうちの１つ又はそれよりも多くを送信することによって応答する段階と、
前記クラウドストレージプールの組よりも前記複数のクライアントデバイスのうちの前記１つに近い前記クラウドストレージゲートウェイで前記クラウドファイルシステムのリモートキャッシュに暗号化ファイルチャンクを少なくとも一時的に格納することにより、該複数のクライアントデバイスのうちの該１つからのプリフェッチ指令に応答する段階と、
を含むことを特徴とする方法。
【請求項４９】
前記クラウドストレージプールの組は、地理的に分散している複数のクラウドストレージプールを含み、
前記クラウドストレージゲートウェイは、領域の表示を含む取り出し要求に対してそれらの要求をその地理的領域に対応する前記クラウドストレージプールのうちの１つに向けることによって応答する、
ことを特徴とする請求項４８に記載の方法。
【請求項５０】
ユーザが前記クラウドストレージシステムに格納された前記複数のファイルのうちの１つ又はそれよりも多くにアクセスすることを可能にするためのウェブファイルアクセスポータルを与える段階と、
前記ユーザの暗号化情報を前記ウェブファイルアクセスポータルを通じて受信する段階と、
前記ユーザの暗号化情報を利用して該ユーザのクラウドファイルシステムにアクセスする段階と、
前記ユーザのクラウドファイルシステムに利用可能なファイルのリストを前記ウェブファイルアクセスポータルを通じて提示する段階と、
前記ユーザからの前記ファイルのリスト内のファイルにアクセスする要求を前記ウェブファイルアクセスポータルを通じて受信する段階と、
前記ファイルの暗号解読されたコピーを生成する段階と、
前記ユーザに前記ファイルの前記暗号解読コピーを送信する段階と、
を更に含むことを特徴とする請求項４８に記載の方法。
【請求項５１】
前記ウェブファイルアクセスポータルは、
前記ファイルを構成する１組の１つ又はそれよりも多くの暗号化ファイルチャンクに対応する１組の１つ又はそれよりも多くの暗号化ファイルチャンク識別子を取り出し、
前記１つ又はそれよりも多くの暗号化ファイルチャンクの組に対応する１組の１つ又はそれよりも多くの暗号化キーを取り出し、
前記１つ又はそれよりも多くの暗号化ファイルチャンクの組を取り出し、かつ
前記１つ又はそれよりも多くの暗号化キーのうちの対応するものを用いて前記組の１つ又はそれよりも多くの暗号化ファイルチャンクの各々を暗号解読する、
ことを実行することにより、前記ファイルの前記暗号解読コピーを生成する、
ことを特徴とする請求項５０に記載の方法。
【請求項５２】
プロセッサによって実行された場合に該プロセッサをして請求項４８から請求項５１のいずれか１項に記載の方法を実行させることになる命令を与える少なくとも１つの固定機械可読ストレージ媒体。
【請求項５３】
複数のクラウドファイルシステム（ＣＦＳ）の一部としてクラウドストレージシステムに格納された複数のファイルへのアクセスを与えるクラウドストレージシステムであって、
クラウドストレージシステムに格納するためにＣＦＳに対応するデータを受信し、
クライアントデバイスからのプリフェッチ指令に対して、１つ又はそれよりも多くの暗号化ファイルチャンクを該プリフェッチ指令において識別されるそれらの暗号化ファイルチャンクに対する取り出し要求に応答する際の待ち時間を低減するために前記クラウドストレージゲートウェイのキャッシュに少なくとも一時的に格納することによって応答し、かつ
各取り出し要求において識別された１つ又はそれよりも多くの暗号化ファイルチャンクを送信することにより、クライアントデバイスからの取り出し要求に応答する、
ことを実行するように構成されたクラウドストレージゲートウェイと、
前記複数の暗号化ファイルチャンク及び対応する複数のチャンク識別子を格納するように構成されたクラウドストレージプールであって、各暗号化ファイルチャンクが、クラウドストレージシステムに格納された前記複数のファイルのうちの１つ又はそれよりも多くの少なくとも一部分を含み、該複数の暗号化ファイルチャンクの各々が、同一非暗号化ファイルチャンクの存在が同一ファイルチャンク識別子を通じて認識されるようにユーザ不可知方法で非複製化され、該クラウドストレージプールが、該複数の暗号化ファイルチャンクの各々を取り出して該複数の暗号化ファイルチャンクの各々を前記クラウドストレージゲートウェイに送信するように更に構成される前記クラウドストレージプールと、
を含むことを特徴とするクラウドストレージシステム。
【請求項５４】
前記クラウドストレージゲートウェイは、各々がＣＦＳに対応する１つ又はそれよりも多くのファイルシステムマニフェストを受信することにより、前記クラウドストレージシステムに格納するために該ＣＦＳに対応する前記データを受信するように更に構成され、該ファイルシステムマニフェストは、該ＣＦＳに複数のファイルのリストを該複数のファイルの各々に対してファイルマニフェストを識別する情報と共に含むためのものであり、  前記クラウドストレージゲートウェイは、各々が前記複数のファイル内のファイルに対応させるためのかつ各々が該対応するファイルを暗号解読するのに使用される暗号化情報と共に該対応するファイルを構成する１組の１つ又はそれよりも多くの暗号化ファイルチャンクを識別する情報を含むためのものである１つ又はそれよりも多くのファイルマニフェストを受信するように更に構成され、該クラウドストレージゲートウェイは、該複数のファイルのうちの１つ又はそれよりも多くに対応する複数の暗号化ファイルチャンクを受信するように更に構成される、
ことを特徴とする請求項５３に記載のクラウドストレージシステム。
【請求項５５】
クラウドストレージシステムに格納された前記複数のファイルのうちの１つ又はそれよりも多くにアクセスするためのインタフェースをユーザに対して、該ユーザの暗号化情報を取り出し、該ユーザの暗号化情報を利用して該ユーザのクラウドファイルシステムにアクセスし、該ユーザのクラウドファイルシステムに利用可能なファイルのリストを提示し、前記ファイルのリスト内のファイルにアクセスする要求を該ユーザから受信し、該ファイルの暗号解読コピーを生成し、かつ該ユーザに該ファイルの該暗号解読コピーを提示することによって与えるように構成されたウェブファイルアクセスポータル、
を更に含むことを特徴とする請求項５３に記載のクラウドストレージシステム。
【請求項５６】
前記ウェブファイルアクセスポータルは、前記ファイルを構成する１組の１つ又はそれよりも多くの暗号化ファイルチャンクに対応する１組の１つ又はそれよりも多くの暗号化ファイルチャンク識別子を取り出し、該１つ又はそれよりも多くの暗号化ファイルチャンクの組に対応する１組の１つ又はそれよりも多くの暗号化キーを取り出し、該１つ又はそれよりも多くの暗号化ファイルチャンクの組を取り出し、かつ該１つ又はそれよりも多くの暗号化キーのうちの対応するものを用いて該組の１つ又はそれよりも多くの暗号化ファイルチャンクの各々を暗号解読することにより、該ファイルの前記暗号解読コピーを生成するように更に構成されることを特徴とする請求項５５に記載のクラウドストレージシステム。
【請求項５７】
コンテンツプロバイダが、クラウドストレージシステムのクライアントデバイスとして作用する複数のコンピュータデバイスにワイドエリアネットワークを通じて結合されたクラウドストレージシステムのユーザである加入者にコンテンツを配信する方法であって、  前記コンテンツプロバイダのコンピュータデバイスにより、彼らのコンテンツを含むクラウドファイルシステム（ＣＦＳ）を前記加入者の各々に対して生成する段階であって、前記クラウドストレージシステムが、該クラウドファイルシステム（ＣＦＳ）のためのデータの１次ストレージとして作用し、前記複数のコンピュータデバイスの各々が、そのクライアントデバイスによって利用される該ＣＦＳのローカルキャッシュを管理するクラウドファイルシステム（ＣＦＳ）モジュールを実行するように構成され、該ＣＦＳのファイルが、異なるユーザによって暗号化された同じデータを有する２つのファイルが同一暗号化データを有するファイルを生成することになるようにユーザ不可知暗号化を使用して暗号化され、該ユーザ不可知ファイル暗号化が、
前記ＣＦＳへの各ファイルに対して、
前記ファイルをチャンクに分割し、
そのチャンク内の前記データから各チャンクのための暗号化キーを生成し、
各チャンクをそのそれぞれの前記暗号化キーを用いて暗号化し、
各チャンクのためのチャンク識別子を生成し、
前記ファイルの前記暗号化チャンクの各々のための前記チャンク識別子及び暗号解読キーを含む各ファイルのためのファイルマニフェストを生成し、
各前記ファイルマニフェストのための暗号化キーをそのファイルマニフェスト内の前記データから生成し、
各前記ファイルマニフェストのためのファイルマニフェスト識別子を生成し、
前記ファイルマニフェストを該ファイルマニフェストに対して生成された前記暗号化キーを用いて暗号化し、
前記クラウドストレージシステムにまだ格納されていない前記暗号化チャンク及び前記暗号化ファイルマニフェストのうちのいずれをもアップロードし、
前記ファイルマニフェストに対して生成された前記ファイルマニフェスト識別子及び前記暗号化キーを用いてファイルシステムマニフェストを生成し、かつ
暗号化キーを用いて前記ファイルシステムマニフェストを暗号化する、
ことを実行することを前記ＣＦＳに対して要求する前記生成する段階と、
前記ＣＦＳをそれぞれの前記ユーザと共有する段階と、
を含むことを特徴とする方法。
【請求項５８】
前記コンテンツプロバイダによって生成された前記ＣＦＳの各々の全てが、同じコンテンツを含み、該コンテンツプロバイダは、前記クラウドストレージシステムに対して該コンテンツを１回だけアップロードすることを特徴とする請求項５７に記載の方法。
【請求項５９】
前記共有する段階は、各ユーザに対して前記暗号化ファイルシステムマニフェストの彼らのそれぞれの１つとそのファイルシステムマニフェストを暗号化するのに使用された前記暗号化キーとを送信する段階を含むことを特徴とする請求項５７に記載の方法。
【請求項６０】
前記共有する段階は、
前記クラウドストレージシステムに前記暗号化ファイルシステムマニフェストをアップロードする段階と、
各ユーザと彼らの暗号化ファイルシステムマニフェストのための前記識別子の彼らのそれぞれのものとそのファイルシステムマニフェストを暗号化するのに使用された前記暗号化キーとを共有する段階と、
を含む、
ことを特徴とする請求項５７に記載の方法。
【請求項６１】
クラウドストレージシステムのプロセッサによって実行された場合に該プロセッサをして請求項５７から請求項６０のいずれか１項に記載の方法を実行させることになる命令を与える少なくとも１つの固定機械可読ストレージ媒体。
【請求項６２】
命令を実行するプロセッサと、
前記プロセッサに結合されて、実行された時に該プロセッサをして請求項５７から請求項６０のいずれか１項に記載の方法を実行させる１つ又はそれよりも多くの命令を格納する少なくとも１つの固定機械可読ストレージ媒体と、
を含むことを特徴とするクラウドストレージシステム。
【請求項６３】
クラウドストレージシステムのクライアントデバイスとして作用する複数のコンピュータデバイスにワイドエリアネットワークを通じて結合され、該複数のコンピュータデバイスの各々が、そのクライアントデバイスによって利用されるＣＦＳのローカルキャッシュを管理するクラウドファイルシステム（ＣＦＳ）モジュールを実行するように構成され、該クラウドファイルシステム（ＣＦＳ）のためのデータの１次ストレージとして作用するクラウドストレージシステムであって、
コンテンツプロバイダにより、加入者にコンテンツを彼らのコンテンツを含む前記ＣＦＳを生成してそれぞれの該加入者と該ＣＦＳを共有することによって配信するために生成されたＣＦＳと、該ＣＦＳの各々のために、
暗号化ファイルシステムマニフェストと、
複数の暗号化ファイルマニフェストと、
複数の暗号化ファイルチャンクであって、前記暗号化ファイルシステムマニフェストが、前記複数のファイルマニフェストの各々を識別し、該ファイルマニフェストの各々が、前記ＣＦＳの１つのファイルを表し、かつ前記暗号化ファイルチャンクＦＳＭのうちのそのファイルを含むものを識別し、前記複数の暗号化ファイルマニフェスト及び暗号化ファイルチャンクが、ユーザ不可知暗号化を使用して前記ＣＦＳモジュールによって暗号化されたものであり、ユーザ不可知暗号化が、暗号化キーが暗号化されるデータから生成されること、そのデータが該生成されたキーによって暗号化されること、及び識別子がそのデータに対して生成されることを要求する前記複数の暗号化ファイルチャンクと、
を格納するクラウドストレージプール、及び
ワイドエリアネットワークと前記クラウドストレージプールとに結合されて前記クライアントデバイスからの要求を該クラウドストレージプールのためのクラウドストレージシステムアプリケーションプログラミングインタフェース（「ＡＰＩ」）呼び出しに変換するクラウドストレージゲートウェイ、
を含むことを特徴とするクラウドストレージシステム。
【請求項６４】
前記クラウドストレージゲートウェイは、プリフェッチ指令によって識別される前記暗号化ファイルチャンクを前記クラウドストレージプールから該クラウドストレージゲートウェイ内のリモートキャッシュの中に移動するように該クラウドストレージゲートウェイに命令する前記ＣＦＳモジュールからのプリフェッチ指令に応答するように構成されることを特徴とする請求項６３に記載のクラウドストレージシステム。
【請求項６５】
前記コンテンツプロバイダによって生成された前記ＣＦＳの各々が、同じコンテンツを含み、そのコンテンツは、１回だけアップロードされたものであることを特徴とする請求項６３又は請求項６４に記載のクラウドストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
〔関連出願への相互参照〕
［０００１］本出願は、２０１１年１０月１９日出願の米国特許仮出願第６１／５４９，２０６号、２０１１年９月２５日出願の米国特許仮出願第６１／５３８，９２８号、２０１１年９月１１日出願の米国特許仮出願第６１／５３３，２６４号、及び２０１１年５月１４日出願の米国特許仮出願第６１／４８６，２４０号である米国特許仮出願の利益を主張するものであり、この各々は、ここで引用により組み込まれる。
【０００２】
［０００２］本発明の実施形態は、ネットワーク接続ストレージの分野に関し、より具体的には、クラウドストレージシステムに関する。
【背景技術】
【０００３】
［０００３］クラウドベースのストレージシステム、オンラインバックアップサービス、及び大規模ファイル転送システムが一般的になると、ストレージ要件及び帯域幅要件は、２つの重要なファクタであり、これらは、制御される場合に、重要な競争力のある利点をもたらすことができる。しかし、これらのオンラインストレージシステムのユーザが、このようなサービスのオペレータからもサービスの他のユーザからも自分のデータがセキュアであることを望むという競合するファクタが存在する。
【０００４】
［０００４］顧客へのサービスとしてオンラインファイルシステムを実施する従来の方法は、各ユーザにファイル転送プロトコル接続又は他のファイルトランスポートブロトコルを通じてワールドワイドウェブインタフェースを通してオンラインストレージシステムにファイルをアップロードさせることである。典型的には、ファイルは、暗号化されずサービスに送られ、これは、サービスのオペレータがユーザのデータにアクセス可能であることを意味する。一部の場合に、サービスは、それらのサービス内で格納のためにデータを暗号化し、一方、他の場合に、サービスは、サービスにデータをアップロードする前にデータを暗号化するクライアントソフトウエアを提供する。クライアントがアップロードする前にデータを暗号化する場合に、従来の方法は、１）何らかの固有の暗号化キー（例えば、ユーザパスワード又は公開キー）を使用してクライアントにファイルを暗号化させる、２）クライアントに暗号化ファイルをアップロードさせる、３）サーバ上に暗号化ファイルを格納することである。
【０００５】
［０００５］暗号化されたアップロードをオンラインストレージシステムのクライアントに提供する従来の手段は、いくつかの欠点を呈する。第１に、２人の異なるクライアントが、各クライアントがオンラインストレージシステムに格納するデータ（例えば、写真、映画、歌、文書）の完全なコピーを有する可能性がある。しかし、両方のファイルは、各クライアントにより固有に暗号化されると思われるので、暗号化されたデータは同一ではなく、オンラインストレージシステムは、同じ非暗号化データの２つのコピーを格納しなければならない（暗号化形式ではあるが）。各クライアントは、そのクライアントがアップロードしたコピーを暗号解読することができるのみであると考えられるので、サービスは、このデータの１つだけのコピーを格納することはできない。
【０００６】
［０００６］１つの代替手法は、サービスにサーバ側で暗号化キーを管理させ、従って、クライアントがアップロードするファイルを暗号解読することができることである。サーバは、次に、２つの暗号解読されたファイルが同一であると決定し、暗号解読されたデータの１つだけのコピーを格納することができる。次に、各クライアントがそのデータを要求する時に、サーバは、そのクライアント暗号化キーを用いてデータを暗号化して要求されたファイルを送信する。この手法は、オペレータが各クライアントのデータに完全なアクセスを有するという点でセキュリティを損なう。悪徳オペレータは、彼らのクライアントのデータをくまなく調べる場合がある。更に、サービス自体が単一の弱点であり、セキュリティを破るのに成功すると、クライアントのデータの全てが露出される。
【０００７】
［０００７］説明した従来又は代替手法のいずれの下でも、クライアントがオンラインストレージシステムにファイルを保存する度に、クライアントは、そのファイルのコピー（暗号化又は非暗号化形式での）がオンラインストレージシステムに存在するか否かに関わらず、暗号化データをアップロードしなければならない。すなわち、説明した代替手法の下でさえも、クライアントは、オンラインストレージシステムが既にデータをそのストレージプールに有するので、サーバが必要としないデータをアップロードして貴重な帯域幅リソースを無駄にする。
【０００８】
［０００８］本発明は、以下の説明及び本発明の実施形態を示すために使用される添付図面を参照することによって最も良く理解することができる。
【図面の簡単な説明】
【０００９】
【図１】［０００９］本発明の実施形態によるクライアントデバイスに結合されたクラウドストレージシステムを示すブロック図である。
【図２】［００１０］クラウドストレージゲートウェイ及びクラウドストレージプールを含むクラウドストレージシステムを示すブロック図である。
【図３】［００１１］本発明の実施形態に従って格納されたクラウドファイルシステムにファイルを保存する方法の流れ図である。
【図４】［００１２］本発明の実施形態に従ってユーザ不可知ファイル暗号化を行う方法の流れ図である。
【図５】［００１３］本発明の実施形態に従ってデータのユーザ不可知暗号化を行う方法の流れ図である。
【図６】［００１４］本発明の実施形態に従ってユーザ不可知ファイル暗号化を行う方法の視覚化を示す図である。
【図７】［００１５］本発明の実施形態に従ってファイルシステムマニフェストの生成を含むクラウドファイルシステムにファイルを保存する方法の流れ図である。
【図８】［００１６］本発明の実施形態に従ってクラウドファイルシステムにファイルからデータを読み取る方法の流れ図である。
【図９】［００１７］本発明の実施形態によるクラウドファイルシステム及びクラウドファイルシステムへのファイルの格納の視覚化を示す図である。
【図１０】［００１８］本発明の実施形態によるファイルのユーザ不可知暗号化及び圧縮の視覚化を示す図である。
【図１１】［００１９］本発明の実施形態による２つのファイルのユーザ不可知暗号化及び圧縮の視覚化を示す図である。
【図１２】［００２０］本発明の実施形態に従ってクラウドストレージゲートウェイがクラウドファイルプールからファイルチャンクを戻す方法の流れ図である。
【図１３】［００２１］本発明の実施形態に従ってクラウドストレージゲートウェイがクラウドファイルプールからファイルチャンクをプリフェッチする方法の流れ図である。
【図１４】［００２２］本発明の実施形態に従ってクラウドストレージゲートウェイがクラウドストレージシステムにファイルチャンクがあるかを検査する方法の流れ図である。
【図１５】［００２３］本発明の実施形態に従ってクラウドストレージゲートウェイがクラウドストレージシステムにファイルチャンクを追加する方法の流れ図である。
【図１６】［００２４］本発明の実施形態に従ってファイルチャンクをクラウドストレージシステムに要求するデータフロー図である。
【図１７】［００２５］本発明の実施形態に従ってクラウドストレージプールにファイルチャンクをプリフェッチするように要求するデータフロー図である。
【図１８】［００２６］本発明の実施形態に従ってクラウドストレージシステムが１つ又はそれよりも多くのファイルチャンクを有するか否かの表示を要求するデータフロー図である。
【図１９】［００２７］本発明の実施形態に従ってクラウドストレージシステムに１つ又はそれよりも多くのファイルチャンクを格納するデータフロー図である。
【図２０】［００２８］本発明の実施形態に従ってクラウドファイルシステムに格納されたファイルを列挙するユーザインタフェースを示す図である。
【図２１】［００２９］本発明の実施形態に従ってクラウドファイルシステムクライアントモジュールによって提供される機能にアクセスするためのユーザインタフェースを示す図である。
【図２２】［００３０］本発明の実施形態に従ってクライアントデバイス上のクラウドファイルシステムアクセスを管理するためにクラウドファイルシステムクライアントモジュールによって提供されるユーザインタフェースを示す図である。
【図２３】［００３１］本発明の実施形態に従ってクライアントデバイス上のローカルキャッシュを管理するためにクラウドファイルシステムクライアントモジュールによって提供されるユーザインタフェースを示す図である。
【図２４】［００３２］本発明の実施形態に従ってクラウドファイルシステム内のフォルダにローカルファイルシステム内のフォルダを変換するためにクラウドファイルシステムクライアントモジュールによって提供されるユーザインタフェースを示す図である。
【図２５】［００３３］本発明の実施形態による例示的なコンピュータシステムのブロック図である。
【図２６】［００３４］本発明の実施形態によるクラウドファイルシステム内のストレージへの変換の前及び後のファイルシステム要素の部分集合を示すユーザインタフェースを示す図である。
【図２７】［００３５］本発明の実施形態によるファイルシステムマニフェストの生成を含むクラウドファイルシステムにおいてファイルを生成する方法の流れ図を示す図である。
【図２８】［００３６］本発明の実施形態に従ってクラウドストレージシステムに新しいユーザを生成するためにクラウドファイルシステムクライアントモジュールによって提供されるユーザインタフェースを示す図である。
【図２９】［００３７］本発明の実施形態に従って仮想フォルダを管理するためにクラウドファイルシステムクライアントモジュールによって提供されるユーザインタフェースを示す図である。
【図３０】［００３８］本発明の実施形態に従ってクライアントデバイスのオペレーティングシステムに利用可能なスペースの量を与えるためにクラウドファイルシステムクライアントモジュールによって行われる方法を示す図である。
【図３１】［００３９］本発明の実施形態に従ってウェブファイルアクセスポータル及びクライアントデバイスによってアクセスされているクラウドストレージシステムを示す図である。
【図３２】［００４０］本発明の実施形態に従ってクラウドストレージシステムにアクセスしているウェブファイルアクセスポータルによって提供されるウェブファイルブラウザインタフェースを示す図である。
【図３３】［００４１］本発明の実施形態によるデータ構造間の関係を示すブロック図である。
【図３４】［００４２］本発明の実施形態に従って２つのクライアントデバイス上に使用される単一のユーザマニフェストのデータ構造間の関係を示すブロック図である。
【図３５】［００４３］本発明の実施形態に従って２つのクライアントデバイス上に使用される２つのユーザマニフェストのデータ構造間の関係を示すブロック図である。
【図３６】［００４４］本発明の実施形態に従ってユーザにファイル、フォルダ、及びファイルシステムの復元オプションを提供するためにＣＦＳクライアントモジュールによって提供されるインタフェースを示す図である。
【図３７】［００４５］クラウドストレージシステムに格納されたデータへのローカルストレージシステムに格納されたデータの移行を示すブロック図である。
【図３８】［００４６］本発明の実施形態に従ってローカルストレージシステム内のストレージからクラウドストレージシステム内のストレージへの移行の方法のブロック図である。
【図３９】［００４７］本発明の実施形態に従ってクラウドストレージシステムのデータにアクセスする複数のユーザ及び機械を示すブロック図である。
【図４０】［００４８］本発明の実施形態に従って取り出されることになるファイルチャンクの優先待ち行列を示すブロック図である。
【図４１】［００４９］本発明の実施形態に従って地理的に分散されたクラウドストレージプールを示す図である。
【図４２】［００５０］本発明の実施形態に従って仮想フォルダのスナップショットにアクセスするためにクラウドファイルシステムクライアントモジュールによって提供されるユーザインタフェースを示す図である。
【図４３】［００５１］本発明の実施形態に従ってクラウドファイルシステム内のフォルダにローカルファイルシステム内のフォルダを変換するためにクラウドファイルシステムクライアントモジュールによって提供されるユーザインタフェースを示す図である。
【図４４】［００５２］本発明の実施形態による実装クラウドファイルシステムの上述の態様を他の実装ファイルシステムと比較して示す図である。
【発明を実施するための形態】
【００１０】
［００５３］暗号化されたクライアントデータを格納し、サーバ上にクライアント暗号化キーを有することなくクラウドストレージシステムに格納されたデータの複製を排除し、かつ帯域幅利用を最少にするストレージシステム（「クラウドストレージシステム」）を構成することが望ましい。以下の説明では、データのエンドツーエンドの暗号化を行うと共に帯域幅利用を最小にしながら、クラウドストレージシステムにおいてデータの複製を最少にするクラウドストレージシステムを生成する方法及び装置に対して説明する。
【００１１】
［００５４］以下の説明において、論理実施、オペコード、オペランドを指定する手段、リソース分割／共有／複製実施、システム構成要素のタイプ及び相互関係、及び論理分割／統合選択肢のような多くの具体的な詳細に関して本発明のより完全な理解が得られるように説明する。しかし、このような特定の詳細がなくても本発明を実施することができることは当業者により認められるであろう。他の事例において、制御構造、ゲートレベル回路、及び完全なソフトウエア命令シーケンスは、本発明を不明瞭にしないように詳細には示していない。当業者は、含めた説明により、不相応な実験なしに適切な機能性を実施することができるであろう。
【００１２】
［００５５］本明細書における「一実施形態」、「実施形態」、「例示的な実施形態」などへの言及は、説明する実施形態が、特定の特徴、構造、又は特性を含むことはできるが、全ての実施形態が特定の特徴、構造、又は特性を必ずしも含むことができるというわけではないことを示している。更に、このような語句は、必ずしも同じ実施形態を指すわけではない。更に、特定の特徴、構造、又は特性が実施形態に関連して説明された時に、明示的に説明されたか否かに関わらず、他の実施形態に関連してこのような特徴、構造、又は特性を実施することは、当業者の知識の範囲内であるように考えられている。
【００１３】
［００５６］以下の説明及び特許請求の範囲において、「結合された」、「接続された」という用語は、それらの派生語と共に使用する場合がある。これらの用語は、互いの同意語を意図していないことを理解しなければならない。「結合された」は、１つよりも多い要素を示すために使用しており、これらは、互いに直接的、物理的、又は電気的に接触しているか、又は互いと協働又は相互作用する場合もあれば、そうではない場合もある。「接続された」は、互いに結合された１つよりも多い要素間の通信の確立を示すために使用している。
【００１４】
［００５７］理解しやすくするために、ある一定の品目の任意的な性質（例えば、本発明の所定の実施によりサポートされない特徴、所定の実施によりサポートされるが、一部の状況に使用され、他の状況に使用されない特徴）を表すために破線を図中で使用している。
【００１５】
［００５８］図に示す技術は、１つ又はそれよりも多くの電子デバイス上に格納かつ実行されたコード及びデータを使用して実施することができる。このような電子デバイスは、固定有形機械可読媒体（例えば、磁気ディスク、光ディスク、読取専用メモリ、フラッシュメモリデバイス、相変化メモリ）及び一時的機械可読通信媒体（例えば、搬送波、赤外線信号、デジタル信号などのような電気、光学、音響、他の形態の伝播された信号）を使用してコード及びデータを格納して通信する（内部的に及び／又はネットワーク上で他の電子デバイスと共に）。更に、このような電子デバイスは、典型的には、ストレージデバイス、１つ又はそれよりも多くの入出力デバイス（例えば、キーボード、タッチスクリーン、及び／又はディスプレイ）、及びネットワーク接続のような１つ又はそれよりも多くの他の構成要素に結合された１組又は１つ又はそれよりも多くのプロセッサを含む。１組のプロセッサ及び他の構成要素の結合は、典型的には、１つ又はそれよりも多くのバス及びブリッジ（バスコントローラとも呼ばれる）を通じたものである。ネットワークトラフィックを搬送するストレージデバイス及び信号は、それぞれ、１つ又はそれよりも多くの固定有形機械可読媒体及び一時的機械可読通信媒体を表している。従って、所定の電子デバイスのストレージデバイスは、典型的には、その電子デバイスの１組の１つ又はそれよりも多くのプロセッサ上での実行に向けてコード及び／又はデータを格納する。言うまでもなく、本発明の実施形態の１つ又はそれよりも多くの部分は、ソフトウエア、ファームウエア、及び／又はハードウエアの異なる組合せを使用して実施することができる。
【００１６】
［００５９］図１は、本発明の実施形態に従ってクライアントデバイスに結合されたクラウドストレージシステムを示すブロック図である。従来のオンラインストレージシステムにおいて、クライアントデータのオンラインストレージは、クライアントのデバイス上のクライアントのデータのストレージに対して２次的、例えば、バックアップである。従って、各ファイルは、主としてクライアントデバイス上で格納され、それらのファイルのコピーが、オンラインストレージシステムに格納される。これには、クライアントデバイスが、少なくともクライアントがオンラインストレージシステムに格納しているのと少なくとも同量のデータを格納することができることを必要とする問題があり、又はクライアントデバイス上に格納されたデータとオンラインストレージシステムに格納されたデータ間の同期を維持するという実施上の問題を生じる。例えば、ユーザは、オンラインストレージシステム内のデータを自分のデバイスの拡張としてのオンラインストレージシステム内のデータとしてではなく、自分のデバイス上のデータのコピーとして知覚する。
【００１７】
［００６０］図１は、ローカルエリアネットワーク又はワイドエリアネットワークのような通信ネットワーク１３０を通じてクラウドストレージシステム１３５に結合された複数のクライアントデバイス１０１Ａを示している。本発明の実施形態は、多くの異なるクライアントデバイスをサポートする。クライアントデバイスは、ファイルにアクセスし、かつネットワーク接続にわたって通信することができるコンピュータデバイスである。例えば、クライアントデバイスは、デスクトップコンピュータ、ラップトップコンピュータ、サーバ、タブレット型コンピュータ、パームコンピュータ、スマートフォン、セットトップボックス、又はゲーム機とすることができる。当業者は、説明するクライアントデバイスが例示的であり、かつ本発明の実施形態によりサポートされるクライアントデバイスに決して限定しないものであることを認識するであろう。
【００１８】
［００６１］図１では、クラウドストレージシステム１３５は、クラウドファイルシステム（「ＣＦＳ」）のためのデータの１次ストレージとして作用する。更に、クライアントデバイス１０１Ａ〜Ｄは、ＣＦＳにアクセスするように構成されたＣＦＳクライアントモジュールを実行するように構成される。ＣＦＳクライアントモジュールは、更に、そのクライアントデバイス１０１Ａ〜Ｂにより利用されるＣＦＳのローカルキャッシュを管理する。各クライアントデバイス１０１Ａ〜Ｄ内のローカルキャッシュは、クライアントデバイス１０１Ａ〜Ｄのユーザに対して殆ど透過的である。更に、クライアントデバイス１０１Ａを利用するユーザには、そのユーザのＣＦＳ内に格納された各ファイル及びフォルダの外見が提示されるが、それらのファイル及びフォルダの全てにアクセスするのに必要とされる全てのデータが、常にそのユーザのＣＦＳのローカルキャッシュに存在するというわけではない。ユーザが自分のＣＦＳのファイルにアクセスすると、クライアントデバイス１０１Ａは、クライアントデバイスの１０１Ａローカルキャッシュに存在せず、かつそのファイルにアクセスするのに必要とされるクラウドストレージシステム１３５からのあらゆるデータを取り出す。ユーザのクライアントデバイス１０１Ａ内のローカルキャッシュがクラウドストレージシステム１３５のデータで満たされると、クライアントデバイス１０１Ａは、クラウドストレージシステム１３５のデータのスペースを作るためにローカルキャッシュからデータを排除する。少なくとも１つの実施形態において、排除中に固定データがＣＦＳのローカルキャッシュから排除されないように、ＣＦＳのローカルキャッシュに位置付けられたデータを非排除（「固定」）に向けてマーク付けすることができる。少なくとも１つの実施形態において、クライアントデバイス１０１Ａは、まるでＣＦＳがローカルデバイスであるようにユーザにＣＦＳのコンテンツを提示する。
【００１９】
［００６２］例えば、ＣＦＳクライアントモジュールは、ＣＦＳのローカルキャッシュに存在するファイルチャンクのデータベースを含むことができる。ファイルチャンクのデータベースは、どのファイルチャンクが存在するか、より多くのファイルチャンクのためのスペースを作るためにどのファイルチャンクを排除することができるか、どのファイルチャンクがローカルキャッシュに向けて固定されたか、どのファイルチャンクがクラウドストレージシステムに保存されたか、及びどの程度のスペースがローカルキャッシュによって使用されたかに関して追跡するためにＣＦＳクライアントモジュールによって使用される情報を含むと考えられる。ＣＦＳクライアントモジュールがどのファイルチャンクを排除すべきかを決定するのに使用することができる１つの方法は、キャッシュに入れられたファイルチャンクの各々が最後にクライアントデバイスによって使用されたタイムスタンプを決定することである。例えば、データベースは、ファイルチャンクがＣＦＳクライアントモジュールによってアクセスされる度に更新されるフィールドを含むと考えられる。ＣＦＳクライアントモジュールは、次に、最近アクセスされていない、例えば、この３０日においてアクセスされていないあらゆるファイルチャンクを決定し、最初に排除に向けてそれらのファイルチャンクを選択することができるであろう。ＣＦＳクライアントモジュールは、図８を参照して説明するように、モジュールがＣＦＳクライアントファイルチャンクを取り出そうとする時はいつでもファイルチャンクのアクセス／使用を追跡することができると考えられる。ＣＦＳクライアントモジュールは、更に、ファイルチャンクが使用される度にデータベース内のカウンタを増分することにより、ファイルチャンクがどれ程度頻繁に使用されるかを追跡することができる。次に、ＣＦＳクライアントモジュールは、他の点では同等の２つの排除候補間で使用カウントが低い方の候補が最初に排除されるように、どのファイルチャンクを排除しなければならないかを決定する時に使用カウンタを考慮することができる。より多い、より少ない、又は異なる排除基準を含む他の排除方針を実施することができることは当業者により認められるであろう。例えば、ＣＦＳクライアントモジュールは、クライアントデバイスローカルストレージシステム内のファイルチャンクをキャッシュに入れ、ローカルキャッシュ内のデータがストレージ限界に接近するか又はそのストレージ限界を超える時にＣＦＳクライアントモジュールがファイルチャンクを排除し始めるように、ユーザがローカルキャッシュに対してそのストレージ限界を設定することを可能にすることができる場合があることは認められるであろう。
【００２０】
［００６３］ファイルチャンクのデータベースの一実施形態において、ファイルチャンク自体が、データベース内にも格納され、一方、別の実施形態において、ファイルチャンクは、データベースとは別々に格納され、データベースは、このファイルチャンクの追跡に使用される。
【００２１】
［００６４］これらの特徴は、ユーザがクライアントデバイス１０１Ａに利用可能な他のストレージシステムと同様にＣＦＳを処理することができるようにＣＦＳをクライアントデバイス１０１Ａとシームレスに一体化する明白な利点を呈する。更に、ＣＦＳは、クライアントデバイス１０１Ａ内のローカルキャッシュ内に保存されたデータ量よりも遥かに多くのデータを格納することができる。例えば、クライアントデバイスのローカルストレージシステムがデータの８０ギガバイト（「ＧＢ」）を格納することができ、かつローカルキャッシュがローカルストレージシステムの１２．５％に限定された場合に、ローカルキャッシュは、１０ＧＢである。しかし、ＣＦＳは、クラウドストレージシステムにかつて格納されたあらゆるファイルを含むことができる。データ量は、１０ＧＢよりも遥かに大きい可能性が高く、ほぼ数桁違いであり、恐らくは１００テラバイトである。ＣＦＳクライアントモジュールが１回に１０ＧＢまでを保つに過ぎないので、ＣＦＳクライアントモジュールは、それらのファイルに必要とされる全てのデータを実際に有することなく、クライアントデバイス上でユーザに利用可能な全てのファイルを表すことができる。ユーザがＣＦＳ内のファイルにアクセスすると、ＣＦＳクライアントモジュールは、クラウドストレージシステムの要求されたデータを取り出す。ＣＦＳ内の格納のためにクライアントデバイスに利用可能なストレージスペースの量は、クライアントデバイスのローカルストレージシステムに基づいて限定されるのではなく、クライアントデバイスのローカルストレージシステムは、ローカルキャッシュに向けて適切なスペースが得られるのに十分なストレージスペースを要求するに過ぎないことに注意すべきである。むしろ、ＣＦＳ内の格納のためにクライアントデバイスに利用可能なストレージスペースの量は、クラウドストレージシステム内のストレージの量に基づいて限定される。
【００２２】
［００６５］これは、クライアントデバイス上のユーザのための多くの望ましい使用モデルをもたらす。例えば、ＣＦＳを使用することにより、ユーザは、クライアントデバイスに大きいストレージデバイスを一度も追加することなく、膨大な量のストレージスペースにアクセス可能である。ユーザが、自分のローカルストレージシステムの容量を満たすと、ローカルストレージシステム内の容量を解放するためにクラウドストレージシステム内にデータを移動することが可能である。
【００２３】
［００６６］更に別のファイルは、そのデバイス上にＣＦＳを実装することにより、ユーザのクライアントデバイスの全てに利用可能であり、ＣＦＳは、ＣＦＳが実装されると別のクライアントデバイスに利用可能である。従って、ＣＦＳにアクセス（読取又は書込アクセス）を承諾することによってファイルへのアクセスを伴うクライアントデバイスを提供することができる。次に、クライアントデバイスがファイルにアクセスすると、そのファイルデータは、クラウドストレージシステムから取り出され、デバイスにわたるデータの共有がシームレスになり、かつ共有すべきファイルのライブラリ全体をダウンロードするために待機するよりも顕著に速くなる。更に、大きいメディアコレクションを有するユーザは、ＣＦＳ内のフォルダに自分のメディアライブラリフォルダを変換し、そのＣＦＳをユーザのデバイスの全てと共有することができる。次に、ユーザのメディアコレクションの全ては、ＣＦＳを実装したあらゆるクライアントデバイスに利用可能になる。更に、ユーザは、追加のファイルデータをアップロードするか又はＣＦＳ内にファイルのコピーを格納することなく、単に新しい名称でＣＦＳマニフェストをコピーすることにより、ファイルシステム全体のスナップショット又は新しいバージョンを簡単に作成することができ、それによってユーザは、ファイルシステム全体の複数のバージョンを彼の指先に保つことができる。
【００２４】
［００６７］更に、ＣＦＳクライアントモジュールがデバイスと一体化され、例えば、クライアントデバイスの初期化において非常に早期に取り込まれるオペレーティングシステムの一部になる時に、益々多くのファイルをクラウドストレージシステムに格納することができる。実際には、ユーザの文書であればＣＦＳに利用可能であるのみならず、アプリケーションさえもＣＦＳにおいて提供することができる。実際には、製造業者は、簡単にクラウドデバイス上のオペレーティングシステムにＣＦＳクライアントモジュールを一体化し、ＣＦＳを更新してＣＦＳをＣＦＳのそのファイルにアクセスするクライアントデバイスと共有することにより、クライアントデバイスにオペレーティングシステムファイル及びアプリケーションファイルをプッシュ配信することができる。
【００２５】
［００６８］更に、コンテンツプロバイダは、現時点で、コンテンツを含むＣＦＳを生成してＣＦＳをユーザと共有することによって加入者にコンテンツを配信する簡単な方法を有する。実際に、コンテンツプロバイダは、全てが同じコンテンツを含む各ユーザ独特の個々のクラウドファイルシステムを生成し、ユーザが自分の特定のＣＦＳを実装すると各ユーザがコンテンツにアクセス可能なので、コンテンツを１回だけアップロードすることができる。実際に、中央アクセス制御クラウドストレージシステム容量を利用して、コンテンツプロバイダは、もはや加入契約していないユーザに対してＣＦＳへのアクセスを無効にすることができる。
【００２６】
［００６９］一実施形態において、クラウドストレージシステム１３５は、サービスに加入するユーザに供給され、一般的に、加入したい一般大衆に開かれているサービスである。本発明の別の実施形態は、企業が、企業のメンバであるクライアントデバイス１０１Ａ〜１０１Ｄに向けてクラウドストレージシステム１３５を維持することを可能にする。
【００２７】
［００７０］図２は、クラウドストレージゲートウェイとクラウドストレージプールとを含むクラウドストレージシステムを示すブロック図である。図２では、クライアントデバイス１０１Ａ〜Ｄのうちの１つのようなクライアントデバイス２０１Ａは、通信ネットワーク２３０を通じてクラウドストレージシステム２３５と結合される。クラウドストレージシステム２３５は、クラウドストレージプール２６０と結合されたクラウドストレージゲートウェイ２４５を含む。クラウドストレージゲートウェイ２４５は、クライアントデバイス２０１Ａ及びクラウドストレージプール２６０と通信する。
【００２８】
［００７１］クラウドストレージゲートウェイ２４５は、クライアントデバイス２０１Ａからの要求をクラウドストレージシステム２３５アプリケーションプログラミングインタフェース（「ＡＰＩ」）呼び出しに変換する。更に、少なくとも１つの実施形態において、クラウドストレージゲートウェイは、クラウドストレージプール２６０のリモートキャッシュを含む。従って、クラウドストレージゲートウェイ２４５は、クライアントデバイスがデータをクラウドストレージシステム２３５に要求するとデータの要求を受信する。クラウドストレージゲートウェイ２４５は、クラウドストレージシステム２３５ＡＰＩ呼び出しを利用してデータをクラウドストレージプール２６０に要求する。クラウドストレージゲートウェイ２４５がクラウドストレージプール２６０から要求されたデータを受信すると、クラウドストレージゲートウェイ２６０は、要求されたデータをクライアントデバイス２０１Ａに送信する。更に、クラウドストレージゲートウェイ２４５がクラウドストレージプール２６０のリモートキャッシュを含む実施形態において、クラウドストレージゲートウェイ２４５は、クライアントデバイス２０１Ａ又は他のクライアントデバイス（図示せず）からの要求されたデータの将来の要求にクラウドストレージプール２６０と通信することなくサービス対応することができるように、クラウドストレージプール２６０のリモートキャッシュ内に要求されたデータを保存する。クラウドストレージプール２６０のリモートキャッシュが満たされると、クラウドストレージゲートウェイ２４５は、クラウドストレージプール２６０により多くのデータのスペースを作るために、クラウドストレージプール２６０のリモートキャッシュからデータを排除する。
【００２９】
［００７２］図３は、本発明の実施形態に従って格納されたＣＦＳ内のファイルを保存する方法の流れ図を示している。図３では、クライアントデバイスは、ＣＦＳクライアントモジュールを実行している。ＣＦＳクライアントモジュールは、ブロック３００で、ＣＦＳ内に保存すべきファイルを受信し、ＣＦＳは、主としてクラウドストレージシステムに格納される。ＣＦＳクライアントモジュールは、ブロック３１０で、ユーザ不可知ファイル暗号化機能を用いてファイルを暗号化する。
【００３０】
［００７３］背景技術で上述したように、従来のクライアント側暗号化では、各ユーザ又はクライアントデバイス固有のキーを用いてデータを暗号化する。従って、従来のクライアント側暗号化を使用する２つのクライアントにより暗号化される同じデータは、得られる暗号化データ間の差を有するという高い確率を有する。しかし、ユーザ不可知ファイル暗号化は、異なるユーザ又はクライアントデバイスにより暗号化された同じデータを有する２つのファイルは、同一暗号化データを有するファイルを生成することになるという点において従来の暗号化と異なっている。
【００３１】
［００７４］ＣＦＳクライアントモジュールは、ブロック３２０で、クライアントデバイス上のＣＦＳのローカルキャッシュ内に暗号化ファイルを格納することによって続行される。ＣＦＳクライアントモジュールは、ユーザ不可知非複製化を利用してクライアントデバイス上に暗号化ファイルを格納する。ユーザ不可知非複製化を利用する時に、ＣＦＳクライアントモジュールは、暗号化ファイルがＣＦＳのローカルキャッシュに存在する時を認識することができるので、暗号化ファイルの第２のコピーを格納しない。
【００３２】
［００７５］ＣＦＳクライアントモジュールは、ブロック３３０で、サーバ側ユーザ不可知ファイル非複製化を行うことによって続行し、ＣＦＳクライアントモジュールは、暗号化ファイルがクラウドストレージシステムに存在するか否かを決定する。暗号化ファイルがクラウドストレージシステムに存在しない場合に、ＣＦＳクライアントモジュールは、クラウドストレージシステムに暗号化データを送信する。サーバ側ユーザ不可知ファイル非複製化により、ＣＦＳクライアントモジュールは、他のユーザ又はクライアントデバイスが暗号化ファイルを識別することができることを前提として、他のユーザ又はクライアントデバイスがクラウドストレージシステムから暗号化ファイルにアクセス可能であるようにストレージシステムに暗号化ファイルを格納させることができる。しかし、他のユーザ又はクライアントデバイスが暗号化ファイルにアクセス可能である場合もあるが、他のユーザ又はクライアントデバイスは、ユーザ不可知ファイル暗号化機能によって使用される暗号化キーを先に生成又は受信しなければ暗号化ファイルを暗号解読することができない。
【００３３】
［００７６］図４は、本発明の実施形態に従ってユーザ不可知ファイル暗号化を行う方法の流れ図を示している。図４では、クライアントデバイスは、クラウドストレージシステムと対話するＣＦＳクライアントモジュールを実行している。ＣＦＳクライアントモジュールは、ブロック４００で、圧縮及び暗号化すべきファイル４８０を受信する。ブロック４０５で、ＣＦＳクライアントモジュールは、１組のチャンク４８１Ａ〜Ｎにファイル４８０を分割する。
【００３４】
［００７７］少なくとも１つの実施形態において、ＣＦＳクライアントモジュールは、チャンクの１つ又はそれよりも多くがデータ変換機能から利益を受けることになると決定し、その場合に、変換から利益を受けることになるチャンクを変換する。例えば、データのチャンクは、ｚｉｐ、ｂｚｉｐ、又はｇｚｉｐのような圧縮変換から利益を受けることができ、従って、チャンクのサイズが低減される。更に、一部のチャンクは、変換から利益を受けないか、又はそれらのチャンクを変換することは望ましくないと思われ、従って、変換は、それらのチャンクに行われないことになる。
【００３５】
［００７８］ブロック４１０で、ＣＦＳクライアントモジュールは、１組の圧縮されたチャンク４８２Ａ〜Ｎを生成する。一実施形態において、ＣＦＳクライアントモジュールは、更に、どのようにしてチャンクが変換されたか（例えば、どの圧縮アルゴリズムが利用されたか）を説明する情報を圧縮されたチャンクに埋め込む。上述したように、圧縮されたチャンク４８２Ａ〜Ｎの１つ又はそれよりも多くが導出元のチャンクと同一であることがあり得る（すなわち、圧縮又は変換が行われなかった）。更に、当業者は、チャンクの圧縮がチャンクを処理する際に別の時間に行われる可能性があることを認識するであろう。例えば、圧縮は、暗号化キーがブロック４２５で生成されたがチャンクの暗号化の前に行われる可能性がある。依然として、圧縮は、ブロック４３０でチャンクの暗号化の後さえも行われる可能性があるが、従来の理解では、暗号化データの圧縮では暗号化に有利であるような結果は得られないことが示唆される。
【００３６】
［００７９］ＣＦＳクライアントモジュールは、ブロック４１５でファイルマニフェスト４８３を生成する。ＣＦＳクライアントモジュールは、ブロック４２０で、圧縮されたチャンク４８２Ａ〜Ｎの組において各チャンクを通して反復する。各チャンク、例えば、チャンク４８２Ａを使用して、ＣＦＳクライアントモジュールは、ブロック４２５で、ユーザ不可知暗号化を用いてチャンク４８２Ａから暗号化キー４８４Ａ、暗号化されたチャンク４８５Ａ、及びチャンク識別子（「ＩＤ」）４８６Ａを生成する。ブロック４３０では、ＣＦＳクライアントモジュールは、ファイルマニフェスト４８３内にチャンクＩＤ４８６Ａ及び暗号化キー４８４Ａを格納する。ＣＦＳクライアントモジュールは、対応するチャンク４８１Ａ〜Ｎがファイル４８０内に現れる順番でファイルマニフェスト４８３内に各チャンクＩＤ４８６Ａ〜Ｎ及び暗号化キー４８４Ａ〜Ｎを格納する。暗号化キー４８４Ａ〜Ｎは、ユーザ不可知暗号化キーと本明細書で呼ぶ場合がある。
【００３７】
［００８０］ブロック４３５では、ＣＦＳクライアントモジュールは、チャンクＩＤ４８６Ａに対応する位置でクラウドストレージシステムに暗号化されたチャンク４８５Ａを格納する。例えば、ＣＦＳクライアントモジュールは、格納のためにクラウドストレージシステムに暗号化されたチャンク４８５Ａを送信することを担う通信スレッドを呼び出すことができる。このようにして、ＣＦＳクライアントモジュールは、クラウドストレージシステムに複数のチャンクをアップロードする複数の通信スレッドを呼び出すことができる。これらのスレッドは、いずれかの所定の時間に指定された数のスレッドだけが存在するようにＣＦＳクライアントモジュールにより管理することができ、クライアントデバイスの性能がＣＦＳクライアントモジュールにより劣化しないように、指定された量の帯域幅だけが消費される。更に、ＣＦＳクライアントモジュールは、特定のチャンクが他のチャンクの前に送信されるように通信スレッドに優先順位を付けることができる。例えば、ＣＦＳクライアントモジュールが、ＣＦＳが他のユーザ又はデバイスと共有されたという表示を受信した場合に、ＣＦＳクライアントモジュールは、共有されたＣＦＳに関連付けられた暗号化されたチャンクのアップロードに優先順位を付けることができる。このようにして、他のユーザ及びクライアントデバイスから要求することができる暗号化されたチャンクは、他のユーザ又はクライアントデバイスと共有されていない他の暗号化されたチャンクの前にクラウドストレージシステムにアップロードされることになる。
【００３８】
［００８１］一実施形態において、クライアントデバイスは、ＣＦＳのローカルキャッシュを含み、ＣＦＳクライアントモジュールは、ＣＦＳのローカルキャッシュがチャンクＩＤ４８６Ａに対応する位置で暗号化されたチャンクを含むか否かを決定する。チャンクは、ユーザ不可知暗号化を用いて暗号化されるので、チャンクＩＤ４８６Ａは、別のユーザ又はクライアントデバイスによって生成されたか否かに関わらず、暗号化データ４８５Ａに対応する。従って、ＣＦＳのローカルキャッシュがチャンクＩＤ４８６Ａに対応する位置で暗号化されたチャンクを含む場合に、その暗号化されたチャンクは、暗号化されたチャンク４８５Ａと同一であるので、ＣＦＳクライアントモジュールは、暗号化されたチャンク４８５Ａを改めて格納する必要はない。
【００３９】
［００８２］同様に、ＣＦＳクライアントモジュールは、クラウドストレージシステムがチャンクＩＤ４８６Ａに対応する位置で暗号化されたチャンクを含むか否かをクラウドストレージシステムに尋ねることができ、クラウドストレージシステムが暗号化されたチャンクを含まない場合に、ＣＦＳクライアントモジュールは、クラウドストレージシステムへの暗号化されたチャンク４８５Ａ及びチャンクＩＤ４８６Ａのアップロードを待ち行列に入れることができる。例えば、クラウドストレージシステムは、クラウドストレージシステムに存在するデータを示すデータ構造を生成する。このデータ構造は、クライアントデバイスに通信され、ＣＦＳクライアントモジュールは、チャンクの存在に対してデータ構造に問い合わせる。このようにして、ＣＦＳクライアントモジュールは、クラウドストレージシステムに存在するチャンクをアップロードする必要はない。一実施形態において、データ構造は、クラウドストレージシステムに存在する全てのチャンクＩＤのハッシュテーブルである。別の実施形態において、データ構造は、どのチャンクがクラウドストレージシステムに存在するかを決定するのに使用されるブルームフィルタである。ＣＦＳクライアントモジュールが、どのチャンクがクラウドストレージシステムに存在するかに関して尋ねることを可能にするために更に他のデータ構造を提供することができ、又はＣＦＳクライアントモジュールは、クラウドストレージシステムと問合せを通信することができ、クラウドストレージシステムは、次に、クラウドストレージシステム内のチャンクの存在のステータスで応答する。
【００４０】
［００８３］どのチャンクがクラウドストレージシステムに既に存在するかの問合せは、有意な利点を呈する。具体的に、クラウドストレージシステムは、いずれかのクライアントデバイスからのデータでシードすることができ、その理由は、どのクライアントデバイス又はユーザがクラウドストレージシステムにチャンクを格納したかとは無関係に同一データの格納されたチャンクが同一であるからである。サービスプロバイダは、例えば、クライアントデバイス上にある可能性が高くなるそれが決定するデータでクラウドストレージシステムをシードすることができる。例えば、アプリケーション及びオペレーティングシステムファイルは、ユーザ及びクライアントデバイスにわたって高度なアイデンティティを有する。このデータが、サービスプロバイダ、クライアントデバイス、又はユーザのいずれかによりクラウドストレージシステムに追加された場合に、あらゆるその後のクライアントデバイス又はユーザは、データがクラウドストレージシステムに存在するのでアップロードする必要はない。データ伝送が貴重なリソースを消費するので（例えば、関連する金銭的コストを伴う場合があるアップロードに必要とされる時間及び帯域幅使用）、データをアップロードすることがないとサービスプロバイダ及びクライアントデバイス／ユーザに対して節約をもたらす。この同じ節約は、高度なアイデンティティを有するメディアデータのストレージを用いて得ることができる。例えば、コンテンツ配信業者の取り出された歌又は映画は、どのユーザが上述のデータを取り出したかとは無関係に高度なアイデンティティを有する可能性がある。第１のユーザ又はクライアントデバイスがクラウドストレージシステムにそのデータを格納すると、他のクライアントデバイス又はユーザは、改めてデータをアップロードする必要がなくなる。
【００４１】
［００８４］ブロック４４０で、ユーザ不可知暗号化機能は、ＣＦＳ内のファイル及びフォルダ位置の詳細を含むファイルシステムマニフェストへのファイルマニフェスト４８４の追加などのような更に別の処理に向けて完備したファイルマニフェスト４８３を戻す。
【００４２】
［００８５］図５は、本発明の実施形態に従ってデータのユーザ不可知暗号化を行う方法の流れ図を示している。ブロック５００で、ユーザ不可知暗号化方法は、暗号化すべきデータ（例えば、ファイルのチャンク、ファイル、ファイルマニフェストのような）５８０を受信する。本方法は、次に、データ５８０から暗号化キー５８２を生成する。暗号化キー５８２は、その特定のデータ５８０に向けてユーザ又は暗号化キー５８２を生成するクライアントデバイスとは無関係に同一に生成されることになるあらゆるキーとすることができる。
【００４３】
［００８６］例えば、暗号化キー５８２は、データ５８０をハッシュした結果とすることができる。望ましいハッシュアルゴリズムの例は、暗号のハッシュ関数、例えば、セキュアなハッシュアルゴリズム（ＳＨＡ−０、ＳＨＡ−１、ＳＨＡ−２５６、又はＳＨＡ−５１２のような「ＳＨＡ」）、又はメッセージダイジェスト（「ＭＤ」）アルゴリズム（ＭＤ−２、ＭＤ−４、又はＭＤ−５のような）を含む。他の実施形態において、暗号化キー５８２は、他のアルゴリズムを通じて計算することができる。例えば、暗号化キー５８２は、データ５８０の所定の部分集合を取り出すのと同じ程度簡単に計算することができる。
【００４４】
［００８７］ユーザ不可知暗号化方法は、ブロック５２０で、データ５８０及び暗号化キー５８２を使用して暗号化データ５８４を生成することにより続行される。データ５８０は、あらゆる適切な対称又は非対称暗号化アルゴリズムで暗号化することができる。適切な暗号化アルゴリズムの非限定的な例には、Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ（「ＡＥＳ」）、データ通信用暗号標準（「ＤＥＳ」）、トリプルＤＥＳ、Ｂｌｏｗｆｉｓｈ、Ｔｗｏｆｉｓｈ、Ｓｅｓｒｐｅｎｔ、Ｒｉｖｅｓｔ−Ｓｈａｍｉｒ−Ａｄｌｅｍａｎ（「ＲＳＡ」）、ＮＴＲＵＥｎｃｒｙｐｔ、及び楕円曲線暗号化（「ＥＣＣ」）がある。いずれにせよ、適切な暗号化アルゴリズム及び暗号化キー生成方法は、生成された暗号化キー５８２が選択された暗号化アルゴリズムにより使用可能であるように選択される。
【００４５】
［００８８］ブロック５３０で、ＩＤ５８６を暗号化データ５８４から生成する。ＩＤ５８６は、その特定のデータ５８０に向けてＩＤ５８６を生成するユーザ又はクライアントデバイスとは無関係に同一に生成されることになるあらゆるＩＤとすることができる。例えば、ＩＤ５８６は、暗号化データ５８４をハッシュした結果とすることができる。ブロック５１０を参照して上述したように、あらゆる適切なハッシュアルゴリズムを使用することができる。他の実施形態において、暗号化データ５８６の所定の部分集合を取り出すことのような他のアルゴリズムを通じてＩＤ５８６を計算することができる。本発明の更に別の実施形態は、暗号化データ５８６ではなくデータ５８０を使用してＩＤ５８６を生成することができるが、このような実施形態は、潜在的なセキュリティ危険性に暗号化データ５８６を露出する可能性がある。ブロック５４０で、ユーザ不可知暗号化方法は、暗号化キー５８２、暗号化データ５８４、及びＩＤ５８６を戻す。ＣＦＳクライアントモジュールは、暗号化データ５８４と共に情報を埋め込むことが望ましい場合があることは当業者により認められるであろう。例えば、ＣＦＳクライアントモジュールは、固定又は可変の幅チャンクヘッダで暗号化データをプリペンドすることができる。チャンクヘッダは、ブロックタイプ、符号化タイプ、元のサイズのような情報を含むことができる。次に、このブロックヘッダをクラウドストレージシステム及び／又はＣＦＳクライアントモジュールが使用し、データを検証し、及び／又は暗号化されたチャンクの暗号解読／解凍を補助することができる。一実施形態において、チャンクヘッダは、ブロックタイプ（１バイト）、符号化タイプ（１バイト）、及び元のサイズ（４バイト）を含む。一方、別の実施形態において、チャンクヘッダは、より多い、より少ない、又は他のフィールドを含む。例えば、本発明の一実施形態は、符号化タイプ及び元のサイズだけで構成されたチャンクヘッダを生成する。
【００４６】
［００８９］本発明の実施形態は、データを暗号化するのに使用された同じキーがデータを暗号解読するためにも使用される対称暗号化アルゴリズムを参照して説明する。しかし、非対称アルゴリズム、すなわち、暗号化のための１つのキーと暗号解読のための異なる対応するキーとを利用するアルゴリズムを使用することも等しく作動可能である。ユーザ不可知暗号化に向けて非対称暗号化機能を使用する時に、説明するユーザ不可知暗号化方法は、暗号化キー５８２の代わりに、生成された暗号化キー５８２に対応する暗号解読キーを戻す必要がある。同様に、暗号化データの将来暗号解読に向けて暗号化キーを保存する他の参考例は、その代わりに対応する暗号解読キーを保存する。
【００４７】
［００９０］本発明の一実施形態において、ＩＤ５８６を生成する時に、ＩＤ５８６により識別された位置に格納されたデータが全てのユーザ及び上述のデータにアクセスするクライアントデバイスに向けて同一であるように、各ユーザ及びクライアントデバイスが同じアルゴリズムを利用することが必要である。更に、多くのアルゴリズムを使用して暗号化キー５８２、暗号化データ５８４、及び暗号化データ５８６を生成することができると説明しているが、特定のシステム内の全てのユーザのために同じアルゴリズムを選択する時にある一定の利点が存在することは当業者により認められるであろう。特に、所定のクラウドストレージシステムを利用する各ユーザ又はクライアントデバイスが所定の組のアルゴリズムを使用する時に、各ユーザ又はクライアントデバイスは、同一データに関して同一の暗号化キー、暗号化データ、及びＩＤを生成することになる。従って、データの暗号化はユーザ不可知のものになるが、クラウドストレージシステムは、対応するＩＤにより暗号化データを識別し、そのデータの１つのコピーだけを格納することができることになる。
【００４８】
［００９１］図６は、本発明の実施形態に従ってユーザ不可知ファイル暗号化を行う方法の視覚化を示している。本方法は、ＦＩＬＥa６０１を作成するクライアントデバイスに対してステップ６９０Ａで始まる。ステップ６９０Ｂでは、クライアントデバイス上で実行中であるＣＦＳクライアントモジュールは、ファイルをチャンク６０２Ａ〜Ｎに分割し、任意的に、各チャンクを圧縮されたチャンク６０３Ａ〜Ｎに圧縮する（同じくＣＨＵＮＫＳ1..nとして図６にも示す）。このステップは、チャンクへのファイルの分解と呼ぶことができる。ステップ６９０Ｃで、ＣＦＳクライアントモジュールは、各チャンクのデータＤを使用してそのチャンクに向けて暗号化キーを生成する。従って、Ｄaは、圧縮されたチャンク６０３Ａのデータであり、暗号化キー６０４Ａ、すなわち、Ｋaを生成するのに使用され、すなわち、Ｋa＝ｈａｓｈa（Ｄa）、又は組として、ＣＨＵＮＫＫＥＹ1..n＝ＨＡＳＨa（ＣＨＵＮＫ1..n）である。ステップ６９０Ｄで、暗号化データ６０５Ａ〜Ｎを生成するためにそのチャンク暗号化キー６０４Ａ−Ｎで各圧縮されたチャンク６０３Ａ〜Ｎを暗号化し、すなわち、ｅＤa＝ｅｎｃｒｙｐｔ（Ｄa、Ｋa）、又は組として、ｅＣＨＵＮＫ1..n＝ＥＮＣＲＹＰＴ（ＣＨＵＮＫ1..n、ＣＨＵＮＫＫＥＹ1..n）である。ステップ６９０Ｅでは、ＣＦＳクライアントモジュールは、暗号化データ６０５Ａ〜ＮからＩＤ６０６Ａ〜Ｎを生成し、すなわち、ＩＤa＝ｈａｓｈb（ｅＤa）、又は組として、ＩＤ1..n＝ＨＡＳＨb（ｅＣＨＵＮＫ1..n）である。
【００４９】
［００９２］図７は、本発明の実施形態によるファイルシステムマニフェストの生成を含むクラウドファイルシステムにファイルを保存する方法の流れ図を示している。本発明の実施形態に従ってファイルシステムマニフェストを生成する別の実施形態を図２７参照して説明する。図７では、クライアントデバイスは、ＣＦＳクライアントモジュールを実行している。ＣＦＳクライアントモジュールは、ブロック７８０で、ＣＦＳ内に保存すべきファイルを受信し、ＣＦＳは、主としてクラウドストレージシステムに格納される。ＣＦＳクライアントモジュールは、ブロック７１０で、暗号化されたチャンクを格納してファイルマニフェスト７８２を生成するユーザ不可知ファイル暗号化機能を用いてファイル７８０を暗号化する。図４を参照して上述したように、暗号化されたチャンクの各々は、クラウドストレージシステムに格納され、任意的に、更にＣＦＳのローカルキャッシュ内に格納される。更に、ファイルマニフェスト７８２は、暗号化されたチャンクの１つに各々対応するチャンクＩＤ及び暗号化キーの順序リストを含む。一部の実施形態において、格納のためにファイルマニフェスト７８２を圧縮することが有益であり、ＣＦＳクライアントモジュールは、ブロック７１５でファイルマニフェスト７８２を圧縮する。
【００５０】
［００９３］ブロック７２０では、ＣＦＳクライアントモジュールは、ファイルマニフェスト暗号化キー７８５、暗号化ファイルマニフェスト７８６、及びファイルマニフェストＩＤ７８７を生成する。一実施形態において、これらは、図５を参照して説明したもののようなユーザ不可知暗号化方法で生成される。ブロック７２５では、ＣＦＳクライアントモジュールは、ファイルシステムマニフェスト７８８内にファイルマニフェストＩＤ７８７及びファイルマニフェスト暗号化キー７８５を格納する。ファイルシステムマニフェスト７８８は、ＣＦＳ内の格納された全てのファイルのリストを含む。ＣＦＳクライアントモジュールがクラウドストレージシステムからそのファイルに対応する暗号化ファイルマニフェストを取り出して暗号化ファイルマニフェストを暗号解読することができるように、各ファイルが表示しなければならない経路のようなユーザに表示するためのファイルを識別する情報と共に、対応するファイルマニフェストＩＤ及びファイルマニフェスト暗号化キーが格納される。
【００５１】
［００９４］ブロック７３０では、ＣＦＳクライアントモジュールは、任意的に、ファイル７８０に対応するファイル属性を格納する。例えば、ファイルは、ファイルサイズ、作成タイムスタンプ、修正タイムスタンプ、アクセス制御リスト／許可、読取専用マーカ、隠しファイルマーカ、又はクライアントデバイスによって使用されるような他の属性などのファイルに関連付けられた１組のメタデータを有する場合がある。
【００５２】
［００９５］ブロック７３５では、ＣＦＳクライアントモジュールは、ユーザ不可知非複製化を行ってクラウドストレージシステムに暗号化されたＦＭを格納する。従って、ＣＦＳクライアントモジュールは、サーバ側ユーザ不可知非複製化を提供し、ＣＦＳクライアントモジュールは、暗号化ファイルマニフェスト７８６がクラウドストレージシステムに存在するか否かを決定する。暗号化ファイルマニフェスト７８６がクラウドストレージシステムに存在しない場合に、ＣＦＳクライアントモジュールは、ファイルマニフェストＩＤ７８７と共にクラウドストレージシステムに暗号化ファイルマニフェスト７８６を送信する。更に、ＣＦＳクライアントモジュールは、クライアント側ユーザ不可知非複製化を行うことができ、ＣＦＳクライアントモジュールは、暗号化ファイルマニフェストがＣＦＳのローカルキャッシュに存在する時を認識することができるので、暗号化ファイルマニフェストの第２のコピーを格納しない。
【００５３】
［００９６］一実施形態において、ＣＦＳクライアントモジュールは、ブロック７４０でファイルシステムマニフェスト７８８から暗号化ファイルシステムマニフェスト７８９を生成する。暗号化ファイルシステムマニフェスト７８９を生成する１つの方法は、ファイルシステムマニフェスト７８８にユーザ相対的スナップショット暗号化を行うことである。暗号化ファイルシステムマニフェスト７８９を生成する別の方法は、マルチユーザファイルシステムマニフェスト暗号化を行うことである。
【００５４】
［００９７］ユーザ相対的スナップショット暗号化を用いて、ＣＦＳは、ユーザ又はクライアントデバイスによって供給されたか、又はユーザ又はクライアントデバイス固有の暗号化キーを用いてファイルシステムマニフェスト７８８を暗号化する。この方法を用いて、ユーザは、対称暗号化の場合の暗号化キー又は非対称暗号化の場合の対応する暗号解読キーをこのＣＦＳへのアクセスを与えられるべきである他のユーザ又はデバイスと共有することができる。これに対応して、暗号化ファイルシステムマニフェスト７８９のコピーは、クラウドストレージシステムに格納される場合があるが、ユーザ及び対応する暗号化キーを有するクライアントデバイスのみが、暗号化ファイルシステムマニフェスト７８９を暗号解読することができる。従って、暗号化ファイルシステム７８９は、ＣＦＳ内に格納される可能性があるが、必要な暗号化キーを有するユーザ及びクライアントデバイスのみが、暗号化ファイルシステムマニフェスト７８９内に列挙された暗号化ファイルマニフェストを識別／暗号解読するのに必要とされる情報にアクセスすることができる。本方法は、ＣＦＳクライアントモジュールがＣＦＳのスナップショットを別のユーザ又はクライアントデバイスと共有することを可能にするという利点を有する。ＣＦＳクライアントモジュールは、他のユーザ又はクライアントデバイスと共有すべき暗号化キーを使用して暗号化ファイルシステムマニフェスト７８９を作成しさえすればよい。次に、ＣＦＳクライアントモジュールは、クラウドストレージシステムに暗号化ファイルシステムマニフェスト７８９をアップロードし、暗号化ファイルシステムマニフェスト７８９のためのＩＤ及び暗号化キーを他のユーザと共有することができる。別の実施形態において、ＣＦＳクライアントモジュールは、他のユーザ又はクライアントデバイスに直接に暗号化ファイルシステムマニフェスト７８９及び暗号化キーを送信することができる。他のユーザ又はクライアントデバイスは、次に、ＣＦＳクライアントモジュールが暗号化ファイルシステムマニフェスト７８９を生成した時にＣＦＳに存在した全てのファイルにアクセス可能である。しかし、他のユーザ又はクライアントデバイスによって行われた変更があれば、他のユーザ又はクライアントデバイスに対応する新しく作成されたファイルシステムマニフェストに反映されるので、最初に暗号化ファイルシステムマニフェスト７８９を生成したユーザ又はクライアントデバイスには影響を与えない。従って、ユーザは、単に暗号化キー及び暗号化ファイルシステムマニフェスト７８９又は暗号化ファイルシステムマニフェストＩＤを送信することにより、ＣＦＳ全体のスナップショットを別のユーザ又はクライアントデバイスと共有することができる。
【００５５】
［００９８］マルチユーザファイルシステムマニフェスト暗号化を用いて、ユーザは、ライブ方式でＣＦＳを別のユーザ又はクライアントデバイスと共有することができる。ライブ方式とは、ユーザによって行われた変更が他のユーザ又はクライアントデバイスに反映され、更に、他のユーザ又はクライアントデバイスによって行われた変更があればユーザに反映されることを意味する。
【００５６】
［００９９］マルチユーザファイルシステムマニフェスト暗号化は、ＣＦＳクライアントモジュールが汎用一意識別子（「ＵＵＩＤ」）を生成することで開始する。ＣＦＳクライアントモジュールは、ＵＵＩＤがクラウドストレージシステムに存在するか否かを決定すると、未使用ＵＵＩＤが生成されるまで新しいＵＵＩＤを生成し続ける。新しいＵＵＩＤが生成された状態で、クラウドストレージシステムは、ＵＵＩＤにより識別されるマルチユーザファイルシステムマニフェストコレクションを生成する。本発明の一実施形態において、クラウドストレージシステムは、更に、マルチユーザファイルシステムマニフェストコレクションに関連付けられた１組のアクセス許可を作成し、ＣＦＳクライアントモジュールに関連付けられたユーザにマルチユーザファイルシステムマニフェストコレクションへのアクセスを承諾する。マルチユーザファイルシステムマニフェストコレクションは、このＣＦＳの暗号化ファイルシステムマニフェストのバージョン化されたバケットである。この時点で、ＣＦＳクライアントは、暗号化キーとしてＵＵＩＤでファイルシステムマニフェスト７８８を暗号化し、マルチユーザファイルシステムマニフェストコレクション内への格納のためにクラウドストレージシステムに暗号化ファイルシステムマニフェスト７８９を送信する。ＣＦＳのその後の変更は、変更を生成したＣＦＳクライアントモジュールにより利用されたＣＦＳのバージョンに対するパッチ変更として生成される。ファイルシステムマニフェスト７８８及びその後のパッチ変更は、マルチユーザファイルシステムマニフェストへのアクセスが承諾されたその後のユーザ及びクライアントデバイスが、クラウドファイルシステムの現状を再構成するためにマルチユーザファイルマニフェストコレクション内の各入力をダウンロードすることができるように、全てマルチユーザファイルマニフェストコレクション内に格納される。更に、アクセスを承諾されたユーザ及びクライアントデバイスは、ＣＦＳに更新を受信するためにクラウドストレージシステムと加入契約することができる。従って、ユーザがＣＦＳの情報を変えると、それらの変更は、加入契約されたユーザ及びクライアントデバイスにシームレスにプッシュ配信される。
【００５７】
［００１００］本発明の一実施形態において、クラウドストレージシステムは、ユーザがそのユーザのファイルシステムマニフェストを管理することを可能にするウェブインタフェースのようなユーザインタフェースをクライアントデバイスに提示することができる。例えば、ユーザは、ファイルシステムマニフェストの共有可能なスナップショットを作成して、別のユーザと共有可能であるファイルシステムマニフェストのコピーを作るために、ユーザ相対的スナップショット暗号化を行うことを選択することができる。例えば、クラウドストレージシステムにスナップショットとのリンクに電子メールを送るように指示することができる。更に、電子メールは、共有ファイルシステムマニフェストを暗号解読するのに必要とされる情報を含むことができる。別の例において、クラウドストレージシステムは、クライアントデバイスに提示するユーザインタフェース内のメニューを通じてスナップショットをクラウドストレージシステムの他のユーザに利用可能にすることができる。
【００５８】
［００１０１］この同じユーザインタフェースにより、ユーザは、マルチユーザファイルシステムを管理することができる。例えば、クライアントデバイス上のユーザは、既存のクラウドファイルシステムからマルチユーザファイルシステムを生成し、マルチユーザファイルシステム上でアクセス許可を管理することを決定することができる。マルチユーザファイルシステムへのアクセスが承諾されたユーザに関して、クラウドストレージシステムは、マルチユーザファイルシステムマニフェストを電子メールを通じて又はユーザインタフェースを通じてそれらのユーザにアクセス可能にすることができる。所有者が、ユーザがマルチユーザファイルシステムにアクセスすることを防止することを望む場合に、所有者は、ユーザがもはや対応するＵＵＩＤにより識別されたマルチユーザファイルシステムマニフェストコレクションから入力をダウンロードするアクセスを承諾されないように、マルチユーザファイルシステムマニフェストのアクセス許可を変更することができる。更に、ユーザ又はクライアントデバイスの読取専用許可を同じユーザインタフェースを通じて有効にすることができる。
【００５９】
［００１０２］クラウドファイルシステムに格納された一部のファイルだけに書き込んだ時に、書込中の部分に対応するファイルチャンクは、メモリにコピーされる。ファイルチャンクの更新は、メモリ内のその部分に行われ、その更新ファイルチャンクが暗号化される。上述したように、それによって対応するファイルマニフェストを更新するのに使用されるそのチャンクの新しいチャンクＩＤ及び暗号化キーが得られる。ファイルの中心にデータを追加する場合に、新しいデータを収容するようにデータがシフトすることになるので、複数のチャンクは、更新が必要である場合がある。これには、ファイルの各部分に対応する各ファイルチャンクを取り出して、変わった部分に関して更新、暗号化、及びファイルマニフェスト更新を行うことが必要である。ファイルの終わりまでデータを追加する場合に、処理は、上述したような既存のチャンクの更新、既存のチャンクに対する更新及び新しいチャンクの追加の組合せ、又は新しいチャンクの追加だけのいずれかである。
【００６０】
［００１０３］図８は、本発明の実施形態に従ってクラウドファイルシステムにファイルからデータを読み取る方法の流れ図を示している。図８では、クライアントデバイスは、ＣＦＳクライアントモジュールを実行している。
【００６１】
［００１０４］ＣＦＳクライアントモジュールは、そのＣＦＳに対してファイルシステムマニフェストを使用してクライアントディレクトリ上にドライブ又はディレクトリとしてＣＦＳを実装する。上述したように、ファイルシステムマニフェストは、ファイルシステムマニフェスト内の各ファイルが位置する経路と共にファイルマニフェストのリストを含む情報を含む。ＣＦＳクライアントモジュールは、クライアントデバイスのユーザにクライアントデバイスストレージ階層の一部としてＣＦＳを示している。例えば、ＣＦＳをクライアントデバイスストレージシステム内の実装ポイントに実装することができる。実装ポイントは、ドライブ（例えば、Ｅ：ドライブ）として、又は既存のドライブ又はストレージシステム内のフォルダとしてのものとすることができる。それによってＣＦＳクライアントモジュールは、ユーザにあらゆる他のストレージシステムとしてクライアントデバイスにＣＦＳを提示することができる。これを説明する別の方法は、ＣＦＳクライアントモジュールは、クライアントデバイスのオペレーティングシステムにブロックストレージデバイスをエミュレートするということである。
【００６２】
［００１０５］ＣＦＳクライアントモジュールは、ブロック８００で、ＣＦＳ内のファイルのデータの要求を受信する。データの要求は、ＣＦＳクライアントモジュールが戻さなければならない１組のデータを識別する情報を含む。例えば、要求は、データが常駐するファイルへの経路を含むことができる。更に、要求は、どこにかつどれだけのデータを読み取るべきかを示す探求位置及びバイトカウントを含むことができる。ＣＦＳクライアントモジュールは、ブロック８０５で、ファイルに対応するファイルマニフェストの位置を識別する。ファイルマニフェストは、以下のようにＣＦＳに位置付けられる。ＣＦＳクライアントモジュールは、ファイルシステムマニフェストからファイルに対応するファイルマニフェストＩＤの位置を識別する。一実施形態において、ＣＦＳクライアントモジュールは、暗号解読されたファイルシステムマニフェストがＣＦＳのローカルキャッシュに存在するか否かを決定する。別の実施形態において、ＣＦＳクライアントモジュールは、暗号化ファイルシステムマニフェストがＣＦＳのローカルキャッシュに存在するか否かを決定する。更に別の実施形態において、ＣＦＳクライアントモジュールは、ＣＦＳのローカルキャッシュが暗号化又は暗号解読されたファイルマニフェストを含むか否かを決定する。暗号化ファイルマニフェストも暗号解読されたファイルマニフェストもＦＳのローカルキャッシュ内に常駐していない場合に、ＣＦＳクライアントモジュールは、暗号化データを識別するためにファイルマニフェストＩＤを使用してクラウドストレージシステムから暗号化ファイルマニフェストを取り出す。ＣＦＳクライアントモジュールが暗号化ファイルマニフェストを有する状態で、又は暗号化ファイルマニフェストがローカルキャッシュ内にあるが、暗号解読されたファイルマニフェストがない場合に、ＣＦＳクライアントモジュールは、ファイルシステムマニフェスト内のファイルマニフェストに関連付けられた暗号化キーを使用して暗号化ファイルマニフェストを暗号解読する。更に、ＣＦＳクライアントモジュールは、将来のアクセスに向けてＣＦＳのローカルキャッシュ内に暗号化ファイルマニフェスト、暗号解読されたファイルマニフェスト、又はその両方を格納することができる。
【００６３】
［００１０６］ブロック８１０で、ＣＦＳクライアントモジュールは、要求されたデータを取り出すのに必要とされる１つ又はそれよりも多くのファイルチャンクを決定する。一実施形態において、ＣＦＳクライアントモジュールは、探求位置バイトカウントを使用して、どのファイルチャンクがＣＦＳから要求されたデータを取り出すのに要求されたかを決定する。例えば、ＣＦＳにファイルを保存する時にＣＦＳクライアントモジュールが６４バイトチャンクにファイルを分割した場合に、ＣＦＳクライアントモジュールは、６４バイトチャンクサイズで探求位置に対して整数割算を行うことにより、必要とされる第１のチャンクを決定することができる。上述したように、ファイルマニフェストは、チャンクＩＤ及びファイルチャンクを暗号解読する暗号化キーの順序リストを含む。更に、ＣＦＳクライアントモジュールは、探求位置にバイトカウントを加算して６４バイトチャンクサイズで結果に対して整数割算を行うことにより、必要とされる最終チャンクを決定することができる。従って、ＣＦＳクライアントモジュールは、要求されたデータを導出するために、第１のチャンク、最終のチャンク、及びその間の全てのチャンクを要求すると決定することができる。当業者は、６４バイトチャンクサイズは、ＣＦＳ内にデータを格納するのに最適ではない場合があることを認識するであろう。５１２キロバイトのチャンクサイズが、一部構成において最適である場合があり、他の構成は、６４キロバイト、１２８キロバイト、又は２５６キロバイトのような他の量のチャンクサイズでより良好にサービス対応することができる。当業者は、本発明が特定のチャンクサイズに限定されず、説明されたチャンクサイズが例示的であり、制限的でないことを理解するであろう。
【００６４】
［００１０７］ブロック８１５で、ＣＦＳクライアントモジュールは、各要求されたファイルチャンクにわたって反復する。ブロック８２０で、ＣＦＳクライアントモジュールは、既存ファイルチャンクがＣＦＳのローカルキャッシュに存在するか否かを決定する。既存ファイルチャンクがＣＦＳのローカルキャッシュに存在しない場合に、ＣＦＳクライアントモジュールは、ブロック８２５で、クラウドストレージシステムからそのファイルチャンクを取り出す。例えば、ＣＦＳクライアントモジュールがファイルマニフェスト内に列挙された第１のファイルチャンクを要求する時に、ＣＦＳクライアントモジュールは、第１のチャンクＩＤに関連付けられたファイルチャンクを送信する要求をクラウドストレージシステムに出す。ＣＦＳクライアントモジュールが要求されたファイルチャンクを受信すると、ＣＦＳクライアントモジュールは、そのファイルチャンクを更に処理することができる。
【００６５】
［００１０８］一実施形態において、ＣＦＳクライアントモジュールは、受信したファイルチャンク８３０を検証する。受信したファイルチャンクから取り出されたチャンクＩＤを生成することによってファイルチャンクを検証することができる。チャンクＩＤが暗号化データのコンテンツから生成されるので、取り出されたデータが有効である場合に、チャンクＩＤ要求は、生成されたチャンクＩＤに適合するはずである。
【００６６】
［００１０９］本発明の何らかの実施形態において、ＣＦＳクライアントモジュールは、要求されたファイルチャンクに近いファイルチャンクの予測的取り出しを使用する。例えば、クラウドストレージシステムから要求する場合がある他のファイルチャンクを予想することが有利である。従って、ＣＦＳクライアントモジュールは、要求されたチャンクの近くのファイルマニフェスト内に列挙されたファイルチャンクがないかに関してファイルマニフェストを見ることができる。例えば、要求されたファイルチャンクがファイルマニフェスト内に列挙された第１のファイルチャンクである場合に、ＣＦＳクライアントモジュールは、そのチャンクが要求されたデータを取り出すのに要求された場合及びその時に次のファイルチャンクがＣＦＳのローカルキャッシュ内にあることになるように、ファイルマニフェスト内に列挙された次のファイルチャンク待ち行列に入れかつ取り出すことができる。当業者は、次の８つのファイルチャンク（例えば）を待ち行列してダウンロードするが有利である場合があり、又はＣＦＳクライアントモジュールが、４つ前のファイルチャンク及び４つ後のファイルチャンク待ち行列に入れてダウンロードする場合があることを認識するであろう。本発明の他の実施形態は、予測的取り出しに使用される論理次第で、より多い又はより少ない又は異なる組のファイルチャンクを取り出す。例えば、ＣＦＳクライアントモジュールは、第１の次のチャンク及び第３の次のチャンクは存在するが、第２と第４の次のチャンクが存在しない場合に、ＣＦＳクライアントモジュールが第２と第４の次のチャンクを取り出すようにＣＦＳのローカルキャッシュに存在しない次の２つのチャンクを待ち行列に入れることができる。
【００６７】
［００１１０］他の実施形態において、ＣＦＳクライアントモジュールは、ファイルチャンクの予測的取り出しに向けて解析決定を使用する。例えば、ＣＦＳクライアントモジュールは、どのようにしてチャンクにアクセスするかをモデル化するためにチャンクアクセスのデータベースを生成することができる。ＣＦＳクライアントモジュールは、アクセスされた以前のチャンクＩＤを追跡することができ、次に、次のチャンクＩＤがアクセスされた時に、ＣＦＳクライアントモジュールは、第１のチャンクＩＤ、第２のチャンクＩＤ、及びカウントを示すエントリを生成することができる。チャンクＩＤがアクセスされる度に、ＣＦＳクライアントモジュールは、以前のチャンクＩＤ及び現在のチャンクＩＤを使用してこの追跡を更新することができる。従って、以前のチャンクＩＤは、第１のチャンクＩＤとして使用され、既存のチャンクＩＤは、第２のチャンクＩＤであり、カウントは、１から始まり、以前のチャンクＩＤ及び現在のチャンクＩＤの同じ組合せがアクセスされる度に、カウントは増分される。ＣＦＳクライアントモジュールは、この解析モデルを使用して、アクセスされたチャンクに基づいて、どのチャンクがアクセスされる最も大きな可能性を有するかを決定することができる。簡潔さを期すために、３つのファイルチャンク（同じ又は異なるファイルチャンクの一部である場合がある）であるチャンクＡ、チャンクＧ、及びチャンクＰを取り上げてみる。チャンクＧが４回の機会でアクセスされた時に、チャンクＡが以前にアクセスされたと知ることができる。チャンクＰが１８回の機会でアクセスされた時に、チャンクＡが以前にアクセスされたと決定することができる。これは、チャンクＡ→チャンクＧ＝４、チャンクＡ→チャンクＰ＝１８と表すことができる。従って、次にチャンクＡがアクセスされた時に、ＣＦＳクライアントモジュールは、チャンクＰがアクセスされるより高い可能性を有すると決定することができる。従って、ＣＦＳクライアントモジュールは、チャンクＡがアクセスされる時にチャンクＰを予測的に取り出すことができる。当業者は、解析モデルに基づいて一連の複数のチャンクを待ち行列してダウンロードすることが有利である場合があることを認識するであろう。例えば、チャンクＢがアクセスされていてモデルがチャンクＣへのアクセスを断言したがチャンクＣはローカルキャッシュに存在する場合に、ＣＦＳクライアントモジュールは、チャンクＣの後にアクセスされる可能性があるチャンクを予想することになる。ＣＦＳクライアントモジュールは、更に、２つのチャンクがローカルキャッシュに対して取り出されるまで、又は４つのチャンクが取り出されるまで、その連鎖に追随すると決定することができる。当業者は、異なる数のチャンクは多かれ少なかれ有利である場合があり、予想的にキャッシュに格納すべきチャンクの数を利用するためにＣＦＳクライアントモジュールを調節することができることを認識するであろう。更に、ＣＦＳクライアントモジュールは、１つのチャンクに関して、多くのチャンクが次にアクセスされる可能性がある機会を有するので、それらのチャンクと共に一連のチャンクの１つ又はそれよりも多くを予想的にキャッシュに格納することを認識することができる。
【００６８】
［００１１１］更に他の実施形態は、ユーザ及び／又はクライアントのデバイス挙動に基づいて取り出される次のチャンクを解析的に決定する他の手法を使用することができる。例えば、ＣＦＳクライアントモジュールは、ユーザインタフェース待ち行列をチャンクアクセスに関連付けて、そのモジュール上のローカルキャッシュを生成することができる。他の実施形態において、ＣＦＳクライアントモジュールは、ユーザが特定のネットワーク位置で情報にアクセスする時に、ＣＦＳクライアントモジュールがそれを特定のファイルチャンクへのアクセスに関連付けて、それらのネットワーク位置がアクセスされた時にそれらのファイルチャンクをキャッシュに格納することができるように、ネットワーク作動のモデル又は実行中のアプリケーションのモデルに基づいてファイルチャンクアクセスを追跡することができる。ＣＦＳクライアントモジュールは、ファイルチャンクのアクセスをいつ特定のアプリケーションがアクセスされるに関連付けて、次に、そのアプリケーションが将来アクセスされた時にローカルキャッシュ内にそれらのファイルチャンクを格納することができる。
【００６９】
［００１１２］ファイルチャンクの予測的取り出しのサポートにおいて、ＣＦＳクライアントモジュールは、取り出さなければならないチャンクＩＤの待ち行列及びこの待ち行列に対応する複数のダウンロードスレッドを使用する。ファイルチャンクが待ち行列内の他のファイルチャンクよりも早く使用される可能性があるか否かの決定に基づいて、ファイルチャンクの検索に優先順位を付けることが有利である。従って、ＣＦＳクライアントモジュールが、ファイルチャンク内のデータへのアクセスに関連付けられた検索又は予測的取り出しのいずれかであるファイルチャンクを取り出さなければならないと決定した時に、ＣＦＳクライアントモジュールは、ダウンロード待ち行列に要求されたチャンクＩＤを追加して、そのチャンクＩＤを優先順位値に関連付けることになる。各チャンクＩＤの優先順位値は、ダウンロードスレッドがより多くの即時アクセスを要求するチャンクＩＤを最初にダウンロード待ち行列から選択するように選択される。従って、ＣＦＳクライアントモジュールは、ファイルアクセスの一部としてブロック８２５で取り出しに向けて要求されたチャンクＩＤを高い優先度に関連付けることができ、一方、ブロック８３２内の近くのファイルチャンクの予測的取り出しの一部としてダウンロード待ち行列に追加されたチャンクは、低い優先度に関連付けられる。
【００７０】
［００１１３］１つの特定の実施は、取り出されたチャンクがアクセスされたチャンクにどの程度近いかを決定することである。この点において、ブロック８２５内のチャンクアクセスの一部として取り出されたダウンロード待ち行列内のチャンクＩＤは、アクセスされるチャンクのＩＤであるように０の距離を有すると考えられる。ＣＦＳクライアントモジュールがＦＭ内の第１の次のチャンク及びＦＭ内の第４の次のチャンクを予測的に取り出さなければならないと決定した時に、対応するチャンクＩＤは、アクセスされたチャンクからのそれらのチャンクの距離を反映するものとして、それぞれ１及び４の距離を受信する。チャンク解析法と共に一連のチャンクアクセスを使用する時に、この同じ原理を使用することができる。ＣＦＳクライアントモジュールは、クラウドストレージシステムから取り出さなければならないローカルキャッシュ内にない次のチャンクを見つけるためにその連鎖を辿るので、ＣＦＳクライアントモジュールは、その連鎖をどの程度の距離を進んだのかを追跡し、それをアクセスされたチャンクからの距離として使用することができる。従って、アクセスされたチャンクからの距離が短いチャンクＩＤが、ダウンロードスレッドにより、ダウンロード待ち行列における距離が長いチャンクよりも優先して順位が付けられることになる。１つの実施を更に図４０を参照して説明する。
【００７１】
［００１１４］更に、クラウドストレージシステムがＣＦＳのリモートキャッシュをサポートする本発明の実施形態において、ＣＦＳクライアントモジュールは、クラウドストレージシステムにブロック８３３内の近くのファイルチャンクをプリフェッチするように指示することができる。例えば、本発明の一実施形態において、クラウドストレージシステムは、クラウドストレージゲートウェイ及びクラウドストレージプールを含む。従って、クライアントデバイスに送信することが必要になるファイルチャンククラウドストレージゲートウェイをクラウドストレージプールのクラウドストレージゲートウェイのリモートキャッシュ内に置くように指示すること、換言すると、クラウドストレージゲートウェイにファイルチャンクをプリフェッチするように指示することが有利である。このようにすることは、ＣＦＳクライアントモジュールが、ＣＦＳクライアントモジュールがクラウドストレージシステムからファイルチャンクを取り出した時にそのリモートキャッシュ内にファイルチャンクを有することになり、従って、そうでなければクラウドストレージゲートウェイがクラウドストレージプールから要求されたファイルチャンクを取り出さなければならなかった場合に発生する待ち時間が排除される。更に、ＣＦＳクライアントモジュールは、ＣＦＳクライアントモジュールがアクセスを予想するＣＦＳのローカルキャッシュに存在しない次の２つのファイルチャンクをプリフェッチするようにクラウドストレージゲートウェイに指示することができる。従って、第１の次及び第３の次のチャンクがローカルキャッシュに存在するが、第２と第４の次のチャンクがローカルキャッシュに存在しない場合に、ＣＦＳクライアントモジュールは、ＣＦＳクライアントモジュールがそれらのチャンクを要求した時にクラウドストレージゲートウェイがクラウドストレージプールからそれらのチャンクを検索しなくてもよいように、リモートキャッシュ内の格納のために第２と第４の次のチャンクをプリフェッチするようにクラウドストレージゲートウェイに指示する。
【００７２】
［００１１５］ブロック８３４で、ＣＦＳクライアントモジュールは、任意的に、取り出したファイルチャンクをそのファイルチャンクのＩＤに関連付けられた位置でＣＦＳのローカルキャッシュ内に格納する。ブロック８３５で、ＣＦＳクライアントモジュールは、ファイルチャンクのユーザ不可知暗号解読及び解凍を提供する。上述したように、ファイルマニフェストは、そのチャンクのＩＤにより各ファイルチャンクに関連付けられた暗号化キー、又は非対称暗号化アルゴリズムの場合は暗号解読キーを有する。従って、ＣＦＳクライアントモジュールは、ファイルマニフェストから暗号化キー／暗号解読キーを取り出してファイルチャンク暗号解読を行うことができる。更に、上述したように、一部のファイルチャンクは、圧縮から利益を受けるので圧縮される場合があり、従って、ＣＦＳクライアントモジュールは、それが適切である場合はファイルチャンクを解凍する。ブロック８３７で、ＣＦＳクライアントモジュールは、任意的に、そのファイルチャンクのＩＤに関連付けられた位置でＣＦＳのローカルキャッシュ内に暗号解読／解凍されたファイルチャンクを格納する。暗号解読／解凍されたチャンクが利用可能になると、ＣＦＳクライアントモジュールは、後述するようにブロック８６０で続行される。
【００７３】
［００１１６］本発明の一実施形態は、ブロック８３４で暗号化ファイルチャンクをキャッシュに入れ、一方、本発明の別の実施形態は、ブロック８３７で暗号解読／解凍されたファイルチャンクをキャッシュに入れることに注意すべきである。更に別の実施形態は、ブロック８３４及び暗号解読／解凍ブロック８３７で両方の暗号化ファイルチャンクをキャッシュに格納することができるが、少なくとも１つの実施形態において、暗号解読／解凍されたファイルチャンクは、暗号解読／解凍されたファイルチャンクが電源が切断されると存在しないか又は決定された一定期間後に除去さえされるように、揮発性であるローカルキャッシュの一部にキャッシュに入れられる。それによってセキュリティの増強が得られ、暗号化ファイルチャンクは、ローカルキャッシュに存在する場合があるが、データは、ＣＦＳクライアントモジュールが上述のデータを暗号解読するために適切に起動させられなかった場合はクライアントデバイスのユーザを利用することができない。例えば、ＣＦＳクライアントモジュールは、ローカルキャッシュの揮発性部分にも暗号解読ファイルシステムマニフェストを格納して、ファイルシステムマニフェストを暗号解読するためにユーザにクライアントデバイスにログインすることを求めることがある可能性がある。従って、ファイルマニフェスト及び各ファイルのその後のファイルチャンクの全ての暗号化キーは、クライアントデバイスの許可されたユーザに対して保護される。
【００７４】
［００１１７］ブロック８２０を再び参照すると、ＣＦＳクライアントモジュールが、ファイルチャンクはＣＦＳのローカルキャッシュに存在すると決定した場合に、ＣＦＳクライアントモジュールは、ローカルキャッシュからファイルチャンクを取り出すことによってブロック８５０に引き続き進む。ファイルチャンクを暗号化ファイルチャンク又は暗号解読／解凍されたファイルチャンクとして又はその両方としてローカルキャッシュ内に格納することができることが上述の内容から明らかであろう。暗号化ファイルチャンクが、利用可能な唯一のファイルチャンクである場合に、ＣＦＳクライアントモジュールは、ブロック８５５で、ユーザ不可知暗号解読及び解凍を暗号化ファイルチャンクに行う。そうでなければ、ＣＦＳクライアントモジュールは、ブロック８５０で、ローカルキャッシュから暗号解読／解凍されたファイルチャンクを取り出す。更に、ＣＦＳクライアントモジュールは、ブロック８３２内の近くのファイルチャンクを予測的に取り出し、及び／又は上述したようにブロック８３３でクラウドストレージシステムに近いファイルチャンクをプリフェッチするように指示すると決定することができる。
【００７５】
［００１１８］本発明の一実施形態において、ブロック８６０で、クライアントデバイスがサイズをＣＦＳクライアントモジュールから受信することを期待する暗号解読／解凍されたファイルチャンクをクラスターに分割することが必要である。例えば、ファイルチャンクが、２５６キロバイトのチャンクサイズ内に格納されるが、クライアントデバイスが、データが４キロバイトのブロックで格納されることを期待する場合に、ＣＦＳクライアントモジュールは、クライアントデバイスにデータを戻すために暗号解読／解凍されたファイルチャンクを６４個のブロックに分割する。これは、特に、ＣＦＳクライアントモジュールが、クライアントデバイスにブロックデバイスをエミュレートし、クラウドストレージシステムによって使用されるチャンクサイズよりも小さいブロックサイズを指定する時に関連する。
【００７６】
［００１１９］ブロック８７０で、ＣＦＳクライアントモジュールは、暗号解読／解凍されたファイルチャンクの要求されたデータを有し、かつクライアントデバイスのオペレーティングシステムに要求されたデータを戻す。
【００７７】
［００１２０］図９は、本発明の実施形態によるクラウドファイルシステム及びクラウドファイルシステム内のファイルの格納の視覚化を示している。図９では、クライアントデバイス９０１は、クライアントデバイス上での使用に向けてクラウドファイルシステム９０２を実装済みである。クラウドファイルシステム９０２は、クラウドファイルシステム９０２マニフェスト９１０内にある。クラウドファイルシステム９０２マニフェスト９１０は、その特定のクラウドファイルシステム９０２に存在するファイル及びフォルダを示すエントリのリストを含む。クラウドファイルシステム９０２マニフェスト９１０は、エントリ名、エントリ属性、エントリマニフェストＩＤ、及びエントリマニフェスト暗号化キーを含む。
【００７８】
［００１２１］ユーザは、クラウドファイルシステム９０２のようなクラウドファイルシステムを使用する多くの方法を有する。ユーザは、クライアントデバイス９０１上で使用したい新しいクラウドファイルシステムの生成を開始することができる。例えば、その使用により、クラウドストレージシステム９３５内に格納された新しい格納位置、例えば、新しいドライブ又は新しいフォルダを作成するようにクライアントデバイス上で実行中であるＣＦＳクライアントモジュールに指示することができる。クラウドファイルシステムを使用する別の方法は、クラウドストレージシステム９３５内に格納されたフォルダにクライアントデバイス上に格納されたフォルダを変換し、すなわち、フォルダ、又はドライブを仮想化することである。クライアントデバイス上のユーザは、指定のフォルダを変換するようにＣＦＳクライアントモジュールに指示することができ、次に、ＣＦＳクライアントモジュールは、指定のフォルダ内のファイル及びサブフォルダの管理を引き受けることができる。更に、この変換は、おしつけがましくなく一見透過的方式で行うことができる。これは、ローカルストレージシステム内のスペースがなくなっており、かつファイルが予想された位置から移動したので多くの構成環境を変えることなくストレージスペースを回復したいと思うユーザに特に有利である。ＣＦＳクライアントモジュールは、ローカルストレージシステムからクラウドストレージシステムにファイルを移行することができるが、ファイルが変換前に存在した同じ論理経路でクライアントデバイスにファイルを提示することができる。
【００７９】
［００１２２］例えば、ＣＦＳクライアントモジュールは、クライアントデバイス上の一時的な格納位置に指定のフォルダ内の全てのデータを移動することになる。次に、ＣＦＳクライアントモジュールは、指定のフォルダに関連付けられた新しいＣＦＳを作成して、以前に指定のフォルダを含む位置（すなわち、実装ポイント）で新しいＣＦＳを実装することができる。ＣＦＳクライアントモジュールは、次に、一時的な格納位置からクラウドストレージシステム９３５内の格納にファイル及びサブフォルダを移行する処理を開始することができる。移行期間中に、クライアントデバイスは、ＣＦＳクライアントモジュールで要求を出すことによって指定のフォルダ内のデータにアクセス可能である。ＣＦＳクライアントモジュールは、要求されたデータが一時的な格納位置に格納されたか否か、又はクラウドストレージシステム９３５に移行されたか否かを決定する。データが一時的な格納位置に位置する場合に、ＣＦＳクライアントモジュールは、例えば、一時的な格納位置内のファイル又はフォルダにアクセスすることにより、一時的な格納位置からデータを取り出す。しかし、データがクラウドストレージシステム９３５に位置する場合には、ＣＦＳクライアントモジュールは、図８に定められた方法でクラウドストレージシステム９３５からデータにアクセスすることになる。移行期間中に、ＣＦＳクライアントモジュールは、定期的にクラウドストレージシステム９３５内にまだ格納されていない指定のフォルダ内のファイル又はサブフォルダを決定し、クラウドストレージシステム９３５内の格納のためにそのフォルダを処理することになる。
【００８０】
［００１２３］この変換をユーザインタフェース指令を通じてクライアントデバイス上のユーザに与えることができる。例えば、ユーザはクライアントデバイス上でファイルシステムブラウザからフォルダを選択し、選択されたフォルダを変換すること、例えば、このフォルダを仮想化する又は「クラウド化する」指令を含むコンテクストメニューを呼び出すことができる。そこから、ＣＦＳクライアントモジュールは、このフォルダをユーザと同じデータを含む知覚的に同一のフォルダと入れ替えることができ、又はＣＦＳクライアントモジュールは、このフォルダを同じ指定であるがフォルダがクラウドストレージシステム９３５内に格納されたという表示をユーザに提示するフォルダと入れ替えることができる。更に、ＣＦＳクライアントモジュールは、フォルダがローカルストレージからクラウドストレージシステム９３５内の格納に移行中であるという表示を作成し、更に、移行が完了すると、フォルダは完全にクラウドストレージシステム９３５内に格納されたという表示を提示することができる。
【００８１】
［００１２４］ＣＦＳがクライアントデバイス９０１上の使用に向けて実装された状態で、ＣＦＳクライアントモジュールは、以下のようにＣＦＳ内にサブフォルダ及びファイルを格納する。サブフォルダは、エントリとしてのＣＦＳ９０２マニフェスト９１０内に格納されるとファイルではなくフォルダと指定される。ＣＦＳ９０２マニフェスト９１０内のエントリは、クライアントデバイス上のユーザがＣＦＳ内の位置までナビゲートした時にＣＦＳクライアントモジュールがＣＦＳ９０２マニフェスト９１０からその位置に位置付けられた全てのフォルダを決定することができるようにフォルダの経路を含む。クラウドストレージシステム内のファイルの格納に対して図７を参照して説明する。更に、ファイルのＣＦＳ９０２マニフェスト９１０内のエントリは、クライアントデバイス上のユーザがＣＦＳ内の位置までナビゲートした時にＣＦＳクライアントモジュールがＣＦＳ９０２マニフェスト９１０からその位置に位置付けられた全てのファイルを決定することができるようにそのファイルの経路を含む。従って、当業者は、クライアントデバイスにＣＦＳ内の各ファイルを構成するファイルチャンクを格納させなくてもＣＦＳ内のファイル及びサブフォルダをＣＦＳ９０２マニフェスト９１０内のデータからユーザに提示することができることを認識するであろう。
【００８２】
［００１２５］ＣＦＳ９０２にファイルを追加する処理は、図９の下部に沿って視覚化される。図９では、クライアントデバイスは、ＣＦＳ９０２内の位置にファイルＢを保存するようにＣＦＳクライアントモジュールに指示する。ＣＦＳクライアントモジュールは、ユーザ不可知圧縮及び暗号化をファイルＢに行って、ファイルＢマニフェスト９０３（「ＦＭ−Ｂ」）を生成する。更に、ＣＦＳクライアントモジュールは、暗号化されたチャンクがまだクラウドストレージシステム９３５に存在しないと決定した時に、クラウドストレージシステム９３５にユーザ不可知圧縮及び暗号化によって生成された各々の暗号化されたチャンクを送信する。
【００８３】
［００１２６］暗号化されたチャンクは存在すると決定することができるので、ファイルＢが、クラウドストレージシステム９３５内に格納されていた他のファイル内のデータの他のブロックと同一のデータのブロックを含む時に、帯域幅利用が低減される。この同じ非複製化により、ＣＦＳクライアントモジュールは、クラウドストレージシステム９３５内に格納された単一ファイルが同一データの複数のチャンクを含む時に帯域幅を低減することができ、その理由は、アップロードされる第１のチャンクのみを送信しさえすればよいからである。当業者は、暗号化がユーザ不可知ので、同じファイル又は２つのファイルがデータの同じチャンクを有する２つのユーザは、１つ又はそれよりも多くの同一暗号化されたチャンクを作成することになり、暗号化されたチャンクの第１の送信のみを要求することを認識するであろう。それによって帯域幅が、クラウドストレージシステム９３５内に複から作られるデータを格納することで低減される。
【００８４】
［００１２７］例示的なＦＭ−Ｂ９０３を図９に示している。ＦＭ−Ｂ９０３は、図４を参照して上述したように、チャンクＩＤ及びチャンク暗号化キーのリストを含む。図９では、各チャンクのＩＤは、暗号化されたチャンク内のデータのハッシュ（例えば、ＨＡＳＨ（ＥＮＣ．ＣＨＵＮＫ１）−ＨＡＳＨ（ＥＮＣ．ＣＨＵＮＫＮ））である。更に、暗号化キーはチャンク内のデータのハッシュ（例えば、ＨＡＳＨ（ＣＨＵＮＫ１）−ＨＡＳＨ（ＣＨＵＮＫ２））である。図５で上述したように、これらのチャンクＩＤ及び暗号化キーは、例示的であり、一方、本発明の他の実施形態は、チャンクＩＤ及び暗号化キーとして各チャンクから確定的である他のユーザ不可知データを利用する。
【００８５】
［００１２８］ＣＦＳクライアントモジュールは、ＦＭ−Ｂ９０３上の各ブロックに使用された同じユーザ不可知暗号化を利用して、暗号化されたＦＭ−Ｂ、ＥＮＣ．ＦＭ−Ｂ９０４、及びＥＮＣ．ＦＭ−Ｂ９０４のハッシュであるＦＭ−ＢＩＤを生成する。また、ＣＦＳクライアントモジュールは、ユーザ不可知確定的な暗号化キー（「ＦＭ−Ｂ  ＥＮＣ−ＫＥＹ」）を使用して、ＦＭ−Ｂ９０３内のデータのハッシュのようなＦＭ−Ｂ９０３を暗号化する。ＣＦＳクライアントモジュールは、ＦＭ−Ｂ  ＩＤを使用するその後の取り出しに利用可能であるようにローカルで及びクラウドストレージシステム９３５内にＥＮＣ．ＦＭ−Ｂ９０４を格納する。
【００８６】
［００１２９］ＣＦＳクライアントモジュールは、ファイルＢがＣＦＳ９０２のフォルダ階層に示されている位置を含むファイルＢに対応するエントリをＣＦＳ９０２マニフェスト９１０に追加する。ファイルＢエントリは、ＦＭ−Ｂ  ＩＤ及びＦＭ−Ｂ  ＥＮＣ−ＫＥＹを含む。このようにして、ユーザ又はクライアントデバイスがＦＭ−Ｂ  ＩＤ及び対応するＦＭ−Ｂ  ＥＮＣ−ＫＥＹを有するエントリを含むＣＦＳマニフェストを有すると、ユーザは、たとえそのユーザ又はクライアントデバイスがファイルＢのコピーを以前に有しなかったとしてもＥＮＣ．ＦＭ−Ｂ９０４を取り出して暗号解読することができる。
【００８７】
［００１３０］クラウドファイルシステム９０２マニフェスト９１０は、ユーザによって生成されたキー又はパスワードで暗号化される。例えば、図７を参照して後述するように、ユーザ相対的スナップショット暗号化又はマルチユーザファイルシステムマニフェスト暗号化を使用してクラウドファイルシステム９０２マニフェスト９１０を暗号化することができる。暗号化ファイルシステムマニフェスト（「ＥＮＣ−ＦＳＭ」）は、このユーザ又は他のユーザによる取り出しに向けて格納されるようにクラウドストレージシステム９３５に送信される。
【００８８】
［００１３１］ＣＦＳにファイルの追加は、既存のフォルダに代わるか、又は別の格納位置としてクライアントデバイスに追加されるＣＦＳの生成を参照して説明した。しかし、同じ原理を使用して、ＣＦＳクライアントモジュールがクライアントデバイス上のローカルストレージ内の一部又は全部データの自動バックアップを管理することを可能にすることができる。例えば、クライアントデバイス上のＣＦＳクライアントモジュールが取り込まれると、ＣＦＳクライアントモジュールは、ＣＦＳクライアントモジュールが実行中であるクライアントデバイスのバックアップとしてラベル付けされてＣＦＳ内に格納されるローカルストレージシステムのバックアップを生成し始めることができる。従って、ＣＦＳクライアントモジュールは、バックグランドで機能し、ローカルストレージシステム内のファイルを識別し、クラウドストレージシステムにそれらのファイルを追加し、そのクライアントデバイスローカルストレージシステムのバックアップを構成する全てのバックアップファイルを列挙するファイルシステムマニフェストを生成する。ローカルストレージシステム上のファイルは、ローカルストレージシステムから必ずしも除去されるというわけではないが、ファイルは、将来の障害回復に向けてバックアップファイルシステムマニフェスト内に列挙される。
【００８９】
［００１３２］ＣＦＳクライアントモジュールを実行するクライアントデバイスの寿命を通して、ＣＦＳクライアントモジュールは、ファイルがクラウドストレージシステムに仮想化中の基本的なフォルダとは無関係に、ファイルが更新されるとファイルのバックアップを維持することができる。更に、ＣＦＳクライアントモジュールは、識別情報、すなわち、バージョン番号又は修正日と共にクラウドストレージシステムに格納された各ファイルの全てのバージョンのリストを維持することができる。このようにして、ＣＦＳクライアントモジュールは、ユーザがＣＦＳクライアントモジュールによって維持されたバックアップからファイルを再格納したいという希望を提示する時にファイルの全ての利用可能なバージョンのリストをクライアントデバイス上のユーザに提示することができる。更に、ＣＦＳクライアントモジュールは、ＣＦＳクライアントモジュールが常駐するクライアントデバイスの固有の識別子を追跡して、バックアップファイルシステムマニフェスト内に各バックアップファイルのファイルマニフェストを列挙するか、又はクライアントデバイスの固有の識別子に従ってファイルシステムマニフェスト自体を列挙することができる。固有の識別子を使用して、ＣＦＳクライアントモジュールは、このクライアントデバイスのバックアップからファイルを再格納するオプションをユーザに提示するか、又はユーザがバックアップファイルの再格納元である別のクライアントデバイスを選択することを可能にすることができる。
【００９０】
［００１３３］一実施形態において、ローカルストレージシステムのバックアップは、ＣＦＳクライアントモジュールにより自動的に管理される。別の実施形態において、ＣＦＳクライアントモジュールは、どのファイルをクラウドストレージシステムにバックアップすべきか、又はバックアップをそもそも行うべきか否かに関してユーザに構成オプションを提示する。
【００９１】
［００１３４］ローカルストレージシステム全体がクラウドストレージシステム内でバックアップされる場合に、「クラウド化する」作動は、選択されたフォルダのコンテンツでファイルシステムマニフェストを生成し、フォルダのローカルコピーを除去し、かつフォルダの位置で生成されたファイルシステムマニフェストを実装することと同等とすることができる。この作動では、各ファイルに対して全ての暗号化されたブロックを再アップロードする必要があるというわけではなく、その理由は、暗号化されたブロックは、バックアップ手順からクラウドストレージシステムにあるからであるが、「クラウド化する」作動は、バックアップファイルと選択されたフォルダ内に現在あるファイルとの間で行わなければならないあらゆる更新を決定する。
【００９２】
［００１３５］別の実施形態において、ＣＦＳクライアントモジュールは、クライアントデバイスのローカルストレージシステム内のファイル、フォルダ、及びドライブを自動的に仮想化するように構成される。上述したように、ローカルストレージシステムの自動バックアップは、ローカルストレージシステムからファイルを除去しない。しかし、ファイル、フォルダ、又はドライブの自動仮想化では、ローカルストレージシステムからファイル及びフォルダを除去して、クラウドストレージシステムに上述のファイル及びフォルダを格納することになる。本質的に、ＣＦＳクライアントモジュールは、自動仮想化のための候補であると決定するファイル、フォルダ、及び／又はドライブを自動的にクラウド化することになる。ＣＦＳクライアントモジュールは、どのファイル、フォルダ、又はドライブが自動仮想化の候補であるかを複数の技術を用いて決定することができる。ＣＦＳクライアントモジュールは、フォルダ、又はドライブ内のファイル又は複数のファイルの修正日又はアクセス日を見て、ユーザが最近ファイルを使用したか否かを決定することができる。この仮想化は自動であるので、ＣＦＳクライアントモジュールは、ファイルをクラウドストレージシステムから取り出さなければならない場合は将来のアクセスにおいてあらゆる遅延によりユーザに与える影響が少なくなるので最近使用されなかったファイルを優遇することができる。仮想化の候補を決定する他の技術には、ファイル使用パターンを時間と共に追跡して仮想化の格好の候補になるファイル、フォルダ、及びドライブのリストを生成することがある。
【００９３】
［００１３６］ＣＦＳクライアントモジュールは、更に、ＣＦＳ内に含まれたファイル／フォルダ、及びローカルストレージシステムに含まれたファイル／フォルダの混成フォルダをもたらすように構成することができる。例えば、ユーザがＣＦＳクライアントモジュールにファイル及びフォルダを含むローカルストレージシステム内の実装ポイントでＣＦＳを実装するように指示した場合に、ＣＦＳクライアントモジュールは、ローカルストレージシステム及び実装されるＣＦＳ内のファイルを統合することができる。ＣＦＳクライアントモジュールは、ローカルストレージ内のファイルの管理を引き受けて、ローカルストレージシステムの管理された区分にファイルを移動する。ＣＦＳクライアントモジュールは、次に、選択されたフォルダの位置で仮想フォルダを実装して、そのフォルダのコンテンツでユーザを提示することを担う。ＣＦＳクライアントモジュールは、ディレクトリリストが混成／仮想フォルダに行われた時はいつでもローカルストレージシステムの管理された区分内に現在あるローカルストレージシステム内のファイル／サブフォルダのリスト及び実装されたＣＦＳのファイル／サブフォルダのリストをクライアントデバイスに提供する。読取作動は、仮想化移行中の読取の経路を参照して上述した方法で処理される。ＣＦＳクライアントモジュールは、位置ストレージシステムの管理された区分又はクラウドストレージシステムに新しいファイル及び／又は古いファイルの修正を保存するオプションを有する。このオプションは、ユーザに提示された設定を通じてＣＦＳクライアントモジュールにより予め形成することができ、又はオプションは、混成フォルダへのＣＦＳクライアントモジュールによる書込作動でユーザに提示することができる。ＣＦＳクライアントモジュールは、更に、ユーザがファイル又はフォルダを含むローカルストレージシステム内の位置でＣＦＳを実装することを選択した場合に矛盾が存在することをユーザに知らせて、ユーザが解決手順を選択すること、例えば、ＣＦＳ内の全てのファイルを移動することを選択するか、混成フォルダ手法を選択するか、又はユーザ自体が矛盾を管理することができるように何もしないことを選択することを可能にすることができる。
【００９４】
［００１３７］図１０は、本発明の実施形態によるユーザ不可知暗号化及びファイルの圧縮の視覚化を示している。図１０では、クライアントデバイス１００１は、偶然に同一データを構成するデータの２つのチャンク１０３０及び１０４０を偶然に含む単一のファイル１０１０を暗号化している。本発明の一実施形態において、クライアントデバイスは、各対応するチャンク１０３０及び１０４０のデータ（「Ｄ1030」及び「Ｄ1040」）から暗号化キー１０３２及び１０４２（「Ｋ1030」及び「Ｋ1040」）を生成することによってそれぞれステップａ及びステップｂで各チャンクを処理し始める。従って、暗号化キーＫ1040＝ｈａｓｈ（Ｄ1040）を生成するためにデータのハッシュ機能を利用する実施形態において、更に、Ｄ1030がＤ1040と同一なので、Ｋ1030は、Ｋ1040と同一になる。ステップｃ及びステップｄで、クライアントデバイスは、任意的に、チャンク１０３０及び１０４０を圧縮し、圧縮されたチャンク１０３１及び１０４１（「ｃＤ1030」及び「ｃＤ1040」）を生成し、すなわち、ｃＤ1040＝ｃｏｍｐ（Ｄ1040）である。圧縮されたチャンク１０３１及び１０４１は、再び同一であり、その理由は、クライアントデバイス１００１は、同一データ及び同じ圧縮アルゴリズムを使用しており、一部の場合に圧縮を使用していないからである。
【００９５】
［００１３８］ステップｅ及びステップｆで、クライアントデバイス１００１は、それぞれの暗号化キー１０３２及び１０４２を使用して圧縮されたチャンク１０３１及び１０４１を暗号化し、暗号化されたチャンク１０３３及び１０４３（「ｅＤ1030」及び「ｅＤ1040」）を生成し、すなわち、ｅＤ1030＝ｅｎｃｒｙｐｔ（ｃＤ1030、Ｋ1030）である。暗号化されたチャンク１０３３は、暗号化データ１０４３と同一になり、その理由は、圧縮されたチャンク１０３１及び１０４１は、暗号化キー１０３２及び１０４２と同様に同一であるからである。更に、クライアントデバイスは、各チャンクに同じ暗号化アルゴリズムを利用している。
【００９６】
［００１３９］ステップｇ及びステップｈで、クライアントデバイス１００１は、チャンクＩＤ１０３４及びチャンクＩＤ１０４４（「ＩＤ1030」及び「ＩＤ1040」）を暗号化データ１０３３及び１０４３から導出し、すなわち、ＩＤ1030＝ｈａｓｈ（ｅＤ1030）である。各ステップに使用されるハッシュ機能は同じアルゴリズムであり、暗号化データ１０３３及び１０４４は同一であるので、チャンクＩＤ１０３４及び１０４４は同一になる。
【００９７】
［００１４０］ステップｉ及びステップｊで、クライアントデバイス１００１は、チャンクＩＤ１０３４及び１０４４に基づいてクラウドストレージシステム１０３５内に暗号化データ１０３３及び１０４３を格納しようとすることになる。ステップｉがステップｊの前に発生すると仮定して、暗号化データ１０３３は、クラウドストレージシステム１０３５にチャンクＩＤ１０３４に関連してアップロードされることになる。クラウドストレージシステムは、チャンクＩＤ１０３４に対応する位置で暗号化データ１０３３を格納することになり、従って、クラウドストレージシステムは、格納された暗号化データ１０６３及び格納されたチャンクＩＤ１０６４を含むことになる。クライアントデバイス１００１が暗号化データ１０４３を格納しようとする時に、クライアントデバイスは、クラウドストレージシステム１０３５が同一に格納されたチャンクＩＤ１０６４を含むので同一暗号化データを有すると決定することになる。クライアントデバイス１００１は、チャンクＩＤ１０４４に関連して暗号化データ１０４３を送信する必要がなくなり、従って、クライアントデバイス１００１は、クラウドストレージシステム１０３５に存在するデータを送信しないことによってアップロード帯域幅の利用を低減することになる。
【００９８】
［００１４１］図１１は、本発明の実施形態による２つのファイルのユーザ不可知暗号化及び圧縮の視覚化を示している。図１１では、第１のクライアントデバイス１１０１Ａは、ファイル１１１０を暗号化しており、一方、第２のクライアントデバイス１１０１Ｂは、ファイル１１２０を暗号化している。それが起こると、ファイル１１１０及び１１２０は、同一データを構成するデータの２つのチャンク１１３０及び１１４０を含む。全てのファイル１１１０及び１１２０は、ファイル内に互いのコピーであるような完全に同一のデータを含むことさえあり得る。
【００９９】
［００１４２］本発明の一実施形態において、各クライアントデバイス１１０１Ａ及び１１０１Ｂは、対応するチャンクを圧縮することによって各チャンク１１３０及び１１４０を処理し始める。従って、ステップａ及びステップｂで、対応するクライアントデバイスは、任意的に、チャンク１１３０又は１１４０を圧縮し、圧縮されたチャンク１１３１又は１１４１（「ｃＤ1130」又は「ｃＤ1140」）を生成し、すなわち、ｃＤ1140＝ｃｏｍｐ（Ｄ1140）である。圧縮されたチャンク１１３１及び１１４１は、同一であり、その理由は、クライアントデバイス１１０１Ａ及び１１０１Ｂは、同一データ及び同じ圧縮アルゴリズムを使用しているか、又は一部の場合に圧縮を使用していないからである。
【０１００】
［００１４３］クライアントデバイス１１０１Ａ及び１１０１Ｂは、各対応するチャンク１１３０及び１１４０のデータ（「Ｄ1130」及び「Ｄ1140」）から暗号化キー１１３２及び１１４２（「Ｋ1130」及び「Ｋ1140」）を生成することによってそれぞれステップｃ及びステップｄで続行される。従って、暗号化キー、Ｋ1140＝ｈａｓｈ（Ｄ1140）を生成するためにデータのハッシュ機能を利用する実施形態において、更に、Ｄ1130がＤ1140と同一であり、クライアントデバイス１１０１Ａ及び１１０１Ｂが暗号化キーを生成するために同じアルゴリズムを使用しているので、Ｋ1130は、Ｋ1140と同一になる。
【０１０１】
［００１４４］ステップｅ及びステップｆで、クライアントデバイス１１０１Ａ及び１１０１Ｂは、それぞれの暗号化キー１１３２及び１１４２を使用して圧縮されたチャンク１１３１及び１１４１を暗号化し、暗号化データ１１３３及び１１４３（「ｅＤ1130」及び「ｅＤ1140」）を生成し、すなわち、ｅＤ1130＝ｅｎｃｒｙｐｔ（ｃＤ1130、Ｋ1130）である。暗号化データ１１３３は、暗号化キー１１３２及び１１４２の場合と同様に、圧縮されたチャンク１１３１及び１１４１が同一であるので暗号化データ１１４３と同一になる。更に、クライアントデバイスは、各対応するチャンクに同じ暗号化アルゴリズムを利用している。
【０１０２】
［００１４５］ステップｇ及びステップｈで、クライアントデバイス１１０１Ａ及び１１０１Ｂは、チャンクＩＤ１１３４及びチャンクＩＤ１１４４（「ＩＤ1130」及び「ＩＤ1140」）を暗号化データ１１３３及び１１４３から導出し、すなわち、ＩＤ1130＝ｈａｓｈ（ｅＤ1130）である。各ステップに使用されるハッシュ機能は同じアルゴリズムであり、暗号化データ１１３３及び１１４４は同一であるので、チャンクＩＤ１１３４及び１１４４も同一になる。
【０１０３】
［００１４６］ステップｉ及びステップｊで、クライアントデバイス１１０１Ａ及び１１０１Ｂは、チャンクＩＤ１１３４及び１１４４に基づいてクラウドストレージシステム１１３５内に暗号化データ１１３３及び１１４３を格納しようとすることになる。ステップｉがステップｊの前に発生すると仮定して、暗号化データ１１４４は、クラウドストレージシステム１１３５にチャンクＩＤ１１４４に関連してアップロードされることになる。クラウドストレージシステムは、チャンクＩＤ１１４４に対応する位置で暗号化データ１１４３を格納することになり、従って、クラウドストレージシステムは、格納された暗号化データ１１６３及び格納されたチャンクＩＤ１１６４を含むことになる。クライアントデバイス１１０１Ａが暗号化データ１１３３を格納しようとする時に、クライアントデバイス１１０１Ａは、クラウドストレージシステム１１３５が同一に格納されたチャンクＩＤ１１６４を含むので同一暗号化データを有すると決定することになる。クライアントデバイス１１０１Ａは、チャンクＩＤ１１３４に関連して暗号化データ１１３３を送信する必要がなくなり、従って、クライアントデバイス１１０１Ａは、クラウドストレージシステム１１３５に存在するデータを送信しないことによってアップロード帯域幅の利用を低減することになる。
【０１０４】
［００１４７］図１２、図１３、図１４、及び図１５を参照すると、クラウドストレージゲートウェイは、クラウドストレージプールと結合され、図２に説明するように通信ネットワーク上で１つ又はそれよりも多くのクライアントデバイスと通信する。
【０１０５】
［００１４８］図１２は、本発明の実施形態によるクラウドストレージゲートウェイがクラウドファイルプールからファイルチャンクを戻す方法の流れ図を示している。ブロック１２００で、クラウドストレージゲートウェイは、ファイルチャンクの要求を受信する。例えば、クラウドストレージゲートウェイは、ＧＥＴ指令及びチャンクＩＤと共にクライアントデバイスからメッセージを受信する場合がある。更に、ＧＥＴ指令は、チャンクＩＤのリストを伴う可能性がある。単一のチャンクＩＤを参照すると、クラウドストレージゲートウェイは、ブロック１２１０で、そのファイルチャンクがクラウドストレージゲートウェイに位置付けられたクラウドストレージプールのリモートキャッシュに存在するか否かを決定する。一実施形態において、クラウドストレージゲートウェイは、チャンクＩＤのデータベースを見て、ファイルチャンクがリモートキャッシュに存在するか否かを決定する。データベースは、ブルームフィルタ、ハッシュテーブル、リンクリスト、関係データベース、又はあらゆる他の適切なデータベースとすることができる。別の実施形態において、クラウドストレージゲートウェイは、ファイルチャンクがチャンクＩＤに関連付けられた位置に位置付けられたか否かを検査する。ファイルチャンクがリモートキャッシュに存在しない場合に、クラウドストレージゲートウェイは、ブロック１２１５でストレージクラスターからファイルチャンクを取り出す。ブロック１２９０で、クラウドストレージゲートウェイは、クライアントデバイスにファイルチャンクを戻す。１つの可能なシナリオは、クラウドストレージゲートウェイが要求されたチャンクＩＤを持たないということである。このシナリオにおいて、クラウドストレージゲートウェイは、チャンクＩＤがクラウドストレージシステムに存在しないことを示すメッセージをクライアントデバイスに戻す。
【０１０６】
［００１４９］図１３は、本発明の実施形態によるクラウドストレージゲートウェイがクラウドファイルプールからファイルチャンクをプリフェッチする方法の流れ図を示している。ブロック１３００で、クラウドストレージゲートウェイは、プリフェッチ指令を受信する。例えば、クラウドストレージゲートウェイは、ＰＲＥ指令及びチャンクＩＤと共にクライアントデバイスからメッセージを受信する場合がある。更に、ＰＲＥ指令は、チャンクＩＤのリストを伴う可能性がある。単一のチャンクＩＤを参照すると、クラウドストレージゲートウェイは、ブロック１３１０で、そのファイルチャンクがクラウドストレージゲートウェイに位置付けられたクラウドストレージプールのリモートキャッシュに存在するか否かを決定する。ファイルチャンクがリモートキャッシュに存在する場合に、本方法がブロック１３２０で行われる。ファイルチャンクがリモートキャッシュに存在しない場合に、クラウドストレージゲートウェイは、ブロック１３１５でストレージクラスターからファイルチャンクを取り出す。１つの可能なシナリオは、クラウドストレージゲートウェイが要求されたチャンクＩＤを持たないということである。このシナリオにおいて、クラウドストレージゲートウェイは、チャンクＩＤがクラウドストレージシステムに存在しないことを示すメッセージをクライアントデバイスに戻すことができる。
【０１０７】
［００１５０］図１４は、本発明の実施形態によるクラウドストレージゲートウェイがクラウドストレージシステムにファイルチャンクがあるかを検査する方法の流れ図を示している。ブロック１４００で、クラウドストレージゲートウェイは、チャンクＩＤがクラウドストレージシステムに存在するか否かを検査する指令を受信する。例えば、クラウドストレージゲートウェイは、ＨＡＳ指令及びチャンクＩＤと共にクライアントデバイスからメッセージを受信する場合がある。更に、ＨＡＳ指令は、チャンクＩＤのリストを伴う可能性がある。単一のチャンクＩＤを参照すると、クラウドストレージゲートウェイは、ブロック１４１０で、そのファイルチャンクがクラウドストレージゲートウェイに位置付けられたクラウドストレージプールのリモートキャッシュに存在するか否かを決定する。ファイルチャンクがリモートキャッシュに存在する場合に、本方法は、ブロック１４２０に引き続き進んで、クライアントデバイスにチャンクＩＤがクラウドストレージシステムに存在することを示す。ファイルチャンクがリモートキャッシュに存在しない場合に、本方法は、ブロック１４２５に引き続き進んで、チャンクＩＤがクラウドストレージプールに存在するか否かを決定する。例えば、一実施形態において、クラウドストレージゲートウェイは、クラウドストレージプールに存在する全てのチャンクＩＤのリストを維持し、一方、別の実施形態において、クラウドストレージゲートウェイは、クラウドストレージプールに問い合わせて、クラウドストレージプールが要求されたチャンクＩＤを含むか否かを決定する。チャンクＩＤが存在する場合に、クラウドストレージゲートウェイは、ブロック１４２０に引き続き進んで、チャンクＩＤがクラウドストレージシステムに存在することをクライアントデバイスに示す。チャンクＩＤが存在しない場合に、クラウドストレージゲートウェイは、ブロック１４３０に引き続き進んで、チャンクＩＤがクラウドストレージシステムに存在しないことをクライアントデバイスに示す。
【０１０８】
［００１５１］図１５は、本発明の実施形態によるクラウドストレージゲートウェイがクラウドストレージシステムにファイルチャンクを追加する方法の流れ図を示している。ブロック１５００で、クラウドストレージゲートウェイは、クラウドストレージシステムにファイルチャンクを格納する要求を受信し、要求は、ファイルチャンクもチャンクＩＤも含む。例えば、クラウドストレージゲートウェイは、ＰＵＴ指令、ファイルチャンク、チャンクＩＤと共にクライアントデバイスからメッセージを受信する場合がある。更に、ＰＵＴ指令は、ファイルチャンク及びチャンクＩＤのリストを伴う可能性がある。単一のファイルチャンク及びチャンクＩＤ対を参照すると、クラウドストレージゲートウェイは、ブロック１５１０で、そのファイルチャンクがクラウドストレージシステムに存在するか否かを決定する。ファイルチャンクがクラウドストレージシステムに存在する場合に、本方法は、ブロック１５５０で行われる。ファイルチャンクがクラウドストレージシステムに存在しない場合に、本方法は、ブロック１５２０に引き続き進んで、ファイルチャンクを検証する。ファイルチャンクが対応するチャンクＩＤでファイルチャンクを要求する全てのクライアントデバイスに利用可能になるので、ファイルチャンク内のデータが有効であることを保証することが重要である。従って、クラウドストレージゲートウェイは、ファイルチャンクからチャンクＩＤを生成し、生成されたチャンクＩＤを受信したチャンクＩＤと比較する。生成されたチャンクＩＤが受信したチャンクＩＤに適合する場合に、ファイルチャンクは有効であるので、本方法は、ブロック１５３０に引き続き進み、そうでなければ、本方法は終了してブロック１５５０に戻る。ブロック１５３０で、クラウドストレージゲートウェイは、クラウドストレージプール内にデータを格納する。データは、チャンクＩＤに関連付けられた位置で格納される。例えば、ファイルチャンクは、ファイルチャンクのデータベース内に格納される場合があり、又はファイルチャンクのファイルシステムに格納される場合がある。一実施形態において、クラウドストレージシステムは、ブロック１５４０で、ファイルチャンクがそのファイルチャンクの将来の要求にサービスを提供するのにより迅速に利用可能になるように、クラウドストレージプールのリモートキャッシュにファイルチャンクをコピーする。一部の実施形態において、本方法は、データが格納されたか又は格納しなかったかの表示をクライアントデバイスに戻す。
【０１０９】
［００１５２］図１６は、本発明の実施形態によるファイルチャンクをクラウドストレージシステムに要求するデータフロー図を示している。クライアントデバイス１６０１Ａは、ネットワーク１６３０を通じてクラウドストレージシステム１６３５と結合される。クラウドストレージシステム１６３５は、クラウドストレージプール１６６０と結合されたクラウドストレージゲートウェイ１６４５を含む。クラウドストレージゲートウェイ１６４５は、クラウドストレージプールのリモートキャッシュとして作用し、クラウドストレージプールは、クラウドストレージシステムデータの１次ストレージとして作用する。ステップ１で、クライアントデバイス１６０１Ａは、１つ又はそれよりも多くのファイルチャンクを要求するメッセージをクラウドストレージゲートウェイ１６４５に送信する。例えば、メッセージは、１つ又はそれよりも多くのチャンクＩＤを有するＧＥＴメッセージである。ステップ２で、ファイルチャンクがリモートキャッシュに存在しない場合に、クラウドストレージゲートウェイ１６４５は、クラウドストレージプール１６６０からファイルチャンクをフェッチする。例えば、クラウドストレージゲートウェイ１６４５は、戻すチャンクＩＤのリストを伴うＧＥＴメッセージをクラウドストレージプール１６６０に出す。ステップ３で、クラウドストレージプール１６６０は、クラウドストレージプール１６６０に存在する各要求されたファイルチャンクを戻す。そうでなければ、クラウドストレージプール１６６０は、クラウドストレージプール１６６０に存在しなかったチャンクの表示を戻す。ステップ４で、クラウドストレージゲートウェイ１６４５は、要求されたファイルチャンクがクラウドストレージシステム１６３５に存在した場合はクライアントデバイス１６０１Ａにそれらのファイルチャンクを戻し、そうでなければ、クラウドストレージゲートウェイ１６４５は、クラウドストレージシステム１６３５に存在しなかったファイルチャンクの表示を戻す。ステップ５で、クライアントデバイス１６０１Ａは、クラウドストレージシステム１６３５からファイルチャンク又は表示を受信する。
【０１１０】
［００１５３］図１７は、本発明の実施形態によるクラウドストレージプールにファイルチャンクをプリフェッチするように要求するデータフロー図を示している。クライアントデバイス１７０１Ａは、ネットワーク１７３０を通じてクラウドストレージシステム１７３５と結合される。クラウドストレージシステム１７３５は、クラウドストレージプール１７６０と結合されたクラウドストレージゲートウェイ１７４５を含む。クラウドストレージゲートウェイ１７４５は、クラウドストレージプールのリモートキャッシュとして作用し、クラウドストレージプールは、クラウドストレージシステムデータの１次ストレージとして作用する。ステップ１で、クライアントデバイス１７０１Ａは、１つ又はそれよりも多くのファイルチャンクがクラウドストレージプール１７６０からクラウドストレージゲートウェイ１７４５によりプリフェッチされることを要求するメッセージをクラウドストレージゲートウェイ１７４５に送信する。ステップ２で、クラウドストレージゲートウェイ１７４５は、クラウドストレージゲートウェイ１７４５上に常駐するクラウドストレージプール１７６０のリモートキャッシュ内にまだ存在しないチャンクに関して、ＧＥＴ指令及びチャンクＩＤのリストと共にファイルチャンクをフェッチする。ステップ３で、クラウドストレージプール１７６０は、クラウドストレージプール１７６０に存在する各要求されたファイルチャンクを戻す。そうでなければ、クラウドストレージプール１１７６０は、クラウドストレージプール１７６０に存在しなかったチャンクの表示を戻す。ステップ４で、クラウドストレージゲートウェイ１７４５は、ファイルチャンクが将来の要求に向けてより迅速なアクセスに利用可能になるように、クラウドストレージプールのリモートキャッシュ内に戻されたチャンクを格納する。
【０１１１】
［００１５４］図１８は、本発明の実施形態によるクラウドストレージシステムが１つ又はそれよりも多くのファイルチャンクを有するか否かの表示を要求するデータフロー図を示している。クライアントデバイス１８０１Ａは、ネットワーク１８３０を通じてクラウドストレージシステム１８３５と結合される。クラウドストレージシステム１８３５は、クラウドストレージプール１８６０と結合されたクラウドストレージゲートウェイ１８４５を含む。クラウドストレージゲートウェイ１８４５は、クラウドストレージプールのリモートキャッシュとして作用し、クラウドストレージプール１８６０は、クラウドストレージシステム１８３５データの１次ストレージとして作用する。ステップ１で、クライアントデバイス１８０１Ａは、１つ又はそれよりも多くのファイルチャンクがクラウドストレージシステム１８３５内にあるか否かの表示を要求するメッセージをクラウドストレージゲートウェイ１８４５に送信する。ステップ２で、クラウドストレージゲートウェイ１８４５は、チャンクがクラウドストレージプールのリモートキャッシュ内に又はクラウドストレージプール１８６０自体に存在するか否かを決定する。ステップ３で、クラウドストレージゲートウェイ１８４５がクラウドストレージプール１８６０にクラウドストレージプール１８６０がチャンクを有するか否かに対して問い合わせたチャンクに関して、クラウドストレージプール１８６０は、チャンクがクラウドストレージプール１８６０に存在するか否かの表示を戻す。ステップ４で、クラウドストレージゲートウェイ１８４５は、各ファイルチャンクがクラウドストレージシステム１８３５に存在するか否かの表示を戻す。
【０１１２】
［００１５５］図１９は、本発明の実施形態によるクラウドストレージシステムに１つ又はそれよりも多くのファイルチャンクを格納するデータフロー図を示している。クライアントデバイス１９０１Ａは、ネットワーク１９３０を通じてクラウドストレージシステム１９３５と結合される。クラウドストレージシステム１９３５は、クラウドストレージプール１９６０と結合されたクラウドストレージゲートウェイ１９４５を含む。クラウドストレージゲートウェイ１９４５は、クラウドストレージプールのリモートキャッシュとして作用し、クラウドストレージプール１９６０は、クラウドストレージシステム１９３５データの１次ストレージとして作用する。ステップ１で、クライアントデバイス１９０１Ａは、クラウドストレージシステム１９３５内に１つ又はそれよりも多くのファイルチャンクを格納するメッセージをクラウドストレージゲートウェイ１９４５に送信する。ステップ２で、クラウドストレージゲートウェイ１９４５は、チャンクがクラウドストレージプールのリモートキャッシュ内に又はクラウドストレージプール１９６０自体に存在するか否かを決定する。ステップ３で、クラウドストレージゲートウェイ１９４５がクラウドストレージプール１９６０にクラウドストレージプール１９６０がチャンクを有するか否かに対して問い合わせたチャンクに関して、クラウドストレージプール１９６０は、チャンクがクラウドストレージプール１９６０に存在するか否かの表示を戻す。ステップ４で、クラウドストレージゲートウェイ１９４５は、クラウドストレージシステム１９３５に存在しないチャンクを検証する。ステップ５で、クラウドストレージゲートウェイ１９４５は、クラウドストレージプール１９６０にチャンクを送信することによって検証されたチャンクを格納する。ステップ６で、クラウドストレージプール１９６０は、各チャンクのＩＤに基づく位置でデータストア内にチャンクを保存する。
【０１１３】
［００１５６］図２０〜図２４を参照すると、各図は、一実施形態によるＣＦＳクライアントモジュールによってもたらされたユーザインタフェースの要素を示すスクリーンショットである。これらのスクリーンショットは、Ｍａｃ  ＯＳ  Ｘオペレーティングシステムを実施するクライアントデバイスからのものである。類似のインタフェースが、Ｍａｃ  ＯＳ  Ｘと異なるオペレーティングシステムを実施するクライアントデバイスによってもたらされることは当業者により認められるであろう。
【０１１４】
［００１５７］図２０は、本発明の実施形態によるクラウドファイルシステムに格納されたファイルを列挙するユーザインタフェースを示している。図２０は、フォルダ、例えば、「Ｃｏｍｍｏｎ  Ｍｏｖｉｅｓ」のコンテンツを表示するファイルブラウザウインドウ、例えば、Ｍａｃ  ＯＳＸ  Ｆｉｎｄｅｒ  Ｗｉｎｄｏｗ又はＷｉｎｄｏｗｓ  Ｆｉｌｅ  Ｅｘｘｐｌｏｒｅｒのスクリーンショットである。フォルダ「コモンウインドウ」は、実装ポイント／Ｕｓｅｒｓ／ｂｉｔｃａｓａｃｏｍｍｏｎ／Ｂｉｔｃａｓａ／ｃｏｍｍｏｎｓに実装されたクラウドファイルシステムである。ユーザインタフェースは、クラウドファイルシステムに格納され、かつクライアントデバイスでのアクセスに利用可能である１組のファイルを示している。図２０の特に興味深い態様は、フォルダに利用可能なスペース量の表示である。図２０の下部で、ファイルブラウザインタフェースは、フォルダが「１７．５９ＴＢ利用可能」な空きスペースを有することを示している。フォルダまで閲覧する時に、クライアントデバイス上のオペレーティングシステムは、そのフォルダが位置するファイルシステムの利用可能スペースを要求する。「Ｃｏｍｍｏｎ  Ｍｏｖｉｅｓ」フォルダがＣＦＳ、すなわち、実装されたＣＦＳ内に常駐するので、ＣＦＳクライアントモジュールは、ＣＦＳとオペレーティングシステムの間のインタフェースを処理する。従って、オペレーティングシステムは、利用可能スペースをＣＦＳクライアントモジュールに要求する。ＣＦＳクライアントモジュールは、要求に基づいてオペレーティングシステムに戻すべきＣＦＳクライアントモジュールに利用可能な最大値としての空きスペースの表示を戻す。従って、図２０では、ＣＦＳクライアントモジュールは、どの程度のスペースがクラウドストレージシステムにおいて残っているかに基づいて利用可能なスペース量を戻さず、代わりに、偶然に２44又は１７．５９テラバイトである表示すべきオペレーティングシステムに利用可能な最大値を戻している。ユーザがＣＦＳにファイルを追加すると、利用可能スペースの量は、ＣＦＳのユーザ及びクライアントデバイスに示されて一定のままである。
【０１１５】
［００１５８］図２１は、本発明の実施形態によるクラウドファイルシステムクライアントモジュールによって提供される機能にアクセスするためのユーザインタフェースを示している。図２１は、ＣＦＳクライアントモジュールによって供給されたコンテクストメニューのスクリーンショットである。ユーザインタフェースにより、クライアントデバイスの上に実装される２つのクラウドファイルシステム、例えば、「Ｃｏｍｍｏｎ  Ｍｏｖｉｅｓ」及び「Ｍｙ  Ｆｉｌｅｓ」へのショートカットが得られる。ユーザがこのショートカットをクリックした時に、ファイルブラウザが開いて、そのＣＦＳのコンテンツを示すようにナビゲートすることになる。更に別のオプション、具体的には「実装されたファイルを管理する」、「Ｂｉｔｃａｓａを構成する」、「Ｂｉｔｃａｓａウェブサイト」、「Ｂｉｔｃａｓａに関して」、「Ｂｉｔｃａｓａフォルダを開く」、「Ｂｉｔｃａｓａを出る」がコンテクストメニューに示されている。「実装されたファイルを管理する」指令により、図２２を参照して説明するようなユーザインタフェース要素が開く。「Ｂｉｔｃａｓａを構成する」指令により、図２３を参照して説明するようなユーザインタフェース要素が開く。「Ｂｉｔｃａｓａフォルダを開く」指令により、ユーザは、実装ポイントで実装するためにそのユーザに利用可能である１つ又はそれよりも多くのクラウドファイルシステムのリストを閲覧することができる。ユーザは、次に、実装するＣＦＳ及びＣＦＳを実装する実装ポイントを選択することができる。このようにして、ユーザは、各ＣＦＳが常に実装されてなくてもアクセスしたい利用可能な複数のクラウドファイルシステムを有することができる。一実施形態において、この指令により、利用可能なクラウドファイルシステムとのリンクを提示するウェブインタフェースが開く。別の実施形態において、この指令により、選択のためのユーザインタフェースアプリケーションが開く。「Ｂｉｔｃａｓａに関して」指令により、一実施形態において、「Ｂｉｔｃａｓａ」という名称のＣＦＳクライアントモジュールに関する情報が表示される。「Ｂｉｔｃａｓａを出る」指令により、ＣＦＳクライアントモジュールを出るようにＣＦＳクライアントモジュールに指示する。出る前に、ＣＦＳクライアントモジュールは、まだアップロードされていないあらゆるファイルチャンクのアップロードを完了し、かつ全ての実装クラウドファイルシステムを実装解除するなどのいくつかのクリーンアップ機能を実行することができる。
【０１１６】
［００１５９］図２２は、本発明の実施形態によるクライアントデバイスでのクラウドファイルシステムアクセスを管理するためにクラウドファイルシステムクライアントモジュールによって提供されるユーザインタフェースを示している。ユーザインタフェースは、クライアントデバイスに対して既知である、すなわち、現在実装されているか又は以前に実装されたクラウドファイルシステムのリストを示す。ユーザインタフェースは、更に、どのクラウドファイルシステムが現在実装されているか、及びどのクラウドファイルシステムが現在実装されていないかを示す接続された欄内のボタン要素を提示している。この下部は、迅速に各ＣＦＳの実装を切り換える機構をクライアントデバイスのユーザに与えるものである。
【０１１７】
［００１６０］図２３は、本発明の実施形態によるクライアントデバイス上のローカルキャッシュを管理するためにクラウドファイルシステムクライアントモジュールによって提供されるユーザインタフェースを示している。ユーザインタフェースにより、クライアントデバイス上のユーザがクライアントデバイスのストレージシステムのどれだけをクラウドストレージシステムのローカルキャッシュに割り当てるべきであるかを設定する機構が得られる。具体的には、ユーザインタフェースは、クライアントデバイスのストレージシステムのストレージの量に変換されるローカルキャッシュストレージ閾値を百分率として設定するスライダを提示している。ユーザには、変更を保存し、すなわち、キャッシュをクリアし、すなわち、ローカルキャッシュからファイルチャンクを除去し、又は変更を無効にするボタンが更に提示されている。
【０１１８】
［００１６１］図２４は、本発明の実施形態によるクラウドファイルシステム内のフォルダにローカルファイルシステム内のフォルダを変換するためにクラウドファイルシステムクライアントモジュールによって提供されるユーザインタフェースを示している。図２４は、フォルダ、例えば、「ｂｉｔｃａｓａｃｏｍｍｏｎ」のコンテンツを表示するファイルブラウザウインドウ、例えば、ファインダウインドウのスクリーンショットである。ユーザは、「Ｄｏｃｕｍｅｎｔｓ」というフォルダを選択し、そのフォルダ上のコンテクストメニューを呼び出している。現在、ユーザは「クラウド化する」という指令上に移動しており、起動させた時に、「クラウド化する」により、ＣＦＳクライアントモジュールは、上述したようにローカルストレージシステム内のフォルダからクラウドストレージシステム内のフォルダにＤｏｃｕｍｅｎｔｓフォルダを変換することになる。
【０１１９】
［００１６２］図２５は、本発明の実施形態による例示的なコンピュータシステムのブロック図を示している。図２５の例示的なコンピュータシステム２５００を使用して、クライアントデバイス１０１Ａ〜１０１Ｄ、クラウドストレージゲートウェイ２４５、又はクラウドストレージプール２６０内のエンティティを実施することができる。当業者は、これらのデバイスを実施するのに使用される他のコンピュータシステムが、より多く又はより少ない構成要素を有する場合があり、かつ本発明の実施形態に使用することができることを認識するであろう。
【０１２０】
［００１６３］コンピュータシステム２５００は、処理システム２５１５と、電源２５２０と、揮発性メモリ２５２５（例えば、ダブルデータレートランダムアクセスメモリ（ＤＤＲ−ＲＡＭ）、シングルデータレート（ＳＤＲ）ＲＡＭ）と、不揮発性メモリ２５３０（例えば、ハードドライブ、フラッシュメモリ、相変化メモリ（ＰＣＭ））と結合されたバス２５５０を含む。処理システム２５１５は、更に、処理システムキャッシュ２５１０に結合することができる。処理システム２５１５は、揮発性メモリ２５２５及び／又は不揮発性メモリ２５３０から命令を取り出して、上述の作動を実行するための命令を実行することができる。バス２５５０は、上述の構成要素を互いに結合し、更に、ディスプレイコントローラ２５７０、１つ又はそれよりも多くの入出力デバイス２５８０（例えば、ネットワークインターフェイスカード、カーソルコントロール（例えば、マウス、トラックボール、タッチスクリーン、タッチパッドのような）、キーボードなど）、及び任意的に１つ又はそれよりも多くの無線送受信機（例えば、Ｂｌｕｅｔｏｏｔｈ、ＷｉＦｉ、Ｉｉｎｆｒａｒｅｄのような）を結合する。一実施形態において、ディスプレイコントローラ２５７０は、更に、ディスプレイデバイス２５７５に結合される。
【０１２１】
［００１６４］図２６は、本発明の実施形態によるクラウドファイルシステム内のストレージへの変換の前及び後にファイルシステム要素の部分集合を示すユーザインタフェースを示している。図は、ブロック２６００及びブロック２６５０のファイルシステム要素（例えば、フォルダ）の同じ部分集合を示している。相違点は、ブロック２６００では、ファイルシステム要素の全ては、操作されたクライアントデバイスのローカルストレージシステムに格納されるという点である。ブロック２６５０で、フォルダのうちの５つは、図９を参照して上述したように「クラウド化」済みである。これらのフォルダ（例えば、Ｄｏｃｕｍｅｎｔｓ、映画、Ｍｕｓｉｃ、写真、及びソースコード）は、ローカルストレージシステム内のストレージからクラウドストレージシステム内のストレージに変換済みである。上述したように、ユーザには、これらのフォルダがクラウドストレージシステムにあるという表示が提示される（例えば、アイコンは、ユーザに表示を提示するように修正済みである）。更に、フォルダは、クライアントデバイスのオペレーティングシステム及びユーザに至る同じ論理経路に存在する。従って、この情報を要求するあらゆるプログラムは、前と同様に同じ位置でファイルのデータを要求することによってファイルにアクセスするが、この時点で、ＣＦＳクライアントモジュールが、クラウドストレージシステムに格納されたファイルへのアクセスの仲介物として作用する。
【０１２２】
［００１６５］図２７は、本発明の実施形態によるファイルシステムマニフェストの生成を含むクラウドファイルシステムにファイルを保存する方法の流れ図を示している。図２７の実施形態は、図７の実施形態と類似のものである。図７に関して上述したように、チャンクのユーザ不可知暗号化及びファイルマニフェストの生成をブロック２７００、２７１０、２７１５、及び２７２０で行う。更に、ファイルシステムマニフェスト内のファイルマニフェストＩＤ及びファイルマニフェスト暗号化キーの格納をブロック２７２５及び２７３０で図７に説明した方法により行う。更に、ファイルマニフェストをブロック２７３５で図７を参照して説明した同じ方法でクラウドストレージシステムに格納する。
【０１２３】
［００１６６］ブロック２７４０で、ＣＦＳクライアントモジュールは、ファイルマニフェスト暗号化キー、暗号化ファイルマニフェスト、及びファイルマニフェストＩＤを生成する。一実施形態において、これらは、図５を参照して説明したもののようなユーザ不可知暗号化方法で生成される。更に、ＣＦＳクライアントモジュールは、ユーザ不可知非複製化を行ってクラウドストレージシステムに暗号化ファイルシステムマニフェストを格納する。ブロック２７４５で、ＣＦＳクライアントモジュールは、ユーザマニフェストを生成するか、又はユーザマニフェストが存在する場合はユーザマニフェストに追加する。ＣＦＳクライアントモジュールは、ユーザマニフェストにファイルシステムマニフェスト暗号化キー及びファイルシステムマニフェストＩＤを追加する。
【０１２４】
［００１６７］一実施形態において、ＣＦＳクライアントモジュールは、更に、ユーザマニフェストにファイルシステムマニフェストに関連付けられたメタデータ上情報を追加する。メタデータ情報を平文として又は暗号文としてユーザマニフェスト内に格納することができる。メタデータは、クラウドファイルシステムの使用を可能するＣＦＳクライアントモジュールによって使用されるあらゆる情報を含む。例えば、バックアップを目的としてＣＦＳクライアントモジュールによって生成されたファイルマニフェストを含むファイルシステムマニフェストは、ファイルが生成されたコンピュータの固有の識別子を含むことができる。更に、メタデータは、指標情報、すなわち、そのファイルシステムマニフェストのクラウドストレージシステムに格納された指標を識別する情報を含むことができる。メタデータは、ユーザがクラウドファイルシステムを実装した実装ポイントを識別する情報を更に含むことができる。メタデータにより、別のＣＦＳクライアントモジュールは、ユーザが別のクライアントにデバイスにログインした時に、そのクライアントデバイス上のＣＦＳクライアントモジュールがユーザマニフェスト内に列挙されたクラウドファイルシステムを実装する方法を理解するように、どのようにかつどこでクラウドファイルシステムが生成されたかを理解することができる。
【０１２５】
［００１６８］ブロック２７５０で、ＣＦＳクライアントモジュールは、クラウドストレージシステム内への格納のために暗号化されたユーザマニフェストを生成する。ＣＦＳクライアントモジュールは、ユーザに独特のキー又はパスワードでユーザマニフェストを暗号化する。ＣＦＳクライアントモジュールは、ブロック２７６０で、クラウドストレージシステムに暗号化ユーザマニフェストを格納する。暗号化ユーザマニフェストは、クラウドストレージシステムにユーザに関連して格納される。
【０１２６】
［００１６９］図２８は、本発明の実施形態によるクラウドストレージシステムにおいて新しいユーザを生成するためにクラウドファイルシステムクライアントモジュールによって提供されるユーザインタフェースを示している。ユーザインタフェース２８００は、ユーザによって埋められる複数の情報フィールドと共に示されている。例えば、ユーザインタフェース２８００は、名２８０５、姓２８１０、電子メールアドレス２８１５及び確認電子メールアドレス２８２０、パスワード２８２５及び確認パスワード２８３０、チャレンジ質問２８３５、チャレンジ質問答え２８４０、クライアントデバイス２８５０の名称、及びライセンス契約チェックボックス２８５５といったフィールドを提示している。別の実施形態において、ユーザインタフェース２８００は、１つ又はそれよりも多くの付加的なチャレンジ質問とチャレンジ質問答えのフィールド対を提示する。更に、ユーザインタフェース２８００は、「新しいアカウントを作成する」ボタン２８６０及び「無効にする」ボタン２８６５を提示している。
【０１２７】
［００１７０］ユーザがユーザインタフェース２８００内の提示されたフィールドを埋めて、ユーザが「新しいアカウントを作成する」ボタン２８６０をクリックすると、ＣＦＳクライアントモジュールは、クラウドストレージシステムとの新しいユーザを生成する。ＣＦＳクライアントモジュールは、新しいユーザに関連付けるユーザキーを生成する。例えば、ＣＦＳクライアントモジュールは、日時、ユーザインタフェース入力、ファイルシステム情報、又は他のデータ又はこれらの入力の組合せを使用してランダムユーザキーを生成することができる。ユーザキーは、クラウドストレージシステム内への格納のためにユーザのパスワードにより暗号化される。ユーザキーは、クラウドストレージシステム内への格納のために１つ又はそれよりも多くのチャレンジ答えにより更に暗号化される。ＣＦＳクライアントモジュールは、新しいユーザを生成するためにクラウドストレージシステムに新しいユーザ情報を送信する。従って、複数の暗号化されたユーザキー、１つ又はそれよりも多くのチャレンジ質問、及びユーザの情報（電子メール、姓名）が、クラウドストレージシステムに送信される。別の実施形態において、ユーザのパスワードのハッシュが更に送信される。
【０１２８】
［００１７１］新しいユーザが生成されると、クラウドストレージシステムは、共通のファイルシステムマニフェスト及び共通のファイルシステムマニフェストの暗号化キーを送信することができる。例えば、クラウドストレージシステムは、共通のファイルシステムマニフェストに追加することができる複数のパブリックドメイン動画、Ｍｕｓｉｃファイル、写真、本、又はウェブサイトを含むことができる。ＣＦＳクライアントモジュールは、共通のファイルシステムマニフェスト及び共通のファイルシステムマニフェスト暗号化キーを受信して、そのユーザのための生成された新しいユーザマニフェストにその情報を追加する。ＣＦＳクライアントモジュールは、ユーザのキーを用いてユーザマニフェストを暗号化し、クラウドストレージシステムに情報をアップロードする。
【０１２９】
［００１７２］ユーザが新しいクラウドファイルシステムを作成するか、フォルダを仮想化するか、又は既存のクラウドファイルシステム内のデータを変えると、ユーザマニフェストが変わることになる。ユーザマニフェストが変わると、ユーザマニフェストは、ＣＦＳクライアントモジュールによるアップロードの前にユーザのキーを用いて暗号化される。更に、ユーザがファイルシステムを別のユーザと共有することが望ましい場合に、ＣＦＳクライアントモジュールは、ファイルシステムマニフェストエントリで一時的なユーザマニフェストを生成し、他のユーザに既知であるキー又は他のユーザに供給されることになるキーを用いて一時的なユーザマニフェストを暗号化することができる。
【０１３０】
［００１７３］図２９は、本発明の実施形態による仮想フォルダを管理するためにクラウドファイルシステムクライアントモジュールによって提供されるユーザインタフェースを示している。図２９は、５つの仮想フォルダ２９０５Ａ〜Ｅを列挙するユーザインタフェース２９００を有する。各仮想フォルダは、クラウドストレージシステム内に格納されたデータに基づくフォルダ、例えば、ＦＳＭである。ユーザがＣＦＳクライアントモジュールにログインした時に、クラウドストレージシステムは、ＣＦＳクライアントモジュールに暗号化されたタイプでクラウドストレージシステムに常駐するそのユーザのユーザマニフェストを提供する。上述したように、ユーザマニフェストは、ユーザがＣＦＳクライアントモジュールにログインした後にＣＦＳクライアントモジュールに利用可能であるユーザのキーを用いて暗号化される。従って、ＣＦＳクライアントモジュールは、ユーザのキーを用いてユーザマニフェストを暗号解読し、ユーザのクラウドファイルシステム、例えば、ユーザマニフェスト内に含まれたＦＳＭのリストを取り出す。一実施形態において、各ＦＳＭは、そのＦＳＭ及びＦＳＭに関連付けられた指定に向けて指定された実装ポイント又は実装ポイントを含むメタデータに関連付けられる。各同じＦＳＭを実装する複数のクライアントデバイスを有するユーザに関して、そのＦＳＭは、各クライアントデバイスに対して共通である１つの実装ポイントを列挙することができ、又は各クライアントデバイスに対して特定の実装ポイントを含む場合がある。
【０１３１】
［００１７４］更に、各ＦＳＭに関連付けられたメタデータは、起動時にＦＳＭを実装すべきか否かを示すことができる。ＦＳＭの実装を開始すると、ＣＦＳクライアントモジュールは、データが実装ポイントの位置で常駐するので実装ポイントに利用可能でないと決定することができる。ＣＦＳクライアントモジュールは、複数の方法でこの矛盾を調停することができる。最初に、ＣＦＳクライアントモジュールは、自動的に決定されたか又はユーザによって選択された異なる位置でＦＳＭを実装することができる。更に、ＣＦＳクライアントモジュールは、矛盾発生中の位置でＦＳＭ及びクラウドストレージシステムにコンテンツを自動的に追加し、矛盾発生中の位置からデータを除去することができる。次に、ＣＦＳクライアントモジュールは、現在完全に利用可能であるＦＳＭを矛盾発生中の位置に実装することができる。更に、上述の技術を参照すると、ＣＦＳクライアントモジュールは、フォルダの管理を引き継いて、このフォルダをＣＦＳ内に含まれたファイル／フォルダ、及びローカルストレージシステムに含まれたファイル／フォルダの混成フォルダとして提供することができる。
【０１３２】
［００１７５］ユーザインタフェース２９００により、ユーザは、これらの仮想フォルダ及び対応する構成オプションを管理することができる。ユーザは、仮想フォルダ２９０５Ａ〜Ｅの１つを選択し、その仮想フォルダのオプションを管理することができる。ユーザは、ボックス２９１０に検査マークを付けて、起動時にその選択された仮想フォルダを実装することを選択することができる。ボタン２９１５により、ユーザは、フォルダの実装ポイントを移動することができ、一方、テキストボックス２９２０は、選択された仮想フォルダが実装されることになっている実装ポイントを示している。ボタン２９２５により、ユーザは、ローカル格納に向けて仮想フォルダにマーク付けすることができる。上述したように、ＣＦＳクライアントモジュールは、このボタンが押された時に、ローカルキャッシュに向けて仮想フォルダ内のファイルをマーク付けし、すなわち、その仮想フォルダ内のファイルを構成するファイルチャンクが確実にローカルにキャッシュに入れられるようにし、キャッシュ排除を防止するためにファイルを固定することになる。ボタン２９２９により、ユーザは、選択した仮想フォルダを自分のユーザマニフェストから除去することができる。テキスト区域２９３５は、所有者、アクセス許可、フォルダサイズ（仮想フォルダ内のデータ量）、ローカルキャッシュ内の仮想フォルダのデータ量のような選択されたＦＳＭ及びユーザのマニフェストに追加されたデータに関連付けられた複数の情報を表示する。ボタン２９４０により、ユーザは、仮想フォルダを接続してかつ接続を切る、すなわち、ＦＳＭを実装及び実装解除することができる。
【０１３３】
［００１７６］図３０は、本発明の実施形態によるクライアントデバイスのオペレーティングシステムに利用可能スペースの量を与えるためにクラウドファイルシステムクライアントモジュールによって実行される方法を示している。図３０は、２つのクライアントデバイス３００１Ａ及び３００１Ｂを示している。各クライアントデバイス３００１Ａ及び３００１Ｂは、オペレーティングシステム３００５及び３０１５を実行している。クライアントデバイス３００１Ａ及び３００１Ｂに基づいて、これらのオペレーティングシステムは、同じオペレーティングシステム、同じオペレーティングシステムの異なるバージョン、又は異なるオペレーティングシステムとすることができる。図３０は、実装されたＣＦＳ内の利用可能スペースの量を決定する各オペレーティングシステム３００１Ａ及び３００１Ｂを示している。オペレーティングシステム３００５は、クライアントデバイス３００１Ａ上に実装されたＣＦＳ内の利用可能スペースの量の要求３０１２を出す。要求は、クライアントデバイス３００１Ａ上で実行中であるＣＦＳクライアントモジュール３０１０により処理される。ＣＦＳクライアントモジュール３０１０は、ブロック３０３０で、オペレーティングシステムに利用可能スペースを要求するために何のデータタイプを使用しているかを決定する。例えば、オペレーティングシステムは利用可能なスペース量を要求するために、符号なし３２ビット整数（時に長整数と呼ぶ）を使用する場合がある。その場合は、ＣＦＳクライアントモジュール３０３５は、ブロック３０３５で、利用可能な４，２９５，９６７，２９５バイトの最大３２ビット符号なし値を示す全てのビットが１に設定された３２ビット整数を生成する。一実施形態において、ＣＦＳクライアントモジュール３０１０は、具体的にオペレーティングシステム３００５のためにコンパイルされていたものであり、従って、ＣＦＳクライアントモジュール３０１０は、そのオペレーティングシステムのためのコンパイルに基づいて予想されたデータタイプを見ることができる。本発明の他の実施形態において、ＣＦＳクライアントモジュール３０１０は、要求３０１２からデータタイプを決定することができる。ブロック３０３５で最大値を生成すると、この値をオペレーティングシステム３００５に戻す３０２４。
【０１３４】
［００１７７］クライアントデバイス３００１Ｂが、図２０に示すファイルブラウザに対応するオペレーティングシステム３０１５を実行していると仮定すると、オペレーティングシステムは、「Ｃｏｍｍｏｎ  Ｍｏｖｉｅｓ」ＣＦＳの利用可能スペース３０２２の要求を発行済みである。クライアントデバイス３００１Ｂ上で実行中であるクライアントモジュール３０２０は、ブロック３０３０及び３０３５で、データタイプを決定して最大値を生成済みである。図２０では、示された利用可能スペース（図２０の下部）は、１７．５９テラバイトであり、これは、１７，５９２，１８６，０４４，４１６バイト、又は２の４４乗である。従って、ＣＦＳクライアントモジュール３０２０は、３０２４に少なくとも１７．５９テラバイトの最大値を戻している。例えば、ＣＦＳクライアントモジュールは、オペレーティングシステムによってユーザに提示された１７．５９のテラバイトの最大値を戻していた場合があり、又はＣＦＳクライアントモデルは、ユーザに表示する前にオペレーティングシステムによって切り捨てられた１７．５９テラバイトよりも大きい最大値を生成した場合がある。
【０１３５】
［００１７８］本発明の実施形態によるクライアントデバイスのオペレーティングシステムに利用可能スペースの量を与える別のこのような方法は、最大ブロックサイズ及びＣＦＳクライアントモジュールがオペレーティングシステムに戻すことができる利用可能なブロックの最大数を決定することである。従って、利用可能なスペース量を決定する要求があり次第、ＣＦＳクライアントモジュールは、利用可能スペースを示す最大ブロックサイズで可能にされるブロックの最大数の表示を戻す。
【０１３６】
［００１７９］ユーザが、セキュアなウェブ形式でパスワードを入力し、サーバが、ウェブセッション中に表示するのに要求されたデータを迅速に暗号解読する場合に、サーバベースのデータ暗号解読及びアクセスを一時的に可能にすることができる。図３１は、本発明の実施形態によるウェブファイルアクセスポータル及びクライアントデバイスによってアクセスされているクラウドストレージシステムを示している。図３１では、クラウドストレージシステム３１３５は、ネットワーク３１３０と結合される。ネットワーク３１３０は、クライアントデバイス３１０１Ａ〜３１０１Ｂのような複数のデバイス及びウェブファイルアクセスポータル３１７０でのクラウドストレージシステムとの接続性をもたらす。
【０１３７】
［００１８０］クライアントデバイス３１０１Ｂは、本明細書に説明するようにＣＦＳクライアントモジュールを実行するように示されている。クライアントデバイス３１０１Ｂは、クライアントデバイスオペレーティングシステムがプレビュー機能をもたらすと推定すると、クライアントデバイス３１０１Ｂ上に実装されたＣＦＳ内に格納されたファイルをプレビューすることができる。更に、クライアントデバイス３１０１Ｂは、実装されたＣＦＳからファイルを開いて、ＣＦＳからローカルストレージシステムにファイルをコピーすることができる。上述したように、ＣＦＳクライアントモジュールは、メッセージＥとして示された一連の指令をクラウドストレージシステム３１３５に出すことによってクライアントデバイス３１０１Ｂにこの機能性をもたらす。メッセージＥは、ユーザによって要求されたゲット、すなわち、上述のユーザによってアクセスされたデータに基づいてクラウドストレージシステムからチャンクを得るために付与された指令を含む。クライアントデバイス３１０１Ｂ上で実行中であるＣＦＳクライアントモジュールは、予想的ゲット指令、すなわち、ＣＦＳクライアントモジュールがユーザが直ちにアクセスすると断定しているデータに基づいてクラウドストレージシステムからチャンクを得るために付与された指令を更に出すことができる。ＣＦＳクライアントモジュールは、クライアントデバイス３１０１Ｂに特定のチャンク又はチャンクを送るために準備すべきことをクラウドストレージシステムに知らせるプリフェッチ指令をクラウドストレージシステムに更に出すことができる。クライアントデバイス３１０１Ｂ上で実行中であるＣＦＳクライアントモジュールにより出されたゲット指令（ユーザによって要求されたか又は予想的である）によって要求された暗号化されたチャンクを含むメッセージＦが、クラウドストレージシステムからクライアントデバイスまで示されている。
【０１３８】
［００１８１］ウェブファイルアクセスポータル３１７０は、ＣＦＳクライアントモジュールを提供するか否かに関わらず、ユーザがクライアントデバイス３１０１Ａでクラウドファイルシステム内のファイルにアクセスする機構をもたらす。例えば、ユーザは、公開端末又は共有コンピュータに到着して、ＣＦＳクライアントモジュールにログインすることなく又は一部の場合にＣＦＳクライアントモジュールを提供することなく、ＣＦＳから１つ又は複数のファイルにアクセスしたいと思う場合がある。ウェブファイルアクセスポータル３１７０は、ウェブファイルアクセスポータル３１７０にパスワード及びユーザキーを露出するという代償を払ってウェブインタフェースを通じて提示されるウェブファイル管理マネージャを通じてデータにアクセスするオプションをユーザに与える。
【０１３９】
［００１８２］従って、ユーザは、クライアントデバイス３１０１Ａでウェブブラウザセッションを開始して、ウェブファイルアクセスポータル３１７０によって示されたログインページまでナビゲートする。ユーザには、ログイン情報、すなわち、ユーザ名／電子メール及びパスワードでログインするために認証ページが提示されている。更に、ユーザには、ウェブファイルアクセスポータル３１７０がユーザの暗号化ユーザマニフェストにアクセスすることを可能にするために、ウェブポータルの使用にはウェブファイルアクセスポータル３１７０にユーザキー及びパスワードを露出することが必要であることに同意するなどの同意しなければならないサービス条項が提示される場合がある。
【０１４０】
［００１８３］ウェブファイルアクセスポータル３１７０の認証時に、ウェブファイルアクセスポータル３１７０は、クラウドストレージシステム３１３５からユーザのユーザマニフェスト及びユーザの暗号化されたユーザキーを取り出す。ウェブファイルアクセスポータル３１７０は、ユーザのパスワードを使用してユーザのキーを暗号解読する。ウェブファイルアクセスポータル３１７０は、この時点でユーザのキーを用いてユーザのユーザマニフェストを暗号解読することができる。上述したように、ユーザマニフェストは、利用可能なクラウドファイルシステムのリスト、例えば、ＦＳＭのリスト、及び各ＦＳＭを暗号解読する対応する暗号化キーと共に対応するメタデータを含む。ＣＦＳのリストを使用して、ウェブファイルアクセスポータル３１７０は、ユーザがＣＦＳを調査することを可能にするウェブ型ユーザインタフェースを生成し、ユーザがアクセスすることを望むファイルの位置を識別することができる。
【０１４１】
［００１８４］ウェブファイルアクセスポータル３１７０は、バッファ又は仲介物を通じた経路として作用することによってユーザにセキュリティをもたらすが、クラウドストレージシステム３１３５の非暗号化ローカルキャッシュを維持しない。存在するセキュリティ上の懸念事項に基づいて、ウェブファイルアクセスポータル３１７０は、クラウドストレージシステム３１３５の暗号化されたチャンクのローカルキャッシュにならない場合さえある。従って、ウェブファイルアクセスポータル３１７０は、多くの点で修正されたＣＦＳクライアントモジュールであるＣＦＳウェブアクセスモジュールを実行する。ＣＦＳウェブアクセスモジュールは、ユーザによって要求されたゲット及び任意的なプリフェッチ指令を含むメッセージＡをクラウドストレージシステム３１３５に出す。セキュリティモデルに基づいて、ＣＦＳウェブアクセスモジュールは、ウェブファイルアクセスポータル３１７０上に位置付けられたユーザデータの量を最小にしようとして、クラウドストレージシステムに予想的ゲットを出すことさえしない。クライアントデバイス３１０１Ｂへの通信の場合と同様に、クラウドストレージシステム３１３５は、ウェブファイルアクセスポータル３１７０に暗号化されたチャンクを通信する。
【０１４２】
［００１８５］ユーザがＣＦＳ内のフォルダを閲覧すると、最終的には、ユーザは、自分がアクセス又はダウンロードしたいファイルに来ることになる。ウェブファイルブラウザでファイルを選択した時に、ウェブファイルアクセスポータルは、そのＣＦＳのＦＳＭから対応するファイルマニフェストを取り出して、ＦＳＭ内に格納された暗号化キーを用いてＦＭを暗号解読することになる。上述したように、それによってウェブファイルアクセスポータル３１７０にそのファイルを構成するファイルチャンク、対応するメタデータ、及び暗号化キーのリストが与えられることになる。この情報を使用して、ウェブファイルアクセスポータル３１７０は、ウェブファイルアクセスポータル３１７０上でファイルの暗号解読されたバージョンを生成し、アクセスされたファイルのタイプに基づいて内蔵型プレビューを含むことができる情報画面を生成する。情報画面は、更に、ユーザにファイルをダウンロードする機会を与える。従って、クライアントデバイス３１０１Ａは、フォルダ及びファイルデータの要求でウェブファイルアクセスポータル３１７０にいくつかのメッセージＣを出す。ウェブファイルアクセスポータル３１７０は、ウェブファイルマネージャに暗号解読されたフォルダ及びファイル情報を含むメッセージＤを送る。ッセージＤ内の暗号解読されたフォルダ及びファイル情報への言及は、クライアントデバイス３１０１Ａにウェブファイルアクセスポータル３１７０から送信された情報が本発明の実施形態に説明した暗号化原理に従って暗号化されはしないという事実を指すことに注意することが重要である。しかし、ウェブブラウザ及びサーバは、従来の技術（例えば、それらの技術に従ってセキュアな通信をもたらすハイパーテキスト転送プロトコルセキュア（「ＨＴＴＰＳ」））を使用する。
【０１４３】
［００１８６］図３２は、本発明の実施形態によるクラウドストレージシステムにアクセスするウェブファイルアクセスポータルによって提供されるウェブファイルブラウザインタフェースを示している。ウェブファイルアクセスポータルは、インタフェース３２００をユーザに提示する。ユーザインタフェース３２００は、クラウドストレージシステムとのウェブファイルアクセスポータルによるユーザの認証が成功するとユーザに提示される。図３１を参照して上述したように、ウェブファイルアクセスポータルは、ユーザのユーザキーを使用して、ユーザのユーザマニフェスト内に含まれた情報を取り出して暗号解読する。インタフェース３２００は、ヘルプアイコン、メールアイコン、ユーザ管理アイコン及び環境アイコンのような複数のユーザインタフェース要素を含む。更に、ウェブファイルアクセスポータルは、検索ボックス３２３０をユーザに提示する。検索ボックス３２３０内のテキストを入力すると、ウェブファイルアクセスポータルは、ボックス３２３０内に入力された検索基準に適合するファイルを見つけるためにファイル及びサブフォルダを通じて再帰的に反復する。検索結果は、ウェブファイルブラウザ３２４０としてユーザに提示される。ユーザがユーザインタフェース３２００にログインした時に、ユーザには、ウェブファイルブラウザ３２４０でクラウドファイルシステムのリストが提示される。ユーザがＣＦＳを選択すると、ウェブファイルアクセスポータルは、ＣＦＳ内に含まれたファイル及びフォルダを決定し、ウェブファイルブラウザ３２４０で階層的にユーザに提示する。ユーザがウェブファイルブラウザ３２４０でファイルを選択した時に、ウェブファイルアクセスポータルは、クラウドストレージシステムから対応するＦＭを取り出して、ＦＳＭに位置付けられた暗号化キーを使用してＦＭを暗号解読する。ＦＭ内の情報を使用して、ウェブファイルアクセスポータルは、選択されたファイルを構成するクラウドストレージシステムから暗号化ファイルチャンクを取り出して、ＦＭに位置付けられた暗号化キーを使用してそれらのチャンクを暗号解読することができる。この情報を使用して、ウェブファイルアクセスポータルは、ファイルを再構成し、ファイルタイプに対応するプレビュー区域３２２０、ファイル情報領域３２５０、及びダウンロードボタン３２６０を生成する。
【０１４４】
［００１８７］図３３は、本発明の実施形態によるデータ構造間の関係を示すブロック図を示している。図３３は、水平破線よって分離された２つの区分に示している。図３３の上半分又はＡ半分は、クラウドストレージシステム３３１０上に格納されたデータの例示的なチャンクを示し、一方、図３３の下半分、すなわち、Ｂ半分は、それらのチャンクが含むデータ構造及びそれらのデータ構造間の関係を示している。
【０１４５】
［００１８８］Ａ半分において、クライアントデバイス３３０１Ａは、ＣＦＳクライアントモジュールを実行しており、ユーザ３３０２が記録され、３つのＣＦＳが実装される。第１のＣＦＳは、／ｈｏｍｅ／ｄｏｃｓの実装ポイントに実装されたＦＳＭ  Ａとして示されている。第２のＣＦＳは、／ｈｏｍｅ／ｍｏｖｉｅｓの実装ポイントに実装されたＦＳＭ  Ｂとして示されている。第３のＣＦＳは、／ホーム／Ｍｕｓｉｃの実装ポイントに実装されたＦＳＭ  Ｃとして示されている。ユーザマニフェスト３３２０は、３つのＦＳＭチャンク、すなわち、ＦＳＭ  ＣＨＵＮＫ  Ａ  ３３３５Ａ、ＦＳＭ  ＣＨＵＮＫ  Ｂ  ３３３５Ｂ、及びＦＳＭ  ＣＨＵＮＫ  Ｃ  ３３３５Ｃに関連するように示されており、ＦＳＭ  ＣＨＵＮＫ  ３３３５Ａは、３つのＦＭチャンク、すなわち、ＦＭ  ＣＨＵＮＫ  Ａ  ３３４０Ａ、ＦＭ  ＣＨＵＮＫ  Ｂ  ３３４０Ｃ、及びＦＭ  ＣＨＵＮＫ  Ｂ  ３３４０Ｃに関連している。ＦＳＭ  ＣＨＵＮＫ  Ｂ  ３３３５Ｂは、２つのＦＭチャンク、すなわち、ＦＭ  ＣＨＵＮＫ  Ｂ  ３３４０Ｃ及びＦＭ  ＣＨＵＮＫ  Ｄ  ３３４０Ｄに関連している。ＦＳＭ  ＣＨＵＮＫ  Ｃ  ３３３５Ｃは、２つのＦＭチャンク、すなわち、ＦＭ  ＣＨＵＮＫ  Ｅ  ３３４０Ｅ及びＦＭ  ＣＨＵＮＫ  Ｆ  ３３４０Ｆに関連している。ＦＭ  ＣＨＵＮＫ  Ａ  ３３４０Ａは、３つのファイルチャンク、すなわち、ＦＩＬＥ  ＣＨＵＮＫ  Ａ  ３３４５Ａ、ＦＩＬＥ  ＣＨＵＮＫ  Ｂ  ３３４５Ｂ、及びＦＩＬＥ  ＣＨＵＮＫ  Ｃ  ３３４５Ｃに関連している。ＦＳＭ  ＣＨＵＮＫ  Ｂ  ３３４０Ｂは、２つのファイルチャンク、すなわち、ＦＩＬＥ  ＣＨＵＮＫ  Ｃ  ３３４５Ｃ及びＦＩＬＥ  ＣＨＵＮＫ  Ｅ  ３３４５Ｅに関連している。ＦＭ  ＣＨＵＮＫ  Ｃ  ３３４０Ｃは、１つのファイルチャンク又はＦＩＬＥ  ＣＨＵＮＫ  Ｄ  ３３４５Ｄに関連している。ＦＭ  ＣＨＵＮＫ  Ｄ  ３３４０Ｄは、２つのファイルチャンク、すなわち、ＦＩＬＥ  ＣＨＵＮＫ  Ｅ  ３３４５Ｅ及びＦＩＬＥ  ＣＨＵＮＫ  Ｇ  ３３４５Ｇに関連している。ＦＭ  ＣＨＵＮＫ  Ａ３３４０Ｅは、３つのファイルチャンク、すなわち、ＦＩＬＥ  ＣＨＵＮＫ  Ｇ  ３３４５Ｇ、ＦＩＬＥ  ＣＨＵＮＫ  Ｈ  ３３４５Ｈ、及びＦＩＬＥ  ＣＨＵＮＫ  Ｉ  ３３４５Ｉに関連している。ＦＭ  ＣＨＵＮＫ  Ｆ  ３３４０Ｆは、１つのファイルチャンク又はＦＩＬＥ  ＣＨＵＮＫ  Ｆ  ３３４５Ｆに関連している。
【０１４６】
［００１８９］図３３の半分Ａに示すように、いくつかのＦＭチャンク、例えば、ＦＭ  ＣＨＵＮＫ  Ｃ３３４０Ｃは、１つよりも多いＦＳＭに関連している。更に、いくつかのファイルチャンク、例えば、ＦＩＬＥ  ＣＨＵＮＫ  Ｃ、ＦＩＬＥ  ＣＨＵＮＫ  Ｅ、及びＦＩＬＥ  ＣＨＵＮＫ  Ｇは、１つよりも多いＦＭチャンクに関連している。これは、ＦＳＭにより表されるＣＦＳが、ＦＳＭにおいてＦＭにより表される別のＣＦＳと同じファイルを含むことができるという点で説明することができる。この場合に、ＣＦＳ  Ａ及びＢは、両方ともＦＭ  Ｃにより表されるファイルを含む。同じものにおいて、１つよりも多いファイルは、それらが共通データチャンクを含む場合に、同じファイルチャンクを含むことができる。図３３では、ＦＭ  ＣＨＵＮＫ  Ａ  ３３４０Ａ及びＦＭ  ＣＨＵＮＫ  Ｂ  ３３４０Ｂにより表されるファイルは、ＦＩＬＥ  ＣＨＵＮＫ  Ｃ  ３３４５Ｃにより表される共通データチャンクを含む。ＦＭ  ＣＨＵＮＫ  Ｂ  ３３４０Ｂ及びＦＭ  ＣＨＵＮＫ  Ｄ  ３３４０Ｄにより表されるファイルは、ＦＩＬＥ  ＣＨＵＮＫ  Ｅ  ３３４５Ｅにより表される共通データチャンクを含む。ＦＭ  ＣＨＵＮＫ  Ｄ  ３３４０Ｄ及びＦＭ  ＣＨＵＮＫ  Ｅ  ３３４０Ｅにより表されるファイルは、ＦＩＬＥ  ＣＨＵＮＫ  Ｇ  ３３４５Ｇにより表される共通データチャンクを含む。
【０１４７】
［００１９０］半分Ａは、クラウドストレージシステムに格納されたチャンク及びそれらのチャンクがどのように互いに関連しているかを示すが、半分Ｂは、それらのチャンクが構成するデータ構造及びそれらのデータ構造間の関係を示している。半分Ｂにおいて、同じユーザ３３０２が、ＣＦＳクライアントモジュールにログインしており、同じＣＦＳが同じ位置に実装された同じクライアントデバイス３３０１Ａが示されている。ユーザマニフェスト３３２０は、ＦＳＭにより表されるＣＦＳがどのようにその特定のクライアントデバイス３３０１Ａ上でＣＦＳクライアントモジュールにより処理されるべきかを示すクライアントデバイス３３０１Ａに関連付けられたプロフィールを含む。この場合に、ＦＳＭ  Ａは、／ｈｏｍｅ／ｄｏｃｓに実装され、ＦＳＭ  Ｂは、／ｈｏｍｅ／ｍｏｖｉｅｓに実装され、かつＦＳＭ  Ｃは、／ｈｏｍｅ／ｍｕｓｉｃに実装されることを示している。
【０１４８】
［００１９１］図３３の半分Ｂは、３つのＦＳＭ、すなわち、ＦＳＭ  Ａ  ３３５５Ａ、ＦＳＭ  Ｂ  ３３５５Ｂ、及びＦＳＭ  Ｃ  ３３５５Ｃに関連してユーザマニフェスト３３２０を示している。ＦＳＭ  Ａ  ３３５５Ａは、３つのＦＭ、すなわち、ＦＭ  Ａ  ３３６０Ａ、ＦＭ  Ｂ  ３３６０Ｂ、及びＦＭ  Ｃ  ３３６０Ｃに関連している。ＦＳＭ  Ｂ  ３３５５Ｂは、２つのＦＭ、すなわち、ＦＭ  Ｃ  ３３６０Ｃ及びＦＭ  Ｄ  ３３６０Ｄに関連している。ＦＳＭ  Ｃ  ３３５５Ｃは、２つのＦＭ、すなわち、ＦＭ  Ｅ  ３３６０Ｅ及びＦＭ  Ｆ  ３３６０Ｆに関連している。各ＦＭ  Ａ〜Ｆ  ３３６０Ａは、ファイルＡ〜Ｆ  ３３６５Ａに関連している。
【０１４９】
［００１９２］図３４は、本発明の実施形態による２つのクライアントデバイスに使用される単一のユーザマニフェストのデータ構造間の関係を示すブロック図を示している。図３３と同様に、図３４は、同じユーザ３４０２がＣＦＳクライアントモジュールにログインしており、同じＣＦＳが同じ位置に実装された同じクライアントデバイス３４０１Ａを示している。ユーザマニフェスト３４３０は、ＦＳＭにより表されるＣＦＳがどのようにその特定のクライアントデバイス３４０１Ａ上でＣＦＳクライアントモジュールにより処理されるべきかを示すクライアントデバイス３４０１Ａに関連付けられたプロフィール、すなわち、ＰＲＯＦＩＬＥ３４０１Ａを含む。この場合に、ＦＳＭ  Ａは、／ｈｏｍｅ／ｄｏｃｓに実装され、ＦＳＭ  Ｂは、／ｈｏｍｅ／ｍｏｖｉｅｓに実装され、ＦＳＭ  Ｃは、／ｈｏｍｅ／ｍｕｓｉｃに実装されることを示している。ユーザマニフェスト、ＦＳＭ、ＦＭ、及びファイルの図３４に提示するのと同じ例示的な関係が図３４に示されている。
【０１５０】
［００１９３］更に、図３４は、同じユーザ３４０２がログインしている第２のクライアントデバイス３４０１Ｂを示している。ユーザマニフェスト３４３０は、更に、クライアントデバイス３４０１Ｂがどのようにユーザの３４０２のユーザマニフェスト３４３０を利用するように構成されるかを示すプロフィール情報ＰＲＯＦＩＬＥ  ３４０１Ｂを含む。図３４では、クライアントデバイス３４０１Ｂは、クライアントデバイス３４０１Ａによって使用されるように、／ｈｏｍｅ／ｍｏｖｉｅｓの類似の実装ポイントでＦＳＭ  Ｂを実装するように示されている。クライアントデバイス３４０１Ｂは、クライアントデバイス３４０１Ａと異なる実装ポイントでＦＳＭ  Ｃを実装するように示されており、具体的には、ＦＳＭ  Ｃは、／ｓｈａｒｅ／ｍｕｓｉｃの実装ポイントに実装される。図３４に示すように、ユーザ３４０２は、ＦＳＭ  Ａがクライアントデバイス３４０１Ｂ上に実装されないようにユーザマニフェスト３４３０を選択又は構成している。図２９を参照して図示のように、ユーザ３４０２は、管理画面を利用して、その後の時点で望ましい実装ポイントでＦＳＭ  Ａを実装することができる。
【０１５１】
［００１９４］図３５は、本発明の実施形態による２つのクライアントデバイスに使用される２つのユーザマニフェストのデータ構造間の関係を示すブロック図を示している。
【０１５２】
［００１９５］図３３と同様に、図３５は、同じユーザ３５０２がＣＦＳクライアントモジュールにログインしており、同じＣＦＳが同じ位置に実装された同じクライアントデバイス３５０１Ａを示している。ユーザマニフェスト３５３０は、ＦＳＭにより表されるＣＦＳがどのようにその特定のクライアントデバイス３４０１Ａ上でＣＦＳクライアントモジュールにより処理されるべきかを示すクライアントデバイス３５０１Ａに関連付けられたプロフィール、すなわち、ＰＲＯＦＩＬＥ３５０１Ａを含む。この場合に、ＦＳＭ  Ａは、／ｈｏｍｅ／ｄｏｃｓに実装され、ＦＳＭ  Ｂは、／ｈｏｍｅ／ｍｏｖｉｅｓに実装され、ＦＳＭ  Ｃは、／ｈｏｍｅ／ｍｕｓｉｃに実装されることを示している。ユーザマニフェスト、ＦＳＭ、ＦＭ、及びファイルの図３３に提示するのと同じ例示的な関係が図３５に示されている。
【０１５３】
［００１９６］図３５は、更に、ユーザ３５０３がログインしている第２のクライアントデバイス３５０１Ｂを示している。ユーザ３５０３は、プロフィール３５０１Ｂに基づいて、Ｃ：＼ＰＩＣＴＵＲＥＳの実装ポイントでユーザが実装しなければならないＦＳＭ  Ｄ  ３５２５Ｄを有することを示すユーザマニフェスト３５２１を有する。ＦＳＭ  Ｄ  ３５２５Ｄは、４つのＦＭ、すなわち、ＦＭ  Ｄ  ３５３０Ｄ、ＦＭ  Ｇ  ３５３０Ｇ、ＦＭ  Ｈ  ３５３０Ｈ、及びＦＭ  Ｉ  ３５３０Ｉに関連している。ＦＭ  Ｄ，Ｇ〜Ｉ  ３５３０Ｄ，Ｇ〜Ｉは、それぞれ、ファイルＤ，Ｇ〜Ｉ  ３５３５Ｄ，Ｇ〜Ｉに関連している。図３５に示すように、ユーザ３５０２は、ＦＭＤ  ３５３０Ｄにも関連のＦＳＭ  Ｂ  ３５２５Ｂを有する。従って、２つのユーザが独立したＦＳＭを有する場合があるが、それらのＦＳＭは、同一ファイルを含む場合があり、例えば、２つのユーザが同じソースから同じファイルを保存した、すなわち、あり得ない場合があるが、独立して同一ファイルを生成した場合であることが明らかである。ＦＭは、ファイルの名称又は位置ではなく、ファイルのコンテンツに基づいており、従って、２人のユーザは、異なる名称及び／又は対応するＦＳＭ内の異なる位置で同じファイルを有する可能性があるが、同じＦＭをもたらすことに注意すべきである。
【０１５４】
［００１９７］図３５は、ポイントＡで、ＦＳＭ  Ｂ  ３５２５Ｂがユーザ３５０３とユーザ３５０２により共有されることを示している。ユーザ３５０２は、図７を参照して上述したものと同様に、マルチユーザの、すなわち、ライブの共有としてＦＳＭ  Ｂ  ３５２５Ｂを共有することに決定したわけである。従って、ＦＳＭ  Ｂ  ３５２５Ｂにおいてユーザ３５０２又は３５０３よって行われた変更は、クライアントデバイス３３０１Ａ及び３３０１Ｂにおいて反映される。ユーザ３５０３は、ＦＳＭ  Ｂ  ３５２５ＢがＣ：＼ＭＯＶＩＥＳに実装されなければならないことを示すＰＲＯＦＩＬＥ  ３５０３を用いて自分のユーザマニフェスト３５２１にＦＳＭ  Ｂ  ３５２５Ｂを追加している。
【０１５５】
［００１９８］ポイントＢは、ユーザ３５０２がＦＳＭ  Ｃ  ３５２５Ｃのスナップショットをユーザ３５０３と共有することを示している。ＦＳＭ  Ｃ  ３５２５ＣがベースＦＳＭ及びＦＳＭの既存のバージョンを構成する複数の変更で構成されたライブＦＳＭである場合に、クライアントデバイス３５０１Ａ上のＣＦＳクライアントモジュールは、ＦＳＭ  Ｃ  ３５２５Ｃの既存のコピーを生成して、クラウドストレージシステムにそのコピーを格納する。クライアントデバイス３５０１Ａ上で実行中であるＣＦＳクライアントモジュールは、ユーザ３５０３と共有されたＦＳＭ  Ｃ  ３５２５Ｃのコピーを利用するために、クライアントデバイス３５０１Ｂ上で実行中であるＣＦＳクライアントモジュールに向けて、識別情報及び暗号化情報を含む情報を生成する。
【０１５６】
［００１９９］従って、ユーザ３５０３は、ＦＳＭ  Ｃ  ３５２５Ｃのスナップショットを識別する情報を受信して、Ｃ：＼￥ＭＵＳＩＣの実装ポイントでＣＦＳを実装する。ＦＳＭがＦＳＭ  Ｃ  ３５２５Ｃのスナップショットであり、ＦＳＭのライブ共有ではないので、ユーザ３５０２又はユーザ３５０３よって行われたあらゆる変更は、他のユーザのクライアントデバイス上では反映されず、すなわち、変更により、異なるＦＳＭが作成される。従って、ＦＳＭ  Ｃ  ３５２５Ｃのスナップショットは、ファイルＪ  ３５３５Ｊに関連しているＦＭ  Ｊ  ３５３０Ｊの追加を伴うＦＳＭ  Ｅ  ３５２５Ｅように示されている。上述したように、これはスナップショット共有であるので、ＦＭ  Ｊ  ３５３０Ｊの追加は、２つのＦＳＭ  Ｃ及びＥが内部のデータの変更時に発散するのでＦＳＭ  Ｃ  ３５２５Ｃにおいて反映されない。ファイルの追加、ファイルの排除、及びファイルの修正により、全てが異なるＦＳＭをもたらすことが当業者に明らかであろう。
【０１５７】
［００２００］スナップショット共有により、ユーザは、簡単にファイルを別のクラウドストレージシステムユーザと共有することができる。例えば、ファイルを共有する既存のウェブサービスのユーザは、ウェブブラウザセッション又は他のクライアントアプリケーションを開くことをユーザに要求する。ユーザは、次に、ファイルアップロード処理を開始し、ユーザのクライアントデバイス上の望ましいフォルダまでナビゲートしなければならない。ユーザは、次に、望ましいファイルを選択してアップロードを開始する。アップロードが完了した状態で、ユーザは、アップロードされたファイルまでナビゲートするリンクを受信する別のユーザと選択されたファイルを共有することに決定することができ、かつそれらのファイルを閲覧及び／又はダウンロードすることを選択することができる。
【０１５８】
［００２０１］スナップショット共有を用いて、ユーザは、オペレーティングシステムのファイルブラウザを開いて、共有したいファイルを含むフォルダをナビゲートする。ユーザは、望ましいフォルダ上のコンテクストメニューを開始して、フォルダを別のユーザと共有する指令、例えば、図２４に示すコンテクストメニューに示す「共有する．．．」指令を開始する。ユーザは、次に、フォルダを共有するクラウドストレージシステムの別のユーザを選択する。フォルダがＣＦＳの実装ポイントである場合に、ＣＦＳクライアントモジュールは、ＦＳＭ  ＩＤ及びＦＳＭ暗号化キーを他のユーザと共有する。フォルダがＣＦＳの実装ポイントではない場合に、ＣＦＳクライアントモジュールは、選択したフォルダ内に含まれたファイル及びフォルダを含むＦＳＭを生成することができる。一実施形態において、ＣＦＳクライアントモジュールは、フォルダが共有されたユーザに既知であるキー又はフォルダが共有されたユーザよって生成することができるキーを用いてＦＳＭ  ＩＤ及びＦＳＭ暗号化キーを暗号化する。従って、共有されたフォルダの受信側は、指示によってそのユーザのユーザマニフェストに追加されたＦＳＭ  ＩＤ及びＦＳＭ暗号化キーを受信する。受信側は、次に、クライアントデバイス上で共有されたＦＳＭを実装して、オペレーティングシステム内のファイル及びフォルダにアクセスする通常の手段を通じて共有されたファイル及びフォルダにアクセスすることを選択することができる。
【０１５９】
［００２０２］図３６は、本発明の実施形態によりユーザにファイル、フォルダ、及びファイルシステムの復元オプションを提供するためにＣＦＳクライアントモジュールによって提供されるインタフェースを示している。図３６は、ユーザがＣＦＳクライアントモジュールにログインしているクライアントデバイス内に常駐するファイルＡ  ３６０５を含むフォルダＸ  ３６００を含む。ＣＦＳクライアントモジュールは、クライアントデバイスのユーザがフォルダＸ及びファイルＡの変更を保存するとフォルダＸ  ３６００のバージョン及びファイルＡ  ３６０５のバージョンのバックアップを維持するように構成される。ユーザは、選択フォルダ又はファイル上のコンテクストメニュー３６１０を開始して復元指令を選択する。この復元指令は、別々の復元指令画面を起動し、すなわち、バージョンメニュー３６１５を提示することができる。図３６は、半分に分割され、上部Ａは、本発明の実施形態による１組のバージョン化ファイルを示し、下部Ｂは、本発明の実施形態による１組のバージョン化フォルダを示している。
【０１６０】
［００２０３］半分Ａにおいて、図３６は、ＦＯＬＤＥＲ  Ｘ  ＦＳＭ  Ａ  ３６２５Ａに関連付けられたユーザマニフェスト３６２０を示している。ＦＳＭ  Ａ  ３６２５Ａは、ファイルＡに関連付けられたエントリ及びそのファイルの保存バージョンとファイルＡをリンクするメタデータを含む。図３６では、バージョン１〜Ｇは、ＦＭ  Ａ〜ＦＭ  Ｇ  ３６３０Ａ〜Ｇに関連している。各ＦＭ  Ａ〜Ｇ  ３６３０Ａ〜Ｇは、クラウドストレージシステムに格納されたファイルのバージョン、すなわち、ファイルＡバージョン１〜Ｇ  ３６３５Ａ〜Ｇに関連している。
【０１６１】
［００２０４］半分Ｂにおいて、図３６は、ＦＯＬＤＥＲ  Ｘ  ３６００に関連付けられたユーザマニフェスト３６２０を示している。ＦＯＬＤＥＲ  Ｘは、ユーザマニフェスト３６２０においてリンクされたＦＳＭにより表されるＣＦＳである。ユーザマニフェスト３６２０は、ＦＯＬＤＥＲ  Ｘ  ３６００とのリンク及びＦＯＬＤＥＲ  Ｘの保存されたバージョンを表す複数のＦＳＭを含むＦＯＬＤＥＲ  Ｘ  ３６００に関連付けられたメタデータを含む。これは、ＦＯＬＤＥＲ  Ｘ  ＶＥＲＳＩＯＮ  １〜Ｃ  ＦＳＭ  Ａ〜Ｂ  ３６２５  Ａ〜Ｃなどに示されている。各ＦＳＭ  ３６２５Ａは、ＦＯＬＤＥＲ  Ｘのバージョンが保存された時にＦＯＬＤＥＲ  Ｘ  ３６００に存在したＦＭにリンクされる。ＦＯＬＤＥＲ  Ｘ  ＶＥＲＳＩＯＮ  １  ＦＳＭ  Ａ  ３６２５Ａは、３つのファイル、すなわち、各対応するファイル、であるＦＩＬＥ  Ａ  ＶＥＲＳＩＯＮ  １  ３６３５Ａ、ＦＩＬＥ  Ｂ  ＶＥＲＳＩＯＮ  １  ３６３５Ｈ、及びＦＩＬＥ  Ｃ  ＶＥＲＳＩＯＮ  ３  ３６３５Ｉに関連付けられたＦＭ  Ａ  ３６３０Ａ、ＦＭ  Ｈ  ３６３０Ｈ、及びＦＭ  Ｉ  ３６３０Ｉにリンクされる。ＦＯＬＤＥＲ×ＶＥＲＳＩＯＮ  ２  ＦＳＭ  Ｂ  ３６２５Ｂは、２つのファイル、すなわち、各対応するファイルであるＦＩＬＥ  Ｃ  ＶＥＲＳＩＯＮ  ３  ３６３５Ｉ及びＦＩＬＥ  Ａ  ＶＥＲＳＩＯＮ  １  ３６３５Ａに関連付けられたＦＭ  Ｉ  ３６３０Ｉ及びＦＭ  Ｂ  ３６３０Ｂにリンクされる。ＦＯＬＤＥＲ  Ｘ  ＶＥＲＳＩＯＮ  Ｃ  ＦＳＭ  Ｃ  ３６２５Ｃは、３つのファイル、すなわち、各対応するファイルであるＦＩＬＥ  Ｃ  ＶＥＲＳＩＯＮ  ３  ３６３５Ｉ  、ＦＩＬＥ  Ａ  ＶＥＲＳＩＯＮ  ２  ３６３５Ｂ、ＦＩＬＥ  Ａ  ＶＥＲＳＩＯＮ  Ｇ  ３６３５Ｇに関連付けられたＦＭ  Ｉ  ３６３０Ｉ、ＦＭ  Ｂ  ３６３０Ｂ、ＦＭ  Ｇ  ３６３０Ｇにリンクされる。
【０１６２】
［００２０５］従って、同じフォルダ及びファイルの複数のバージョンをＦＳＭ内に列挙して、バージョンを各保存されたファイル及びフォルダに関連付けることができ、更に、ＣＦＳクライアントモジュールは、ファイル又はフォルダが更に別の復元に向けてそこから保存されたクライアントデバイスの識別子を関連付けることができる。
【０１６３】
［００２０６］図３７は、クラウドストレージシステムに格納されたデータへのローカルストレージシステムに格納されたデータの移行を示すブロック図を示している。この図は、２つの半分に分割され、上半分Ａは、両方ともローカルストレージシステムに格納された２つのフォルダを示し、下半分Ｂは、ローカルストレージシステムに格納された１つのフォルダ及びクラウドストレージシステムに格納された１つのフォルダを示している。
【０１６４】
［００２０７］両方の半分において、図３７は、クライアントデバイス上でローカルストレージシステムをもたらすローカルドライブ３７００を示し、ユーザがアクセス可能なフォルダ及びファイルをクライアントデバイスのユーザに提示するローカルファイルシステム３７１０が存在する。両方の半分において、ユーザは、フォルダＡ内のファイル及びフォルダＢ内のファイルへアクセス可能である。
【０１６５】
［００２０８］上半分Ａにおいて、フォルダＡ及びＢのデータは、ローカルドライブ３７００上のローカルストレージシステムに格納される。クライアントデバイス上のＣＦＳクライアントモジュールは、バックアップＦＳＭ  ３７２０を含むユーザマニフェスト３７１５を維持している。ＣＦＳクライアントモジュールは、ローカルストレージシステム内の全てのファイルの自動バックアップを作成し、従って、クラウドストレージシステム３７０５にフォルダＡ及びＢのファイル及びフォルダを追加している。従って、ユーザマニフェスト３７１５は、複数のＦＭ、すなわち、フォルダＡファイルマニフェスト３７３０及びフォルダＢファイルマニフェスト３７３５に関連しているバックアップＦＳＭ  ３７２０に関連しており、各ファイルマニフェストは、対応するファイルＦＩＬＥ  Ａ１〜ＡＸ  ３７４０及びＢ１〜ＢＸ  ３７５０に関連している。
【０１６６】
［００２０９］下半分Ｂにおいて、ＣＦＳクライアントモジュールは、自動バックアップを伴うローカルストレージシステム内のストレージからローカルストレージなしのクラウドストレージシステム３７０５内のストレージにフォルダＢを移行したところであり、フォルダＢの移行は、ドライブスペースがなくなっているローカルドライブ３７００に応答して自動である場合があり、又はユーザによって開始される場合がある。ローカルドライブ３７００は、ローカルストレージシステムを含む区分及びクラウドストレージシステムのローカルキャッシュを含む区分を有する。フォルダＡは、まだローカルストレージシステムにあるので、フォルダＡのデータの全てがローカルドライブ３７００上に常駐する。しかし、フォルダＢは、現在クラウドストレージシステムに格納されたので、ファイルＢ１及びファイルＢ７を含むキャッシュに入れられたデータの一部だけは、クラウドストレージシステムのローカルキャッシュに常駐する。フォルダＢデータのローカルコピーが除去されて、ＣＦＳクライアントモジュールは、その代わりにフォルダＢエントリを含むクラウドＦＳＭ  ３７６０を実装した状態である。クラウドＦＳＭ  ３７６０は、クラウドストレージシステムに常駐していた全てのフォルダＢファイルマニフェスト３７３５を含む。この移行は、極めて迅速でクライアントデバイスのユーザに対して透過的であり、その理由は、フォルダＢを含む情報は、自動バックアップの一部としてクラウドストレージシステム３７０５内に常駐していたからである。
【０１６７】
［００２１０］図３８は、本発明の実施形態によるローカルストレージシステム内のストレージからクラウドストレージシステム内のストレージへの移行の方法のブロック図を示している。ブロック３８００で、ＣＦＳクライアントモジュールは、クラウドストレージシステムにおいてローカルストレージシステムをバックアップする。ブロック３８１０で、ＣＦＳクライアントモジュールは、クラウドストレージシステム内のストレージへのフォルダの移行を開始する。例えば、ＣＦＳクライアントモジュールは、クライアントデバイスがディスクスペース又はその特定のファイルが不足してきているか、又は特定のファイル又は一部のファイルがアクセスがまれであり、かつクライアントデバイス上でこれらのファイルを格納する理由がないことを認識することができる。ブロック３８２０で、ＣＦクライアントモジュールは、ユーザが仮想化選択、すなわち、クラウドストレージシステムに移行するフォルダ又はドライブを選択するか、又はそれ自体で選択される仮想化を生成することを可能にするように決定する。ブロック３８４０で、ＣＦＳクライアントモジュールは、ユーザに供給されたブラウザユーザインタフェース要素から仮想化選択を受信する。ブロック３８４０で、ＣＦＳクライアントモジュールは、ローカルストレージシステムにおいてフォルダ及びドライブに向けて自動的に仮想化選択を決定する。ブロック３８５０で、ＣＦＳクライアントモジュールは、仮想化選択に向けてＦＳＭを生成し、ブロック３８６０でユーザのユーザマニフェストにＦＳＭを追加する。ブロック３８７０で、ＣＦＳクライアントモジュールは、ローカルストレージシステムから仮想化選択を除去し、ブロック３８８０で、仮想化選択が仮想ファイルシステムに位置付けられた位置にＦＳＭを実装する。
【０１６８】
［００２１１］図３９は、本発明の実施形態によるクラウドストレージシステムのデータにアクセスする複数のユーザ及び機械を示すブロック図を示している。図３９は、複数のクラウドファイルシステムを含むクラウドストレージシステム３９００を示している。図３９は、４つのクライアントデバイス３９０５、３９１０、３９１５、及び３９２０を示している。各クライアントデバイスは、ローカルドライブ及びＯＳファイルブラウザを含み、各ローカルドライブは、ローカルストレージシステムのための部分及びクラウドストレージシステムのローカルキャッシュのための部分を含む。
【０１６９】
［００２１２］クライアントデバイス３９０５は、ユーザＸに関連付けられた第１の機械であり、ＯＳファイルブラウザは、ＯＳファイルブラウザＡ〜Ｄ内の４つのフォルダを示している。フォルダＡは、クラウドストレージシステムに格納されておらず、そのフォルダのデータの全ては、ローカルストレージシステムにあるように示されている。フォルダＢ〜Ｄは、クラウドストレージシステム３９００内に格納され、各Ｂ’、Ｃ’、及びＤ’の一部は、クラウドストレージシステムのローカルキャッシュにあるように示されている。フォルダＢ及びフォルダＣは、クライアントデバイス３９０５で始まって、そのデバイスからクラウドストレージシステムに入れられたのである。フォルダＤは、そのプロバイダのユーザの全てにクラウドストレージシステム３９００のサービスプロバイダによって供給された共通データである。従って、フォルダＤは、クラウドストレージシステム３９００から引き抜かれ、更に、フォルダＤ内に含まれているデータの全ては、ＳＩＺＥ  Ｄになる。
【０１７０】
［００２１３］クライアントデバイス３９１０は、ユーザＸに関連付けられた第２の機械であり、ＯＳファイルブラウザは、ＯＳファイルブラウザで２つのフォルダ、すなわち、フォルダＦ及びフォルダＢを示している。フォルダＦは、クラウドストレージシステムに格納されておらず、そのフォルダのデータの全ては、ローカルストレージシステムに示されている。フォルダＢは、クライアントデバイス３９０５で始まり、従って、クラウドストレージシステム３９００から引き抜かれ、そのデータの一部は、クラウドストレージシステムのローカルキャッシュに位置付けられる。クライアントデバイス３９１０は、フォルダＢに情報を更に追加する場合があり、従って、クラウドストレージシステム３９００にそのデータを転送しなければならず、クラウドストレージシステム３９００は、クライアントデバイス３９０５に変更されたＦＳＭを転送する。ローカルドライブは、量ＳＩＺＥ  Ｘ２のデータを格納することができる。
【０１７１】
［００２１４］クライアントデバイス３９１５は、ユーザＸに関連付けられた唯一の機械である。ユーザＹは、ユーザＸに幾分関連している。ＯＳファイルブラウザは、ＯＳファイルブラウザで３つのフォルダ、すなわち、フォルダＧ、フォルダＤ、及びフォルダＣを示している。図３９のポイントＤで、ユーザＸは、フォルダＣをユーザＹと共有していた。従って、フォルダＣは、クラウドストレージシステム３９００からクライアントデバイス３９１５に転送され、そのうちの部分Ｃ’だけが、クライアントデバイス３９１５上のクラウドストレージシステムのローカルキャッシュ内に常駐する。フォルダＧは、クライアントデバイス３９１５のローカルストレージシステム内だけに含まれ、一方、フォルダＤは、全てのユーザに利用可能な共通データとしてクラウドストレージシステム３９００から転送される。ローカルドライブは、量ＳＩＺＥ  Ｙ１のデータを格納することができる。
【０１７２】
［００２１５］クライアントデバイス３９２０は、ユーザＸに関連付けられた唯一の機械である。ユーザＺは、ユーザＸ及びユーザＹに無関係である。ＯＳファイルブラウザは、ＯＳファイルブラウザ内の２つのフォルダ、すなわち、フォルダＨ及びフォルダＤを示している。フォルダＨは、クラウドストレージシステム３９００内のバックアップと共にクライアントデバイス３９２０のローカルストレージシステムに格納される。フォルダＤは、全てのユーザに利用可能な共通データとしてクラウドストレージシステム３９００から転送される。従って、クライアントデバイス３９２０は、クラウドストレージシステムにフォルダＨのデータを転送し、クラウドからフォルダＤのデータを引き抜く。ローカルドライブは、量ＳＩＺＥ  Ｚ１のデータを格納することができる。
【０１７３】
［００２１６］クライアントデバイスのローカルドライブは、ＳＩＺＥ  Ｘ１、ＳＩＺＥ  Ｘ２、ＳＩＺＥ  Ｙ１、及びＳＩＺＥ  Ｚ１と指定された量のデータを格納することができる。データの一部だけがフォルダＤ、フォルダＣ、及びフォルダＢからいずれかの所定の時間に必要であるので、クライアントデバイスは、クラウドストレージシステムに含まれたデータの全てを格納することができる必要はない。従って、たとえユーザＸがフォルダＤ内の全てのデータにアクセス可能であるとしても、ＳＩＺＥ  Ｄは、付加的なデータのスペースを作るためにファイルを手動で除去することなく、ＳＩＺＥ  Ｘ１より大きいとすることができる。実際には、ＳＩＺＥ  Ｄは、ＳＩＺＥ  Ｘ１の１００倍、ＳＩＺＥ  Ｘ１の１０００倍、又はＳＩＺＥ  Ｘ１の１，０００，０００倍とさえすることができる。ＳＩＺＥ  Ｄは、クライアントデバイス３９０５上のオペレーティングシステムがサポートするサイズよりも大きいとすることができる。
【０１７４】
［００２１７］図４０は、本発明の実施形態により取り出されることになるファイルチャンクの優先待ち行列を示すブロック図を示している。図４０では、クライアントデバイスは、クラウドストレージシステム４０１５と結合される。クライアントデバイスは、ＣＦＳ内に格納された２つのファイル、すなわち、ファイルＡ  ４００１及びファイルＢ  ４００２にアクセスしている。ファイルＡ  ４００１は、１組の暗号化ファイルチャンク４００３Ａ〜４００３Ｎで構成される。一方、ファイルＢ  ４００２は、１組の暗号化ファイルチャンク４００４Ａ〜４００４Ｆで構成される。図４０では、クライアントデバイスは、ローカルストレージシステムのための部分及びクラウドストレージシステムのローカルキャッシュのための部分を含むローカルドライブ４０００を有する。クラウドストレージシステムのローカルキャッシュは、４００１からのキャッシュに入れられた暗号化ファイルチャンク、具体的には、チャンク４００３Ａ、４００３Ｂ、４００３Ｃ、４００３Ｅ、４００３Ｇ、及び４００３Ｎを有する。
【０１７５】
［００２１８］ファイルＡ  ４００１の１組の暗号化ファイルチャンク４００３Ａ〜４００３Ｎは、チャンク４００３Ａ−４００３Ｇ及び４００３Ｎを示す簡略化された形に示されているが、チャンク４００３Ｄ及び４００３Ｆは、それらのチャンクがクラウドストレージシステムのローカルキャッシュに存在しないことを示すために影付きである。ファイルＢ  ４００２の１組の暗号化ファイルチャンク４００４Ａ〜４００Ｆの各々は、それらのチャンクの全てがクラウドストレージシステムのローカルキャッシュに存在するというわけではないことを示すために影付きのブロックとして示されている。クラウドストレージシステムは、ファイルＡ  ４００１及びファイルＢ  ４００２の１組の暗号化ファイルチャンク４００３Ａ〜４００３Ｎ及び４００４Ａ〜４００４Ｆを含むように示されている。
【０１７６】
［００２１９］図４０は、２つのファイルアクセスタイムライン、すなわち、ファイルアクセスＡ  ４０２０Ａ及びファイルアクセスＢ  ４０２０Ｂを示している。２つのタイムラインの間に、暗号化ファイルチャンク取り出し待ち行列４０３５は、タイムライン上の時点に対応する待ち行列コンテンツに示されている。ポイント１  ４０４１は、暗号化されたチャンク４００３ＤのアクセスとしてファイルアクセスＡ  ４０２０Ａ上に示されている。クラウドストレージシステムのローカルキャッシュは、暗号化されたチャンク４００３Ｄを含まないので、クライアントデバイス上で実行中であるＣＦＳクライアントモジュールは、暗号化ファイルチャンク取り出し待ち行列４０３５に暗号化されたチャンク４００３Ｄの取り出しを入れることになる。待ち行列の一部として、ＣＦＳクライアントモジュールは、図８を参照して上述したように暗号化チャンク４００３Ｄに向けて優先レベルを決定することになる。例えば、図４０に示すように、待ち行列された暗号化されたチャンクとアクセスされた暗号化されたチャンク間の距離Δを決定することができ、その距離を使用して優先レベルを決定することができる。この場合に、アクセスされた４００３Ｄであるチャンクは、待ち行列された４００３Ｄであるチャンクと同じであり、従って、Δはゼロであり、暗号化されたチャンク４００３Ｄに高い優先順位が与えられる。
【０１７７】
［００２２０］ポイント２  ４０４２は、チャンク４００３Ｅ〜４００３Ｇのアクセスがいつかこれから先に行われるという予想としてファイルアクセスＡ  ４０２０Ａ上に示されており、従って、ＣＦＳクライアントモジュールは、それらの暗号化されたチャンクをキャッシュに入れることを決定する。暗号化されたチャンク４００３Ｅ及び４００３Ｇは、クラウドストレージシステムのローカルキャッシュ内にあるので、ＣＦＳクライアントモジュールは、暗号化ファイルチャンク取り出し待ち行列４０３５に暗号化ファイルチャンク４００３Ｆの取り出しを入れさえすればよい。チャンク４００３Ｆの優先レベルは、アクセスされた４００３Ｄであるチャンクから隔てたΔに基づいている。
【０１７８】
［００２２１］ポイント３  ４０４３は、暗号化されたチャンク４００４ＡのアクセスとしてファイルアクセスＢ  ４０２０Ｂ上に示されている。クラウドストレージシステムのローカルキャッシュは、暗号化されたチャンク４００４Ａを含まないので、クライアントデバイス上で実行中であるＣＦＳクライアントモジュールは、暗号化ファイルチャンク取り出し待ち行列４０３５に暗号化されたチャンク４００４Ａの取り出しを入れることになる。暗号化されたチャンク４００４Ａの取り出しにチャンク４００３Ｆの優先レベルよりも高い優先レベルが与えられ、その理由は、４００４ＡのΔはゼロであり、一方、４００３ＦのΔは２であるからである。
【０１７９】
［００２２２］ポイント４  ４０４４は、チャンク４００４Ｂ〜４００４Ｅのアクセスがいつかこれから先に行われるという予想としてファイルアクセスＢ  ４０２０Ｂ上に示されており、従って、ＣＦＳクライアントモジュールは、それらの暗号化されたチャンクをキャッシュに入れることを決定する。暗号化ファイルチャンク４００４Ｂ〜４００４Ｅのどれもクラウドストレージシステムのローカルキャッシュ内にはないので、ＣＦＳクライアントモジュールは、残りのチャンクの優先レベルと比較して、それらのチャンクの優先レベルに従って暗号化ファイルチャンク取り出し待ち行列４０３５に各暗号化されたチャンク４００４Ｂ〜４００４Ｅの取り出しを入れる。従って、暗号化ファイルチャンク取り出し待ち行列４０３５は、取り出し優先順位の順に列挙された以下のチャンク、すなわち、４００３Ｄ（Δ＝０）、４００４Ａ（Δ＝０）、４００４Ｂ（Δ＝１）、４００３Ｆ（Δ＝２）、４００４Ｃ（Δ＝２）、４００４Ｄ（Δ＝３）、及び４００４Ｅ（Δ＝４）を有する。
【０１８０】
［００２２３］暗号化ファイルチャンクを予測的に取り出すと同時に暗号化ファイルチャンクの検索に優先順位を付けることは、間もなく必要なデータが、後で必要とされるデータの前に利用可能であることを保証すると同時に、ＣＦＳクライアントモジュールが間もなくアクセスされる可能性があるデータを得ることを可能にするという利点を有する。図８を参照して上述したように、従来のファイルチャンクアクセスに基づいて次のファイルチャンクアクセスの追跡に優先順位の基礎を置くなどの他の優先順位システムを実施することができる。
【０１８１】
［００２２４］図４１は、本発明の実施形態による地理的に分散されたクラウドストレージプールを示している。図４１は、ネットワーク４１３０を通じてクラウドストレージシステム４１５０に結合されたクライアントデバイス４１０１Ａを示している。クラウドストレージシステム４１５０は、ネットワーク４１３２、ネットワーク４１０、及びネットワーク４１３２方法を通じて２つのクラウドストレージプール４１６０Ａ及び４１６０Ｂに結合されたクラウドストレージゲートウェイ４１５５を含み、両方とも、インターネットのような公衆ネットワークか、又は専用ネットワークの何らかの集合である。各クラウドストレージプール４１６０Ａ及び４１６０Ｂは、主として特定の地理的領域にサービスを提供するように設計され、この場合に、領域Ａは、クラウドストレージプール４１６０Ａによりサービスを提供され、一方、領域Ｂは、クラウドストレージプール４１６０Ｂによりサービスを提供される。図４１では、クライアントデバイス４１０１Ａは、領域Ａに位置付けられたと考えることができ、クラウドストレージゲートウェイ４１５５は、領域Ａのクライアントデバイスがクラウドストレージシステム４１５０にアクセスするアクセスポイントである。従って、クライアントデバイスがクラウドストレージシステム４１５０にデータを保存すると、クラウドストレージゲートウェイ４１５５は、領域Ａのクラウドストレージプール４１６０Ａにそのデータを保存することになる。
【０１８２】
［００２２５］図４１では、クライアントデバイス４１０１Ａは、ファイルＡに対応する１組の暗号化ファイルチャンクにアクセスしている。ファイルＡは、ファイルＡマニフェスト（ＦＭ−Ａ）４１７０内に列挙された３つのファイルチャンクで構成される。ＦＭ−Ａ  ４１７０は、ファイルＡの一部である各暗号化ファイルチャンクに関して、チャンク識別子（ＣＨＵＮＫ−ＩＤ欄）、チャンク暗号化キー（ＣＨＵＮＫ−ＥＮＣ−ＫＥＹ欄）、及び発信領域（ＯＲＩ−ＲＥＧＩＯＮ）のリストを維持する。ＣＨＵＮＫ−ＩＤ及びＣＨＵＮＫ−ＥＮＣ−ＫＥＹフィールドは、以前の図で上述したようにデータを維持する。ＯＲＩ−ＲＥＧＩＯＮフィールドは、対応するファイルチャンクがクラウドストレージシステムに格納されていた領域の識別子を維持し、従って、クライアントデバイス４１０１Ａがクラウドストレージシステム４１５０にまだ存在しないクラウドストレージシステム４１５０にデータを追加すると、そのデータのＯＲＩ−ＲＥＧＩＯＮは、領域Ａになり、一方、領域Ｂに位置付けられた別のクライアントデバイスのデータは、領域ＢのＯＲＩ−ＲＥＧＩＯＮが説明されることになる。
【０１８３】
［００２２６］この場合に、クライアントデバイス４１０１Ａは、ステップ４１８０でＩＤ−３を通じてチャンクＩＤ−１を取り出している。これは、本質的に、それらのチャンクＩＤ−１〜ＩＤ−３を戻すクラウドストレージゲートウェイ４１５５からの要求であり、この要求は、各チャンクのＯＲＩ−ＲＥＧＩＯＮを含む。クラウドストレージゲートウェイ４１５５は、領域Ａのクラウドストレージプール４１５６内のチャンクのリストを有する。従って、クラウドストレージゲートウェイ４１５５は、チャンクＩＤ−１及びＩＤ−２が領域Ａクラウドストレージプール４１６０Ａ内にあり、一方、チャンクＩＤ−３はないと決定することができる。クラウドストレージゲートウェイ４１５５は、次に、ステップ４１８１で、領域Ａクラウドストレージプール４１６０ＡからチャンクＩＤ−１及びＩＤ２を取り出すことができる。チャンクＩＤ−３の要求内に含まれるＯＲＩ−ＲＥＧＩＯＮを使用して、クラウドストレージゲートウェイ４１５５は、次に、ステップ４１８２で、領域Ｂクラウドストレージプール４１６０ＢからチャンクＩＤ−３を取り出すことができる。チャンクＩＤ−３は、次に、ステップ４１８３で、チャンクＩＤ−３を領域Ａクラウドストレージプール４１６０Ａ内に格納することができる。チャンクＩＤ−１〜ＩＤ−３は、クライアントデバイス４１０１Ａに戻すことができるが、全てのチャンクが、そのクライアントデバイスの地域のクラウドストレージプール内に最初に存在していたというわけではない。これは、その領域において、アクセスされる可能性があるデータ、すなわち、クライアントデバイスにより追加されたデータが、領域のクラウドストレージゲートウェイの近くに位置付けられたように、異なる領域において別々のストレージプール内にクライアントデバイスのデータを格納するという利点を提供する。同時に、クラウドストレージゲートウェイは、それらのチャンクが、そのクラウドストレージゲートウェイの領域内のクライアントデバイスによって要求された場合に他の領域からチャンクを取り出すことを可能にする。従って、様々な領域のクラウドストレージプールが絶えず互いの間にデータを同期させる必要がない。
【０１８４】
［００２２７］図４２は、本発明の実施形態により仮想フォルダのスナップショットにアクセスするためにクラウドファイルシステムクライアントモジュールによって提供されるユーザインタフェースを示している。図４２は、仮想フォルダのコンテンツを表示する同じユーザインタフェースウインドウ４２００Ａ及び４２００Ｂの２台のディスプレイを示している。４２００Ａで、ユーザインタフェースウインドウは、仮想フォルダ、すなわち、ＴＡＸＥＳ２０１０及びＴＡＸＥＳ２０１１という名称の２つのサブフォルダの例示的なコンテンツを含む仮想フォルダの最新のスナップショット（Ｄ）を示している。ユーザインタフェース４２００Ａの底部に沿って、ユーザが実装及びアクセスされるように選択することができる仮想フォルダの４つのスナップショット（Ａ〜Ｄ）を提示するタイムライン４２１０がある。例えば、ＣＦＳクライアントモジュールは、上述したように、仮想フォルダのスナップショットを定期的に作成することができる。別の実施形態において、仮想フォルダは、複数のユーザの間に共有することができ、１人のユーザによる変更により、全ての他のユーザによってアクセス可能であるスナップショットが作成される。ユーザインタフェース４２００Ｂの第２のディスプレイは、いつユーザが仮想フォルダのスナップショットＢを選択したかを示している。この場合に、ＣＦＳクライアントモジュールは、スナップショットＢに対応する仮想フォルダのＦＳＭを実装し、仮想フォルダのコンテンツがユーザに対して更新されるように仮想フォルダの修正が行われたことをオペレーティングシステムに知らせる。この場合に、仮想フォルダのスナップショットＢは、サブフォルダＴＡＸＥＳ２０１１を含まなかったので、サブフォルダＴＡＸＥＳ２０１０のみがスナップショットＢに関して示されている。この特徴により、ユーザは、簡単に仮想フォルダのスナップショットの間でナビゲートし、ファイル及びフォルダの過去のバージョンにアクセス可能である。
【０１８５】
［００２２８］図４３は、本発明の実施形態によりクラウドファイルシステム内のフォルダにローカルファイルシステム内のフォルダを変換するためにクラウドファイルシステムクライアントモジュールによって提供されるユーザインタフェースを示している。ユーザインタフェースウインドウ４３０５は、サブフォルダ「音楽」４３００を含むフォルダのコンテンツを表示するファイルブラウザウインドウ、すなわち、ファインダウインドウである。ユーザインタフェースウインドウ４３１０は、４３１０のインタフェースウインドウにローカルストレージシステムに位置付けられたフォルダをドラッグし、そのフォルダをクラウド化する命令４３１５と共に仮想フォルダ、及び「動画」及び「Ｄｏｃｕｍｅｎｔｓ」のリストを示すＣＦＳクライアントモジュールインタフェースウインドウである。図４３は、ユーザがユーザインタフェースウインドウ４３０５からＣＦＳクライアントモジュールインタフェースウインドウ４３１０までサブフォルダ４３００をドラッグすることを示している。ユーザインタフェースウインドウ４３０５の上でサブフォルダ４３００をリリースすると、ＣＦＳクライアントモジュールは、サブフォルダ４３００が位置した同じ位置に実装された「Ｍｕｓｉｃ」の仮想フォルダ４３２０を作成してサブフォルダ４３００をクラウド化する。従って、「Ｍｕｓｉｃ」の仮想フォルダ４３２０は、ユーザインタフェースウインドウ４３０５、及びサブフォルダ４３００がクラウド化された後にそれらのインタフェースウインドウ内のその存在を示すＣＦＳクライアントモジュールインタフェースウインドウ４３１０内に示されている。
【０１８６】
［００２２９］図４４は、本発明の実施形態による他の実装ファイルシステムとの比較において実装されたクラウドファイルシステムの上述の態様を示している。図４４は、３つの区分に分割された状態に示されており、各区分において、フォルダ、すなわち、フォルダＸがファイルブラウザでユーザに提示されており、フォルダＸは、２つのファイル、すなわち、ファイルＡ及びファイルＢを含む。一番上の区分において、フォルダＸは、クライアントデバイス上のローカルストレージシステムに格納される。真ん中の区分において、フォルダＸは、クライアントデバイス上に実装されたネットワークファイルシステムに格納される。一番下の区分において、フォルダＸは、クラウドファイルシステムに格納される。
【０１８７】
［００２３０］一番上の区分は、クライアントデバイス上でファイル及びフォルダにアクセスするファイルシステム階層を含むルートファイルシステム４４０５Ａを含むローカルストレージシステム４４０５を示している。ファイルシステム階層は、フォルダＸ、ファイルＡ、及びファイルＢのエントリを含む様々なファイル及びフォルダへの経路を列挙する１組のファイルシステムエントリ４４０６で構成される。更に、ルートファイルシステム４４０５Ａは、ファイルＡ及びファイルＢのデータを含む。
【０１８８】
［００２３１］一番上の区分の場合と同様に、真ん中の区分は、クライアントデバイス上でファイル及びフォルダにアクセスするファイルシステム階層を含むルートファイルシステム４４１５Ａを含むローカルストレージシステム４４１５を示している。ファイルシステムエントリ４４１６の中には、フォルダＸが実装されたネットワークファイルシステムであることを示すエントリがある。フォルダＸにアクセスするために、ＮＦＳモジュール４４１０は、ファイルＡ及びファイルを含むＮＦＳのコンテンツを示すファイルシステムエントリを含むネットワーク接続ストレージ４４２０と通信する。ＮＦＳモジュール４４１０は、いつフォルダＸがアクセスされるかを示すＦＳエントリ４４１６に結合された状態に示されており、ＮＦＳモジュール４４１０は、そのアクセスを処理する。従って、クライアントデバイスがフォルダＸを閲覧すると、ＮＦＳモジュール４４１０は、ＮＡＳ４４２０と通信してフォルダＸのコンテンツを決定する。更に、ＮＡＳ４４２０は、ファイルＡ及びファイルを含むデータを含み、従って、ユーザが真ん中の区分のファイルＡ又はファイルＢにアクセスすると、ＮＦＳクライアントモジュール４４１０は、ＮＡＳ４４２０から適切なデータを取り出す。
【０１８９】
［００２３２］一番上の区分の場合と同様に、一番下の区分は、クライアントデバイス上でファイル及びフォルダにアクセスするファイルシステム階層を含むルートファイルシステム４４３０Ａを含むローカルストレージシステム４４３０を示している。ファイルシステムエントリ４４３１の中には、フォルダＸが実装クラウドファイルシステムであることを示すエントリがある。フォルダＸにアクセスするために、ＣＦＳクライアントモジュール４４２５は、クラウドストレージシステム４４３５のローカルキャッシュに向けてローカルストレージシステム４４３０の一部に位置付けられたデータにアクセスし、クラウドストレージシステム４４３５と通信し、かつクラウドストレージシステム４４３５のローカルキャッシュ内にない要求されたデータにアクセスする。図４４では、クラウドストレージシステム４４３５のローカルキャッシュは、フォルダＸに対応するエントリを含むファイルシステムマニフェスト４４３２を含む。ＣＦＳクライアントモジュールは、ユーザがフォルダＸを閲覧した時にＣＦＳクライアントモジュール４４２５がＦＳＭ４４３２から情報を読み取ることによってフォルダＸへのアクセスを与えることを担うので、ＦＳＭ４４３２に結合された状態に示されている。ＦＳＭ４４３２内の情報は、それらのファイルにアクセスするのに使用される情報と共にフォルダＸにおいてファイル及びフォルダを識別し、このようなファイルマニフェストは、各ファイルに対応する。
【０１９０】
［００２３３］更に、クラウドストレージシステム４４３５のローカルキャッシュは、複数のキャッシュに入れられた暗号化ファイルチャンク４４４０Ｄ、４４４０Ａ、及び４４４５Ｎを含む。例えば、ファイルＡが１組の暗号化ファイルチャンク４４４０Ａ〜４４４０Ｆを含み、ファイルＢが１組の暗号化ファイルチャンク４４４５Ａ〜４４４５Ｎを含むと仮定すると、クラウドストレージシステムのローカルキャッシュは、ファイルＡ及びファイルＢの両方の各部分を含む。クラウドストレージシステム４４３５は、ファイルＡの暗号化されたチャンクの全て及びファイルＢの暗号化されたチャンクの全てを含むように示されている。従って、ＣＦＳクライアントモジュールは、クラウドストレージシステムのローカルキャッシュを利用してファイルＡ及びファイルＢの部分にアクセスすることができ、ＣＦＳクライアントモジュールがクラウドストレージシステムのローカルキャッシュに位置しないデータの部分にアクセスする必要がある場合に、ＣＦＳクライアントモジュールは、クラウドストレージシステム４４３５からその情報を取り出すことができる。従って、ＣＦＳクライアントモジュールは、クラウドファイルシステムからデータを格納するスペースをローカルストレージシステムに割り当てる。
【０１９１】
［００２３４］更に、ＣＦＳクライアントモジュールは、ローカルストレージシステムに格納された一番上の区分内のフォルダＸと類似のフォルダをクラウドストレージシステム内への格納に変換する指示を受信する可能性がある。これは、クライアントデバイスの既存のファイルブラウザ及び対応するコンテクストメニューを使用して、又はユーザに達成された第２のユーザインタフェースを用いて達成することができる。ＣＦＳクライアントモジュールは、ローカルストレージシステムに格納されたフォルダの経路のようなフォルダの指示を受信し、クラウドストレージシステム４４３５内にまだ存在しない暗号化ファイルチャンクをクラウドストレージシステム４４３５に送信することを含め、上述したようにそのフォルダをクラウド化することができる。ＣＦＳクライアントモジュールは、クライアントデバイスのオペレーティングシステムに関する限り、ユーザのデータが同じ論理的位置に位置付けられるように、同じ論理経路（同じ位置）にクラウド化されたフォルダとしてユーザに対して変換されたフォルダの図を維持することができる。ＣＦＳクライアントモジュールは、次に、オペレーティングシステムがファイル又はフォルダのデータを要求する時はいつでも、クラウド化されたフォルダ内のデータへのアクセスを与えることを担うものである。
【０１９２】
［００２３５］更に、ＣＦＳクライアントモジュール４４２５での及びクラウドストレージシステム４４３５での最適化により、ＣＦＳクライアントモジュール４４２５は、クラウドファイルシステム内のファイルにアクセスすることに関連付けられた待ち時間を低減することができる。例えば、クラウドストレージシステムのローカルキャッシュ内に暗号化ファイルチャンクをキャッシュに入れることは、それらのファイルチャンクのその後のアクセスにおいて、ＣＦＳクライアントモジュール４４２５がクラウドストレージシステム４４３５と通信する必要のないことを意味する。これらの利得は、ＣＦＳクライアントモジュール４４２５が上述したようにクラウドストレージシステム４４３５から暗号化ファイルチャンクを予測的に取り出すことを可能にすることによって促進される。クラウドストレージシステム４４３５は、更に、指定の暗号化ファイルチャンクがその後の取り出しに利用可能であることを保証するプリフェッチ指令に応答するように最適化することができる。
【０１９３】
［００２３６］本明細書に説明するように、命令は、ある一定の作動実行するように構成された又は所定の機能性を有する特定用途向け集積回路（ＡＳＩＣ）のようなハードウエア特定の構成、又は固定コンピュータ可読媒体において実施されるメモリに格納されたソフトウエア命令を指す場合がある。すなわち、１つ又はそれよりも多くの電子デバイス（例えば、エンドステーション、ネットワーク要素）上に格納及び実行されたコード及びデータを使用して図に示す技術を実施することができる。このような電子デバイスは、固定コンピュータ可読ストレージ媒体（例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、読取専用メモリ、フラッシュメモリデバイス、相変化メモリ）、及び一時的コンピュータ可読通信媒体（例えば、搬送波、赤外線信号、デジタル信号のような電気、光、音響、他の形態の伝播される信号）のようなコンピュータ−可読媒体を使用してコード及びデータを格納して通信する（内部的に及び／又はネットワーク上の他の電子デバイスを用いて）。更に、このような電子デバイスは、典型的には、１つ又はそれよりも多くのストレージデバイス（固定コンピュータ可読ストレージ媒体）、ユーザ入力／出力デバイス（例えば、キーボード、タッチスクリーン、及び／又はディスプレイ）、及びネットワーク接続のような１つ又はそれよりも多くの他の構成要素に結合された１組の１つ又はそれよりも多くのプロセッサを含む。１組のプロセッサ及び他の構成要素の結合は、典型的には、１つ又はそれよりも多くのバス及びブリッジ（バスコントローラととも呼ばれる）を通じたものである。従って、所定の電子デバイスのストレージデバイスは、典型的には、その電子デバイスの１組の１つ又はそれよりも多くのプロセッサ上での実行に向けてコード及び／又はデータを格納する。言うまでもなく、本発明の実施形態の１つ又はそれよりも多くの部分は、ソフトウエア、ファームウエア、及び／又はハードウエアの異なる組合せを使用して実施することができる。
【０１９４】
［００２３７］図中の流れ図は、本発明のある一定の実施形態によって実行される作動の特定の順番を示すが、このような順番は、例示的であることを理解しなければならない（例えば、代替的な実施形態は、異なる順番の作動を提供し、ある一定の作動を結合し、ある一定の作動と重なるなどを行うことができる）。
【０１９５】
［００２３８］本発明をいくつかの実施形態に関して説明したが、当業者は、本発明が説明した実施形態に限定されず、従って、添付の特許請求の範囲の精神及び範囲内で修正及び変更を行って実施することができることを認識するであろう。すなわち、この説明は、制限的ではなく例示的であると考えるものとする。
【符号の説明】
【０１９６】
１０１Ａ〜１０１Ｄ  クライアントデバイス
１３０  ネットワーク
１３５  クラウドストレージシステム
【図１】
2018060573.tif 000003
【図２】
2018060573.tif 000004
【図３】
2018060573.tif 000005
【図４】
2018060573.tif 000006
【図５】
2018060573.tif 000007
【図６】
2018060573.tif 000008
【図７】
2018060573.tif 000009
【図８】
2018060573.tif 000010
【図９】
2018060573.tif 000011
【図１０】
2018060573.tif 000012
【図１１】
2018060573.tif 000013
【図１２】
2018060573.tif 000014
【図１３】
2018060573.tif 000015
【図１４】
2018060573.tif 000016
【図１５】
2018060573.tif 000017
【図１６】
2018060573.tif 000018
【図１７】
2018060573.tif 000019
【図１８】
2018060573.tif 000020
【図１９】
2018060573.tif 000021
【図２０】
2018060573.tif 000022
【図２１】
2018060573.tif 000023
【図２２】
2018060573.tif 000024
【図２３】
2018060573.tif 000025
【図２４】
2018060573.tif 000026
【図２５】
2018060573.tif 000027
【図２６】
2018060573.tif 000028
【図２７】
2018060573.tif 000029
【図２８】
2018060573.tif 000030
【図２９】
2018060573.tif 000031
【図３０】
2018060573.tif 000032
【図３１】
2018060573.tif 000033
【図３２】
2018060573.tif 000034
【図３３】
2018060573.tif 000035
【図３４】
2018060573.tif 000036
【図３５】
2018060573.tif 000037
【図３６】
2018060573.tif 000038
【図３７】
2018060573.tif 000039
【図３８】
2018060573.tif 000040
【図３９】
2018060573.tif 000041
【図４０】
2018060573.tif 000042
【図４１】
2018060573.tif 000043
【図４２】
2018060573.tif 000044
【図４３】
2018060573.tif 000045
【図４４】
2018060573.tif 000046
【手続補正書】
【提出日】平成30年1月5日(2018.1.5)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
クラウドストレージシステムに少なくとも部分的に常駐するクラウドファイルシステムに複数のファイルを保存するためにクライアントデバイスにおいてクラウドストレージクライアントによって実行される方法であって、
前記複数のファイルの各々に対して、
そのファイルを複数のチャンクに分割し、
前記複数のチャンクの各々に対して、
そのチャンクに関するデータに基づいて暗号化キーを生成し、
前記生成された暗号化キーを使用してそのチャンクを暗号化し、
前記暗号化チャンク内のデータに基づいてチャンク識別子を生成し、
前記暗号化キー及び前記チャンク識別子を前記ファイルのマニフェストに含め、
前記クラウドストレージシステムが前記暗号化チャンクを含むか否かを決定し、かつ
前記クラウドストレージシステムに前記暗号化チャンク及びチャンク識別子を該クラウドストレージシステムが該暗号化チャンクを含まないと決定された場合にのみ送信する、
ことを実行し、
前記ファイルマニフェストは、前記複数のチャンクのための前記暗号化キー及び対応するチャンク識別子のリストを含み、
前記ファイルマニフェスト内の前記データに基づいてファイルマニフェスト暗号化キーを生成し、
前記ファイルマニフェスト暗号化キーを使用して前記ファイルマニフェストを暗号化し、
前記暗号化ファイルマニフェスト内のデータに基づいてファイルマニフェスト識別子を生成し、
前記ファイルマニフェスト暗号化キー及び前記ファイルマニフェスト識別子をファイルシステムマニフェストに含め、
前記クラウドストレージシステムが前記暗号化ファイルマニフェストを含むか否かを決定し、かつ
前記クラウドストレージシステムに前記暗号化ファイルマニフェスト及び前記ファイルマニフェスト識別子を該クラウドストレージシステムが該暗号化ファイルマニフェストを含まないと決定された場合にのみ送信する、
ことを実行する段階、
を含み、
前記ファイルシステムマニフェストは、前記ファイルマニフェストのリストを含み、
方法が、更に、
前記ファイルシステムマニフェスト内のデータに基づいてファイルシステムマニフェスト暗号化キーを生成する段階と、
前記生成されたファイルシステムマニフェスト暗号化キーを用いて前記ファイルシステムマニフェストを暗号化する段階と、
前記暗号化ファイルシステムマニフェスト内のデータに基づいてファイルシステムマニフェスト識別子を生成する段階と、
前記クライアントデバイスのユーザに関連付けられて該ユーザが前記クラウドファイルシステムを実装した実装ポイントを示す情報を含むユーザマニフェストに前記ファイルシステムマニフェストキー及び前記ファイルシステムマニフェスト識別子を含める段階と、
前記ユーザ特定のキーを用いて前記ユーザマニフェストを暗号化する段階と、
前記クラウドストレージシステムに前記暗号化ユーザマニフェストを格納する段階と、
を含む、
ことを特徴とする方法。
【請求項２】
各チャンクに対して生成された前記暗号化キーは、そのチャンクをハッシュする結果に基づいていることを特徴とする請求項１に記載の方法。
【請求項３】
各チャンクに対して前記生成されたチャンク識別子は、前記暗号化チャンクをハッシュする結果に基づいていることを特徴とする請求項１に記載の方法。
【請求項４】
前記ファイルシステムマニフェストは、前記クライアントデバイス又は該クライアントデバイスのユーザに固有の暗号化キーを使用して暗号化されることを特徴とする請求項１に記載の方法。
【請求項５】
前記複数のファイルをそれらの複数のファイルを前記クラウドファイルシステムに保存した後に前記クライアントデバイスのローカルストレージシステムから除去する段階、
を更に含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記クラウドストレージシステムが前記暗号化チャンクを含むか否かを決定する段階は、
前記暗号化チャンクに対応する前記チャンク識別子が前記クラウドストレージシステムに存在するか否かを示す情報を要求する質問を該クラウドストレージシステムに送信する段階と、
前記チャンク識別子が前記クラウドストレージシステムに存在するか否かを示す応答を受信する段階と、
を含む、
ことを特徴とする請求項１に記載の方法。
【請求項７】
前記ユーザマニフェストは、指標を識別する情報を更に含むことを特徴とする請求項１に記載の方法。
【請求項８】
クライアントデバイスのプロセッサによって実行された場合に該プロセッサをして請求項１から請求項７のいずれか１項に記載の方法を実行させることになる命令を与える少なくとも１つの固定機械可読ストレージ媒体。
【請求項９】
クラウドファイルシステムに複数のファイルを保存するように構成されたクライアントデバイスであって、
命令を実行するプロセッサと、
前記プロセッサに結合され、実行された時に該プロセッサをして請求項１から請求項７のいずれか１項に記載の方法を実行させる１つ又はそれよりも多くの命令を格納する少なくとも１つの固定機械可読ストレージ媒体と、
を含むことを特徴とするクライアントデバイス。
【外国語明細書】
2018060573000001.pdf