(57)【要約】      （修正有）【課題】Ｐｒｏｏｆ  ｏｆ  ＷｏｒｋｓやＰｒｏｏｆ  ｏｆ  Ｓｔａｋｅｓといった競争が無いといった理由により比較的耐改ざん性が低いシステムにおいて改ざんが行われても、改ざんを検知可能とする。【解決手段】第２の計算機システムのノードシステム１３００が、第１の計算機システムからの要求で指定されている対象の状態を更新する処理を実行し、対象に対応したアセットに、対象の状態を表すデータであるオブジェクトを追加する。アセットは、対象毎にあり、オブジェクトの時系列である。アセットセットは、アセットの集合であり、ＤＡＧ構造をなす。ノードは、オブジェクトであり、エッジは、オブジェクト間の関係を表す。追加されたオブジェクトは、末端オブジェクトである。ノードシステムは、末端オブジェクト又はそのサマリである存在証明を出力し、存在証明は、ノードシステムの管理主体と異なる管理主体により管理される外部システムに保存される。【選択図】図９
2020119502.tif 000002
【特許請求の範囲】
【請求項１】
一つ又は複数の第１の計算機システムに備えられた一つ又は複数の第１の管理部と、
前記一つ又は複数の第１の計算機システムと通信する第２の計算機システムにおける一つ又は複数のノードシステムに備えられた一つ又は複数の第２の管理部と
を備え、
第１の管理部が、対象を指定した状態更新要求を前記第２の計算機システムに発行し、
第２の管理部は、前記状態更新要求を受信し、前記状態更新要求で指定されている対象の状態を更新する処理を実行し、
当該実行において、当該第２の管理部は、当該第２の管理部が管理するアセットセットのうちの、前記対象に対応したアセットに、オブジェクトを追加し、
オブジェクトは、対象の状態を表すデータであり、
アセットは、対象毎にあり、
アセットは、オブジェクトの時系列であり、
アセットセットは、アセットの集合であり、
アセットセットは、ＤＡＧ（Directed Acyclic Graph）構造をなし、
前記ＤＡＧ構造をなすアセットセットにおいて、ノードは、オブジェクトであり、エッジは、一つ以上の対象の状態を更新する一つ以上の処理におけるオブジェクト間の関係を表し、
前記追加されたオブジェクトは、前記状態更新要求で指定されている対象に対応したアセットにおける末端オブジェクトであり、
前記第２の管理部は、前記末端オブジェクト又はそのサマリである存在証明を出力し、
前記出力された存在証明は、当該第２の管理部を有するノードシステムの管理主体と異なる管理主体により管理される外部システムに保存される、
データ管理システム。
【請求項２】
いずれの第１の計算機システムの管理主体も、前記第２の計算機システムにおけるいずれのノードシステムの管理主体と異なる、
請求項１に記載のデータ管理システム。
【請求項３】
前記処理が、前記状態更新要求で指定されている対象を含む複数の対象の状態を更新する処理の場合、当該処理の実行において、前記第２の管理部は、当該第２の管理部が管理するアセットセットのうちの、前記指定されている対象を含む一つ又は複数の対象に対応した一つ又は複数のアセットの各々に、オブジェクトを追加し、
前記第２の管理部は、前記一つ又は複数のアセットの各々について、当該アセットに追加されたオブジェクトのサマリである存在証明を出力する、
請求項１又は２に記載のデータ管理システム。
【請求項４】
前記外部システムは、前記状態更新要求を発行した前記第１の管理部を有する第１の計算機システム、又は、当該第１の計算機システムを含む前記一つ又は複数の第１の計算機システムの全てがアクセス可能な記憶システムである、
請求項１乃至３のうちのいずれか１項に記載のデータ管理システム。
【請求項５】
前記第１の管理部が、
前記存在証明を前記第２の計算機システムから受信して保存した後、前記末端オブジェクト又はそのサマリを前記第２の計算機システムから受信し、
当該末端オブジェクト又はそのサマリと前記保存された存在証明とを用いて、当該末端オブジェクトの改ざんの有無を判断する、
請求項４に記載のデータ管理システム。
【請求項６】
前記第１の管理部は、
前記対象を指定した状態参照要求を前記第２の計算機システムに発行し、
前記状態参照要求に応答して、前記対象に対応したアセットの末端オブジェクト又はそのサマリを前記第２の計算機システムから受信する、
請求項５に記載のデータ管理システム。
【請求項７】
前記第２の管理部が、前記第１の管理部から前記存在証明を受信し、当該存在証明を用いて、前記末端オブジェクトの改ざんの有無を判断する、
請求項４に記載のデータ管理システム。
【請求項８】
前記第１の管理部は、前記指定された対象と同一の対象を指定した次の状態更新要求を前記第２の計算機システムに発行し、
前記次の状態更新要求には、前記存在証明が関連付けられ、
前記第２の管理部が、前記次の状態更新要求で指定されている対象の状態を更新する処理の実行において、前記次の状態更新要求に関連付けられている存在証明を用いて、前記末端オブジェクトの改ざんの有無を判断する、
請求項７に記載のデータ管理システム。
【請求項９】
前記状態更新要求には、前記第１の管理部により生成された暗号学的に衝突が困難な値が関連付けられ、
前記末端オブジェクト及びそれの存在証明の各々は、その値を含む、
請求項１乃至８のうちのいずれか１項に記載のデータ管理システム。
【請求項１０】
前記状態更新要求には、
処理を特定するためのＩＤ又は処理それ自体である処理情報と、
当該処理に使用される一つ以上の引数である引数情報と
が関連付けられており、
前記追加されたオブジェクトは、
前記指定された対象の処理前の状態を表す処理前状態情報と、
前記指定された対象の処理後の状態を表す処理後状態情報と、
前記状態更新要求に関連付けられていた処理情報と、
前記状態更新要求に関連付けられていた引数情報と
を含む、
請求項１乃至９のうちのいずれか１項に記載のデータ管理システム。
【請求項１１】
一つ又は複数の第１の計算機システムのうちのいずれかの第１の計算機システムが、対象を指定した状態更新要求を、前記一つ又は複数の第１の計算機システムと通信する第２の計算機システムに発行し、
前記第２の計算機システムにおける一つ又は複数のノードシステムのうちのいずれかのノードシステムが、前記状態更新要求を受信し、前記状態更新要求で指定されている対象の状態を更新する処理を実行し、
当該実行において、前記ノードシステムが、当該ノードシステムが管理するアセットセットのうちの、前記対象に対応したアセットに、オブジェクトを追加し、
オブジェクトは、対象の状態を表すデータであり、
アセットは、対象毎にあり、
アセットは、オブジェクトの時系列であり、
アセットセットは、アセットの集合であり、
アセットセットは、ＤＡＧ（Directed Acyclic Graph）構造をなし、
前記ＤＡＧ構造をなすアセットセットにおいて、ノードは、オブジェクトであり、エッジは、一つ以上の対象の状態を更新する一つ以上の処理におけるオブジェクト間の関係を表し、
前記追加されたオブジェクトは、前記状態更新要求で指定されている対象に対応したアセットにおける末端オブジェクトであり、
前記ノードシステムは、前記末端オブジェクト又はそのサマリである存在証明を出力し、
前記出力された存在証明は、当該ノードシステムの管理主体と異なる管理主体により管理される外部システムに保存される、
データ管理方法。
【請求項１２】
一つ又は複数の第１の計算機システムと通信する第２の計算機システムにおける一つ又は複数のノードシステムのいずれかのノードシステムが、対象が指定された状態更新要求を受信し、
前記ノードシステムが、前記状態更新要求で指定されている対象の状態を更新する処理を実行し、
前記ノードシステムが、当該実行において、前記ノードシステムが管理するアセットセットのうちの、前記対象に対応したアセットに、オブジェクトを追加し、
オブジェクトは、対象の状態を表すデータであり、
アセットは、対象毎にあり、
アセットは、オブジェクトの時系列であり、
アセットセットは、アセットの集合であり、
アセットセットは、ＤＡＧ（Directed Acyclic Graph）構造をなし、
前記ＤＡＧ構造をなすアセットセットにおいて、ノードは、オブジェクトであり、エッジは、一つ以上の対象の状態を更新する一つ以上の処理におけるオブジェクト間の関係を表し、
前記追加されたオブジェクトは、前記状態更新要求で指定されている対象に対応したアセットにおける末端オブジェクトであり、
前記ノードシステムが、前記末端オブジェクト又はそのサマリである存在証明を出力し、
前記出力された存在証明は、前記ノードシステムの管理主体と異なる管理主体により管理される外部システムに保存される、
データ管理方法。
【請求項１３】
一つ又は複数のノードシステムを含む第２の計算機システムと通信する一つ又は複数の第１の計算機システムのうちのいずれかの第１の計算機システムが、対象を指定した状態更新要求を前記第２の計算機システムに発行し、
前記一つ又は複数のノードシステムのうちのいずれかのノードシステムが、前記状態更新要求を受信し、前記状態更新要求で指定されている対象の状態を更新する処理を実行し、
当該実行において、前記ノードシステムが、前記ノードシステムが管理するアセットセットのうちの、前記対象に対応したアセットに、オブジェクトを追加し、
オブジェクトは、対象の状態を表すデータであり、
アセットは、対象毎にあり、
アセットは、オブジェクトの時系列であり、
アセットセットは、アセットの集合であり、
アセットセットは、ＤＡＧ（Directed Acyclic Graph）構造をなし、
前記ＤＡＧ構造をなすアセットセットにおいて、ノードは、オブジェクトであり、エッジは、一つ以上の対象の状態を更新する一つ以上の処理におけるオブジェクト間の関係を表し、
前記追加されたオブジェクトは、前記状態更新要求で指定されている対象に対応したアセットにおける末端オブジェクトであり、
前記ノードシステムは、前記末端オブジェクト又はそのサマリである存在証明を出力し、
前記出力された存在証明は、当該第２の管理部を有するノードシステムの管理主体と異なる管理主体により管理される外部システムに保存され、
前記外部システムは、前記第１の計算機システム、又は、当該第１の計算機システムを含む前記一つ又は複数の第１の計算機システムの全てがアクセス可能な記憶システムであり、
前記第１の計算機システムが、前記存在証明を前記第２の計算機システムから受信して保存した後、前記末端オブジェクト又はそのサマリを前記第２の計算機システムから受信し、当該末端オブジェクト又はそのサマリと前記保存された存在証明とを用いて、当該末端オブジェクトの改ざんの有無を判断する、
データ管理方法。
【請求項１４】
一つ又は複数の第１の計算機システムと通信する第２の計算機システムにおける一つ又は複数のノードシステムのいずれかのノードシステムに、
対象が指定された状態更新要求を受信し、
前記状態更新要求で指定されている対象の状態を更新する処理を実行し、
当該実行において、前記ノードシステムが管理するアセットセットのうちの、前記対象に対応したアセットに、オブジェクトを追加し、
オブジェクトは、対象の状態を表すデータであり、
アセットは、対象毎にあり、
アセットは、オブジェクトの時系列であり、
アセットセットは、アセットの集合であり、
アセットセットは、ＤＡＧ（Directed Acyclic Graph）構造をなし、
前記ＤＡＧ構造をなすアセットセットにおいて、ノードは、オブジェクトであり、エッジは、一つ以上の対象の状態を更新する一つ以上の処理におけるオブジェクト間の関係を表し、
前記追加されたオブジェクトは、前記状態更新要求で指定されている対象に対応したアセットにおける末端オブジェクトであり、
前記末端オブジェクト又はそのサマリである存在証明を出力し、
前記出力された存在証明は、前記ノードシステムの管理主体と異なる管理主体により管理される外部システムに保存される、
を実行させるコンピュータプログラム。
【請求項１５】
一つ又は複数のノードシステムを含む第２の計算機システムと通信する一つ又は複数の第１の計算機システムのうちのいずれかの第１の計算機システムに、
対象を指定した状態更新要求を前記第２の計算機システムに発行し、
前記一つ又は複数のノードシステムのうちのいずれかのノードシステムが、前記状態更新要求を受信し、前記状態更新要求で指定されている対象の状態を更新する処理を実行し、
当該実行において、前記ノードシステムが、前記ノードシステムが管理するアセットセットのうちの、前記対象に対応したアセットに、オブジェクトを追加し、
オブジェクトは、対象の状態を表すデータであり、
アセットは、対象毎にあり、
アセットは、オブジェクトの時系列であり、
アセットセットは、アセットの集合であり、
アセットセットは、ＤＡＧ（Directed Acyclic Graph）構造をなし、
前記ＤＡＧ構造をなすアセットセットにおいて、ノードは、オブジェクトであり、エッジは、一つ以上の対象の状態を更新する一つ以上の処理におけるオブジェクト間の関係を表し、
前記追加されたオブジェクトは、前記状態更新要求で指定されている対象に対応したアセットにおける末端オブジェクトであり、
前記ノードシステムは、前記末端オブジェクト又はそのサマリである存在証明を出力し、
前記出力された存在証明は、当該第２の管理部を有するノードシステムの管理主体と異なる管理主体により管理される外部システムに保存され、
前記外部システムは、前記第１の計算機システム、又は、当該第１の計算機システムを含む前記一つ又は複数の第１の計算機システムの全てがアクセス可能な記憶システムであり、
前記存在証明を前記第２の計算機システムから受信して保存した後、前記末端オブジェクト又はそのサマリを前記第２の計算機システムから受信し、当該末端オブジェクト又はそのサマリと前記保存された存在証明とを用いて、当該末端オブジェクトの改ざんの有無を判断する、
ことを実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、改ざん検知技術に関する。
【背景技術】
【０００２】
改ざん検知性を有するシステムの一例として、分散型台帳技術が適用されたシステムが知られており、分散型台帳技術の一例として、ブロックチェーンが知られている（例えば非特許文献１）。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】https://bitcoin.org/bitcoin.pdf
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ブロックチェーンとして、例えば、パブリックブロックチェーンと、プライベートブロックチェーンが知られている。
【０００５】
一般に、プライベートブロックチェーンでは、パブリックブロックチェーンと異なり、Proof of WorkやProof of Stakeといった競争が無く、全部のレコードを消して作り直すことが比較的簡単にできてしまう。
【０００６】
この種の問題は、プライベートブロックチェーンに限らずデータを管理するシステムであるデータ管理システム全般（例えば、コンソーシアムブロックチェーンや、ブロックチェーン以外の技術が適用されたデータ管理システム）についても起こり得る。
【課題を解決するための手段】
【０００７】
一つ又は複数の第１の計算機システムに備えられた一つ又は複数の第１の管理部と、一つ又は複数の第１の計算機システムと通信する第２の計算機システムにおける一つ又は複数のノードシステムに備えられた一つ又は複数の第２の管理部とが備えられる。第１の管理部が、対象を指定した状態更新要求を第２の計算機システムに発行する。第２の管理部は、当該状態更新要求を受信し、当該状態更新要求で指定されている対象の状態を更新する処理を実行する。当該実行において、当該第２の管理部は、当該第２の管理部が管理するアセットセットのうちの、上記対象に対応したアセットに、オブジェクトを追加する。オブジェクトは、対象の状態を表すデータである。アセットは、対象毎にある。アセットは、オブジェクトの時系列である。アセットセットは、アセットの集合である。アセットセットは、ＤＡＧ（Directed Acyclic Graph）構造をなす。ＤＡＧ構造をなすアセットセットにおいて、ノードは、オブジェクトであり、エッジは、一つ以上の対象の状態を更新する一つ以上の処理におけるオブジェクト間の関係を表す。上記追加されたオブジェクトは、上記状態更新要求で指定されている対象に対応したアセットにおける末端オブジェクトである。第２の管理部は、末端オブジェクト又はそのサマリである存在証明を出力する。当該出力された存在証明は、当該第２の管理部を有するノードシステムの管理主体と異なる管理主体により管理される外部システムに保存される。
【発明の効果】
【０００８】
各対象について末端オブジェクトの存在証明は外部システムに存在する。このため、或る対象について履歴が作成し直されたり末端オブジェクトが差し替えられたりといった改ざんがされた場合には、外部システムにある存在証明を用いることで当該改ざんを検知することができる。
【図面の簡単な説明】
【０００９】
【図１】実施例に係るシステム全体の構成の一例を示す。
【図２】クライアントシステムとノードシステムの実施例に係る構成の一例を示す。
【図３】クライアント管理データの一例を示す。
【図４】サスペンションテーブルの一例を示す。
【図５】コミットテーブルの一例を示す。
【図６】サーバ管理データの一例を示す。
【図７】アセットテーブルの一例を示す。
【図８】アセットテーブルの概念の一例を示す。
【図９】実施例の概要の一例を示す。
【図１０】実施例で行われる処理のフローチャートである。
【図１１Ａ】存在証明の第１の保存例を示す。
【図１１Ｂ】存在証明の第２の保存例を示す。
【図１２】改ざん検知処理をクライアントシステムで行うことの一例を示す。
【発明を実施するための形態】
【００１０】
以下の説明では、「インターフェース装置」は、一つ以上のインターフェースを含む。一つ以上のインターフェースは、一つ以上の同種の通信インターフェースデバイス（例えば一つ以上のＮＩＣ（Network Interface Card））であってもよいし二つ以上の異種の通信インターフェースデバイス（例えばＮＩＣとＨＢＡ（Host Bus Adapter））であってもよい。
【００１１】
また、以下の説明では、「記憶装置」は、一つ以上のメモリを含む。記憶装置に関して少なくとも一つのメモリは、揮発性メモリでよい。記憶装置は、主に、プロセッサによる処理の際に使用される。記憶装置は、メモリの他に、一つ以上の不揮発性の記憶デバイス（例えば、ＨＤＤ（Hard Disk Drive）又はＳＳＤ（Solid State Drive））を含んでもよい。
【００１２】
また、以下の説明では、「プロセッサ」は、一つ以上のプロセッサを含む。少なくとも一つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）のようなマイクロプロセッサである。一つ以上のプロセッサの各々は、シングルコアでもよいしマルチコアでもよい。プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。
【００１３】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサによって実行されることで、定められた処理を、適宜に記憶装置（例えばメモリ）及び／又はインターフェース装置（例えば通信ポート）等を用いながら行うため、処理の主語がプロセッサとされてもよい。プログラムを主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置が行う処理としてもよい。また、プロセッサは、処理の一部又は全部を行うハードウェア回路（例えばＦＰＧＡ（Field-Programmable Gate Array）又はＡＳＩＣ（Application Specific Integrated Circuit））を含んでもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記録媒体（例えば非一時的な記録媒体）であってもよい。また、以下の説明において、二つ以上のプログラムが一つのプログラムとして実現されてもよいし、一つのプログラムが二つ以上のプログラムとして実現されてもよい。
【００１４】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号のうちの共通符号を使用し、同種の要素を区別する場合は、参照符号を使用することがある。
【００１５】
また、以下の説明では、「オブジェクト」とは、アプリケーションプログラムのようなプログラムから見た１つの論理的な電子データの塊であり、具体的には、対象の状態を表すデータである。オブジェクトとしてのデータは、例えば、レコード、キーバリューペア又はタプルである。以下、オブジェクトとして、レコードを例に取る。
【００１６】
また、以下の説明では、「対象」とは、任意の有体物又は無体物である。例えば、「対象」として、口座を採用し、対象の状態として、残高を採用することができる。
【００１７】
また、以下の説明では、「状態更新要求」とは、状態更新処理の要求である。「状態更新処理」とは、対象の状態を更新する処理である。
【００１８】
図１は、実施例に係るシステム全体の構成の一例を示す。
【００１９】
複数のクライアントシステム１３Ａ、１３Ｂ、…と、サーバシステム１５が、通信ネットワーク１９を介して通信可能に接続される。サーバシステム１５が、一つ又は複数のノードシステム１３００から構成される。以下、説明を簡単にするために、サーバシステム１５が一つのノードシステム１３００から構成されるとする。なお、複数のクライアントシステム１３Ａ、１３Ｂ、…が、一つ又は複数の第１の計算機システムの一例である。サーバシステム１５が、第２の計算機システムの一例である。ノードシステム１３００毎に管理主体が異なっていてもよいし、二つ以上（例えば全て）のノードシステム１３００の管理主体が同一でもよい。
【００２０】
クライアントシステム１３は、クライアントプログラム１３４を実行する。クライアントプログラム１３４の他にユーザプログラム１２４を実行するクライアントシステム１３があってもよいし（例えばクライアントシステム１３Ａ）、ユーザプログラム１２４を実行するユーザシステム１２に通信ネットワーク１４を介して接続されたクライアントシステム１３（例えばクライアントシステム１３Ｂ）があってもよい。ユーザシステム１２は、ユーザの計算機（例えば、パーソナルコンピュータ）でよい。ユーザプログラム１２４は、Ｗｅｂブラウザでもよいしアプリケーションプログラムでもよい。通信ネットワーク１４は通信ネットワーク１９と一体でもよい。
【００２１】
データ管理システム１０は、複数のクライアントシステム１３Ａ、１３Ｂ、…で実行される複数のクライアントプログラム１３４と、ノードシステム１３００で実行されるサーバプログラム１５４とを備える。
【００２２】
図２は、クライアントシステム１３とノードシステム１３００の本実施例に係る構成の一例を示す。
【００２３】
クライアントシステム１３は、一つ又は複数のクライアント計算機１３０を含む。
【００２４】
クライアント計算機１３０は、インターフェース装置１３１、記憶装置１３２及びそれらに接続されたプロセッサ１３３を有する。
【００２５】
インターフェース装置１３１は、通信ネットワーク１９に接続される。
【００２６】
記憶装置１３２は、クライアントプログラム１３４及びクライアント管理データ１３５を記憶する。クライアント管理データ１３５は、クライアント計算機１３０において管理されるデータである。
【００２７】
プロセッサ１３３は、クライアントプログラム１３４を実行する。クライアントプログラム１３４がプロセッサ１３３に実行されることで、第１の管理部の一例としての機能が実現される。当該機能の一部は、ＦＰＧＡ又はＡＳＩＣのようなハードウェア回路により実現されてもよい。
【００２８】
ノードシステム１３００は、一つ又は複数のサーバ計算機１５０（ノード計算機）を含む。
【００２９】
サーバ計算機１５０は、インターフェース装置１５１、記憶装置１５２及びそれらに接続されたプロセッサ１５３を有する。
【００３０】
インターフェース装置１５１は、通信ネットワーク１９に接続される。
【００３１】
記憶装置１５２は、サーバプログラム１５４及びサーバ管理データ１５５を記憶する。サーバ管理データ１５５は、サーバ計算機１５０において管理されるデータである。
【００３２】
プロセッサ１５３は、サーバプログラム１５４を実行する。サーバプログラム１５４がプロセッサ１５３に実行されることで、第２の管理部の一例としての機能が実現される。当該機能の一部は、ＦＰＧＡ又はＡＳＩＣのようなハードウェア回路により実現されてもよい。
【００３３】
図３は、クライアント管理データ１３５の一例を示す。
【００３４】
クライアント管理データ１３５は、秘密鍵３０１と、プルーフデータ３０２である。
【００３５】
秘密鍵３０１は、ユーザの秘密鍵である。クライアント計算機１３０が複数のユーザに共有される場合（例えば、クライアント計算機１３０に複数のユーザシステム１２４が通信ネットワーク１４を介して接続されている場合）、ユーザ毎に秘密鍵３０１が記憶される。なお、ユーザは、個人であっても組織（例えば、企業や金融機関）であってもよい。
【００３６】
プルーフデータ３０２は、サスペンションテーブル３２１とコミットテーブル３２２である。
【００３７】
サスペンションテーブル３２１は、第１のネームスペース内のデータの一例である。サスペンションテーブル３２１は、当該クライアント計算機１３０から送信された情報更新要求に応答して行われる情報更新処理のうちサーバシステム１５において未完結の状態更新処理に対応する所定種類のデータ（例えば、後述するように、状態更新要求で指定されたkey及びnonce）を持つ。
【００３８】
コミットテーブル３２２は、第２のネームスペース内のデータの一例である。コミットテーブル３２２は、クライアント計算機１３０から送信された情報更新要求に応答してサーバシステム１５において完結した状態更新処理に対応する所定種類のデータ（例えば、後述するように、後述のプルーフレコードを構成するkey、age、HV及びnonce）を持つ。
【００３９】
図４は、サスペンションテーブル３２１の一例を示す。
【００４０】
サスペンションテーブル３２１は、対象毎にレコードを持つ。サスペンションテーブル３２１におけるレコードを「サスペンションレコード」と言うことができる。
【００４１】
各サスペンションレコードは、key４０１及びnonce４０２といった情報を持つ。以下、一つの対象を例に取る（図４の説明において「注目対象」）。
【００４２】
key４０１は、注目対象のＩＤである。nonce４０２は、クライアントプログラム１３４により生成され暗号学的に衝突が非常に困難な値（例えば乱数）の一例である。
【００４３】
図５は、コミットテーブル３２２の一例を示す。
【００４４】
コミットテーブル３２２は、対象毎にレコードを持つ。コミットテーブル３２２におけるレコードを「コミットレコード」と言うことができる。
【００４５】
各対象について、コミットレコードが、後述のアセットセット８００（図８参照）における末端アセットレコードの存在証明の一例であり、サーバシステム１５から受信したプルーフレコードである。「プルーフレコード」は、末端アセットレコード又はそのサマリである。このため、各コミットレコードは、末端アセットレコードが持つ情報の全部又は一部を持つ。例えば、各コミットレコードは、末端アセットレコード（図７及び図８参照）のサマリとして、key５０１、age５０２、HV５０３及びnonce５０４といった情報を持つ。以下、一つの対象を例に取る（図５の説明において「注目対象」）。
【００４６】
key５０１は、注目対象のＩＤである（末端アセットレコードにおけるkey７０１）。age５０２は、注目対象の最新状態の世代を表す（末端アセットレコードにおけるage７０２）。hash５０３は、注目対象に対応した末端アセットレコードのハッシュ値である（末端アセットレコードにおけるHV７１０）。当該ハッシュ値は、暗号学的に衝突が困難な値の一例である。nonce５０４は、注目対象の最新状態に対応したnonceである（末端アセットレコードにおけるnonce７０７）。
【００４７】
図６は、サーバ管理データ１５５の一例を示す。
【００４８】
サーバ管理データ１５５は、公開鍵６０１と、アセットセット８００である。
【００４９】
公開鍵６０１は、ユーザの公開鍵である。ユーザ毎に公開鍵６０１が取得される。
【００５０】
アセットセット８００は、アセットの集合である。
【００５１】
図７は、アセットセット８００の一例を示す。図８は、アセットセット８００の概念の一例を示す。
【００５２】
アセットセット８００は、対象毎にアセット８１０を持つ。対象のkeyから当該対象のアセット８１０が同定される。各対象について、アセット８１０は、台帳に相当してよい。
【００５３】
各対象について、アセット８１０は、レコードの時系列である。アセット８１０におけるレコードを「アセットレコード」と言うことができる。アセット８１０は、少なくとも末端アセットレコードを有する。アセットレコードは、key７０１、age７０２、input７０３、output７０４、BL７０５、Arg７０６、nonce７０７、Sig７０８、Prev-HV７０９及びHV７１０といった情報を持つ。以下、一つの対象及び一つのアセットレコードを例に取る（図７及び図８の説明において「注目対象」及び「注目アセットレコード」）。
【００５４】
key７０１は、注目対象のＩＤである。Age７０２は、注目対象の状態の世代を表す。注目対象の状態が更新される都度に、インクリメントされたage７０２を持つ末端アセットレコードが追加される。
【００５５】
input７０３は、注目対象を含む一つ以上の対象の各々の直前状態を表す。output７０４は、注目対象の最新状態を表す。例えば、注目アセットレコードが追加されることになった状態更新処理が口座Ａ（注目対象の一例）口座から口座Ｂ（或る別の対象の一例）への振込である場合、input７０３は、口座Ａと口座Ｂの各々の直前の残高を表す。output７０４は、口座Ａの最新状態を表す。
【００５６】
BL７０５は、状態更新処理の処理ロジック（例えば関数）を特定するためのロジック情報である。ロジック情報は、本実施例では処理ロジックそれ自体であるが、それに代えて、処理ロジックのＩＤでもよい。
【００５７】
Arg７０６は、当該処理ロジックにおいて使用される一つ以上の引数である引数情報である。
【００５８】
XXXiは、i番目のXXXとする。outputiを、outputi＝BLi(inputi, Argi)と表現することができる。すなわち、outputiは、inputiとArgiとを用いてBLiが実行された結果としての状態である。なお、input７０３が、対象間（アセット８１０間）のレコード連鎖を実現する（図８の破線矢印を参照）。
【００５９】
nonce７０７は、注目対象の最新状態（output７０４）に対応したnonceである。具体的には、nonce７０７は、当該最新状態が得られた状態更新処理の状態更新要求に関連付けられているnonceである。
【００６０】
Sig７０８は、注目対象の最新状態（output７０４）が得られた状態更新要求を発行したユーザの秘密鍵３０１を用いた電子署名である。Sig７０８は、本実施例では、BL７０５、Arg７０６及びnonce７０７を基に生成される。なお、BL７０５を基に生成された電子署名と、Arg７０６を基に生成された電子署名と、nonce７０７を基に生成された電子署名は、別々に存在してもよい。
【００６１】
Prev-HV７０９は、注目対象の直前状態（直前世代）のアセットレコード（つまり親アセットレコード）のHV７１０と同じ値である。つまり、Prev-HV７０９と、親アセットレコード内のHV７１０とのリンク（図８の実線矢印を参照）が、対象に対応したアセット８１０内でのレコード連鎖を実現する。
【００６２】
HV７１０は、注目対象のアセットレコードのサマリ、例えばHV７１０以外の情報の少なくとも一部の情報（本実施例では全ての情報７０１〜７０９）のハッシュ値（暗号学的に衝突が困難なハッシュ値）である。
【００６３】
以上の通り、アセットセット８００において、異なるアセット８１０のアセットレコードにおけるinput７０３間でレコード連鎖が実現され、また、同一のアセット８１０のアセットレコードにおけるPrev-HV７０９とHV７１０間でレコード連鎖が実現されている。このようにして、アセットセット８００は、ＤＡＧ（Directed Acyclic Graph）構造をなす。アセットセット８００において、ノードは、アセットレコードであり、エッジは、一つ以上の状態更新処理におけるアセットレコード間の関係を表す。
【００６４】
図９は、本実施例の概要の一例を示す。
【００６５】
図９を参照した概要説明では、以下の前提を取る。
・ユーザＡに対応したkey“abc”を管理するクライアントシステム１３Ａを例に取る。また、クライアントシステム１３Ａ内の要素の参照符号の末尾を“Ａ”とする。
・アセットセット８００に、key“abc”に関し、末端アセットレコード８１ｂとそれの親アセットレコード８１ａが存在する。故に、クライアントシステム１３Ａのコミットレコード８２Ａは、末端アセットレコード８１ｂの存在証明である。
【００６６】
図９によれば、本実施例の概要の一例は、次の通りである。
【００６７】
クライアントプログラム１３４Ａが、key“abc”と一致するkey５０１Ａを含んだコミットレコード８２Ａをコミットテーブル３２２Ａから取得し、当該コミットレコード８２Ａ内の情報を関連付けた状態更新要求（例えば、当該コミットレコード８２Ａ内の情報を有する要求）を作成し、当該状態更新要求をサーバシステム１５に送信する。
【００６８】
サーバシステム１５における少なくとも一つのノードシステム１３００のサーバプログラム１５４が、当該状態更新要求を受信する。サーバプログラム１５４は、当該状態更新要求に関連付けられている情報内のHV“H2”と、当該情報内のkey“abc”に対応したアセット８１０の末端アセットレコード８１ｂ内のHV７１０“H2”とを比較する。つまり、サーバプログラム１５４が、コミットレコード８２Ａ（存在証明）を用いて、末端アセットレコード８１ｂの改ざんの有無を判断する改ざん検知処理を行う。
【００６９】
改ざん検知処理の結果が改ざん無しであれば、サーバプログラム１５４が、当該状態更新要求に応答して状態更新処理を実行する。サーバプログラム１５４が、当該状態更新処理の実行において、age７０２が“２”にインクリメントされたアセットレコード８１ｃを追加する。結果として、アセットレコード８１ｃが、最新の末端アセットレコードとなり、age７０２“１”を有するアセットレコード８１ｂが、最新の末端アセットレコード８１ｃの親アセットレコードとなる。
【００７０】
サーバプログラム１５４が、末端アセットレコード８１ｃの存在証明であるプルーフレコード（つまり、key“abc”、age“２”、HV“H3”及びnonce“yyx”で構成されたレコード）をクライアントプログラム１３４Ａに送信する。
【００７１】
クライアントプログラム１３４Ａが、コミットレコード８２Ａに、サーバプログラム１５４から受信したプルーフレコードを上書きする。コミットテーブル３２２Ａに、当該プルーフレコードが新たなコミットレコード８２Ａとして追加されてもよい。
【００７２】
以下、本実施例で行われる処理の詳細を、図１０を参照して説明する。
【００７３】
図１０は、本実施例で行われる処理のフローチャートである。
【００７４】
例えばユーザプログラム１２４から状態更新要求をクライアントプログラム１３４が受信したときに、図１０に示す処理のフローが開始される。
【００７５】
Ｓ１００１で、クライアントプログラム１３４が、nonceを生成する。
【００７６】
Ｓ１００２で、クライアントプログラム１３４が、状態更新要求で指定された対象のkey（図１０の説明において「注目key」）と、Ｓ１００１で生成したnonceとをサスペンションテーブル３２１に保存可能か否かを判断する。注目keyと一致するkey４０１を含んだサスペンションレコードが存在していない場合には、Ｓ１００２の判断結果は真（Ｓ１００２：Ｙｅｓ）であり、当該サスペンションレコードが存在している場合には、Ｓ１００２の判断結果は偽（Ｓ１００２：Ｎｏ）である。Ｓ１００２：Ｎｏの場合、当該サスペンションレコードが削除されることを待つ。
【００７７】
Ｓ１００２：Ｙｅｓの場合、Ｓ１００３で、クライアントプログラム１３４が、注目keyと、Ｓ１００１で生成したnonceとを含んだサスペンションレコードをサスペンションテーブル３２１に保存する。Ｓ１００３で保存されたサスペンションレコードを、図１０の説明において“Ｒ１”と言う。
【００７８】
Ｓ１００４で、クライアントプログラム１３４が、注目keyと一致するkey７０１を含んだコミットレコードがあれば、当該コミットレコードをコミットテーブル３２２から取得する。Ｓ１００４で取得されたコミットレコードを、図１０の説明において“Ｒ２”と言う。
【００７９】
Ｓ１００５で、クライアントプログラム１３４が、状態更新要求を作成し、作成された状態更新要求をサーバシステム１５に送信する。送信された状態更新要求には、下記（ａ）〜（ｄ）が関連付けられている。
（ａ）Ｒ１、又は、Ｒ１及びＲ２（Ｒ２は、注目keyについて２回目以降の更新の場合に存在するコミットレコード）。
（ｂ）状態更新処理に関わるBL及びArg。
（ｃ）Ｓ１００１で生成されたnonce。
（ｄ）（ｂ）及び（ｃ）について当該状態更新要求を発行したユーザの秘密鍵を用いて生成されたSig。
【００８０】
Ｓ１０１１で、サーバプログラム１５４が、Ｓ１００５で送信された状態更新要求を受信する。サーバプログラム１５４が、当該状態更新要求に関連付けられているSigの正当性を、当該要求に対応したユーザの公開鍵を用いて検証する。この結果、Sigが不当であれば、Ｓ１０２０で、サーバプログラム１５４が、状態更新要求に改ざんの可能性があることを表す異常応答（エラー）をクライアントプログラム１３４に返却する。
【００８１】
Ｓ１０１２で、サーバプログラム１５４が、Ｓ１０１１で受信された状態更新要求にＲ１及びＲ２の両方が関連付けられているか否かを判別する。Ｓ１０１２の判断結果が偽の場合（Ｓ１０１２：Ｎｏ）、Ｓ１０１７が実行される。
【００８２】
Ｓ１０１２の判断結果が真の場合（Ｓ１０１２：Ｙｅｓ）、Ｓ１０１３で、サーバプログラム１５４が、改ざん検知処理、具体的には、下記（ｘ）及び（ｙ）を行う。
（ｘ）サーバプログラム１５４は、Ｒ１内のkeyに一致するkey７０１を含んだアセットレコードが、Ｒ１内のnonceに一致するnonce７０７を含んでいるか否かを判断する。この判断結果が真であることが、当該アセットレコードに改ざんの可能性があることを意味する。（ｘ）の判断は、Ｒ１内のkeyに一致するkey７０１を含んだ全てのアセットレコードについて行われてよい。
（ｙ）サーバプログラム１５４は、Ｒ２内のkeyに一致するkey７０１を含んだ末端アセットレコードが、Ｒ２内のHV及びnonceと一致するHV７１０及びnonce７０７を含んでいるか否かを判断する。この判断結果が偽であることが、当該末端アセットレコードに改ざんの可能性があることを意味する。
【００８３】
Ｓ１０１４で、サーバプログラム１５４が、Ｓ１０１３において改ざんの可能性があるか否かを判断する。Ｓ１０１４の判断結果が真の場合（Ｓ１０１４：Ｙｅｓ）、Ｓ１０２０で、サーバプログラム１５４が、注目keyに対応したアセット８１０に改ざんの可能性があることを表す異常応答をクライアントプログラム１３４に返却する。当該異常応答は、改ざんの可能性があるアセットレコード又はそのサマリを含んでもよい。
【００８４】
Ｓ１０１４の判断結果が偽の場合（Ｓ１０１４：Ｎｏ）、Ｓ１０１５で、サーバプログラム１５４が、Ｒ２内のkeyに一致するkey７０１を含んだ末端アセットレコードのハッシュ値を再計算する。
【００８５】
Ｓ１０１６で、サーバプログラム１５４が、Ｓ１０１５で算出されたハッシュ値が、当該末端アセットレコード内のHV７１０と一致する否か（つまり当該HV７１０が正当か否か）を判断する。Ｓ１０１６の判断結果が偽の場合（Ｓ１０１６：Ｎｏ）、Ｓ１０２０で、サーバプログラム１５４が、注目keyに対応したアセット８１０に改ざんの可能性があることを表す異常応答をクライアントプログラム１３４に返却する。当該異常応答は、改ざんの可能性がある末端アセットレコード又はそのサマリを含んでもよい。
【００８６】
Ｓ１０１６の判断結果が真の場合（Ｓ１０１６：Ｙｅｓ）、Ｓ１０１７で、サーバプログラム１５４が、Ｓ１０１１で受信した要求に従い状態更新処理を実行する。この状態更新処理の実行において、注目keyについて新たなアセットレコードがアセットセット８００に追加される。Ｓ１０１８で、サーバプログラム１５４が、Ｓ１０１７において追加された新たな末端アセットレコードのプルーフレコード（当該末端アセットレコード内のkey、age、HV及びnonceで構成されたレコード）を作成する。Ｓ１０１９で、サーバプログラム１５４が、Ｓ１０１１で受信した状態更新要求に対し、Ｓ１０１８で作成されたプルーフレコードが関連付けられた完了応答を、クライアントプログラム１３４に返却する。
【００８７】
Ｓ１０２１で、クライアントプログラム１３４が、異常応答と、プルーフレコードが関連付けられた正常応答とのうちのいずれかを受信する。
【００８８】
Ｓ１０２２で、クライアントプログラム１３４が、Ｓ１０２１で受信した応答が正常応答か否かを判断する。Ｓ１０２２の判断結果が偽の場合（Ｓ１０２２：Ｎｏ）、Ｓ１０２５で、クライアントプログラム１３４が、異常応答（例えば、改ざんの可能性の通知）をユーザプログラム１２４に返却する。
【００８９】
Ｓ１０２２の判断結果が真の場合（Ｓ１０２２：Ｙｅｓ）、Ｓ１０２３で、クライアントプログラム１３４が、注目keyに対応したコミットレコードに、正常応答に関連付けられているプルーフレコードを上書きする。Ｓ１０２４で、クライアントプログラム１３４が、注目keyに対応したサスペンションレコードを削除する。Ｓ１０２５で、クライアントプログラム１３４が、正常応答をユーザプログラム１２４に返却する。
【００９０】
以上が、本実施例で行われる処理の詳細である。なお、例えば、下記のうちの少なくとも一つが採用されてよい。
・Ｓ１００２及びＳ１００３は、省略されてもよい（オプショナルの処理でよい）。結果として、Ｒ１が無くてもよい。
・Ｒ１及びＲ２（Ｓ１００３が省略された場合にはＲ２）を用いた改ざん検知処理は、状態更新要求に応答して実行される状態更新処理とは別に（非同期に）実行されてもよい。
・Ｓ１０１５及びＳ１０１６は、省略されてもよい（オプショナルの処理でよい）。
・ユーザの秘密鍵が無くてもよいし、アセットセット８００のデータ構造はＤＡＧ構造のサブセットであれば他のデータ構造でもよい（例えば、木構造でもよい）。ユーザの秘密鍵もアセットセット８００の上述のデータ構造も、末端アセットレコードの存在証明の生成及び格納に必須ではないからである。このため、Ｓ１０１１での認証には、電子署名は使用されないでもよい。
【００９１】
本実施例では、例えば下記の効果が期待される。
【００９２】
各対象について、末端アセットレコード以外の一部のアセットレコードの改ざんは、サーバプログラム１５４が先頭アセットレコードからHV（ハッシュ値）を確認していくことで（ハッシュチェーンを辿ることで）検知可能であるが、末端アセットレコードの改ざん（例えば更新又は削除）は、サーバプログラム１５４だけで検知することは難しい。そこで、別々の管理主体（例えば、個人、組織又はコンピュータ）に管理されている複数のシステム内のデータを悪意をもって一貫して書き換えることは非常に困難であるという前提を基に、各対象について末端アセットレコードの存在証明を、ノードシステム１３００の管理主体と異なる管理主体により管理される外部システム（例えば、別のノードシステム１３００、又は、サーバシステム１５の外部のシステム）に保持し、その存在証明を用いて末端アセットレコードの改ざんの有無を判断する改ざん検知処理を行うことで、末端アセットレコードが改ざんされた場合には当該改ざんを検知することができる。
【００９３】
また、各対象について、外部システムに保存される存在証明は、サーバシステム１５におけるアセット８１０のうちの末端アセットレコードについての存在証明という、アセット８１０全体に比べて小量のデータである。これにより外部システムでの消費記憶容量を削減することができる。
【００９４】
また、各対象について、末端アセットレコードの存在証明は、末端アセットレコードそれ自体でもよいが、本実施例では、末端アセットレコードのHV（ハッシュ値）を含むより小量のデータである。これにより、外部システムでの消費記憶容量を、末端アセットレコードそれ自体を格納する場合における消費記憶容量よりも削減することができる。
【００９５】
また、各対象について、末端アセットレコードの存在証明が保存される外部システムは、当該末端アセットレコードを管理するノードシステム１３００以外の任意のシステムでよいが、本実施例では、当該対象について末端アセットレコードが追加された状態更新処理の状態更新要求を発行したクライアントシステム１３である。つまり、状態更新要求を発行したクライアントシステム１３自身が、当該状態更新要求に応答して追加されたアセットレコードの存在証明を管理する。このため、クライアントシステム１３の管理主体以外の管理主体により管理されるシステムで存在証明が管理されることに比べて、存在証明が改ざんされる可能性が低い。
【００９６】
また、各対象について、コミットレコードには、クライアントプログラム１３４により生成されたnonceが存在するので、サーバシステム１５側が当該対象の末端アセットレコードの存在を否定することは困難である。
【００９７】
また、本実施例では、処理ロジックについてユーザの秘密鍵を用いた電子署名が付与される。つまり、処理ロジックを定義できるのは、有効な秘密鍵を持つユーザである。このような電子署名付きの処理ロジックを用いてoutput及びハッシュ値の再計算を行うことができる。結果として、改ざん検知性が向上する。
【００９８】
また、サスペンションテーブル３２１は、クライアントシステム１３とサーバシステム１５間の整合性を確認し当該確認の結果に基づくリカバリと改ざん可能性の検知とに有用である。例えば、下記が可能である。
・或る対象に関する要求について、サスペンションテーブル３２１にレコードがあるがアセットセット８００にレコードが無い場合、クライアントシステム１３から要求が発行されたがサーバシステム１５において当該要求に従う状態更新処理が実行されていないかもしれない、若しくは、サーバシステム１５で実行されたがアセットレコードが削除されたかもしれない、と推測できる。故に、この場合、クライアントプログラム１３４が、当該要求を再送する、若しくは、改ざん検知処理を行う。
・或る対象に関する要求について、サスペンションテーブル３２１にレコードがありアセットセット８００にもレコードがあるがコミットテーブル３２２にレコードが無い場合、クライアントシステム１３から要求が発行されたがサーバシステム１５において当該要求に従う状態更新処理が実行されたがクライアントシステム１３にプルーフレコードが届いていないと推測できる。故に、この場合、クライアントプログラム１３４が、注目keyを指定したプルーフレコード取得要求（注目keyに対応したプルーフレコードの取得要求）をサーバシステム１５に送信することで、プルーフレコードをサーバシステム１５から取得する。
【００９９】
以上が、本実施例についての説明である。本実施例は、部分的なビザンチン故障（例えばサーバプログラム１５４とアセットセット８００のうちサーバプログラム１５４は改ざんされ得ないがアセットセット８００が改ざんされ得ること）が想定された実施例でよい。クライアントサイドでＤＡＧの末端アセットレコードのハッシュ値が存在証明の一例として保持されてよい。本実施例では、例えば下記のうちの少なくとも一つが採用されてよい。
・末端アセットレコードの存在証明の保存場所は、当該末端アセットレコードを持つノードシステム１３００の管理主体と異なる管理主体により管理されるシステムであれば、クライアントシステム１３に限らず、当該末端アセットレコードを持つノードシステム１３００（或いは、当該ノードシステム１３００を含むサーバシステム１５）以外の任意のシステムでよい。
・処理ロジックは、ユーザが外部サイト或いはサーバシステム１５から入手したロジックでよい。
・サーバシステム１５を構成するサーバ計算機１５０は複数存在してよい。その場合、任意のアーキテクチャのサーバシステム（例えば、マスター／スレーブ型のシステム）が採用されてよいが、サーバシステムとしてディセントラライズドなシステムが採用されてもよい。
・サーバシステム１５が複数のノードシステムを含んでいて、各ノードシステムが、一つ又は複数のサーバ計算機１５０から構成されていてもよい。この場合、或るノードシステムにおいて生成されたプルーフレコードは、クライアントシステム１３に代えて、当該或るノードシステムの管理主体とは異なる管理主体により管理される別のノードシステムに保存されてもよい。
【０１００】
また、本実施例において、クライアントシステム１３及びサーバシステム１５を含んだシステム全体を、サーバシステム１５が存在する部分であるサーバサイドと、システム全体のうちサーバサイド以外の部分であるクライアントサイドとに大別することができる。末端アセットレコードの存在証明は、クライアントサイドに保存されてよい。クライアントサイドでの存在証明保存として、例えば下記の第１及び第２の保存例がある。
・図１１Ａが第１の保存例を示す。第１の保存例によれば、複数のクライアントシステム１３（又は、同一のクライアントシステム１３における複数のクライアント計算機１３０）がアクセス可能な共有の記憶装置１１００に、各対象に対応した末端アセットレコードの存在証明が格納される。例えば、クライアントシステム１３ＡからユーザＡの要求が送信されその要求に応答してユーザＡの口座Ａ（対象Ａの一例）からユーザＢの口座Ｂ（対象Ｂの一例）に資金が移動し、結果として、口座Ａに対応したアセット８１０Ａに末端アセットレコード（口座Ａからの出金後の残高を示すアセットレコード）が追加され且つ口座Ｂに対応したアセット８１０Ｂにも末端アセットレコード（口座Ｂへの入金後の残高を示すアセットレコード）が追加された場合、上述の共有の記憶装置には、口座Ａのアセット８１０Ａに追加された末端アセットレコードの存在証明８６Ａも、口座Ｂのアセット８１０Ｂに追加された末端アセットレコードの存在証明８６Ｂも格納されてよい。第１の保存例によれば、各クライアントシステム１３が管理するアセットレコードがdisjointである必要はない。
・図１１Ｂが第２の保存例を示す。第２の保存例は、各クライアントシステム１３が管理するアセットレコードがdisjointのケースにのみ適用される。このため、第２の保存例によれば、例えば、クライアントシステム１３Ａから対象Ａを指定した状態更新要求が送信されその状態更新要求に応答して対象Ａに対応したアセット８１０Ａに末端アセットレコードが追加され、当該追加された末端アセットレコードの存在証明８６Ａがクライアントシステム１３Ａに格納される。当該存在証明８６Ａは、クライアントシステム１３Ａ以外のクライアントシステムには格納されない。
【０１０１】
以上、一実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。
【０１０２】
例えば、アセットセットは、ＵＴＸＯ（Unspent Transaction Output）のようなＤＡＧ構造の複数のトランザクションでもよい（各トランザクションは、一つ以上の入力と一つ以上の出力とを含む）。つまり、ノードとなるオブジェクトが、トランザクションでよく、エッジが表す関係が、トランザクション間の関係でよい。
【０１０３】
また、例えば、末端アセットレコードの改ざんの有無を判断する改ざん検知処理は、サーバプログラム１５４を有するノードシステム１３００以外の或るシステムで行われてもよい。「或るシステム」は、別のノードシステム１３００でもよいし、クライアントシステム１３でもよいし、他のシステムでもよい。具体的には、例えば、図９に例示の状態更新処理が行われて最新の末端アセットレコード８１ｃのプルーフレコードをクライアントプログラム１３４Ａが受信してコミットレコード８２Ａとして保存した後、図１３に例示するように、クライアントプログラム１３４Ａが、末端アセットレコード８１ｃ又はそのサマリをノードシステム１３００から受信し、末端アセットレコード８１ｃ又はそのサマリと上記保存されたコミットレコード８２Ａ（存在証明）とを用いて、当該アセットレコード８１ｃの改ざんの有無を判断する改ざん検知処理を行ってもよい。クライアントプログラム１３４Ａが末端アセットレコード８１ｃ又はそのサマリをノードシステム１３００から受信する契機は、下記のうちのいずれでもよい。
・クライアントプログラム１３４Ａが、状態参照要求をノードシステム１３００に送信したこと。状態参照要求は、状態を参照することの要求である。当該状態参照要求には、少なくとも、コミットレコード８２Ａ内のkey“abc”が関連付けられる。当該状態参照要求を受信したサーバプログラム１５４は、当該状態参照要求に関連付けられているkey“abc”に対応したアセット８１０の末端アセットレコード８１ｃを取得し、末端アセットレコード８１ｃ又はそのサマリを、クライアントプログラム１３４Ａに応答する。これにより、クライアントプログラム１３４Ａが、末端アセットレコード８１ｃ又はそのサマリをノードシステム１３００から受信する。
・クライアントプログラム１３４Ａが、末端アセットレコード８１ｃが追加された状態更新処理の次にkey“abc”に対応したアセット８１０に末端アセットレコードが追加される状態更新処理の状態更新要求をノードシステム１３００に送信したこと。当該状態更新要求には、少なくとも、コミットレコード８２Ａ内のkey“abc”が関連付けられる。当該状態更新要求を受信したサーバプログラム１５４は、当該状態更新要求に関連付けられているkey“abc”に対応したアセット８１０の末端アセットレコード８１ｃを取得し、末端アセットレコード８１ｃ又はそのサマリを、クライアントプログラム１３４Ａに応答する。これにより、クライアントプログラム１３４Ａが、末端アセットレコード８１ｃ又はそのサマリをノードシステム１３００から受信する。なお、このケースでは、当該状態更新要求に応答して実行される状態更新処理では、サーバシステム１５０が改ざん検知処理（例えば図１０のＳ１０１３）を実行しないでよい。
【０１０４】
サーバシステム１５が、一つ又は複数のノードシステム１３００の他に、サーバシステム１５とノードシステム１３００間の通信を中継する中継システムを含んでいてもよい。中継システムが、クライアントシステム１３からの要求をノードシステム１３００に転送してもよいし、ノードシステム１３００からのプルーフレコードをクライアントシステム１３に転送してもよい。
【符号の説明】
【０１０５】
１３…クライアントシステム
１５…サーバシステム
【図１】
2020119502.tif 000003
【図２】
2020119502.tif 000004
【図３】
2020119502.tif 000005
【図４】
2020119502.tif 000006
【図５】
2020119502.tif 000007
【図６】
2020119502.tif 000008
【図７】
2020119502.tif 000009
【図８】
2020119502.tif 000010
【図９】
2020119502.tif 000011
【図１０】
2020119502.tif 000012
【図１１Ａ】
2020119502.tif 000013
【図１１Ｂ】
2020119502.tif 000014
【図１２】
2020119502.tif 000015