(57)【特許請求の範囲】
【請求項１】
３ｔ＋１＝ｎを満たすｔ＜ｎ個のサーバが任意に故障する可能性があるような複数ｎ個のサーバ（Ｓ１，Ｓ２，Ｓ３，Ｓ４）を有するキーバリューストレージにライタがデータ（ｖ）を保存する（ｐｕｔ）方法において、
ａ）秘密情報（ｓｅｃｒｅｔ）に対するコミットメント情報（ｃｏｍｍｉｔ）を生成するステップと、
ｂ）保存すべきデータ（ｖ）と、該データ（ｖ）に対応するキー（ｋ）と、前記生成されたコミットメント情報（ｃｏｍｍｉｔ）とを含む第１のメッセージ（１ａ）を前記ｎ個のサーバへ配布するステップと、
ｃ）前記第１のメッセージ（１ａ）に含まれる情報を少なくともいくつかのサーバ（Ｓ１，Ｓ２，Ｓ３）に保存する（ｓａｖｉｎｇ１）ステップと、
ｄ）少なくともｎ−ｔ個のサーバ（Ｓ１，Ｓ２，Ｓ３）が第１の保存確認情報（１ｂ）を提供するステップと、
ｅ）対応するキー（ｋ）および前記秘密情報（ｓｅｃｒｅｔ）を含む第２のメッセージ（２ａ）を前記ｎ個のサーバ（Ｓ１，Ｓ２，Ｓ３，Ｓ４）へ配布するステップと、
ｆ）前記第２のメッセージ（２ａ）に含まれる情報を保存する（ｓａｖｉｎｇ２）ステップと、
ｇ）少なくともｎ−ｔ個のサーバ（Ｓ１，Ｓ２，Ｓ３）が第２の保存確認情報（２ｂ）を提供するステップと
を備えたことを特徴とする、キーバリューストレージにデータを保存する方法。
【請求項２】
３ｔ＋１＝ｎを満たすｔ＜ｎ個のサーバが任意に故障する可能性があるような複数ｎ個のサーバ（Ｓ１，Ｓ２，Ｓ３，Ｓ４）を有するキーバリューストレージに保存されたデータ（ｖ）をリーダが読み出す（ｇｅｔ）方法において、
Ａ）読み出すべきデータ（ｖ）に対応するキー（ｋ）を含む第１のメッセージ（１ａ）を配布するステップと、
Ｂ）少なくとも２ｔ＋１個のサーバ（Ｓ２，Ｓ３，Ｓ４）から前記読み出すべきデータ（ｖ）の候補（Ｃ２，Ｃｉ，Ｃｏｌｄ）を収集する（１ｂ）ステップと、
Ｃ）コミットメント情報（ｃｏｍｍｉｔ）に対応する秘密情報（ｓｅｃｒｅｔ）および前記読み出すべきデータ（ｖ）に対応する情報を書き戻す（２ａ）ステップと、
Ｄ）前記コミットメント情報（ｃｏｍｍｉｔ）と前記秘密情報（ｓｅｃｒｅｔ）の一致に基づいて、前記収集された候補（Ｃ２，Ｃｉ，Ｃｏｌｄ）を妥当性検査（検証）するステップと、
Ｅ）妥当とされた候補（Ｖｉ）に従って、読み出すべきデータ（ｖ）の候補を決定するステップと、
Ｆ）読み出すべきデータ（ｖ）の同じ候補および対応する秘密情報（ｓｅｃｒｅｔ）を含むｔ＋１個の応答メッセージ（２ｂ）に基づいて、読み出すべきデータを選択するステップと
を備えたことを特徴とする、キーバリューストレージに保存されたデータを読み出す方法。
【請求項３】
タイムスタンプ情報（ｔｓ）が生成され、前記保存すべきデータ（ｖ）に割り当てられることを特徴とする請求項１に記載の方法。
【請求項４】
生成されるタイムスタンプ情報（ｔｓ）はグローバルに一貫性があることを特徴とする請求項１または３に記載の方法。
【請求項５】
保存すべきデータ（ｖ）にタイムスタンプ情報（ｔｓ）を割り当てる前に、生成されたタイムスタンプ情報（ｔｓ）が収集されることを特徴とする請求項１、３および４のいずれか１項に記載の方法。
【請求項６】
ステップｃ）およびステップｆ）の少なくとも一方を実行する前に、タイムスタンプ情報（ｔｓ）が評価されることを特徴とする請求項１、３ないし５のいずれか１項に記載の方法。
【請求項７】
タイムスタンプ情報（ｔｓ）の妥当性が検証されることを特徴とする請求項１ないし６のいずれか１項に記載の方法。
【請求項８】
対称的に認証されたタイムスタンプ情報を交換することによって、前記タイムスタンプ情報（ｔｓ）の妥当性が検証されることを特徴とする請求項７に記載の方法。
【請求項９】
コミットメント情報（ｃｏｍｍｉｔ）がハッシングによって生成されることを特徴とする請求項１ないし８のいずれか１項に記載の方法。
【請求項１０】
コミットメント情報（ｃｏｍｍｉｔ）が、ランダム値（ｘｉ）と、該ランダム値（ｘｉ）に次数ｔのランダム多項式（Ｐ）を適用した多項式値とを使用することによって生成されることを特徴とする請求項１ないし９のいずれか１項に記載の方法。
【請求項１１】
コミットメント情報（ｃｏｍｍｉｔ）がサーバ（Ｓ１，Ｓ２，Ｓ３，Ｓ４）に依存し、好ましくは各サーバ（Ｓ１，Ｓ２，Ｓ３，Ｓ４）ごとに、対応する別個のコミットメント情報（ｃｏｍｍｉｔ）が生成されることを特徴とする請求項１０に記載の方法。
【請求項１２】
セキュアなチャネル、好ましくは認証されたポイントツーポイントチャネルが、メッセージおよび情報の少なくとも一方の交換のために使用されることを特徴とする請求項１ないし１１のいずれか１項に記載の方法。
【請求項１３】
候補（Ｃ２，Ｃｉ，Ｃｏｌｄ）が、保存されたキー（ｋ）ならびに最後に保存および受信の少なくとも一方がなされた秘密情報（ｓｅｃｒｅｔ）を含むことを特徴とする請求項２に記載の方法。
【請求項１４】
すべての候補（Ｃ２，Ｃｉ，Ｃｏｌｄ）の和集合（Ｃ）がステップＣ）で送信されることを特徴とする請求項２に記載の方法。
【請求項１５】
ステップＢ）に従って収集された候補（Ｃ２，Ｃｉ，Ｃｏｌｄ）を含む第３のメッセージ、および、ステップＤ）に従って妥当とされた候補（Ｖ１，Ｖ２，Ｖｏｌｄ）を含む第４のメッセージが、前記第１のメッセージ（１ａ）を受信した後に提供されることを特徴とする請求項２，１３および１４のいずれか１項に記載の方法。
【請求項１６】
前記第４のメッセージを受信した後、前記読み出すべきデータ（ｖ）の候補が選別除去されることを特徴とする請求項１５に記載の方法。
【請求項１７】
キーバリューストレージにデータ（ｖ）を保存するシステムにおいて、該システムは、３ｔ＋１＝ｎを満たすｔ＜ｎ個のサーバが任意に故障する可能性があるような複数ｎ個のサーバ（Ｓ１，Ｓ２，Ｓ３，Ｓ４）と、前記キーバリューストレージにデータ（ｖ）を書き込むライタ（ｗ）とを有し、
前記ライタ（ｗ）が、保存すべきデータ（ｖ）と、該データ（ｖ）に対応するキー（ｋ）と、秘密情報（ｓｅｃｒｅｔ）から生成されたコミットメント情報（ｃｏｍｍｉｔ）とを含む第１のメッセージ（１ａ）を前記ｎ個のサーバ（Ｓ１，Ｓ２，Ｓ３，Ｓ４）へ配布するように動作可能であるように構成され、
少なくともいくつかのサーバ（Ｓ１，Ｓ２，Ｓ３，Ｓ４）が、前記第１のメッセージ（１ａ）に含まれる情報を保存するように動作可能であるように構成され、
少なくともｎ−ｔ個のサーバ（Ｓ１，Ｓ２，Ｓ３，Ｓ４）が第１の保存確認情報（１ｂ）を受信した後、前記ライタ（ｗ）が、対応するキー（ｋ）および前記秘密情報（ｓｅｃｒｅｔ）を含む第２のメッセージ（２ａ）を前記ｎ個のサーバ（Ｓ１，Ｓ２，Ｓ３，Ｓ４）へ配布するように動作可能であるように構成され、
前記第２のメッセージ（２ａ）に含まれる前記第２のメッセージ（２ａ）の情報を保存した後、少なくともｎ−ｔ個のサーバ（Ｓ１，Ｓ２，Ｓ３，Ｓ４）が、第２の保存確認情報（２ｂ）を提供するように動作可能であるように構成される
ことを特徴とする、キーバリューストレージにデータを保存するシステム。
【請求項１８】
キーバリューストレージに保存されたデータを読み出すシステムにおいて、該システムは、３ｔ＋１＝ｎを満たすｔ＜ｎ個のサーバが任意に故障する可能性があるような複数ｎ個のサーバ（Ｓ１，Ｓ２，Ｓ３，Ｓ４）と、該キーバリューストレージに保存されたデータ（ｖ）を読み出すリーダ（ｒｄ）とを有し、
前記リーダ（ｒｄ）が、読み出すべきデータ（ｖ）に対応するキー（ｋ）を含む第１のメッセージ（１ａ）を配布し、少なくとも２ｔ＋１個のサーバ（Ｓ１，Ｓ２，Ｓ３，Ｓ４）から前記読み出すべきデータ（ｖ）に対応する候補（Ｃ２，Ｃｉ，Ｃｏｌｄ）を収集し、秘密情報（ｓｅｃｒｅｔ）から生成されたコミットメント情報（ｃｏｍｍｉｔ）に対応する該秘密情報（ｓｅｃｒｅｔ）および前記読み出すべきデータ（ｖ）に対応する情報を書き戻し、同じ読み出すべき候補（Ｃ２，Ｃｉ，Ｃｏｌｄ）および対応する秘密情報（ｓｅｃｒｅｔ）を含むｔ＋１個の応答メッセージ（Ｃ２，Ｃｉ，Ｃｏｌｄ）に基づいて、読み出すべきデータ（ｖ）を選択するように動作可能であるように構成され、前記読み出すべきデータ（ｖ）の候補（Ｃ２，Ｃｉ，Ｃｏｌｄ）は妥当とされた候補（Ｖｉ）に従って決定され、前記収集された候補（Ｃ２，Ｃｉ，Ｃｏｌｄ）は前記コミットメント情報（ｃｏｍｍｉｔ）と前記秘密情報（ｓｅｃｒｅｔ）の一致に基づいて妥当性検査される
ことを特徴とする、キーバリューストレージに保存されたデータを読み出すシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、３ｔ＋１＝ｎを満たすｔ＜ｎ個のサーバが任意に故障する可能性があるような複数ｎ個のサーバを有するキーバリューストレージにデータを保存する方法に関する。
【０００２】
また、本発明は、３ｔ＋１＝ｎを満たすｔ＜ｎ個のサーバが任意に故障する可能性があるような複数ｎ個のサーバを有するキーバリューストレージに保存されたデータを読み出す方法に関する。
【０００３】
また、本発明は、好ましくは請求項１ないし１５のいずれか１項に記載の方法を実行する、キーバリューストレージにデータを保存するシステムにおいて、３ｔ＋１＝ｎを満たすｔ＜ｎ個のサーバが任意に故障する可能性があるような複数ｎ個のサーバと、前記キーバリューストレージにデータを書き込むライタとを有するシステムに関する。
【０００４】
また、本発明は、好ましくは請求項１ないし１５のいずれか１項に記載の方法を実行する、キーバリューストレージに保存されたデータを読み出すシステムにおいて、３ｔ＋１＝ｎを満たすｔ＜ｎ個のサーバが任意に故障する可能性があるような複数ｎ個のサーバと、該キーバリューストレージに保存されたデータを読み出すリーダとを有するシステムに関する。
【背景技術】
【０００５】
キーバリューストレージ（キーバリューストア（key value store, ＫＶＳ）ともいう）は、データベース、検索エンジン、クラウド型プラットフォーム（例えばＭａｐＲｅｄｕｃｅのようなクラウドプログラミングフレームワーク）から、ソーシャルネットワークのような共同作業アプリケーションに至るまでのさまざまな大規模分散システムへの関心をますます引きつけている。例えば、従来のストレージデータベースでは、スケーラビリティおよびパフォーマンスのために、分散キーバリューストアの上に検索インデックスを実装することが多い。キーバリューストアは、上位レイヤに対するストレージレイヤとして働くだけでなく、ピアツーピアファイル共有の場合のように直接にアプリケーションにサービスを提供することも可能である。１つまたは複数のストレージサーバが例えばソフトウェアエラーやハードウェア故障等によりクラッシュすると、キーバリューストアがこのような故障を補償することになる。Ｃａｓｓａｎｄｒａ、Ｒｅｄｉｓ、ＨＢａｓｅ、ＤｙｎａｍｏおよびＭｅｍｃａｃｈｅｄのようなキーバリューストアは、レプリケーションを使用することにより、ストレージサーバの故障やクラッシュに対する耐性がある。
【０００６】
キーバリューストアの望ましい特徴の１つは、相異なるユーザによる同時アクセスが実行される場合であってもデータ一貫性および可用性を保証することである。最高度のデータ一貫性は、いわゆるアトミック一貫性である。これは、ある値があるキーのもとで保存される場合またはある読み出し動作がその値を返す場合に、あらゆる後続の読み出し動作が、対応する値ｖまたはより新しい値ｖ′を返すが、ｖよりも古い値を決して返さないことを意味する。従来のキーバリューストアは、単一キーのレベルでアトミック一貫性をサポートし、複数のキーへのトランザクションアクセスは、より上位のレイヤで実行される。多くのアプリケーションにとって、アトミック一貫性は義務的である。
【０００７】
可用性は、一貫性に対して相補的である。すなわち、キーバリューストアの正当なクライアントであると仮定されるクライアントが、読み出しまたは書き込み動作を呼び出す場合、その動作は、サーバの故障や、他の故障したクライアントの挙動にかかわらず成功すべきである。
【０００８】
中心的なストレージレイヤとしてのキーバリューストアに依拠するアプリケーションやシステムの数がますます増大すると、キーバリューストアの堅牢性も重要となる。しかし、多数の相互接続されたノードからなる分散システムの複雑さがますます増大しているため、いずれかのノードが故障する確率が増大している。このような偶発的なハードウェアおよびソフトウェアの故障（例えばソフトウェアバグ）のリスクも増大し、キーバリューストアの堅牢性が大幅に低下する。さらに、悪用される脆弱性のリスクが出現している。すなわち、クラウドコンピューティングの登場により、データは、インターネットから直接アクセス可能なクラウドサービスプラットフォームにアウトソーシングされている。その結果の１つは、例えば、ソフトウェアバグによるクラウドサービスプラットフォームの悪用可能な脆弱性であり、その結果として、データ損失やデータ破壊の可能性がある。
【０００９】
これらの問題を克服するため、非特許文献１には、ビザンチンリーダ（すなわち、任意に故障する可能性があるリーダ）に対する耐性を実現するために、無競合実行においてのみ値を返すことが要求される読み出し動作について記載されている。
【００１０】
非特許文献２においては、ビザンチンリーダに対する耐性を実現するために、デジタル署名が使用されている。
【００１１】
非特許文献３には、最終的にあらゆるメッセージをすべてのサーバへ配信する通信チャネルが記載されているが、これは、非同期システムでは実現が困難である。また、非特許文献３に記載された方法によって示される読み出しレイテンシは、サーバ数に関して線形である。
【００１２】
その欠点の１つとして、無認証データに対する上記の従来の方法は、高いレイテンシ、スケーラビリティの欠如、および競合下での進行の欠如のため非実用的である。また、署名を使用しない従来の方法のほとんどは、単一のライタのために最適化されている。
【先行技術文献】
【非特許文献】
【００１３】
【非特許文献１】James Hendricks, Gregory R. Ganger, Michael K. Reiter: "Low-overhead byzantine fault-tolerant-storage", SOSP 2007: 73-86
【非特許文献２】Barbara Liskov, Rodrigo Rodrigues: Tolerating Byzantine Faulty Clients in a Quorum System. ICDCS 2006
【非特許文献３】Amitanand S. Aiyer, Lorenzo Alvisi, Rida A Bazzi: "Bounded Wait-Free Implementation of Optimally Resilient Byzantine Storage Without (Unproven) Cryptographic Assumptions", DISC 2007: 7-19
【発明の概要】
【発明が解決しようとする課題】
【００１４】
したがって、本発明の目的は、特にサーバおよびリーダによる、ビザンチン故障に耐性があるキーバリューストレージに対するデータの保存および読み出しを行う方法およびシステムを提供することである。
【００１５】
本発明のさらなる目的は、無署名でアトミック一貫性を提供するキーバリューストレージに対するデータの保存および読み出しを行う方法およびシステムを提供することである。
【００１６】
本発明のさらなる目的は、スケーラブルなキーバリューストレージに対するデータの保存および読み出しを行う方法およびシステムを提供することである。
【００１７】
本発明のさらなる目的は、データの書き込みおよび読み出しのレイテンシを低減したキーバリューストレージに対するデータの保存および読み出しを行う方法およびシステムを提供することである。
【００１８】
本発明のさらなる目的は、任意に故障する可能性のある多数のサーバを許容するキーバリューストレージに対するデータの保存および読み出しを行う方法およびシステムを提供することである。
【００１９】
本発明のさらなる目的は、いかなる従来の無署名の方法またはシステムよりも堅牢なキーバリューストレージに対するデータの保存および読み出しを行う方法およびシステムを提供することである。
【００２０】
本発明のさらなる目的は、低コストで、かつ、読み出しまたは保存の対象となるデータに関して高いフレキシビリティで、容易な実施を可能にするキーバリューストレージに対するデータの保存および読み出しを行う方法およびシステムを提供することである。
【課題を解決するための手段】
【００２１】
本発明によれば、上記の目的は、請求項１の方法によって達成される。
【００２２】
請求項１に記載の通り、３ｔ＋１＝ｎを満たすｔ＜ｎ個のサーバが任意に故障する可能性があるような複数ｎ個のサーバを有するキーバリューストレージにデータを保存する方法が提供される。
【００２３】
請求項１に記載の通り、本方法は、
ａ）秘密情報に対するコミットメント情報を生成するステップと、
ｂ）保存すべきデータと、該データに対応するキーと、前記生成されたコミットメント情報とを含む第１のメッセージを前記ｎ個のサーバへ配布するステップと、
ｃ）前記第１のメッセージに含まれる情報を少なくともいくつかのサーバに保存するステップと、
ｄ）少なくともｎ−ｔ個のサーバが第１の保存確認情報を提供するステップと、
ｅ）対応するキーおよび前記秘密情報を含む第２のメッセージを前記ｎ個のサーバへ配布するステップと、
ｆ）前記第２のメッセージに含まれる情報を保存するステップと、
ｇ）少なくともｎ−ｔ個のサーバが第２の保存確認情報を提供するステップと
を備えたことを特徴とする。
【００２４】
本発明によれば、上記の目的は、さらに請求項２の方法によって達成される。
【００２５】
請求項２に記載の通り、３ｔ＋１＝ｎを満たすｔ＜ｎ個のサーバが任意に故障する可能性があるような複数ｎ個のサーバを有するキーバリューストレージに保存されたデータを読み出す方法が提供される。
【００２６】
請求項２に記載の通り、本方法は、
Ａ）読み出すべきデータに対応するキーを含む第１のメッセージを配布するステップと、
Ｂ）少なくとも２ｔ＋１個のサーバから前記読み出すべきデータの候補を収集するステップと、
Ｃ）コミットメント情報に対応する秘密情報および前記読み出すべきデータに対応する情報を書き戻すステップと、
Ｄ）前記コミットメント情報と前記秘密情報の一致に基づいて、前記収集された候補を妥当性検査するステップと、
Ｅ）妥当とされた候補に従って、読み出すべきデータの候補を決定するステップと、
Ｆ）同じ読み出すべきデータの候補および対応する秘密情報を含むｔ＋１個の応答メッセージに基づいて、読み出すべきデータを選択するステップと
を備えたことを特徴とする。
【００２７】
上記の目的は、さらに請求項１６のシステムによって達成される。
【００２８】
請求項１６に記載の通り、好ましくは請求項１ないし１５のいずれか１項に記載の方法を実行する、キーバリューストレージにデータを保存するシステムにおいて、３ｔ＋１＝ｎを満たすｔ＜ｎ個のサーバが任意に故障する可能性があるような複数ｎ個のサーバと、前記キーバリューストレージにデータを書き込むライタとを有するシステムが提供される。
【００２９】
請求項１６に記載の通り、本システムは、
前記ライタが、保存すべきデータと、該データに対応するキーと、秘密情報から生成されたコミットメント情報とを含む第１のメッセージを前記ｎ個のサーバへ配布するように動作可能であるように構成され、
少なくともいくつかのサーバが、前記第１のメッセージに含まれる情報を保存するように動作可能であるように構成され、
少なくともｎ−ｔ個のサーバが第１の保存確認情報を受信した後、前記ライタが、対応するキーおよび前記秘密情報を含む第２のメッセージを前記ｎ個のサーバへ配布するように動作可能であるように構成され、
前記第２のメッセージに含まれる前記第２のメッセージの情報を保存した後、少なくともｎ−ｔ個のサーバが、第２の保存確認情報を提供するように動作可能であるように構成される
ことを特徴とする。
【００３０】
上記の目的は、さらに請求項１７に記載のシステムによって達成される。
【００３１】
請求項１７に記載の通り、好ましくは請求項１ないし１５のいずれか１項に記載の方法を実行する、キーバリューストレージに保存されたデータを読み出すシステムにおいて、３ｔ＋１＝ｎを満たすｔ＜ｎ個のサーバが任意に故障する可能性があるような複数ｎ個のサーバと、該キーバリューストレージに保存されたデータを読み出すリーダとを有するシステムが提供される。
【００３２】
請求項１７に記載の通り、本システムは、
前記リーダが、読み出すべきデータに対応するキーを含む第１のメッセージを配布し、少なくとも２ｔ＋１個のサーバから前記読み出すべきデータに対応する候補を収集し、秘密情報から生成されたコミットメント情報に対応する該秘密情報および前記読み出すべきデータに対応する情報を書き戻し、同じ読み出すべき候補および対応する秘密情報を含むｔ＋１個の応答メッセージに基づいて、読み出すべきデータを選択するように動作可能であるように構成され、前記読み出すべきデータの候補は妥当とされた候補に従って決定され、前記収集された候補は前記コミットメント情報と前記秘密情報の一致に基づいて妥当性検査される
ことを特徴とする。
【００３３】
本発明によって初めて認識されたこととして、請求項１、２、１５および１６に記載の方法およびシステムは、アトミック一貫性が満たされ、悪意のサーバおよび悪意のクライアント（すなわちリーダが含まれる）からの悪意の障害に耐性のある、堅牢な無署名のキーバリューストレージを提供する。
【００３４】
本発明によってさらに初めて認識されたこととして、請求項１、２、１５および１６に記載の方法およびシステムは、スケーラブルである。すなわち、レイテンシ、メッセージ数、メッセージサイズおよび必要な記憶容量等のすべての関連するメトリックが、クライアント群のサイズに依存しない。本発明によってサポートされるクライアント数には上限がない。また、リーダは完全に未知であってもよい。
【００３５】
本発明によってさらに初めて認識されたこととして、読み出しレイテンシが大幅に低減され、徐々に劣化する。すなわち、２回の最大値が提供される。
【００３６】
本発明によってさらに初めて認識されたこととして、請求項１、２、１５および１６に記載の方法およびシステムは、軽量である。すなわち、秘密情報およびコミットメント情報の計算は安価であり、書き込まれる値に依存しない。また、秘密情報および対応するコミットメント情報は、事前に、および／または、システムの外部で、生成されることが可能である。
【００３７】
本発明によってさらに初めて認識されたこととして、請求項１、２、１５および１６に記載の方法およびシステムは、堅牢である。すなわち、リーダは、改竄された、あるいは古い値を決して返さない。可用性は、メタデータすなわちコミットメント情報の秘匿性が提供される限り、保証される。
【００３８】
本発明によってさらに初めて認識されたこととして、請求項１、２、１５および１６に記載の方法およびシステムは、デジタル署名に依拠しないため、データの署名および検証に関連する計算コストが節約される。また、公開のインフラストラクチャおよび／または信頼されたディーラは、関連するキー管理とともに、不要である。
【００３９】
さらなる特徴、利点および好ましい実施形態は、後続の従属請求項に記載される。
【００４０】
好ましい実施形態によれば、タイムスタンプ情報が生成され、前記保存すべきデータに割り当てられる。生成されたタイムスタンプ情報をデータに割り当てることによって、同時並行するライタからの保存すべきデータを、タイムスタンプ情報に従って容易に保存することができ、アトミック一貫性を容易に保証することができる。すなわち、保存されるデータにはあるタイムスタンプが割り当てられ、読み出し動作が実行されると、該読み出し動作は、キーに対応するデータまたはより新しいデータを返す。
【００４１】
さらなる好ましい実施形態によれば、生成されるタイムスタンプ情報はグローバルに一貫性がある。例えば、サーバが、グローバルに一貫性のあるタイムスタンプをデータにローカルに割り当てるように構成されると、タイムスタンプ情報に関してライタ間の明示的調整が不要となる。例えば、それらのライタのタイムスタンプ情報の交換、すなわち、それらのローカルなタイムスタンプを調整して一貫性のあるタイムスタンプ情報を得ることが不要であるため、コストが節減されレイテンシが低減される。
【００４２】
さらなる好ましい実施形態によれば、生成されたタイムスタンプ情報は、保存すべきデータに該タイムスタンプ情報を割り当てる前に収集される。これによりフレキシビリティが向上する。というのは、例えば、各サーバがローカルなタイムスタンプ情報を作成または生成してもよいからである。その場合、相異なるタイムスタンプが収集され、ライタによって調整される。これにより、各サーバは、相異なるサーバのローカルな必要性に最適化されることが可能な固有のローカルなタイムスタンプを使用することができる。
【００４３】
さらなる好ましい実施形態によれば、ステップｃ）および／またはｆ）を実行する前に、タイムスタンプ情報が評価される。これにより、保存されているデータのうち、最高のタイムスタンプを有するデータに対応する最新のデータを提供することが可能となる。
【００４４】
さらなる好ましい実施形態によれば、好ましくは少なくとも対称的に認証されたタイムスタンプ情報を交換することによって、タイムスタンプ情報の妥当性が検証される。例えば、同期されていないクロックを有する複数のライタが同じキーを更新する場合、それらのライタは、正当なサーバから見える最高のタイムスタンプを判定する必要がある。その目的のため、ライタは、ｎ−ｔ個のサーバのうちのあるサーバから見える最高のタイムスタンプを選択する。悪意のサーバが、正当なサーバの最後のタイムスタンプよりも大幅に高いタイムスタンプで応答することにより、タイムスタンプを無駄にする可能性がある。タイムスタンプを妥当性検査するため、ライタは、ライタのみに既知の対称キーを共有し、値に割り当てられるあらゆるタイムスタンプをそのキーで認証することにより、検証されたタイムスタンプ情報を提供することが可能である。
【００４５】
さらなる好ましい実施形態によれば、コミットメント情報はハッシングによって生成される。その利点の１つは、メッセージに含められる必要のある追加的情報がほとんどなく、コミットメント情報の生成が安価なことである。また、隠蔽された値が公に利用可能であるため、検証をサーバからリーダに移行することが可能であり、パフォーマンスおよび／またはスケーラビリティが向上する。ハッシングによってコミットメント情報を生成するため、十分な長さのランダムビット列に一方向性関数が適用される。そして、コミットメント情報はステップｂ）で使用され、ランダムビット列で表される対応する秘密情報は、ステップｅ）に従って配布される。その場合、正当なサーバにおけるステップＤ）が読み出し動作によって開始される。これは、リーダから受信された秘密情報にライタがコミットしたかどうかをチェックすることを含む。
【００４６】
さらなる好ましい実施形態によれば、コミットメント情報は、ランダム値と、該ランダム値に次数ｔのランダム多項式を適用した多項式値とを使用することによって生成される。その利点の１つは、秘密情報を高々ｔ個の持分の悪意者の集合的知識から早期に構成することができず、敵が部分的に正当な秘密情報を構成することが防止されることである。部分的に正当な秘密情報とは、正当なサーバの真部分集合によって妥当とされる秘密情報を意味する。コミットメント情報を構成するため、次数ｔのランダム多項式Ｐ（これが秘密情報を表す）が構成される。そして、ランダム値ｘｉ（ｎ個のサーバのそれぞれに対して１つずつ）を選び、Ｐ（ｘｉ）を計算することによって、ｎ個のコミットメント情報が構成される。その場合、ｉ番目のサーバに対するコミットメントは、ペア（ｘｉ，Ｐ（ｘｉ））からなる。そして、コミットメント情報は、セキュアな、または認証されたポイントツーポイントチャネルを通じてステップｂ）に従って配布される。これにより、正当なサーバへ送信される各コミットメント情報は、その受信者にのみ知られることが保証される。そして、ライタは、ステップｅ）に従って、すべてのサーバへ多項式Ｐを送信する。
【００４７】
読み出し動作が行われる場合、正当なサーバにおけるステップＤ）による妥当性検査が、その読み出し動作によって開始される。これは、ライタが多項式Ｐ′にコミットしたか、すなわち、リーダから受信されるキーｋ、タイムスタンプｔｓ、および多項式Ｐ′のタプル（ｋ，ｔｓ，Ｐ′）で表される候補に関連する多項式Ｐ′を記述する曲線が、ライタから受信される対応するタプル（ｋ，ｔｓ，ｖ，（ｘｉ，Ｐ（ｘｉ））から得られる点（ｘｉ，Ｐ（ｘｉ）を含むかどうかをチェックすることからなる。正当性は秘密のチャネルによって保証されることが可能であり、正当なサーバは、自己の持分を決して公表してはならない。
【００４８】
さらなる好ましい実施形態によれば、コミットメント情報はサーバに依存して生成され、好ましくは各サーバごとに、対応する別個のコミットメント情報が生成される。これにより、各サーバごとにローカルなコミットメント情報を生成することが可能となり、情報理論的な、または無条件のセキュリティを提供することができる。
【００４９】
さらなる好ましい実施形態によれば、セキュアなチャネル、好ましくは認証されたポイントツーポイントチャネルが、メッセージおよび／または情報の交換のために使用される。これにより、受信者が送信者からメッセージを受信した場合、その送信者がそのメッセージを送信したことが保証される。受信者および送信者が双方とも正当な場合、その送信者によって送信されるあらゆるメッセージが最終的にその受信者によって受信される。
【００５０】
さらなる好ましい実施形態によれば、候補は、保存されたキーおよび最後に保存および／または最後に受信された秘密情報を含む。これにより、あるタイムスタンプ以降の相異なる候補の簡易で高速な妥当性検査が可能となり、アトミック一貫性が実現される。
【００５１】
さらなる好ましい実施形態によれば、すべての候補の和集合がステップＣ）で送信される。これにより、メッセージ内の最小限の情報ですべての候補を送信することが可能となり、同一の候補が複数回送信されることが回避される。もう１つの利点として、妥当性検査はサーバによって実行されても、または、サーバの後にリーダによって実行されてもよい。というのは、妥当性検査に必要なすべての情報がサーバへ送信されており、サーバによってリーダに利用可能とされ得るからである。
【００５２】
さらなる好ましい実施形態によれば、ステップＢ）に従って収集された候補を含む第３のメッセージ、および、ステップＤ）に従って妥当とされた候補を含む第４のメッセージが、第１のメッセージを受信した後に提供される。第３のメッセージおよび第４のメッセージは、特に、１つのメッセージで提供されてもよい。
【００５３】
例えば、正当なサーバが、ステップＡ）に従って第１のメッセージに応答して、ステップＢ）に従って、読み出すべきデータの候補を収集し、さらに、収集された候補のうち妥当とされた候補を送信する。待機条件、すなわち、同じ読み出すべきデータの候補および対応する秘密情報を含むｔ＋１個の第２のメッセージの受信が、ステップＤ）に従って妥当とされた収集された候補に適用される。妨害を避けるため、リーダは、所定の条件（例えばローカルタイマの満了）が満たされるまでに限って、その待機条件が満たされるのを待機する。ある段階における読み出し動作が成功しない場合、リーダは、第１の段階を完了するために別個のスレッドで待機しながら、第２の段階を実行してもよい。その利点の１つは、読み出し動作がレイテンシに関して影響を受けないことである。データの再送を避けるため、サーバは、データ（好ましくは第１の読み出し段階中にリーダへすでに送信されたデータタプル）を追跡してもよい。
【００５４】
さらなる好ましい実施形態によれば、第４のメッセージを受信した後、読み出すべきデータの候補が選別除去される。その利点の１つは、その場合、第２の段階を実行することはもはや不要なことである。というのは、リーダは、第１の段階の終了時に候補を選別除去するので、ｇｅｔすなわち読み出し動作を第１の段階で完了することが可能だからである。
【００５５】
本発明を好ましい態様で実施するにはいくつもの可能性がある。このためには、一方で請求項１に従属する諸請求項を参照しつつ、他方で図面により例示された本発明の好ましい実施形態についての以下の説明を参照されたい。図面を用いて本発明の好ましい実施形態を説明する際には、本発明の教示による好ましい実施形態一般およびその変形例について説明する。
【図面の簡単な説明】
【００５６】
【図１】本発明の実施形態によるデータを保存する方法を示す図である。
【図２】本発明の実施形態によるデータを読み出す方法を示す図である。
【発明を実施するための形態】
【００５７】
図１は、本発明の実施形態によるデータを保存する方法を示している。
【００５８】
図１において、ライタｗは、４個のサーバＳ１〜Ｓ４（全部でｎ＝４個のサーバであり、許容される悪意サーバの数はｔ＝１）を含むキーバリューストレージにおいて、キーｋの下で値ｖを保存するｐｕｔすなわち書き込み動作ｐｕｔ（ｋ，ｖ）を実行する。コミットメント情報ｃｏｍｍｉｔは、提供された秘密情報に従ってすでに生成されていると仮定する。
【００５９】
第１のステップで、ライタｗは、サーバＳ１〜Ｓ４へ第１のメッセージ１ａを配布する。第１のメッセージ１ａ内に、ライタｗは、キーｋ、保存すべき値ｖ、タイムスタンプ情報ｔｓおよびコミットメント情報ｃｏｍｍｉｔを含める。ライタは、メッセージをすべてのサーバＳ１〜Ｓ４へ送信し、少なくともｎ−ｔ＝４−１＝３個のサーバからの応答を待機する。
【００６０】
正当なサーバＳｉが第１のメッセージ１ａを受信し、当該サーバＳｉがキーｋ、値ｖ、コミットメント情報ｃｏｍｍｉｔおよびｔｓ′＞ｔｓであるようなタイムスタンプ情報ｔｓ′のメッセージを受信していない場合、サーバＳｉは、受信した第１のメッセージ１ａに含まれる情報、すなわちキーｋ、値ｖ、タイムスタンプ情報ｔｓおよびコミットメント情報ｃｏｍｍｉｔを保存する（参照符号ｓａｖｉｎｇ１）。いずれの場合でも、サーバＳｉは、確認応答メッセージすなわちｏｋメッセージによりライタｗに応答する。
【００６１】
４−１＝３個のｏｋメッセージすなわち応答を受信した後、ライタｗは、今度はキーｋ、タイムスタンプｔｓ、および、コミットメント情報ｃｏｍｍｉｔに対応する秘密情報ｓｅｃｒｅｔを含む２回目のメッセージ（第２のメッセージ、参照符号２ａで表す）を送信することによって、秘密情報ｓｅｃｒｅｔを公表する。キーｋおよびタイムスタンプｔｓは、秘密情報、コミットメント情報および対応する値ｖに関係する。
【００６２】
正当な（すなわち故障していない、または悪意でない）サーバＳｉが、キーｋ、タイムスタンプｔｓおよび秘密情報ｓｅｃｒｅｔを含む第２のメッセージ２ａを受信すると、サーバＳｉは、キーｋおよびｔｓ′＞ｔｓであるようなタイムスタンプ情報ｔｓ′を含む別の第２のメッセージ２ａを受信していなければ、タプル〈ｋ，ｔｓ，ｓｅｃｒｅｔ〉を保存する（ｓａｖｉｎｇ２）。いずれの場合でも、サーバＳｉは、ｏｋメッセージ２ｂにより応答する。第１のメッセージ１ａ、１ｂによる第１の段階および第２のメッセージ２ａ、２ｂによる第２の段階を含むｐｕｔすなわち書き込み動作は、ライタｗが３個のｏｋメッセージ２ｂをを受信したときに完了する。
【００６３】
以下の仮定の下で、書き込みすなわちｐｕｔ動作のレイテンシをさらに低減することができる。すなわち、ライタによるｐｕｔすなわち書き込み動作は、サーバとの２回の通信で完了することができる。
【００６４】
ａ）個々のキーへのアクセスは順次的である、ｂ）ライタ／リーダとサーバとの間の基礎となるネットワークは同期的である、および、ｃ）故障がない、という仮定の下で、以下のｐｕｔすなわち書き込み動作が本発明により実行可能である。同期、無競合および無故障によって実現される期間は、「通常の場合」とみなされ、そのように呼ばれることがある。
【００６５】
通常の場合、すべての正当なサーバＳｉは、同じキーｋに対して同じ更新の系列を適用するので、それらの更新はすべて同じ最高のタイムスタンプｔｓを保持する。したがって、サーバＳｉは、ライタｗによる明示的な調整なしに、グローバルに一貫性のあるタイムスタンプｔｓを値ｖにローカルに割り当てることが可能である。ライタは、タイムスタンプ収集および割当の段階を省略してもよい。その場合、ｐｕｔまたは読み出し動作が以下のように修正される。すなわち、事前書き込み段階で、ライタｗは、タイムスタンプｔｓなしで第１のメッセージ１ａを送信する。したがって、第１のメッセージ１ａは、キーｋ、値ｖおよびコミットメント情報ｃｏｍｍｉｔを含む。正当なサーバＳｉは、第１のメッセージ１ａを受信した後、最高のローカルタイムスタンプｔｓをさらに高いタイムスタンプ値ｔｓ′＝ｔｓ＋１にインクリメントし、キーｋ、値ｖおよびコミットメント情報ｃｏｍｍｉｔをタイムスタンプｔｓ′＝ｔｓ＋１とともに含む受信したタプルを保存する（ｓａｖｉｎｇ１）。
【００６６】
そして、サーバＳｉは、タイムスタンプ情報ｔｓ′を含む第１のメッセージ１ｂによりライタｗに応答する。そして、ライタｗは、等しいタイムスタンプｔｓ′でサーバＳ１〜Ｓ４からｎ−ｔ＝４−１＝３個の応答を受信するまで待機する。その意味は、ｔ＋１＝２個の正当なサーバが値ｖに同じタイムスタンプｔｓ′を割り当てたということである。さらなるｐｕｔすなわち書き込み動作を妨害しないために、ライタｗは、ローカルタイマの満了までに限って待機する。いずれの場合でも、ライタｗは、ｎ−ｔ＝４−１＝３個のサーバから応答を受信することを待機する。すべての応答（第１のｏｋメッセージ１ｂ）が同じタイムスタンプｔｓをもつ場合、ライタｗは書き込み段階に進み、キーｋ、タイムスタンプｔｓおよび秘密情報ｓｅｃｒｅｔを含む第２のメッセージ２ａを送信する。すべての応答１ｂが相異なるタイムスタンプを含む場合、ライタｗは事前書き込み段階を繰り返し、キーｋ、タイムスタンプｔｓ′、値ｖおよびコミットメント情報ｃｏｍｍｉｔを含む別の第１のメッセージ１ａ′を送信する。ここでｔｓ′＝ｔｓ＋１であり、タイムスタンプｔｓは受信された最高のタイムスタンプを表す。
【００６７】
図２は、本発明の実施形態によるデータを読み出す方法を示している。
【００６８】
ｇｅｔすなわち読み出し動作において、リーダｒｄは、キーｋを含む第１のメッセージ１ａを送信し、ｎ−ｔ＝４−１＝３個のサーバからの応答を待機する。正当なサーバＳｉがリーダｒｄからキーｋを含む第１のメッセージ１ａを受信すると、サーバＳｉは、以前の書き込み動作から受信されたキーｋ、タイムスタンプｔｓおよび秘密情報ｓｅｃｒｅｔの最高タイムスタンプのタプルと、他の悪意の可能性のあるリーダｒｄから受信されたキーｋ、タイムスタンプｔｓ′（ｔｓ′＞ｔｓ）および秘密情報ｓｅｃｒｅｔ′を含むタプルの集合とを含む候補の集合Ｃｉを構成する。そして、サーバＳｉは、集合Ｃｉを、対応する第１のメッセージ１ｂでリーダｒｄへ送信する。
【００６９】
リーダｒｄが３個のサーバから第１の応答メッセージ１ｂを受信すると、リーダｒｄは、すべての候補集合Ｃｉの和集合Ｃを含む第２のメッセージ２ａをｎ個すべてのサーバＳ１〜Ｓ４へ送信する。正当なサーバＳｉが、和集合Ｃを含む対応する第２のメッセージ２ａを受信すると、正当なサーバＳｉは、キーｋ、タイムスタンプｔｓおよび秘密情報ｓｅｃｒｅｔを含む各タプルについて、キーｋ、タイムスタンプｔｓ、値ｖおよびコミットメント情報ｃｏｍｍｉｔを含む対応するタプルがサーバＳｉにローカルに保存されているかどうかをチェックする。ｙｅｓの場合、サーバＳｉは、そのコミットメント情報ｃｏｍｍｉｔを用いて秘密情報ｓｅｃｒｅｔを妥当性検査する。そして、サーバＳｉは、上記の妥当性チェックに合格したキーｋ、タイムスタンプｔｓおよび値ｖを含むタプルの別の集合Ｖｉを構成する。サーバＳｉは、第２の応答メッセージ２ｂでリーダｒｄへ集合Ｖｉを送信する。最後のステップで、リーダｒｄは、少なくとも３個のサーバからの、対応する応答メッセージ２ｂの受信を待機する。そして、最高のタイムスタンプｔｓを有する妥当とされた候補Ｖｉの値ｖが選択され、ｇｅｔすなわち読み出し動作ｇｅｔ（ｋ）に対する値ｖとして返される。キーｋ、タイムスタンプｔｓおよび秘密情報ｓｅｃｒｅｔを含む妥当とされた候補Ｖは、ｔ＋１個のサーバがキーｋ、タイムスタンプｔｓおよび値ｖを含む第２の応答メッセージ２ｂにより応答する場合に妥当である。キーｋ′、タイムスタンプｔｓ′、秘密情報ｓｅｃｒｅｔ′を有する候補は、ｎ−ｔ＝４−１＝３個のサーバがキーｋ′、タイムスタンプｔｓ′、値ｖ′を含まない第２の応答メッセージ２ｂにより応答する場合に非妥当である。
【００７０】
上記で定義した通常の場合、キーｋ′（ｋ′＝ｋ）、タイムスタンプｔｓ、秘密情報ｓｅｃｒｅｔと、キーｋ′（ｋ′＝ｋ）、タイムスタンプｔｓ、値ｖを含む妥当とされたタプルに含まれる対応する値とを有するタプルで表される返された候補が、第１の段階（メッセージ１ａおよび１ｂで表される）におけるｎ−ｔ＝４−１＝３個のサーバから第１の段階において収集されるならば、ｇｅｔすなわち読み出し動作は、メッセージ２ａ、２ｂによる第２の段階を省略することも可能である。正当なサーバＳｉは、キーｋのみを含む第１のメッセージ１ａに応答して、第１の応答メッセージ１ｂおよび第２の応答メッセージ２ｂをリーダｒｄへ送信あるいは返送する。応答メッセージ１ｂ、２ｂは両方とも、図２のメッセージ１ｂおよび２ｂに示したのと同じ情報を含む。このメッセージの分離は論理的であり、含まれるデータは単一の物理メッセージで送信可能である。
【００７１】
リーダｒｄにおいて、図２のメッセージ２ａ、２ｂで表される第２の読み出し段階の待機条件が、第１の段階で受信されるメッセージ１ｂ、２ｂに適用される。待機条件とは、リーダｒｄが、少なくともｎ−ｔ＝４−１＝３個のサーバからの応答メッセージ１ｂ、２ｂの受信を待機することを意味する。
【００７２】
妨害を避けるため、リーダｒｄは、ローカルタイマの満了までに限って、待機条件が満たされるのを待機する。また、リーダｒｄは、ある段階における読み出しが成功しない場合、第２の段階に移行し、別個のスレッドで待機してもよい。これにより、ｇｅｔすなわち読み出し動作のレイテンシが影響を受けない。データの再送を避けるため、サーバは、第１の段階中にリーダｒｄへすでに送信されたデータタプルを追跡してもよい。
【００７３】
要約すれば、本発明は、可用性、完全性およびアトミック一貫性を提供する。完全性は以下のように満たされる。すなわち、キーｋのｇｅｔすなわち読み出し動作が値ｖを返す場合、その値は、ビザンチンサーバによって捏造されたものではない。詳細には、完全性が満たされる理由は、ｇｅｔすなわち読み出し動作がキーｋの下で値ｖを受信する場合、ｔ＋１個のサーバが、値ｖが書かれたことを確認しているからである。したがって、正当なサーバが値ｖを保存しているので、ｖは改竄されていない。
【００７４】
また、可用性が満たされる。すなわち、値ｖによるキーｋのｐｕｔすなわち書き込み動作と、値ｖに対するキーｋの読み出しすなわちｇｅｔ動作は決して互いに妨害しない。
【００７５】
さらに、アトミック一貫性が満たされる。すなわち、キーｋのｇｅｔすなわち読み出し動作が値ｖを返す場合、その値ｖは、ａ）キーｋによるｇｅｔすなわち読み出し動作、またはｂ）ｇｅｔすなわち読み出し動作と同時並行したｐｕｔすなわち書き込み動作、に先行するキーｋおよび値ｖによる最後のｐｕｔすなわち書き込み動作によって書き込まれたものである。キーｋによるｇｅｔすなわち読み出し動作が値ｖを返し、その後のキーｋ′によるｇｅｔすなわち読み出し動作が値ｖ′を返す場合、キーｋおよび値ｖ′による書き込み動作すなわちｐｕｔ動作は、キーｋおよび値ｖによる書き込みすなわちｐｕｔ動作に先行していない。
【００７６】
詳細には、アトミック一貫性は以下の理由で満たされる。すなわち、ｐｕｔすなわち書き込み動作ｐｕｔ（ｋ，ｖ）がｇｅｔすなわち読み出し動作ｇｅｔ（ｋ）に先行する場合、キーｋ、タイムスタンプ情報ｔｓおよび秘密情報ｓｅｃｒｅｔを含む対応する候補（ｋ，ｔｓ，ｓｅｃｒｅｔ）がｔ＋１個の正当なサーバに保存されている。キーｋに対するｇｅｔすなわち読み出し動作はｎ−ｔ個のサーバの応答を待機するので、ｔ＋１個の正当なサーバのうちのいずれかはｎ−ｔ個のサーバのうちにあり（定足数の交わり）、ｔｓ′≧ｔｓとなる候補（ｋ，ｔｓ′，ｓｅｃｒｅｔ′）により応答する。そのサーバは正当なサーバであるので、その候補は決して非妥当とされることはなく、最終的に妥当となる。こうして、アトミック一貫性は、対応する値ｖ′を返すことにより満たされる。
【００７７】
ｇｅｔすなわち読み出し動作ｇｅｔ（ｋ）およびｇｅｔ（ｋ）′が悪意でないリーダによる読み出し動作であり、ｇｅｔ（ｋ）がｇｅｔ（ｋ）′に先行し、ｖ、ｖ′が返される対応する値であり、さらに、矛盾律により、キーｋおよび値ｖ′による書き込みすなわちｐｕｔ動作がキーｋおよび値ｖによる対応するｐｕｔすなわち読み出し動作に先行すると仮定される場合、ｇｅｔ（ｋ）動作は値ｖを返すので、ｔ＋１個のサーバは、キーｋ、タイムスタンプｔｓおよび秘密情報ｓｅｃｒｅｔを含む対応する候補を保証している。こうして、第１のメッセージ１ａ、１ｂで表される事前書き込み段階は完了する。これは、ｔ＋１個の正当なサーバがキーｋ、タイムスタンプ情報ｔｓ、値ｖおよびコミットメント情報ｃｏｍｍｉｔを保存していることを意味する。
【００７８】
読み出し動作ｇｅｔ（ｋ）は、〈ｋ，ｔｓ，ｓｅｃｒｅｔ〉を含む候補をｔ＋１個の正当なサーバに書き戻している。他のｇｅｔすなわち読み出し動作ｇｅｔ（ｋ）′はｎ−ｔ個のサーバの応答を待機するので、それらのうちの少なくとも１つはキーｋ、タイムスタンプｔｓおよび秘密情報（ｋ，ｔｓ，ｓｅｃｒｅｔ）を報告し、ｔ＋１個の正当なサーバが（ｋ，ｔｓ，ｖ，ｃｏｍｍｉｔ）を保存しているので、候補（ｋ，ｔｓ，ｓｅｃｒｅｔ）が最終的に妥当とされる。リーダｒｄは常に最高タイムスタンプの妥当な候補を返し、値ｖ′はｖよりも低いタイムスタンプｔｓに割り当てられている（ｐｕｔ動作ｐｕｔ（ｋ、ｖ′）はｐｕｔ（ｋ、ｖ）に先行するため）ので、ｇｅｔ動作ｇｅｔ（ｋ）′は、仮定に矛盾する値ｖ′を返さない。したがって、さらにアトミック一貫性が満たされている。
【００７９】
要約すれば、本発明は、リーダが、返す候補としてある値を選択する場合、書き込み動作は事前書き込み段階を完了していなければならない。すなわち、その値はｔ＋１個の正当なサーバの集合に保存されている。読み出し動作は、事前書き込み段階に関連する書き戻しを省略することができる。また、本発明は、事前書き込み段階の完全性を提供する。値は、ライタのみによって知られている秘密情報へのコミットメント情報とともに書き込まれる。秘密情報は、事前書き込み段階の完了後にのみライタによって公表される。読み出し動作中に、コミットメント情報は、秘密情報の妥当性を検証するために使用される。秘密情報および値の妥当性が両方とも十分多く（すなわち、少なくともｔ＋１個）のサーバによって確認される場合、その値は改竄されておらず、事前書き込み段階は完了していることが保証される。
【００８０】
本発明によれば、１回の往復を要する１回の書き戻しで十分である。また、本発明によれば、リーダは、実際に返される候補を決定する前に書き戻しを行う。したがって、返される候補を含む集合の書き戻しで十分であり、選別の作業は後続の読み出しに委ねられる。書き戻しは、すべての関連する候補を収集した直後に実行されてもよい。これにより、別個の書き戻し段階が不要となる。
【００８１】
また、本発明は、読み出し動作の場合に、メタデータ（すなわち、値に関するが値自体ではないデータ）のみを書き戻す。これにより、悪意のリーダがサーバに保存された情報を毀損することが防止され、ビザンチンリーダへの耐性を得ることが可能となる。
【００８２】
本発明によれば、秘密が第１の段階でコミットされ、秘密は第２の段階で公表される。読み出し動作中に、コミットメント情報は、秘密情報の妥当性をチェックするために使用される。秘密情報がｔ＋１個のサーバによって妥当とされた場合、書き込みすなわちｐｕｔ動作が十分に進行しており、候補を返すことが可能である。そうでない場合、ｎ−ｔ個のサーバが秘密情報を非妥当としており、候補は破棄される。
【００８３】
一実施形態において、本発明によれば、タイムスタンプなしで値を事前書き込みし、明示的な調整なしでタイムスタンプをサーバにローカルに割り当てる。これにより、１回での読み出し動作が可能となる。サーバは、キーｋを有する第１のメッセージに対して、あたかもリーダからメッセージ２ａをすでに受信しているかのように、メッセージ１ｂおよび２ｂの両方により応答する。その場合、リーダは、１回目の最後に候補を選別除去しなければならない。
【００８４】
本発明によれば、以下のことが実現される。
【００８５】
１）悪意の故障に対して耐性のある堅牢で無署名のアトミックなキーバリューストア。悪意のサーバおよびクライアント（リーダ）の両方がサポートされる。
【００８６】
２）レイテンシ、メッセージ数、メッセージサイズおよび必要な記憶容量等のすべての関連するメトリックが、クライアント群のサイズに依存しない、という意味でのスケーラビリティ。クライアント数には上限がない。また、リーダは完全に未知であってもよい。スケーラビリティとは、メッセージ数およびメッセージサイズがクライアント数に依存しないことを意味する。サーバ間通信がないため、メッセージ数はサーバ数に比例する。
【００８７】
３）最適で徐々に劣化する読み出しレイテンシ。通常の場合（単一のキーに対する同期および無競合で表される）には１回、最悪の場合には２回。低レイテンシ：本発明は、２往復の読み出しという、可能な限り最低のレイテンシを実現する。
【００８８】
４）最適な複製度３ｔ＋１。サポートされる悪意サーバの割合を向上させることはできない。その結果としての利点は、それぞれデータの持分を保持する多数のデータノードがフォールトトレランスのために複製されたデータセンタ環境において明らかである。
【００８９】
５）書き込まれる値に依存しない安価で簡易な方法で秘密およびコミットメントが計算される。したがって、メタデータを、クリティカルパスの外部で事前に生成することができる。
【００９０】
６）悪意サーバのしきい値、任意個数のクライアントクラッシュ、非同期および競合にかかわらず、可用性および一貫性が保証される。リーダは、改竄された、あるいは古い値を決して返すことはなく、メタデータの秘匿性が保持される限り可用性が保証される。したがって、本方法およびシステムの安全性は常に（決定論的に）保証される。本発明は、署名に基づくいかなるプロトコルよりも堅牢である。
【００９１】
署名に基づくストレージプロトコルは、ある仮定、例えば、キーの秘匿性、ある数学問題を解くことが手に負えないこと（因数分解の困難さ）、の下でのみ一貫性および完全性を保証する。これらの仮定が破れるときには、一貫性および完全性も破れる。一貫性および完全性は、本発明によって実現される。仮定の集合から最悪に逸脱した場合でも、安全性は保持される。
【００９２】
上記の説明および添付図面の記載に基づいて、当業者は本発明の多くの変形例および他の実施形態に想到し得るであろう。したがって、本発明は、開示した具体的実施形態に限定されるものではなく、変形例および他の実施形態も、添付の特許請求の範囲内に含まれるものと解すべきである。本明細書では特定の用語を用いているが、それらは総称的・説明的意味でのみ用いられており、限定を目的としたものではない。
【図１】
0005801482.tif 000002
【図２】
0005801482.tif 000003