(57)【特許請求の範囲】
【請求項１】
第１の有向非巡回グラフ（ＤＡＧ）をセキュア化する方法において、
前記第１のＤＡＧに第１ノードを生成するための要求を受け取り、該要求は、前記第１ノードの経路を指定するものであり、
前記第１ノードのための第１の独特の暗号的にセキュアなキーを生成し、
前記第１のＤＡＧのための第１ノードを生成し、ノードデータ構造において前記第１ノードのための第１のエントリを追加することを含み、
前記ノードデータ構造における前記第１ノードのための第１のエントリのデータを前記第１ノードのための前記生成された第１の独特の暗号的にセキュアなキーで暗号化し、
前記指定された経路に基づき前記第１のＤＡＧにおける前記生成された第１ノードの親ノードを決定し、
前記親ノードから前記生成された第１ノードへの第１のエッジを前記第１のＤＡＧに生成し、エッジデータ構造における前記第１のエッジのための第１のエントリを追加することを含み、
前記第１のＤＡＧの根ノードから前記親ノードへの経路を進んで、前記親ノードに対して生成された第２の独特の暗号的にセキュアなキーを決定し、
前記第１の独特の暗号的にセキュアなキーを前記第２の独特の暗号的にセキュアなキーを暗号化し、及び
前記第１の独特の暗号的にセキュアなキーを前記第２の独特の暗号的にセキュアなキーで暗号化した結果を前記エッジデータ構造における前記第１のエッジのための第１のエントリに記憶し、前記生成された第１ノードのための前記第１の独特の暗号的にセキュアなキーは、前記生成された第１ノードそれ自体のための前記ノードデータ構造における第１のエントリには記憶されない、
ことを含む方法。
【請求項２】
前記第１ノードのための前記ノードデータ構造における第１のエントリのデータの要求を受け取り、この要求は、前記第１のＤＡＧの根ノードから前記第１のＤＡＧの第１ノードに対する前記第１のＤＡＧの中間ノードへ進む経路を指示するものであり、
前記第１ノードのための前記ノードデータ構造における前記第１のエントリの前記データの要求を行うユーザのユーザキーを決定し、
前記根ノードから前記中間ノードへのエッジのための前記エッジデータ構造における第２のエントリに記憶されたデータを捕獲し、
前記ユーザのユーザキーを使用して前記捕獲されたデータを解読して、前記中間ノードに対する独特の暗号的にセキュアなキーを明らかにし、
前記中間ノードから前記第１ノードへのエッジのための前記エッジデータ構造における第３のエントリに記憶されたデータを捕獲し、
前記中間ノードに対する前記独特の暗号的にセキュアなキーを使用して前記捕獲されたデータを解読して、前記第１ノードに対する前記第１の独特の暗号的にセキュアなキーを明らかにし、
前記第１ノードのための前記ノードデータ構造における第１のエントリに記憶されたデータを捕獲し、及び
前記第１の独特の暗号的にセキュアなキーを使用して前記第１ノードのための前記ノードデータ構造における第１のエントリに記憶されたデータを解読する、
ことを更に含む、請求項１に記載の方法。
【請求項３】
前記第１のＤＡＧから第２ノードを除去するための要求を受け取り、この要求は、前記第２ノードの経路を指定するものであり、
前記第２ノードに対する前記指定された経路に基づき前記第２ノードの親ノードを決定し、
前記第２ノードより下の全てのノード及びエッジを決定し、及び
前記第１のＤＡＧから前記第２ノードを、前記第２ノードの親ノードから前記第２ノードへの前記第１のＤＡＧにおけるエッジを、そして前記第２ノードの経路より下のノード及びエッジを除去する、
ことを更に含む、請求項１に記載の方法。
【請求項４】
第１ノードを移動するための要求を受け取り、この要求は、前記第１ノードが現在位置され及び前記第１ノードを移動すべきである経路を指定するものであり、
前記第１のＤＡＧの根ノードから前記第１ノードへの経路を進んで、前記第１ノードに対して生成された第１の独特の暗号的にセキュアなキーを決定し、
前記与えられた経路に基づき前記第１ノードの新たな親ノードを決定し、
前記新たな親ノードからその移動された位置における前記第１ノードへの第２のエッジを前記第１のＤＡＧに生成し、前記エッジデータ構造における第２のエッジのための第２のエントリを追加することを含み、
前記第１のＤＡＧの根ノードから前記新たな親ノードへの経路を進んで、前記新たな親ノードの第３の独特の暗号的にセキュアなキーを決定し、
前記第１の独特の暗号的にセキュアなキーを前記第３の独特の暗号的にセキュアなキーを暗号化し、
前記第１の独特の暗号的にセキュアなキーを前記第３の独特の暗号的にセキュアなキーで暗号化した結果を、前記エッジデータ構造における第２のエッジのための第２のエントリに記憶し、及び
前記第１ノードの以前の親ノードから前記第１ノードへのエッジを前記第１のＤＡＧにおいて除去する、
ことを更に含む、請求項１に記載の方法。
【請求項５】
第１ユーザの第３ノードを第２ユーザとで共用するための要求を受け取り、該要求は、共有されるべき前記第３ノードを指定するものであり、
前記第１のＤＡＧの根ノードからの経路を進んで、前記第３ノードに対して生成された第３の独特の暗号的にセキュアなキーを決定し、
前記第２ユーザのパブリックキーで暗号化されたメッセージを発生し、このメッセージは、前記第１ユーザが前記第２ユーザとのデータの共有を望むことを示し、且つこのメッセージは、前記第３ノードに対する前記第３の独特の暗号的にセキュアなキー及び前記第３ノードに対するノード識別子を含むものであり、及び
前記発生されたメッセージを前記第２ユーザへ通信する、
ことを更に含む、請求項１に記載の方法。
【請求項６】
前記第１ユーザが前記第３ノードへの前記第２ユーザのアクセスを許可したことを明記する所有権関係を記憶することを更に含む、請求項５に記載の方法。
【請求項７】
前記第２ユーザのパブリックキーで暗号化されたメッセージであって、前記第１ユーザが前記第２ユーザとのデータの共有を望むことを示すメッセージを受け取り、
前記メッセージを前記第２ユーザのプライベートキーで解読し、その解読されたメッセージは、前記第３ノードのノード識別子及び前記第３の独特の暗号的にセキュアなキーを明らかにするものであり、
前記第２ユーザに属する第２のＤＡＧに前記第３ノードを配置するための経路を決定し、
前記第２のＤＡＧにおいて前記第３ノードの親ノードを決定し、
前記第２のＤＡＧの根ノードから前記第２のＤＡＧの第３ノードの親ノードへの経路を進んで、前記第２のＤＡＧにおける第３ノードの親ノードに対する第４の独特の暗号的にセキュアなキーを決定し、
前記第２のＤＡＧにおける前記第３ノードの親ノードから前記第１のＤＡＧにおける前記第３ノードへの第２のエッジを前記第２のＤＡＧに生成し、前記エッジデータ構造における第２のエッジのための第２のエントリを追加することを含み、
前記第３の独特の暗号的にセキュアなキーを前記第４の独特の暗号的にセキュアなキーで暗号化し、及び
前記第３の独特の暗号的にセキュアなキーを前記第４の独特の暗号的にセキュアなキーで暗号化した結果を、前記エッジデータ構造における第２のエッジのための第２のエントリに記憶する、ことを更に含む、請求項５に記載の方法。
【請求項８】
前記経路は、前記第２のＤＡＧの根ノードの下に配置されるように決定される、請求項７に記載の方法。
【請求項９】
前記経路は、前記第２ユーザにより選択される、請求項７に記載の方法。
【請求項１０】
プロセッサにより実行されたときに、前記プロセッサが、
第１の有向非巡回グラフ（ＤＡＧ）に第１ノードを生成するための要求を受け取り、該要求は、前記第１ノードの経路を指定するものであり、
前記第１ノードのための第１の独特の暗号的にセキュアなキーを生成し、
前記第１のＤＡＧのための第１ノードを生成し、ノードデータ構造における第１ノードのための第１のエントリを追加することを含み、
前記ノードデータ構造における第１ノードのための第１エントリのデータを前記第１ノードのための前記生成された第１の独特の暗号的にセキュアなキーで暗号化し、
前記指定された経路に基づき前記第１のＤＡＧにおける前記生成された第１ノードの親ノードを決定し、
前記親ノードから前記生成された第１ノードへの第１のエッジを前記第１のＤＡＧに生成し、エッジデータ構造における第１のエッジのための第１のエントリを追加することを含み、
前記第１のＤＡＧの根ノードから前記親ノードへの経路を進んで、前記親ノードに対して生成された第２の独特の暗号的にセキュアなキーを決定し、
前記第１の独特の暗号的にセキュアなキーを前記第２の独特の暗号的にセキュアなキーを暗号化し、及び
前記第１の独特の暗号的にセキュアなキーを前記第２の独特の暗号的にセキュアなキーで暗号化した結果を前記エッジデータ構造における第１のエッジのための第１のエントリに記憶し、前記生成された第１ノードのための前記第１の独特の暗号的にセキュアなキーは、前記生成された第１ノードそれ自体のための前記ノードデータ構造における第１のエントリには記憶されない、
ことを含むオペレーションを遂行するようにさせるインストラクションを与える非一時的なマシン読み取り可能なストレージ媒体。
【請求項１１】
前記非一時的なマシン読み取り可能なストレージ媒体は、更に、プロセッサにより実行されたときに、前記プロセッサが、次のオペレーション、即ち
前記第１ノードのための前記ノードデータ構造における第１のエントリのデータの要求を受け取り、この要求は、前記第１のＤＡＧの根ノードから前記第１のＤＡＧの第１ノードに対する前記第１のＤＡＧの中間ノードへ進む経路を指示するものであり、
前記第１ノードのための前記ノードデータ構造における前記第１のエントリの前記データの要求を行うユーザのユーザキーを決定し、
前記根ノードから前記中間ノードへのエッジのための前記エッジデータ構造における第２のエントリに記憶されたデータを捕獲し、
前記ユーザのユーザキーを使用して前記捕獲されたデータを解読して、前記中間ノードに対する独特の暗号的にセキュアなキーを明らかにし、
前記中間ノードから前記第１ノードへのエッジのための前記エッジデータ構造における第３のエントリに記憶されたデータを捕獲し、
前記中間ノードに対する前記独特の暗号的にセキュアなキーを使用して前記捕獲されたデータを解読して、前記第１ノードに対する前記第１の独特の暗号的にセキュアなキーを明らかにし、
前記第１ノードのための前記ノードデータ構造における第１のエントリに記憶されたデータを捕獲し、及び
前記第１の独特の暗号的にセキュアなキーを使用して前記第１ノードのための前記ノードデータ構造における第１のエントリに記憶されたデータを解読する、
というオペレーションを遂行するようにさせるインストラクションを与える、請求項１０に記載の非一時的なマシン読み取り可能なストレージ媒体。
【請求項１２】
前記非一時的なマシン読み取り可能なストレージ媒体は、更に、プロセッサにより実行されたときに、前記プロセッサが、次のオペレーション、即ち
前記第１のＤＡＧから第２ノードを除去するための要求を受け取り、この要求は、前記第２ノードの経路を指定するものであり、
前記第２ノードに対する前記指定された経路に基づき前記第２ノードの親ノードを決定し、
前記第２ノードより下の全てのノード及びエッジを決定し、及び
前記第１のＤＡＧから前記第２ノードを、前記第２ノードの親ノードから前記第２ノードへの前記第１のＤＡＧにおけるエッジを、そして前記第２ノードの経路より下のノード及びエッジを除去する、
というオペレーションを遂行するようにさせるインストラクションを与える、請求項１１に記載の非一時的なマシン読み取り可能なストレージ媒体。
【請求項１３】
前記非一時的なマシン読み取り可能なストレージ媒体は、更に、プロセッサにより実行されたときに、前記プロセッサが、次のオペレーション、即ち
第１ノードを移動するための要求を受け取り、この要求は、前記第１ノードが現在位置され及び前記第１ノードを移動すべきである経路を指定するものであり、
前記第１のＤＡＧの根ノードから前記第１ノードへの経路を進んで、前記第１ノードに対して生成された第１の独特の暗号的にセキュアなキーを決定し、
前記与えられた経路に基づき前記第１ノードの新たな親ノードを決定し、
前記新たな親ノードからその移動された位置における前記第１ノードへの第２のエッジを前記第１のＤＡＧに生成し、前記エッジデータ構造における第２のエッジのための第２のエントリを追加することを含み、
前記第１のＤＡＧの根ノードから前記新たな親ノードへの経路を進んで、前記新たな親ノードの第３の独特の暗号的にセキュアなキーを決定し、
前記第１の独特の暗号的にセキュアなキーを前記第３の独特の暗号的にセキュアなキーを暗号化し、
前記第１の独特の暗号的にセキュアなキーを前記第３の独特の暗号的にセキュアなキーで暗号化した結果を、前記エッジデータ構造における第２のエッジのための第２のエントリに記憶し、及び
前記第１ノードの以前の親ノードから前記第１ノードへのエッジを前記第１のＤＡＧにおいて除去する、
というオペレーションを遂行するようにさせるインストラクションを与える、請求項１１に記載の非一時的なマシン読み取り可能なストレージ媒体。
【請求項１４】
前記非一時的なマシン読み取り可能なストレージ媒体は、更に、プロセッサにより実行されたときに、前記プロセッサが、次のオペレーション、即ち
第１ユーザの第３ノードを第２ユーザとで共用するための要求を受け取り、該要求は、共有されるべき前記第３ノードを指定するものであり、
前記第１のＤＡＧの根ノードからの経路を進んで、前記第３ノードに対して生成された第３の独特の暗号的にセキュアなキーを決定し、
前記第２ユーザのパブリックキーで暗号化されたメッセージを発生し、このメッセージは、前記第１ユーザが前記第２ユーザとのデータの共有を望むことを示し、且つこのメッセージは、前記第３ノードに対する前記第３の独特の暗号的にセキュアなキー及び前記第３ノードに対するノード識別子を含むものであり、及び
前記発生されたメッセージを前記第２ユーザへ通信する、
というオペレーションを遂行するようにさせるインストラクションを与える、請求項１１に記載の非一時的なマシン読み取り可能なストレージ媒体。
【請求項１５】
前記非一時的なマシン読み取り可能なストレージ媒体は、更に、プロセッサにより実行されたときに、前記プロセッサが、次のオペレーション、即ち
前記第１ユーザが前記第３ノードへの前記第２ユーザのアクセスを許可したことを明記する所有権関係を記憶する、
というオペレーションを遂行するようにさせるインストラクションを与える、請求項１４に記載の非一時的なマシン読み取り可能なストレージ媒体。
【請求項１６】
前記非一時的なマシン読み取り可能なストレージ媒体は、更に、プロセッサにより実行されたときに、前記プロセッサが、次のオペレーション、即ち
前記第２ユーザのパブリックキーで暗号化されたメッセージであって、前記第１ユーザが前記第２ユーザとのデータの共有を望むことを示すメッセージを受け取り、
前記メッセージを前記第２ユーザのプライベートキーで解読し、その解読されたメッセージは、前記第３ノードのノード識別子及び前記第３の独特の暗号的にセキュアなキーを明らかにするものであり、
前記第２ユーザに属する第２のＤＡＧに前記第３ノードを配置するための経路を決定し、
前記第２のＤＡＧにおいて前記第３ノードの親ノードを決定し、
前記第２のＤＡＧの根ノードから前記第２のＤＡＧの第３ノードの親ノードへの経路を進んで、前記第２のＤＡＧにおける第３ノードの親ノードに対する第４の独特の暗号的にセキュアなキーを決定し、
前記第２のＤＡＧにおける前記第３ノードの親ノードから前記第１のＤＡＧにおける前記第３ノードへの第２のエッジを前記第２のＤＡＧに生成し、前記エッジデータ構造における第２のエッジのための第２のエントリを追加することを含み、
前記第３の独特の暗号的にセキュアなキーを前記第４の独特の暗号的にセキュアなキーで暗号化し、及び
前記第３の独特の暗号的にセキュアなキーを前記第４の独特の暗号的にセキュアなキーで暗号化した結果を、前記エッジデータ構造における第２のエッジのための第２のエントリに記憶する、というオペレーションを遂行するようにさせるインストラクションを与える、請求項１４に記載の非一時的なマシン読み取り可能なストレージ媒体。
【請求項１７】
前記経路は、前記第２のＤＡＧの根ノードの下に配置されるように決定される、請求項１６に記載の非一時的なマシン読み取り可能なストレージ媒体。
【請求項１８】
前記経路は、前記第２ユーザにより選択される、請求項１６に記載の非一時的なマシン読み取り可能なストレージ媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照：本願は、参考としてここに援用する２０１４年５月２２日出願の米国プロビジョナル特許出願第６２／００２，１２７の利益を主張する。
【０００２】
本発明は、有向グラフの分野に関するもので、より詳細には、有向非巡回グラフをセキュア化することに関する。
【背景技術】
【０００３】
コンピュータサイエンスにおけるグラフは、明確に定義され且つ理解されている概念である。有向非巡回グラフ（ＤＡＧ）は、有向サイクルをもたない有向グラフで、ノードと有向エッジの集合で形成され、各エッジはあるノードを別のノードに接続する。ＤＡＧには、根ノードがあり、これは、到来するエッジをもたず且つそこからグラフ内の他の全てのノードに到達するノードである。この根ノードの識別子（ＩＤ）は、質問時にグラフへのエントリポイントとして使用されるべくグラフそれ自体の外部のどこかに記憶される。
【０００４】
グラフ暗号化には、汎用グラフに対して高レベルの融通性を維持することを試みるある程度の変化があるが、有向非巡回グラフ（ＤＡＧ）の場合はそのほとんどが有効でない。例えば、ある質問が望ましい結果のスーパーセットを発生し、結果セットの更なるフィルタリングで偽の肯定を剪定するように共通の質問に基づきインデックスを事前に計算するシステムが存在する。
【０００５】
本発明は、本発明の実施形態を例示するのに使用される以下の説明及び添付図面を参照することで最も良く理解されよう。
【図面の簡単な説明】
【０００６】
【図１】本発明の実施形態によりセキュア化される規範的なＤＡＧを示す。
【図２】１つの実施形態による規範的なセキュアＤＡＧシステムを示すブロック図である。
【図３】１つの実施形態による図１のＤＡＧの規範的なデータ構造体表現を示す。
【図４】１つの実施形態によりセキュアな有向非巡回グラフを使用するサービス又はアカウントに対してユーザが登録するときに遂行される規範的なオペレーションを示すフローチャートである。
【図５】１つの実施形態によりセキュア化されたＤＡＧにノードを追加するときに遂行される規範的なオペレーションを示すフローチャートである。
【図６】１つの実施形態によりセキュア化されたＤＡＧからノードを除去するときに遂行される規範的なオペレーションを示すフローチャートである。
【図７】１つの実施形態により第１ユーザが第２ユーザとでノードを共有する複数ユーザのための複数のセキュア化されたＤＡＧを示す。
【図８】１つの実施形態によるセキュアなＤＡＧを伴うシステムにおいて第１ユーザが第２ユーザとでデータを共有することを選択したときに遂行される規範的なオペレーションを示すフローチャートである。
【図９】１つの実施形態によるセキュアなＤＡＧを伴うシステムにおいて第１ユーザが第２ユーザとでデータを共有することを選択するのに応答して遂行される規範的なオペレーションを示すフローチャートである。
【図１０】１つの実施形態によりノードが共有された後に図７に示されたＤＡＧの規範的なデータ構造体表現を示す。
【図１１】１つの実施形態によりノードが移動された場合の図７に示すセキュア化されたＤＡＧを示す。
【図１２】１つの実施形態により図１１に基づきノードが移動された後に図１に示されたＤＡＧの規範的なデータ構造体表現を示す。
【図１３】１つの実施形態によるセキュア化されたＤＡＧにおいてノードを移動するために遂行される規範的なオペレーションを示すフローチャートである。
【図１４】ある実施形態によるセキュア化されたＤＡＧを横断するための規範的なオペレーションを示すフローチャートである。
【図１５】ある実施形態に使用される規範的なコンピュータシステムを示す。
【発明を実施するための形態】
【０００７】
以下の説明において、多数の特定の細部について述べる。しかしながら、本発明の実施形態は、それらの特定の細部を伴わずに実施されてもよいことを理解されたい。他の例において、この説明の理解を不明瞭にしないために、良く知られた回路、構造及び技術は、詳細に示されていない。当業者であれば、ここに含まれた説明で、不当な実験を伴わずに適切な機能を実現することができよう。
【０００８】
本明細書において「１つの実施形態」「一実施形態」「規範的実施形態」等を言及するときには、その述べられた実施形態が特定の特徴、構造又は特性を含むが、各実施形態が必ずしも特定の特徴、構造又は特性を含むものではないことが示される。更に、そのような句は必ずしも同じ実施形態を指していない。更に、一実施形態に関連して特定の特徴、構造又は特性を記述するときには、明確に記述されるか否かに関わらず、そのような特徴、構造又は特性を他の実施形態に関連して作用させることは当業者の知識内であると想定される。
【０００９】
以下の説明及び特許請求の範囲では、「結合(coupled)」及び「接続(connected)」という語が、その派生語と共に使用される。これらの語は、互いに同意語として意図されないことを理解されたい。「結合」は、互いに物理的又は電気的に直接接触してもしなくてもよい２つ以上の要素が互いに協働し又は相互作用することを表わすのに使用される。「接続」は、互いに結合された２つ以上の要素間の通信の確立を表すのに使用される。
【００１０】
有向非巡回グラフ（ＤＡＧ）をセキュア化する方法及び装置について述べる。１つの実施形態において、ＤＡＧを暗号化するアルゴリズムであって、スタートノード（エントリポイント）、そのノードのためのノードキー、及びグラフを横断する経路が与えられるとＤＡＧを暗号化することができ、それらのキーがＤＡＧのノードではなくＤＡＧのエッジに記憶されるようなアルゴリズムについて述べる。ＤＡＧのノードではなくＤＡＧのエッジにキーを記憶することは、ＤＡＧの効率的な質問を可能にすると共に、変化しない親とのノード関係に影響することなく変化し得る多数の親をノードがもてるようにする。ＤＡＧ内に生成される各ノードに対して独特で且つ暗号的にランダムなキー（ここでは独特なノードキーとも称される）が発生される。ノードキーは、それが発生されたノード及びそのノードを出るエッジを暗号化する。ノードキーは、ノード内に記憶されない。むしろ、ノードキーは、親ノードのノードキーで暗号化されるノードへの到来エッジ（その親ノードからのエッジ）に記憶される。根ノードの場合には、根ノードのノードキーが記憶されるＤＡＧ外部からの暗示的エッジがある。
【００１１】
１つの実施形態において、ここに述べるＤＡＧは、各ノードがフォルダ又はファイルに関するメタデータ（例えば、名前、サイズ、生成タイムスタンプ、変更タイムスタンプ、アクセスコントロールリスト／許可、リードオンリマーカー、隠れたファイルマーカー、他の特定用途データ、等）を表わすファイルシステムを表わしている。ファイルシステムは、クラウドベースのファイルシステムである。ここに述べるセキュアなＤＡＧは、記憶されるファイル及びフォルダに関連したファイルデータ又は繊細な情報にアクセスできないが、メタデータの効率的な管理でクラウドベースファイルシステムのストレージの解決策を実施できるようにする。ＤＡＧの質問は、既に進んだ経路を使用して行われ、これは、ファイルシステムの場合は、ユーザがナビゲートされたフォルダの順序付けされたリストである。
【００１２】
本発明の実施形態を使用すると、ノードを新たな親ノードに接続しながら、おそらく、既存の親への接続を除去するような通常のオペレーション（例えば、ＤＡＧがファイルシステムを表わす場合の移動オペレーション）において効率が発見される。そのような場合には、（新たなノードではなく）単一の新たなエッジを生成するだけでよく、且つ新たな親ノードのノードキーで、移動されるノードのための既存のノードキーの暗号化を遂行するだけでよい。
【００１３】
図１は、本発明の実施形態によりセキュア化される規範的なＤＡＧ１００を示す。ＤＡＧ１００は、多数のノードと、暗示的到来エッジ１４０を有する根ノード１１０でスタートするエッジとを備えている。ＤＡＧ１００は、ユーザに対して発生されるか又はユーザに属する。暗示的エッジ１４０は、ユーザに対して発生される独特の暗号キーを記憶し、これは、図面においてユーザキーＵＫ１と称される。又、このユーザキーＵＫ１は、根ノード１１０のノードキーである。１つの実施形態において、ユーザキーは、ユーザのクレデンシャルで暗号化され（例えば、ユーザのパスワードで暗号化され）、そして根ノード１１０のＩＤに関連してＤＡＧの外部に持続的に記憶される。又、ユーザキーＵＫ１は、根ノード１１０のコンテンツを暗号化するのにも使用される。
【００１４】
根ノード１１０は、ノード１１５及び１２０のための親ノードである。ノード１１５に対して独特の暗号的にセキュアなランダムキー（図中ノードキーＫ１と称される）が発生され、そしてノード１２０に対して独特の暗号的にセキュアなランダムキー（図中ノードキーＫ２と称される）が発生される。ノードキーＫ１は、ノード１１５のコンテンツを暗号化するのに使用され、そしてノードキーＫ２は、ノード１２０のコンテンツを暗号化するのに使用される。ノードキーＫ１は、根ノード１１０のノードキー（ユーザキーＵＫ１）で暗号化され、そしてその結果は、根ノード１１０からノード１１５へのエッジ１４５に記憶される。ノードキーＫ１は、ノードキーＫ１の暗号化バージョン（ユーザキーＵＫ１で暗号化された）以外、その親ノード（根ノード１１０）からそれが生成されたノード（ノード１１５）へのエッジには持続的に記憶されない。ノードキーＫ２は、根ノード１１０のノードキー（ユーザキーＵＫ１）で暗号化され、そしてその結果は、根ノード１１０からノード１２０へのエッジ１５０に記憶される。ノードキーＫ２は、ノードキーＫ２の暗号化バージョン（ユーザキーＵＫ１で暗号化された）以外、その親ノード（根ノード１１０）からそれが生成されたノード（ノード１２０）へのエッジには持続的に記憶されない。
【００１５】
ノード１２０は、ノード１２５及び１３０の親ノードである。ノード１２５に対して独特の暗号的にセキュアなランダムキー（図中ノードキーＫ３と称される）が発生され、そしてノード１３０に対して独特の暗号的にセキュアなランダムキー（図中ノードキーＫ４と称される）が発生される。ノードキーＫ３は、ノード１２５のコンテンツを暗号化するのに使用され、そしてノードキーＫ４は、ノード１３０のコンテンツを暗号化するのに使用される。ノードキーＫ３は、その親ノードのノードキー（ノード１２０のノードキーＫ２）で暗号化され、そしてその結果は、ノード１２０からノード１２５へのエッジ１５５に記憶される。ノードキーＫ３は、ノードキーＫ３の暗号化バージョン（ノードキーＫ２で暗号化された）以外、その親ノード（ノード１２０）からそれが生成されたノード（ノード１２５）へのエッジには持続的に記憶されない。ノードキーＫ４は、その親ノードのノードキー（ノード１２０のノードキーＫ２）で暗号化され、そしてその結果は、ノード１２０からノード１３０へのエッジ１６０に記憶される。ノードキーＫ４は、ノードキーＫ４の暗号化バージョン（ノードキーＫ２で暗号化された）以外、その親ノード（ノード１２０）からそれが生成されたノード（ノード１３０）へのエッジには持続的に記憶されない。
【００１６】
図２は、１つの実施形態による規範的なセキュアＤＡＧシステム２００を示すブロック図である。セキュアＤＡＧシステム２００は、キージェネレータ２１０、セキュアＤＡＧモジュール２２０、データストア２３０、及びＤＡＧ２４０を備えている。セキュアＤＡＧモジュール２２０は、以下に詳細に述べるようにＤＡＧをセキュア化するための多数のオペレーションを遂行する。セキュアＤＡＧモジュール２２０は、以下に詳細に述べる異なる形式のオペレーション（例えば、新たなユーザをシステムに追加し、ノードをＤＡＧに追加し、ノードをＤＡＧから除去し、ＤＡＧ内でノードを移動し、ＤＡＧのノードを別のユーザと共有する）を遂行するための要求２５０を受け取る。幾つかのこれらオペレーションの一部分として、セキュアＤＡＧモジュール２２０は、独特の暗号的にセキュアなキーを発生する（２５５）ようにキージェネレータ２１０に要求する。例えば、以下に詳細に述べるように、セキュアＤＡＧモジュール２２０は、ＤＡＧ２４０において生成されるノードに対して独特の暗号的にセキュアなキーを発生するようにキージェネレータ２１０に要求する。データストア２３０は、ＤＡＧ２４０の根ノードＩＤと、ＤＡＧ２４０に属するユーザのためのユーザキーとを記憶する（２６０）。根ノードＩＤは、ＤＡＧ２４０へのエントリポイントとして働く。セキュアＤＡＧモジュール２２０は、ＤＡＧ２４０を横断するときにデータストア２３０から根ノードＩＤ及びユーザキーを検索する（２６５）。セキュアＤＡＧモジュール２２０は、以下に詳細に述べるようにＤＡＧ２４０に対してオペレーションを遂行する（２７０）（例えば、ＤＡＧ２４０にノードを追加し、ＤＡＧ２４０からノードを除去し、ＤＡＧ２４０内でノードを移動し、ＤＡＧ２４０を横断し、及びＤＡＧ２４０においてノードを共有する）。図２は、単一のＤＡＧ２４０を示しているが、セキュアＤＡＧモジュール２２０により管理される多数の異なるユーザに属する多数の異なるＤＡＧがあってもよいことを理解されたい。
【００１７】
セキュアＤＡＧシステム２００は、ある実施形態ではローカルクライアントコンピューティング装置の一部分である（例えば、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートホン、セットトップボックス、ゲームコンソール、ウェアラブルコンピュータ、等）。他の実施形態では、セキュアＤＡＧシステム２００は、クラウドベースファイルシステムにおいて動作するサーバーコンピューティング装置の一部分であり、クライアントコンピューティング装置がそれらのＤＡＧに対して遂行されるオペレーションの要求を送信しそしてクラウドベースファイルシステムからデータが返送される。
【００１８】
図３は、１つの実施形態によるＤＡＧ１００の規範的なデータ構造体表現を示す。図３に示すデータ構造体表現は例示に過ぎず、そして本発明は、ＤＡＧを表現するための特定のデータ構造体に限定されないことを理解されたい。図３に示すように、ノードテーブル３１０は、ノード識別子のための列と、データのための列とを含む。ノードテーブル３１０の各行は、ＤＡＧ１００におけるノードと、ノードに記憶されたデータを識別する。例えば、ノード１１０は、ユーザキーＵＫ１で暗号化されたデータ（ＵＫ１(Ｄａｔａ)として表わされた）を記憶し、ノード１１５は、ノードキーＫ１で暗号化されたデータ（Ｋ１(Ｄａｔａ)として表わされた）を記憶し、ノード１２０は、ノードキーＫ２で暗号化されたデータ（Ｋ２(Ｄａｔａ)として表わされた）を記憶し、ノード１２５は、ノードキーＫ３で暗号化されたデータ（Ｋ３(Ｄａｔａ)として表わされた）を記憶し、そしてノード１３０は、ノードキーＫ４で暗号化されたデータ（Ｋ４(Ｄａｔａ)として表わされた）を記憶する。エッジテーブル３２０は、エッジの原点を識別する“Ｆｒｏｍ−ＩＤ”列と、エッジの行先を識別する“Ｔｏ−ＩＤ”列と、そのエッジに記憶されるデータを識別するデータ列とを含む。例えば、暗示的エッジ１４０は、暗示的ノードからスタートしてノード１１０へ至りそしてユーザのクレデンシャルで暗号化されたユーザキーＵＫ１を記憶し、エッジ１４５は、ノード１１０からスタートしてノード１１５へ至りそしてユーザキーＵＫ１で暗号化されたノードキーＫ１（ＵＫ１(Ｋ１)として表わされた）を記憶し、エッジ１５０は、ノード１１０からスタートしてノード１１５へ至りそしてユーザキーＵＫ１で暗号化されたノードキーＫ２（ＵＫ１(Ｋ２)として表わされた）を記憶し、エッジ１５５は、ノード１２０からスタートしてノード１２５へ至りそしてノードキーＫ２で暗号化されたノードキーＫ３（Ｋ２(Ｋ３)として表わされた）を記憶し、そしてエッジ１６０は、ノード１２０からスタートしてノード１３０へ至りそしてノードキーＫ２で暗号化されたノードキーＫ４（Ｋ２(Ｋ４)として表わされた）を記憶する。
【００１９】
図４は、１つの実施形態によりセキュアな有向非巡回グラフを使用するサービス又はアカウントに対してユーザが登録するときに遂行される規範的なオペレーションを示すフローチャートである。この及び他のフローチャートのオペレーションは、他の図面の規範的実施形態を参照して説明する。しかしながら、フローチャートのオペレーションは、それら他の図面を参照して述べる以外の本発明の実施形態により遂行することもでき、且つそれら他の実施形態を参照して述べる本発明の実施形態は、フローチャートを参照して述べるものとは異なるオペレーションも遂行できることを理解されたい。
【００２０】
オペレーション４１０において、サービスのためのユーザ名及びパスワードのようなユーザのクレデンシャルを確立することを含む要求がサービスのアカウントを生成するためにユーザから受け取られる。例えば、セキュアＤＡＧモジュール２２０は、ユーザを生成するための要求を受け取る。フローは、次いで、オペレーション４１５へ進み、暗号的に望ましいパブリックキーのタイプに適したユーザに対してパブリック／プライベートキー対が発生される。フローは、次いで、オペレーション４２０へと進み、独特の暗号的にセキュアなランダムキーがユーザのために発生され、これは、ユーザキーと称され、このユーザキーでユーザのクレデンシャルが暗号化される。例えば、セキュアＤＡＧモジュール２２０は、ユーザのためのユーザキーを発生するようにキージェネレータ２１０に要求する。フローは、次いで、オペレーション４２５へ進み、セキュアＤＡＧモジュール２２０は、ユーザのためのＤＡＧ２４０に新たな根ノードを生成し、そして発生されたユーザキーで根ノードのコンテンツを暗号化する。フローは、次いで、オペレーション４３０へ進み、根ノードの識別子がＤＡＧの外部にユーザキーと共に記憶される。例えば、セキュアＤＡＧモジュール２２０は、根ノードＩＤ及びユーザキーをデータストア２３０に記憶させる。
【００２１】
ＤＡＧへのノードの追加
図５は、本発明の一実施形態によりセキュア化されたＤＡＧにノードを追加するときに遂行される規範的なオペレーションを示すフローチャートである。オペレーション５１０において、セキュアＤＡＧモジュール２２０は、ユーザのためのＤＡＧ２４０に新たなノード（Ｎ）を生成するための要求を受け取る。この要求は、新たなノードに対する経路を指定する。例えば、図１を参照すれば、ノード１２０が生成される。要求は、情報の生成又は記憶を希望するユーザに関連してユーザから受け取られる。例えば、ＤＡＧがファイルシステムを表わす実施形態では、ファイルシステムにフォルダ（ディレクトリ）又はファイルを生成するユーザから要求が受け取られる。フローは、次いで、オペレーション５１５へ進む。
【００２２】
オペレーション５１５において、セキュアＤＡＧモジュール２２０は、新たなノード（Ｎ）に対する独特の暗号的にセキュアなキー（Ｋ）を、キージェネレータ２１０の使用を通して生成させる。キージェネレータ２１０は、暗号的にセキュアな擬似ランダム番号発生器である。フローは、次いで、オペレーション５２０へ進み、セキュアＤＡＧモジュール２２０は、新たなノード（Ｎ）に対してＤＡＧ２４０にノードを生成する。例えば、図１に関して、図３のノードテーブル３１０にエントリを追加することを含むノード１２０が生成される。
【００２３】
フローは、次いで、オペレーション５２５へ進み、セキュアＤＡＧモジュール２２０は、追加されるノード（Ｎ）のコンテンツを、ノード（Ｎ）に対して生成されたキー（Ｋ）で暗号化する。例えば、図１に関して、ノード１２０のコンテンツが、ノード１２０に対して発生されたノードキーＫ２で暗号化される。暗号化されたノードコンテンツは、ノードに記憶され、ノードを暗号化及び解読するためのキーは、ノードに記憶されない。
【００２４】
フローは、次いで、オペレーション５３０へ進み、セキュアＤＡＧモジュール２２０は、要求において与えられる経路に基づき新たに追加されるノード（Ｎ）の親ノード（ＰＮ）を決定する。例えば、図１に関して、ノード１２０の親ノードは、根ノード１１０である。フローは、次いで、オペレーション５３５へ進む。
【００２５】
オペレーション５３５において、セキュアＤＡＧモジュール２２０は、新たに生成されたノード（Ｎ）の親ノード（ＰＮ）から新たに生成されたノード（Ｎ）へのエッジをＤＡＧ２４０に生成する。例えば、図１に関して、根ノード１１０からノード１２０へのエッジ１５０が生成され、そして生成されたエッジに対してエッジテーブル３２０にエントリが追加される。
【００２６】
フローは、次いで、オペレーション５４０へ進み、セキュアＤＡＧモジュール２２０は、根ノードから新たに生成されたノード（Ｎ）の親ノード（ＰＮ）への経路を進んで、親ノード（ＰＮ）のノードキー（ＰＫ）を決定する。親ノード（ＰＮ）のノードキーは、その親ノードからそれ自体へのエッジに暗号化形態で（その親ノードのノードキーで暗号化されるか、又は親ノードが根ノードの場合にはユーザキーで暗号化されて）記憶される。例えば、図１を参照すれば、１２０の親ノード（根ノード１１０）のノードキーは、エッジ１４０に暗号形態で（ユーザキーＵＫ１で暗号化されて）記憶される。経路を進むときに遂行されるオペレーションは、図９に関して詳細に述べる。フローは、オペレーション５４０からオペレーション５４５へ進む。
【００２７】
オペレーション５４５において、セキュアＤＡＧモジュール２２０は、新たに生成されたノード（Ｎ）に対するノードキー（Ｋ）を親ノード（ＰＮ）のノードキー（ＰＫ）で暗号化する。例えば、図１を参照すれば、ノード１２０のノードキーＫ２は、その親ノードのノードキー（ユーザキーＵＫ１）で暗号化される。
【００２８】
フローは、次いで、オペレーション５５０へ進み、セキュアＤＡＧモジュール２２０は、新たに生成されたノード（Ｎ）のノードキー（Ｋ）を親ノード（ＰＮ）のノードキー（ＰＫ）で暗号化した結果を、親ノード（ＰＮ）から新たに生成されたノード（Ｎ）へのエッジに記憶する。例えば、図１を参照すれば、エッジ１５０は、ノード１２０のノードキーＫ２をユーザキーＵＫ１で暗号化した結果を記憶する。
【００２９】
ＤＡＧからのノードの除去
図６は、本発明の一実施形態によりセキュア化されたＤＡＧからノードを除去するときに遂行される規範的なオペレーションを示すフローチャートである。オペレーション６１０において、セキュアＤＡＧモジュール２２０は、ＤＡＧ２４０からノード（Ｎ）を除去するための要求を受け取る。この要求は、除去されるノード（Ｎ）の経路を指定する。この要求は、ユーザがグラフから情報を削除することを望むときに受け取られる。例えば、ＤＡＧ２４０がファイルシステムを表わす実施形態では、この要求は、ファイルシステムにおいてフォルダ又はファイルを削除することを望むユーザから受け取られる。フローは、次いで、オペレーション６１５へ進む。
【００３０】
オペレーション６１５において、セキュアＤＡＧモジュール２２０は、与えられた経路に基づき、除去されるノード（Ｎ）の親ノード（ＰＮ）を決定する。親ノードがない（即ち、除去されるノードが根ノードである）場合には、全てのノード及びエッジがＤＡＧから除去される。しかしながら、親ノードがある場合には、あるノード及びエッジだけがＤＡＧから除去される。フローは、次いで、オペレーション６２０へ進み、セキュアＤＡＧモジュール２２０は、ノード（Ｎ）より下のノード及びエッジ（除去されるノードの子）がもしあれば、その全てを決定する。例えば、図１のノード１２０が除去される場合には、セキュアＤＡＧモジュール２２０は、ノード１２５及び１３０並びにエッジ１５５及び１６０がノード１２０の下にあることを決定する。フローは、次いで、オペレーション６２５へ進み、セキュアＤＡＧモジュール２２０は、ＤＡＧ２４０から次のものを除去する。即ち、ＤＡＧ２４０からのノード（Ｎ）、親ノード（ＰＮ）からノード（Ｎ）へのエッジ、及びノード（Ｎ）の経路の下のノード及びエッジ。
【００３１】
別のユーザとのノードの共有
ある実施形態では、ユーザは、彼らのノードを別のユーザと共有することができる。例えば、セキュアなＤＡＧがクラウドベースファイルシステムを表わす実施形態では、第１ユーザは、１人以上の他のユーザと共有するためにそれらのファイルシステム（例えば、ディレクトリ又はファイル）において任意のポイントを選択できる。ある実施形態では、共有ファイル又はフォルダを受け取るユーザは、共有ファイル又はフォルダをそれら自身のクライアント装置にマウントし、そしてそれらのオペレーティングシステム内のファイル及びフォルダにアクセスする通常の仕方を通して共有ファイル又はフォルダにアクセスすることを選択してもよい。ある実施形態では、共有を行うユーザは、共有に対するアクセス制限をセットしてもよく、そして異なるユーザに対して異なるものでよい（例えば、リードオンリ、変更、完全制御、等）。
【００３２】
図７は、本発明の実施形態により第１ユーザが第２ユーザとでノードを共有する複数ユーザのための複数のセキュア化されたＤＡＧを示す。図７は、図１に示して説明したセキュアなＤＡＧ１００と、第２ユーザに属するセキュアなＤＡＧ７００とを示す。セキュアなＤＡＧ７００は、セキュアなＤＡＧ７００に属するユーザに対して発生される独特の暗号キーを記憶する暗示的到来エッジ７２０を有する根ノード７１０を備え、その独特の暗号キーは、図７ではユーザキーＵＫ２と称され、セキュアなＤＡＧ７００に属するユーザのクレデンシャルで暗号化される。又、このユーザキーＵＫ２は、根ノード７１０のノードキーでもある。１つの実施形態において、ユーザキーＵＫ２は、第２ユーザのクレデンシャルで暗号化され（例えば、ユーザのパスワードで暗号化され）、そして根ノード７１０のＩＤに関連してＤＡＧ７００の外部に持続的に記憶される。又、ユーザキーＵＫ２は、根ノード７１０のコンテンツを暗号化するのにも使用される。根ノード１１０は、ノード７１５の親ノードである。ノード７１５に対して独特の暗号的にセキュアなランダムキーが発生される（図中ノードキーＫ５と称される）。ノードキーＫ５は、ノード７１５のコンテンツを暗号化するのに使用される。ノードキーＫ５は、根ノード７１０のノードキー（ユーザキーＵＫ２）で暗号化され、そしてその結果は、根ノード７１０からノード７１５へのエッジ７２５に記憶される。ノードキーＫ５は、ノードキーＫ５の暗号化バージョン（ユーザキーＵＫ２で暗号化された）以外、その親ノード（根ノード７１０）からそれが生成されたノード（ノード７１５）へのエッジには持続的に記憶されない。
【００３３】
あるポイントで、セキュアなＤＡＧ１００に属するユーザは、ノード１２０に関連したデータ（及び本来的にノード１２０の子ノードのデータ）を、セキュアなＤＡＧ７００に属するユーザと共有することを選択する。図８は、１つの実施形態によるセキュアなＤＡＧを伴うシステムにおいて第１ユーザが第２ユーザとでデータを共有することを選択したときに遂行される規範的なオペレーションを示すフローチャートである。オペレーション８１０において、セキュアＤＡＧモジュール２２０は、第１ユーザ（ユーザ１）のノード（Ｎ）を第２ユーザ（ユーザ２）と共有する要求を受け取る。この要求は、共有すべきノードを指定する。図７を参照すれば、セキュアなＤＡＧ１００に属するユーザは、ノード１２０のデータを、セキュアなＤＡＧ７００に属するユーザと共有することを要求している。フローは、次いで、オペレーション８１５へ進む。
【００３４】
オペレーション８１５において、セキュアＤＡＧモジュール２２０は、根ノードから、共有されるノード（Ｎ）へのＤＡＧ内の経路を進み、ノード（Ｎ）のノードキー（Ｋ）を決定する。共有されるノード（Ｎ）のノードキー（Ｋ）は、その親ノードからの到来エッジに暗号化状態で（親ノードのノードキーで暗号化されるか又は親ノードが根ノードの場合にはユーザキーで暗号化されて）記憶される。例えば、図１を参照すれば、ノード１２０のノードキーは、エッジ１５０に暗号化形態で（根ノード１１０のノードキーで暗号化されて）記憶される。フローは、次いで、オペレーション８２０へ進む。
【００３５】
オペレーション８２０において、セキュアＤＡＧモジュール２２０は、第１ユーザが第２ユーザとのデータの共有を望むことを指示するメッセージを第２ユーザ（共有データを受け取ることが意図されたユーザ）に対して発生する。このメッセージは、共有されるノード（Ｎ）のノードキー（Ｋ）及び共有されるノード（Ｎ）のノードＩＤを第２ユーザのパブリックキーで暗号化したものを含む（例えば、メッセージは、暗号化の結果（［Ｋ，ＮｏｄｅＩＤ＿Ｎ］，Ｐｕｂｌｉｃ＿Ｋｅｙ＿Ｕｓｅｒ２）を含む）。フローは、次いで、オペレーション８２５へ進み、セキュアＤＡＧモジュール２２０は、メッセージを第２ユーザに通信するようにさせる。例えば、ｅ−メール又は他の通信が第２ユーザへ送信され、第２ユーザは、次いで、共有を受け容れるべきかどうか選択する。
【００３６】
フローは、次いで、オペレーション８３０へ進み、これは、ある実施形態では、任意であり、セキュアＤＡＧモジュール２２０は、第１ユーザがノード（Ｎ）への第２ユーザアクセスを許容したことを指定する所有権関係を記憶するようにさせる。ある実施形態では、第１ユーザは、第２ユーザに与えられたノード（Ｎ）へのアクセスを取り消してもよい。
【００３７】
図９は、１つの実施形態によるセキュアなＤＡＧを伴うシステムにおいて第１ユーザが第２ユーザとでデータを共有することを選択するのに応答して遂行される規範的なオペレーションを示すフローチャートである。オペレーション９１０において、セキュアＤＡＧモジュール２２０は、第２ユーザのパブリックキーで暗号化されたメッセージであって、第１ユーザが第２ユーザとのデータの共有を希望することを示すメッセージを受け取る。フローの一部分として述べないが、第２ユーザは、共有を受け容れることを選択してもよい。フローは、次いで、オペレーション９１０からオペレーション９１５へ進み、セキュアＤＡＧモジュール２２０は、第２ユーザのプライベートキーでメッセージを解読し、これは、共有されるノードのノードＩＤ及び共有されるノードのノードキーを明らかにする。例えば、図７に関して、第２ユーザのプライベートキーでメッセージを解読すると、ノード１２０のノードＩＤ及びノード１２０のノードキーＫ２が明らかになる。フローは、次いで、オペレーション９２０へ進む。
【００３８】
オペレーション９２０において、セキュアＤＡＧモジュール２２０は、第２ユーザに対してＤＡＧ７００に共有を配置するための経路を決定する。１つの実施形態では、経路は、ＤＡＧ７００の根ノードの下に自動的に配置される。別の実施形態では、経路は、第２ユーザにより選択される。図７の例では、共有が根ノード７１０の下に配置される。従って、図７の例では、根ノード７１０は、共有されるノード（ノード１２０）の親ノードである。フローは、次いで、オペレーション９２５へ進む。
【００３９】
オペレーション９２５において、セキュアＤＡＧモジュール２２０は、経路を進んで、第２ユーザに対しＤＡＧ７００において共有されるノードの親ノードのためのノードキーを決定する。例えば、図７を参照すれば、セキュアＤＡＧモジュール２２０は、経路を進み、そして根ノード７１０（共有されるノードの親ノード）のためのノードキーを決定する。図７の例では、根ノード７１０のノードキーは、ユーザキーＵＫ２である。フローは、次いで、オペレーション９３０へ進む。
【００４０】
オペレーション９３０において、セキュアＤＡＧモジュール２２０は、親ノード（ＰＮ）から共有ノード（Ｎ）へのエッジを第２ユーザに対してＤＡＧに生成する。例えば、図７を参照すれば、根ノード７１０からノード１２０へのエッジ７３０が生成される。フローは、次いで、オペレーション９３５へ進み、セキュアＤＡＧモジュール２２０は、共有されるノードのノードキー（Ｋ）を、第２ユーザに対しＤＡＧ７００において共有されるノードの親ノードのノードキーで暗号化する。例えば、図７を参照すれば、ノードキーＫ２は、ユーザキーＵＫ２で暗号化される。フローは、次いで、オペレーション９４０へ進み、セキュアＤＡＧモジュール２２０は、共有されるノードのノードキー（Ｋ）を、共有されるノードの親ノードのノードキーで暗号化した結果を、親ノード（ＰＮ）から共有ノード（Ｎ）へのエッジに記憶する。例えば、図７を参照すれば、エッジ７３０は、ユーザキーＵＫ２で暗号化されたノードキーＫ２を記憶する。
【００４１】
ノードが別のユーザと共有されるときには、その共有ノードの子ノード（もしあれば）も共有される。例えば、図７を参照すれば、ノード１２０が共有されるので、ノード１２５及び１３０も共有される。というのは、それらは、ノード１２０の子ノードだからである。従って、第２ユーザは、ノード１２０だけでなく、ノード１２５及び１３０のデータにもアクセスできる。例えば、第２ユーザがノード１３０にアクセスしたい場合には、第２ユーザのＤＡＧの根ノード７１０から第１ユーザのＤＡＧのノード１２０へ、次いで、第２ユーザのノード１３０への経路を識別する要求がセキュアＤＡＧモジュールによって受け取られる。セキュアＤＡＧモジュールは、第２ユーザのユーザクレデンシャルを使用して到来エッジ７２０を解読してユーザキーＵＫ２を明らかにし、次いで、ユーザキーＵＫ２を使用してエッジ７３０を解読してノードキーＫ２を明らかにし、次いで、ノードキーＫ２を使用してエッジ１６０を解読してノードキーＫ４を明らかにし、そして最後に、ノードキーＫ４を使用してノード１３０のコンテンツを解読する。
【００４２】
図９は、同じセキュアＤＡＧモジュールにより（例えば、複数のクライアント装置に接続されたサーバーにおいて）遂行されるものとして説明したが、共有を行うクライアントコンピューティング装置とは異なるクライアントコンピューティング装置においてオペレーションをローカルに遂行することができる。換言すれば、ある実施形態では、図８及び９に関して述べたオペレーションは、クラウドのような中央位置で遂行され、他の実施形態では、図８に関して述べたオペレーションは、第１のクライアントコンピューティング装置で遂行されそして図９に関して述べたオペレーションは、第２のクライアントコンピューティング装置で遂行される。
【００４３】
図１０は、１つの実施形態によりノード１２０が共有された後のＤＡＧ７００の規範的なデータ構造体表現を示す。図１０に示すデータ構造体表現は例示に過ぎず、本発明は、ＤＡＧを表現するための特定のデータ構造体に限定されないことを理解されたい。図１０に示すように、ノードテーブル１０１０は、ノード７１０がユーザキーＵＫ２で暗号化されたデータ（ＵＫ２(Ｄａｔａ)として表わされる）を記憶しそしてノード７１５がノードキーＫ５で暗号化されたデータ（Ｋ５(Ｄａｔａ)として表わされる）を記憶することを示している。エッジテーブル１０２０は、暗示的エッジ７２０が暗示的ノードからスタートしてノード７１０へ進みそしてユーザのクレデンシャルで暗号化されたユーザキーＵＫ１を記憶し、エッジ７２５がノード７１０からスタートしてノード７１５へ進みそしてユーザキーＵＫ２で暗号化されたノードキーＫ５（ＵＫ２(Ｋ５)として表わされる）を記憶し、そしてエッジ７３０がノード７１０からスタートしてノード７２０へ進みそしてユーザキーＵＫ２で暗号化されたノードキーＫ２（ＵＫ２(Ｋ２)として表わされる）を記憶することを示す。
【００４４】
ノードの移動
ある実施形態では、ユーザは、ノードをセキュアなＤＡＧの異なる部分へ移動することができる。例えば、セキュアなＤＡＧがクラウドベースのファイルシステムを表わす実施形態では、ユーザは、フォルダ又はファイルをファイルシステム内の別の位置へ移動することを選択できる。ノードを移動することで、新たなノードへの接続が生成されるようにし、単一の新たなエッジを生成するだけでよく（新たなノードそれ自体ではなく）、そして移動されるノードの既存のノードキーを新たな親ノードのノードキーで暗号化することを行うだけでよい。
【００４５】
図１１は、図７に示されたセキュア化されたＤＡＧであって、本発明の実施形態によりノードが移動されたものを示す。図１１に示すように、ノード１２０は、根ノード１１０の真下の子ノードであることから、ノード１１５の下の子ノードであることへと移動される。新たな親ノード１１５から、移動されるノード（１２０）へと新たなエッジ１６５が生成される。新たなエッジ１６５は、新たな親ノード１１５のノードキーＫ１により暗号化されたノード１２０のノードキーＫ２を記憶する。エッジ１５０は、ＤＡＧ１００から除去される。移動オペレーションは、ＤＡＧ１００に属するユーザからＤＡＧ７００に属するユーザへのノード１２０の共有に影響を及ぼさない。
【００４６】
図１２は、１つの実施形態により図１１に基づきノード１２０が移動された後のＤＡＧ１００の規範的なデータ構造体表現を示す。図１２に示すデータ構造体表現は例示に過ぎず、本発明は、ＤＡＧを表現するための特定のデータ構造体に限定されないことを理解されたい。図１２に示すように、ノードテーブル１２１０は、ノードテーブル３１０と同じであり、ノード１２０へのエッジテーブル１２２０のエッジだけが変更されている。
【００４７】
図１３は、１つの実施形態によるセキュア化されたＤＡＧにおいてノードを移動するために遂行される規範的なオペレーションを示すフローチャートである。オペレーション１３１０において、セキュアＤＡＧモジュール２２０は、ノード（Ｎ）を移動するための要求を受け取る。この要求は、ユーザから受け取られる。例えば、ＤＡＧがファイルシステムを表わす実施形態では、要求は、ユーザがフォルダ又はファイルをファイル構造体内の別の場所へ移動した結果として受け取られる。例えば、図１１を参照すれば、ノード１２０は、根ノード１１０の真下であることから、ノード１１５の真下であることへと移動される。要求は、移動のための経路（どこからどこへ）を指定する。フローは、次いで、オペレーション１３１５へ進み、セキュアＤＡＧモジュール２２０は、根ノードから、移動されるノード（Ｎ）への経路を進み、そのノードのノードキー（Ｋ）を決定する。例えば、図１１を参照すれば、根ノード１１０からノード１２０への経路を進んで、ノードキー１２０であるノード１２０のためのノードキー（Ｋ）を決定する。ノードキー１２０は、暗号化形態で（ユーザキーＵＫ１で暗号化されて）エッジ１５０に記憶される。フローは、次いで、オペレーション１３２０へ進む。
【００４８】
オペレーション１３２０において、セキュアＤＡＧモジュール２２０は、与えられた経路に基づき、移動されるノード（Ｎ）の新たな親ノード（ＰＮ）を決定する。例えば、図１１に関して、新たな親ノード（ＰＮ）は、ノード１１５である。フローは、次いで、オペレーション１３２５へ進み、セキュアＤＡＧモジュール２２０は、新たな親ノード（ＰＮ）から、移動されるノード（Ｎ）へのエッジをＤＡＧに生成する。例えば、図１１を参照すれば、ノード１１５からノード１２０への新たなエッジ１６５が生成される。フローは、次いで、オペレーション１３３０へ進む。
【００４９】
オペレーション１３３０において、セキュアＤＡＧモジュール２２０は、根ノードから新たな親ノード（ＰＮ）への経路を進み、新たな親ノードのノードキー（ＰＫ）を決定する。新たな親ノードのノードキー（ＰＫ）は、その到来エッジに（その親ノードのノードキーで暗号化されて、又は新たな親ノードが根ノードである場合にはユーザキーで暗号化されて）記憶される。例えば、図１１に関して、新たな親ノード１１５のノードキーは、ユーザキーＵＫ１で暗号化されてその到来エッジ１４５に記憶される。フローは、次いで、オペレーション１３３５へ進む。
【００５０】
オペレーション１３３５において、セキュアＤＡＧモジュール２２０は、移動されるノード（Ｎ）のノードキー（Ｋ）を新たな親ノード（ＰＮ）のノードキー（ＰＫ）で暗号化する。フローは、次いで、オペレーション１３４０へ進み、セキュアＤＡＧモジュール２２０は、移動されるノード（Ｎ）のノードキー（Ｋ）を新たな親ノード（ＰＮ）のノードキー（ＰＫ）で暗号化した結果を、新たな親ノード（ＰＮ）から、移動されるノード（Ｎ）へのエッジに記憶する。例えば、図１１を参照すれば、セキュアＤＡＧモジュール２２０は、ノードキーＫ２をノードキーＫ１で暗号化し、そしてその結果をノード１１５からノード１２０へのエッジ１６５に記憶する。フローは、次いで、オペレーション１３４５へ進み、セキュアＤＡＧモジュール２２０は、古い親ノードから、移動されるノードへのエッジを除去する。
【００５１】
グラフの横断
図１４は、ある実施形態によるセキュア化されたＤＡＧを横断するための規範的なオペレーションを示すフローチャートである。オペレーション１４１０において、セキュアＤＡＧモジュール２２０は、ノード（Ｎ）においてデータの要求を受け取り、この要求は、経路を指示する。セキュアなＤＡＧがファイルシステムを表わす場合には、この要求は、ユーザがそれらのファイルシステム内のフォルダ又はファイルへナビゲーションする結果として受け取られる。この要求は、経路を指示する。一例として、このフローチャート全体にわたり、要求は、図１のノード１２５におけるデータの要求を指示する。
【００５２】
オペレーション１４１５において、セキュアＤＡＧモジュール２２０は、要求を行うユーザのユーザキーを決定する。例えば、セキュアＤＡＧモジュール２２０は、ユーザの根ノードの暗示的到来エッジに記憶されたデータを、ユーザの与えられたクレデンシャルで解読し、これは、データの要求に関連して与えられるか又は早期に与えられたものである。例えば、図１に関して、セキュアＤＡＧモジュール２２０は、暗示的エッジ１４０に記憶されたデータを、ユーザクレデンシャルを使用して解読して、ユーザキーＵＫ１を明らかにする。
【００５３】
ユーザのユーザキー（ＵＫ）が決定されたと仮定すれば、フローは、次いで、オペレーション１４２５へ進み、セキュアＤＡＧモジュール２２０は、ユーザのグラフの根ノードからスタートしてセキュアなＤＡＧに与えられた経路を進み、そして各ステップにおいて１４３０−１４４０のオペレーションを遂行し、ここで、（Ｐ）は、現在経路セグメントであり、（Ｐ−１）は、以前の経路セグメントであり、（Ｐ＋１）は、次の経路セグメントであり、そして根ノード及びユーザキー（ＵＫ）は、Ｐが０に等しいときに暗示的（Ｐ−１）セグメントである。オペレーション１４３０において、セキュアＤＡＧモジュール２２０は、ノード（Ｐ−１）からノード（Ｐ）へ進み、ノード（Ｐ−１）からノード（Ｐ）の間でエッジに記憶されたデータを捕獲する。例えば、図１に関して、セキュアＤＡＧモジュール２２０は、根ノード１１０からノード１２０へ進み、エッジ１５０に記憶されたデータを捕獲する。上述したように、エッジ１５０に記憶されたデータは、ユーザキーＵＫ１で暗号化されたノードキーＫ２である。フローは、次いで、オペレーション１４３５へ進み、セキュアＤＡＧモジュール２２０は、捕獲されたエッジデータをノード（Ｐ−１）のノードキーで解読して、ノード（Ｐ）のノードキーを得る。例えば、図１を参照すれば、セキュアＤＡＧモジュール２２０は、ユーザキーＵＫ１を使用して、エッジ１５０に記憶されたデータを解読し、ノードキーＫ２を明らかにする。フローは、次いで、オペレーション１４４０へ進み、セキュアＤＡＧモジュール２２０は、ノード（Ｐ）が最後の経路セグメントであるかどうか決定する。最後の経路セグメントである場合には、フローは、次いで、オペレーション１４５０へ進む。最後の経路セグメントでない場合には、フローは、次いで、オペレーション１４４５へ進む。ノード１２５に対応するデータをアクセスする例では、ノード１２０が最後の経路セグメントではない。
【００５４】
オペレーション１４４５において、セキュアＤＡＧモジュール２２０は、現在経路セグメント（Ｐ）を以前の経路セグメント（Ｐ−１）としてセットすると共に、次の経路セグメント（Ｐ＋１）を現在経路セグメント（Ｐ）としてセットする。フローは、次いで、オペレーション１４３０へ戻る。例えば、図１に関して、セキュアＤＡＧモジュール２２０は、次いで、ノード１２０からノード１２５へ進んで、エッジ１５５に記憶されたデータを捕獲する。エッジ１５５に記憶されたデータは、ノードキーＫ２で暗号化されたノードキーＫ３を含む。エッジ１５５に記憶されたデータ捕獲した後に、セキュアＤＡＧモジュール２２０は、ノードキーＫ２を使用してデータを解読し、ノードキーＫ３を明らかなものにする。ノード１２５は、最後の経路セグメントにおけるノードであるから、フローは、次いで、オペレーション１４５０へ進む。
【００５５】
オペレーション１４５０において、セキュアＤＡＧモジュール２２０は、ノード（Ｐ）に記憶されたデータを捕獲する。例えば、図１に関して、セキュアＤＡＧモジュール２２０は、ノード１２５に記憶されたデータを捕獲し、これは、ノードキーＫ３で暗号化された暗号データである。フローは、次いで、オペレーション１４５５へ進み、セキュアＤＡＧモジュール２２０は、ノード（Ｐ−１）からノード（Ｐ）への最終エッジで見つかったキーを使用して捕獲データを解読する。例えば、図１を参照すれば、セキュアＤＡＧモジュール２２０は、ノードキーＫ２を使用してノード１２５の捕獲データを解読し、ノード１２５のコンテンツを明らかにする。
【００５６】
経路に沿った全てのノードにアクセスする必要はなく、要求されたデータがノードに記憶されている場合にはエッジと最終ノードだけであることを理解されたい。
【００５７】
図１４は、要求されたデータがノードにあるときにＤＡＧを横断するための規範的なオペレーションを示すが、要求されたデータがエッジに暗号形態で記憶されたノードキーであるときには、経路を進みそして解読する同様のオペレーションが遂行される。例えば、グラフにノードを追加するときには、根ノードから、追加されるノードの親ノードへ繰り返し形態で経路を進んで、その親ノードのノードキーを明らかなものにする。
【００５８】
図１５に示すように、データ処理システムの形態のコンピュータシステム１５００は、処理システム１５２０、電源１５２５、メモリ１５３０、及び不揮発性メモリ１５４０（例えば、ハードドライブ、フラッシュメモリ、相変化メモリ（ＰＣＭ）、等）に接続されたバス１５５０を備えている。バス１５５０は、この技術で良く知られたように、種々のブリッジ、コントローラ、及び／又はアダプタを通して互いに接続される。処理システム１５２０は、メモリ１５３０及び／又は不揮発性メモリ１５４０からインストラクションを検索し、そしてそれらインストラクションを実行して、ここに述べるオペレーションを遂行する。バス１５５０は、前記コンポーネントを一緒に相互接続すると共に、それらのコンポーネントを、ディスプレイコントローラ＆ディスプレイ装置１５７０、入力／出力装置１５８０（例えば、ＮＩＣ（ネットワークインターフェイスカード）、カーソルコントローラ（例えば、マウス、タッチスクリーン、タッチパッド、等）、キーボード、等）及び任意のワイヤレストランシーバ１５９０（例えば、ブルーツース、ＷｉＦｉ、赤外線、等）にも相互接続する。１つの実施形態では、セキュアＤＡＧモジュール２２０がコンピュータシステム１５００において実施される。
【００５９】
ここに述べるように、インストラクションとは、あるオペレーションを遂行するように構成されるか或いは非一時的コンピュータ読み取り可能な媒体で実施されるメモリに記憶された所定の機能又はソフトウェアインストラクションを有する特定用途向け集積回路（ＡＳＩＣ）のようなハードウェアの特定の構成を指す。従って、図示された技術は、１つ以上の電子装置（例えば、クライアントコンピューティング装置、サーバー）に記憶されて実行されるコード及びデータを使用して実施することができる。そのような電子装置は、コンピュータ読み取り可能な媒体、例えば、非一時的なコンピュータ読み取り可能なストレージ媒体（例えば、磁気ディスク、光学ディスク、ランダムアクセスメモリ、リードオンリメモリ、フラッシュメモリ装置、相変化メモリ）、及び一時的なコンピュータ読み取り可能な通信媒体（例えば、電気的、光学的、音響的又は他の形態の伝播信号、例えば、搬送波、赤外線信号、デジタル信号）を使用して、コード及びデータを記憶し及び通信する（内部で及び／又はネットワークを経て他の電子装置と）。更に、そのような電子装置は、典型的に、１組の１つ以上のプロセッサを備え、それらは、１つ以上の他のコンポーネント、例えば、１つ以上のストレージ装置（非一時的なコンピュータ読み取り可能なストレージ媒体）、ユーザ入力／出力装置（例えば、キーボード、タッチスクリーン及び／又はディスプレイ）、及びネットワーク接続に結合される。１組のプロセッサと他のコンポーネントとの結合は、典型的に、１つ以上のバス及びブリッジ（バスコントローラとも称される）を通して行われる。従って、所与の電子装置のストレージ装置は、典型的に、その電子装置の１組の１つ以上のプロセッサで実行するためにコード及び／又はデータを記憶する。もちろん、本発明の実施形態の１つ以上の部分を、ソフトウェア、ファームウェア及び／又はハードウェアの異なる組合せを使用して実施してもよい。
【００６０】
以上、本発明は、多数の実施形態について説明されたが、当業者であれば、本発明は、ここに述べる実施形態に限定されず、その精神及び特許請求の範囲内で変更及び修正を伴って実施できることが認識されよう。従って、以上の説明は、例示に過ぎず、それに限定されないとみなす。
【符号の説明】
【００６１】
１００：ＤＡＧ（有向非巡回グラフ）
１１０：根ノード
１１５、１２０、１２５、１３０：ノード
１４０、１４５、１５０、１５５、１６０、１６５：エッジ
２００：セキュアＤＡＧシステム
２１０：キージェネレータ
２２０：セキュアＤＡＧモジュール
２３０：データストア
２４０：ＤＡＧ
２５０：要求
３１０、１０１０、１２１０：ノードテーブル
３２０、１０２０、１２２０：エッジテーブル
７００：セキュアなＤＡＧ
７１０：根ノード
７１５：ノード
７２０：到来エッジ
７２５：エッジ
１５００：コンピュータシステム
１５２０：処理システム
１５２５：電源
１５３０：メモリ
１５４０：不揮発性メモリ
１５５０：バス
１５７０：ディスプレイコントローラ＆ディスプレイ装置
１５８０：Ｉ／Ｏ装置
１５９０：ワイヤレストランシーバ
【図１】
0006698078.tif 000002
【図２】
0006698078.tif 000003
【図３】
0006698078.tif 000004
【図４】
0006698078.tif 000005
【図５】
0006698078.tif 000006
【図６】
0006698078.tif 000007
【図７】
0006698078.tif 000008
【図８】
0006698078.tif 000009
【図９】
0006698078.tif 000010
【図１０】
0006698078.tif 000011
【図１１】
0006698078.tif 000012
【図１２】
0006698078.tif 000013
【図１３】
0006698078.tif 000014
【図１４】
0006698078.tif 000015
【図１５】
0006698078.tif 000016