以下、本発明の実施形態を図面に基づいて詳細に説明する。本実施形態において、同一の構成には原則として同一の符号を付け、繰り返しの説明は省略する。なお、本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。
本実施形態は、分散台帳システムについて説明する。前述したように、分散台帳技術において、膨大な計算能力を持つ攻撃者は承認権限を独占するおそれがある。このような計算能力による承認権限の独占を防ぐ方式として、計算能力、資産量、貢献度等の独占が可能なリソースではなく、少数の個人や組織によって独占が困難なリソースを承認の根拠として使うことが考えられる。
独占困難なリソースの一例として、「人」が挙げられる。世界中の人が参加する分散台帳システムにおいて、1人1票しか投票できない制約を設けることができれば、トランザクションの承認は事実上多数決になる。このような状況では、承認権限を独占するためには、過半数の承認者を味方に付ける必要がある。これは、コンピュータを多数用意して計算能力を独占するのに比べてはるかにハードルが高い。
そこで、本実施形態の分散台帳システムは、トランザクションの有効性を検証する際に、当該トランザクションを承認するトランザクションの生成者の同一人物性を考慮してトランザクションの荷重を定義する。これにより、同一人物からの複数回の承認を防止し、承認権限の独占が困難な信頼性の高い分散台帳を実現することができる。
なお、同一人物による承認の検出を実現する方式として、個人の識別子を照合する方式や、個人が管理する秘密鍵に基づく電子署名と公開鍵の検証を用いる方式の他、指紋、顔、及び静脈などの生体情報を使って本人確認を行う生体認証方式等が挙げられる。特許文献1における、生体情報を秘密鍵として用いた署名生成を行う生体署名を、トランザクションの生成に用いることで、トランザクションを生成した人が同一人物か否かを検出することができる。
図1は、分散台帳システムの構成例を示すブロック図である。分散台帳システムは、例えば、互いに接続されたトランザクション生成端末1000及びトランザクション確認端末1100を含む。トランザクション生成端末1000は、トランザクションを生成する端末である。トランザクション確認端末1100は、受信したトランザクションの有効性を検証し、トランザクションを実行する端末である。
トランザクション生成端末1000は、例えば、トランザクション内容生成部1010、トランザクション選択検証部1020、秘密情報取得部1030、トランザクション署名生成部1040、通信部1050、及びトランザクション格納部1090を含む。
トランザクション内容生成部1010は、取引の内容を記述したトランザクションを生成する。トランザクション選択検証部1020は、承認するトランザクションを選択し、そのトランザクションが有効であるかを検証する。秘密情報取得部1030は、トランザクションを生成する際に必要となる署名生成を行うための秘密情報を取得する。一般的な電子署名に使われる秘密鍵や、指紋、顔、静脈などの生体情報は、いずれも秘密情報の一例である。
トランザクション署名生成部1040は、秘密情報取得部1030で取得した書名鍵を用いてトランザクションの署名を生成する。通信部1050は、ネットワークを介して接続された他の装置とデータの送受信を行う。トランザクション格納部1090は、過去に生成されたトランザクションを格納する。
トランザクション確認端末1100は、例えば、トランザクションハッシュ取得部1110、トランザクション荷重算出部1120、トランザクション検証部1130、トランザクション実行部1140、通信部1150、及びトランザクション格納部1190を含む。
トランザクションハッシュ取得部1110は、トランザクションのハッシュ値を算出する。トランザクション荷重算出部1120は、対象トランザクションの信頼度を示す荷重を算出する。トランザクション検証部1130は、対象トランザクションが有効であるかを検証する。
トランザクション実行部1140は、トランザクションが有効であるときに、トランザクション処理を実行する。通信部1150は、ネットワークを介して接続された他の装置とデータの送受信を行う。トランザクション格納部1190は、過去に生成されたトランザクションを格納する。
図8は、トランザクション生成端末1000及びトランザクション確認端末1100を構成する計算機のハードウェア構成例を示すブロック図である。計算機は、例えば、CPU810、メモリ820、補助記憶装置830、入力装置840、出力装置850、及び通信装置860を含む。
CPU810は、プロセッサを含み、メモリ820に格納されたプログラムを実行する。メモリ820は、不揮発性の記憶素子であるROM及び揮発性の記憶素子であるRAMを含む。ROMは、不変のプログラム(例えば、BIOS)などを格納する。RAMは、DRAM(Dynamic Random Access Memory)のような高速かつ揮発性の記憶素子であり、CPU810が実行するプログラム及びプログラムの実行時に使用されるデータを一時的に格納する。
補助記憶装置830は、例えば、HDD(Hard Disk Drive)、SSD(Solid State Drive)等の大容量かつ不揮発性の記憶装置であり、プロセッサが実行するプログラム及びプログラムの実行時に使用されるデータを格納する。すなわち、プログラムは、補助記憶装置830から読み出されて、メモリ820にロードされて、プロセッサによって実行される。
計算機は、入力インターフェース及び出力インターフェースを有する。入力インターフェースは、キーボード、マウス、カメラ、及びスキャナなどの入力装置840が接続され、オペレータからの入力を受け付けるインターフェースである。入力装置840は、生体情報を取得するためのセンサ(例えば、指紋センサ、静脈センサ、カメラ、及びマイクロフォン等)を含んでもよい。
出力インターフェースは、ディスプレイ装置やプリンタなどの出力装置850が接続され、プログラムの実行結果をオペレータが視認可能な形式で出力するインターフェースである。通信装置860は、所定のプロトコルに従って、他の装置との通信を制御するネットワークインターフェース装置であり、通信部による通信に用いられる。
CPU810が実行するプログラムは、リムーバブルメディア(CD-ROM、フラッシュメモリなど)又はネットワークを介して計算機に提供され、非一時的記憶媒体である不揮発性の補助記憶装置830に格納される。このため、計算機は、リムーバブルメディアからデータを読み込むインターフェースを有するとよい。
トランザクション生成端末1000、及びトランザクション確認端末1100は、それぞれ、物理的に一つの計算機上で、又は、論理的又は物理的に構成された複数の計算機上で構成される計算機システムであり、同一の計算機上で別個のスレッドで動作してもよく、複数の物理的計算機資源上に構築された仮想計算機上で動作してもよい。
トランザクション生成端末1000のCPU810は、例えば、トランザクション内容生成部1010、トランザクション選択検証部1020、秘密情報取得部1030、トランザクション署名生成部1040、通信部1050を含む。トランザクション確認端末1100のCPU810は、例えば、トランザクションハッシュ取得部1110、トランザクション荷重算出部1120、トランザクション検証部1130、トランザクション実行部1140、通信部1150を含む。
トランザクション生成端末1000の補助記憶装置830は、トランザクション格納部1090を含む。トランザクション確認端末1100の補助記憶装置830は、トランザクション格納部1190を含む。
例えば、トランザクション生成端末1000のCPU810は、トランザクション生成端末1000のメモリ820にロードされたトランザクション内容生成プログラムに従って動作することで、トランザクション内容生成部1010として機能し、トランザクション確認端末1100のメモリ820にロードされたトランザクション選択検証プログラムに従って動作することで、トランザクション選択検証部1020として機能する。トランザクション生成端末1000のCPU810に含まれる他の部、トランザクション確認端末1100のCPU810に含まれる各部についても同様である。
なお、本実施形態において、分散台帳システムが使用する情報は、データ構造に依存せずどのようなデータ構造で表現されていてもよい。例えば、テーブル、リスト、データベース又はキューから適切に選択したデータ構造体が、情報を格納することができる。
図9は、トランザクション生成端末1000による、ユーザ初期登録処理の一例を示すフローチャートである。まず、秘密情報取得部1030は、登録対象ユーザの秘密情報を取得する(S9010)。秘密情報は、正規のユーザのみが保有する情報である。例えば、トランザクション生成に電子署名を使う場合、秘密鍵は秘密情報の一例である。また、例えば、トランザクション生成に生体署名を使う場合は指紋、顔、及び静脈などのユーザ自身の生体情報は、秘密情報の一例である。なお、生体署名は、例えば、特許文献1に記載された技術によって実現される。
トランザクション内容生成部1010は、ステップS9010で取得した秘密情報に対応する公開情報を生成する(S9020)。トランザクション内容生成部1010は、トランザクション生成に電子署名を使う場合は、秘密鍵に対応する公開鍵を公開情報として生成する。また、トランザクション内容生成部1010は、トランザクション生成に生体署名を使う場合は、生体情報に対応する公開テンプレートを公開情報として生成する。
トランザクション内容生成部1010は、ステップS9020で生成した公開情報から、ユーザ自身のアドレスを生成する(S9030)。アドレスは、ステップS9020で生成した公開情報そのままでもよいし、公開情報をハッシュ関数などで変換したデータであってもよい。また、ユーザを一意に識別するデータをアドレスとして生成することができれば、前述した以外の方法が用いられてもよい。
以上の処理により、ユーザの初期登録が完了する。初期登録後、ユーザは分散台帳システムにおけるトランザクションを生成することが可能となる。
図5は、トランザクション500のデータ構造例を示すブロック図である。仮想通貨の支払い、及び何らかの契約手続きを自動化したスマートコントラクトは、いずれもトランザクションの一例である。
トランザクション500は、例えば、トランザクションハッシュ510、前トランザクションハッシュ520、取引先アドレス530、トランザクション内容540、被承認トランザクションハッシュ550、ノンス560、取引元検証情報570、取引元アドレス580、及び取引元署名590を含む。
トランザクションハッシュ510は、トランザクション500の内容に対してハッシュ関数を適用して得られるハッシュ値である。異なる内容のトランザクションから同一のハッシュ値が生成される確率は天文学的に小さいため、トランザクションハッシュはトランザクションを実質的に一意に特定する識別子である。
前トランザクションハッシュ520は、トランザクション500の前のトランザクションのトランザクションハッシュである。前のトランザクションとは、取引前のステータスを示す別のトランザクションである。
例えば、A氏からB氏への送金が行われ、その後B氏からC氏への送金が行われた場合、トランザクション500がB氏からC氏への送金取引であれば、前トランザクションはA氏からB氏への送金トランザクションである。つまり、B氏は、前トランザクションで送金を受けた通貨を、C氏へ送金する。
取引先アドレス530は、取引を行う相手を一意に特定するアドレスである。例えばC氏への送金取引が行われる場合、取引先アドレス530はC氏のアドレスである。なおアドレスは、例えば、C氏が管理する秘密鍵に対応する公開鍵、そのハッシュ値、又は他の任意の方法で生成されたC氏を一意に特定する識別子を求めることで得られる。
トランザクション内容540は、取引の詳細な内容を示すデータであり、例えば送金額などを含む。被承認トランザクションハッシュ550は、トランザクション500が直接承認する過去のトランザクションである。
この承認関係をトランザクション間の有向関係と捉えることで、トランザクションは有向非循環グラフ(DAG)を構成する。本実施例の分散台帳システムは、非特許文献1に記載のTangleと同様に、このDAGを使ってトランザクションに関する合意形成が行われる。
ノンス560は、トランザクション生成の際に行うPoW(Proof of Work)の結果得られる値である。ノンス560は一定の計算量の問題をトランザクション生成者が解いたことを示すために埋め込まれたデータである。
PoWは計算能力の独占が困難であることを根拠に、承認権限の独占を防いでいるが、現実的には多数のコンピュータを用意することによる計算能力の独占が可能である。本実施例の分散台帳システムは、後述する別の方法でこの承認権限の独占を防いでいるため、トランザクション500はノンス560に含まなくてもよい。
取引元検証情報570は、トランザクション生成者の署名を検証するための情報である。例えば、トランザクション署名として通常の電子署名が使われる場合は、取引元検証情報570は公開鍵を含む。また、例えば、生体情報を鍵として用いる生体署名がトランザクション署名として使われる場合は、取引元検証情報570は、公開テンプレートを含む。
取引元アドレス580は、トランザクション生成者を一意に特定するアドレスである。例えばB氏からの送金取引が行われる場合、B氏のアドレスが格納される。なお、アドレスは、例えば、B氏が管理する秘密鍵に対応する公開鍵、又はそのハッシュ値を求めることで得られる。取引元署名590は、トランザクション全体に対してトランザクション生成者が付与する署名である。この署名として、例えば、一般的な電子署名や生体署名を用いることができる。
以上、トランザクション500のデータ構造例を説明したが、トランザクション500は、必ずしも図示した全てのデータを含まなくてもよいし、図示されていないデータを含んでもよい。具体的には、例えば、トランザクション500は、ノンス560や取引元検証情報570を含まなくてもよい。
続いて、トランザクション生成処理とトランザクション確認処理について説明する。トランザクション生成処理において、トランザクション生成端末1000は、取引内容を含むトランザクションを生成する。本実施例では、非特許文献1で提案されているTangleと同様に、トランザクションは過去のトランザクションを承認することでDAGを構成する。
DAGはトランザクションの増加に伴い成長していき、生成されたトランザクションは、直接的又は間接的に新たなトランザクションにより承認される。自身を直接的又は間接的に承認するトランザクションが多いトランザクションの有効性は信頼に足ると考えられる。なお、トランザクションを直接的又は間接的に承認することを、単にトランザクションを承認するともいう。
トランザクション確認処理において、トランザクション確認端末1100は、生成済みのトランザクションの有効性を検証し、取引が有功かどうかを確認した上で当該トランザクションを実行する。トランザクション確認端末1100は、各トランザクションについて、自身を直接的又は間接的に承認するトランザクションの総量をカウントし、トランザクションの有効性が十分に信頼できるかを検証することで、当該確認が行われる。
図2は、トランザクション生成処理とトランザクション確認処理の一例を示すシーケンス図である。まず、トランザクション生成端末1000によるトランザクションを生成処理が行われる。トランザクション生成処理について説明する。
まず、トランザクション内容生成部1010は、トランザクション内容の生成を行う(S2010)。トランザクション内容は、例えば仮想通貨の送金が行われる場合は支払い元、支払先、及び金額のような取引に関する情報を含む。
トランザクション選択検証部1020は、生成するトランザクションが承認するトランザクションを、過去のトランザクションの中から選択してその内容を検証する(S2020)。ステップS2020の処理の詳細は図3を参照して後述する。ステップS2020の処理により、トランザクション生成時に承認するトランザクションが決定する。
秘密情報取得部1030は、トランザクションへ署名を付与するための秘密情報を取得する(S2030)。秘密情報として、例えば、一般的な電子署名を生成する秘密鍵を使うことができる。当該秘密鍵は、例えば、トランザクション生成端末1000に格納されたデータを参照することによって得られてもよいし、ハードウェアトークンに格納されていてもよい。
また、例えば、トランザクションへの署名に、指紋、顔、静脈などの生体情報を鍵とする生体署名を使用する場合は、秘密情報としてトランザクション生成者の生体情報を取得する。
続いて、トランザクション署名生成部1040は、ステップS2010で生成されたトランザクションに対して署名を生成して付与する(S2040)。署名としては、例えば、ステップS2030において秘密鍵を取得した場合は電子署名を用い、生体情報を取得した場合は生体署名が用いられる。通信部1050は、ステップS2040で署名を付与されたトランザクションをネットワークへ送信する。以上により、トランザクション生成端末1000におけるトランザクション生成処理が完了する。
次に、トランザクション確認端末1100による、対象トランザクションの有効性確認をするトランザクション確認処理が行われる。トランザクション確認処理について説明する。まず、トランザクション確認端末1100の通信部1150は、ステップS2050で送信されたトランザクションを受信する(S2110)。なお、前述したネットワークは、例えば、P2Pネットワークであり、各ノードがトランザクションに関する情報を共有している。
トランザクションハッシュ取得部1110は、確認対象のトランザクションのトランザクションハッシュ510を取得する(S2120)。確認対象のトランザクションとは、トランザクション確認端末1100にて有効性を確認するトランザクションである。
例えばeコマースであれば、小売業者が確認対象のトランザクションとして、消費者からの支払いトランザクションを指定し、支払いが有効であるかを確認し、有効であれば商品を発送する。トランザクションハッシュは、分散台帳システムと連携する別のシステムから受信してもよいし、キーボード、又は2次元コードなどによって入力されてもよい。
トランザクション荷重算出部1120は、確認対象のトランザクションの累積荷重を算出する(S2130)。累積荷重は、確認対象のトランザクションを直接的又は間接的に承認しているトランザクションの荷重の総和である。この累積荷重が大きいほど、承認しているトランザクションが多く、トランザクションが有効である確率が高いことを示す。ステップS2130の詳細は、図4を参照して後述する。
トランザクション検証部1130は、ステップS2130で得られた確認対象トランザクションの累積荷重に基づき、トランザクションが有効であるか否かを判定する(S2140)。具体的には、例えば、トランザクション検証部1130は、累積荷重が所定の閾値を超えればトランザクションが有効、当該所定の閾値未満であればトランザクションが無効であると判定する。また、トランザクション検証部1130は、累積荷重を考慮してトランザクションを選択するアルゴリズムを用いて、確認対象トランザクションが間接的に承認される確率を算出し、当該確率に対して閾値処理を行うことで有効性を判定してもよい。
トランザクション検証部1130がステップS2140でトランザクションが有効であると判定した場合、トランザクション実行部1140は、トランザクションの内容を実行する(S2150)。例えば、トランザクションが商品の対価の支払いを目的とするものであれば、トランザクション実行部1140は支払いが完了したとみなし、その後商品が発送される。
なお、トランザクション検証部1130がステップS2140でトランザクションが有効でないと判定した場合、トランザクション実行部1140は、例えば、トランザクションの内容を実行せず、例えば、トランザクション生成端末に対して、未承認であることを示すデータを返信する。以上により、トランザクションの生成及びトランザクションの確認及び実行が完了する。
図3は、ステップS2020におけるトランザクション選択検証処理の一例を示すフローチャートである。トランザクション選択検証処理において、トランザクション選択検証部1020は、生成するトランザクションの被承認トランザクションとして、過去のトランザクションを選択して、内容を検証し、問題なければ被承認トランザクションとして採用する。
まず、トランザクション選択検証部1020は、トランザクション格納部1090に格納された過去のトランザクションから1つ以上の被承認トランザクションを選択する(S3010)。具体的には、例えば、トランザクション選択検証部1020は、当該選択を、ランダムに行ってもよいし、MCMC(マルコフ連鎖モンテカルロ法)に代表される選択アルゴリズムを用いて行ってもよい。
続いて、トランザクション選択検証部1020は、ステップS3010で選択された被承認トランザクションの内容を検証する(S3020)。トランザクション選択検証部1020は、ステップS3020の検証において、被承認トランザクションの有効性を確認する。具体的には、例えば、仮想通貨のトランザクションの検証が行われる場合、トランザクション選択検証部1020は、正規の所有者が生成したトランザクションであることや、支払い後の残高がマイナスにならないことなどを、検証する。
トランザクション選択検証部1020は、被承認トランザクションがDAG上で直接又は間接的に承認しているトランザクションを遡って検証し、不正なトランザクションを承認していないことを確認する(S3030)。トランザクション選択検証部1020は、ステップS3020の内容検証とステップS3030の履歴検証の結果を確認する(S3040)。
トランザクション選択検証部1020は双方の検証結果に問題がなければ、被承認トランザクションを有効と判定してトランザクション選択検証処理を終了し、少なくとも一方の検証結果に問題があれば被承認トランザクションを無効と判定してステップS3010に戻る。
なお、トランザクション選択検証部1020は、ステップS3020の内容検証において問題があると判定した場合、ステップS3030を実行することなく、被承認トランザクションを無効と判定してステップS3010に戻ってもよい。また、例えば、トランザクション選択検証処理を開始してから所定時間が経過しても有効な被承認トランザクションが得られない場合には、トランザクション選択検証処理をタイムアウトさせてもよい。
次に、ステップS2130におけるトランザクション荷重算出処理について説明する。トランザクション荷重算出処理において、トランザクション荷重算出部1120は、DAGに含まれるトランザクションのうち、確認対象トランザクションを直接的又は間接的に承認しているトランザクションを対象として、トランザクションの生成者が同一人物であるか否かを確認し、得られた結果を用いてトランザクションの累積荷重を算出する。
具体的には、例えば、承認トランザクションのうち生成者が同一人物と判定されたトランザクションは、それぞれの荷重を加算せず、荷重の最大値のみが加算される。このようにすることで、同一人物が生成したトランザクションは複数あっても、1つ分のトランザクションの荷重しか加算されないため、1人1票の承認を実現できる。
図4は、ステップS2130におけるトランザクション荷重算出処理の一例を示すフローチャートである。まず、トランザクション荷重算出部1120は、確認対象トランザクションの累積荷重を初期化する(S4010)。
図7は、確認対象トランザクションの初期化時の累積荷重の一例を示す説明図である。図7の例では、確認対象トランザクション500a~500eによってDAGが構成され、確認対象トランザクション500a~500eの荷重はそれぞれ1であるものとする。
確認対象トランザクションの累積荷重として、最大累積荷重と最小累積荷重が定義される。トランザクション荷重算出部1120は、最大累積荷重の初期値として、確認対象トランザクションを直接的又は間接的に承認しているトランザクションの荷重の総和を代入する。
例えば、確認対象トランザクション500aは、確認対象トランザクション500cに直接的に承認され、確認対象トランザクション500d及び確認対象トランザクション500eに間接的に承認されている。また、確認対象トランザクション500a自身も確認対象トランザクション500aを直接的に承認しているものとして扱う。従って、確認対象トランザクション500aの最大累積荷重の初期値は、これら4つの確認対象トランザクションとの総和である4である。
また、トランザクション荷重算出部1120は、各確認対象トランザクションの最小累積荷重として、当該確認対象トランザクションを直接的又は間接的に承認しているトランザクションの荷重の最大値を代入する。図7の例では、確認対象トランザクション500a~500eの荷重はいずれも1であるため、確認対象トランザクション500a~500eの最小累積荷重はいずれも1である。
つまり、最大累積荷重は、承認トランザクションの全てが同一人物ではなかった場合に得られる最大の累積荷重であり、最小累積荷重は、承認トランザクションの全てが同一人物であった場合に得られる最小の累積荷重である。
図4の説明に戻る。トランザクション荷重算出部1120は、承認トランザクションのうち、まだ同一人物であるか否かを検証していない2つのトランザクションを、トランザクションペアとして選択する(S4020)。
ステップS4020における選択方法として、例えば、ランダムに選択する、トランザクションの荷重の和が大きい又は小さいペアから順に選択する、MCMC(マルコフ連鎖モンテカルロ法)に代表される選択アルゴリズムを用いて選択する、DAG内の深さが深い又は浅い方から優先的に選択する、などの方法がある。
トランザクション荷重算出部1120は、ステップS4020で選択したトランザクションペアが同一人物によって生成されたものか否かを確認する(S4030)。ステップS4030における確認方法として、例えば、取引元アドレス580の確認、取引元署名590に含まれる電子署名の確認、取引元署名590に含まれる生体署名の確認の3つが考えられる。
前述した通り取引元アドレス580は、トランザクション生成者の公開鍵やそのハッシュ値などを示すデータであり、本人を一意に特定するものである。トランザクション荷重算出部1120は、トランザクションペアに含まれる2つの取引元アドレスが一致することを確認することで、トランザクションが同一人物によって生成されたかを判定することができる。
なお、公開鍵やそのハッシュ値を無制限に生成できると一人で複数のアドレスを持つことができるため、同一人物が複数人を詐称することができ、同一人物確認を正しく行うことができない。このため、取引元アドレスに基づき同一人物確認を実施する際には、1人が単一のアドレスしか持てないことを保証する必要がある。
例えば、公開鍵証明書を認証局が発行することとし、公開鍵証明書発行時に本人確認を実施して過去に登録がないことを保証する仕組みがあれば、このような取引元アドレスに基づく同一人物確認が正しく行われる。
ここで、電子署名及び生体署名に基づく同一人物確認手順について説明する。電子署名に基づく同一人物確認方法は、直接参照と間接参照の2種類の方法を含む。図6は、直接参照及び間接参照による検証同一人物確認処理の一例を示す説明図である。
まず直接参照について説明する。トランザクション荷重算出部1120は、トランザクションAの取引元署名590に含まれる電子署名と、もう一方のトランザクションBの取引元検証情報570に含まれる公開鍵と、を用いて署名検証を行うことでトランザクションAとトランザクションBが同一人物によって生成されたものであるか否かを確認することができる。このようにトランザクションAとトランザクションBのみを直接的に参照することによって、同一人物確認ができる方式を直接参照と呼ぶ。
続いて、間接参照について説明する。まず、トランザクション荷重算出部1120は、トランザクションBの前トランザクションハッシュ520と等しいトランザクションハッシュ510を持つトランザクションを過去のトランザクションから検索し、それを参照トランザクション620として特定する。
さらに、トランザクション荷重算出部1120は、参照トランザクション620の取引先アドレス530に含まれる公開鍵と、トランザクションAに含まれる取引元署名590に含まれる電子署名と、を用いて署名検証を行う。トランザクションBに取引元検証情報570が含まれている場合は直接参照が可能だが、トランザクションBに取引元検証情報570が含まれていない場合は、直接参照が困難又は不可能であるため、トランザクション荷重算出部1120は間接参照を用いて検証する。
トランザクション荷重算出部1120は、署名の検証に成功した場合、トランザクションAとトランザクションBは同一の秘密鍵と公開鍵のペアで生成されたことになるため、トランザクションAとトランザクションBの生成者は同一人物であると判定する。トランザクション荷重算出部1120は、署名の検証に失敗した場合、トランザクションAとトランザクションBは異なる秘密鍵と公開鍵のペアで生成されたことになるため、トランザクションAとトランザクションBの生成者は同一人物ではないと判定する。
なお、生体署名に基づく確認も、電子署名に基づく確認と同様に、直接参照と間接参照の2種類がある。直接参照では、トランザクション荷重算出部1120は、トランザクションAの取引元署名590に含まれる生体署名と、トランザクションBの取引元検証情報570に含まれる公開テンプレートと、を用いて、署名検証を行う。
また、間接参照では、トランザクション荷重算出部1120は、まずトランザクションBの前トランザクションハッシュ520と等しいトランザクションハッシュ510を持つトランザクションを過去のトランザクションから検索し、それを参照トランザクション620として特定する。
さらに、トランザクション荷重算出部1120は、参照トランザクション620の取引先アドレス530に含まれる公開テンプレートと、トランザクションAに含まれる取引元署名590に含まれる生体署名とを検証する。トランザクションBに取引元検証情報570が含まれている場合は直接参照が可能だが、トランザクションBに取引元検証情報570が含まれていない場合は、直接参照が困難又は不可能であるため、トランザクション荷重算出部1120は、間接参照を用いて検証する。
トランザクション荷重算出部1120は署名の検証に成功した場合、トランザクションAとトランザクションBは同一の生体情報を持つ人物が生成したことになるため、トランザクションAとトランザクションBの生成者は同一人物であると判定する。
トランザクション荷重算出部1120は署名の検証に失敗した場合、トランザクションAとトランザクションBは異なる生体情報を持つ人物が生成したことになるため、トランザクションAとトランザクションBの生成者は同一人物ではないと判定する。
図4の説明に戻る。トランザクション荷重算出部1120は、以上の手順でトランザクションペア同一人物確認(S4030)を実施した後、得られた確認結果を用いてトランザクションクラスタリングを行う(S4040)。具体的には、例えば、トランザクション荷重算出部1120は、生成者が同一人物であると判定されたトランザクションを同じクラスタ、生成者が同一人物ではないと判定されたトランザクションを異なるクラスタに分類する。
例えば、M件の承認トランザクションが全て同一人物である場合、クラスタは1つであり、当該クラスタに全ての承認トランザクションが含まれる。また、M件の承認トランザクションが全て異なる人物によって生成された場合、クラスタはM個となり、M個のクラスタそれぞれに1つの承認トランザクションが含まれる。
トランザクション荷重算出部1120は、ステップS4040において得られたクラスタを用いて、確認対象トランザクションの最大累積荷重及び最小累積荷重を更新する(S4050)。更新後の最大累積荷重は、未確認のトランザクションペアが全て異なる人物によって生成された場合の累積荷重である。
トランザクション荷重算出部1120は、最大累積荷重の初期値と同様に、各トランザクションについて、当該トランザクションを直接的又は間接的に承認するトランザクションの荷重の総和を新たな最大累積荷重として算出して更新する。但し、同一のクラスタに属する複数のトランザクションに直接的又は間接的に承認されているトランザクションの最大累積荷重の算出においては、荷重の総和を算出する際、当該複数のトランザクションの荷重を重複して加算せず、当該複数のトランザクションの荷重の最大値を1回のみ加算する。
また、更新後の最小累積荷重は、未確認のトランザクションペアが全て同一人物によって生成された場合の累積荷重である。つまり、トランザクション荷重算出部1120は、各トランザクションについて、当該トランザクションを直接的又は間接的に承認するトランザクションそれぞれが属するクラスタの荷重の最大値を新たな最小累積荷重として更新する。
但し、あるクラスタに属する全ての承認トランザクションについて、他のクラスタに属する全てのトランザクションとの同一人物確認が完了していれば、今後同一人物と判定されて他のクラスタと統合されることはない。従って、トランザクション荷重算出部1120は、各トランザクションの最小累積荷重の更新において、このようなクラスタに属する承認トランザクションの荷重は当該クラスタの荷重の最大値として扱い、残りのクラスタに属する承認トランザクションの荷重は当該残りのクラスタ全ての荷重の最大値として扱う。
前述した方法で累積荷重が更新されるため、ステップS4030の同一人物確認が行われるたびに、最大累積荷重は変化しない又は減少し(増加することはない)、最小累積荷重は変化しない又は増加する(減少することはない)。
図10は、確認対象トランザクションの更新後の累積荷重の一例を示す説明図である。図10の例は、図7の例において初回のステップS4030において、確認対象トランザクション500d及び確認対象トランザクション500eが同一人物であると判定された場合の荷重を示す。
最大累積荷重の算出においては、確認対象トランザクション500d及び確認対象トランザクション500eが同一クラスタに属し、確認対象トランザクション500a~500cは、当該同一クラスタ以外のクラスタであって、それぞれ異なるクラスタに属する。確認対象トランザクション500d及び確認対象トランザクション500eの双方に直接的又は間接的に承認されていた確認対象トランザクション500a~500dの最大累積荷重がそれぞれ1ずつ減少する。なお、確認対象トランザクション500a~500eの全ての荷重が1であるため、最小累積荷重については変化しない。
図4の説明に戻る。続いて、トランザクション荷重算出部1120は、得られた確認対象トランザクションの最大累積荷重と最小累積荷重に対して、確認を終了してよいか否かを判定する(S4060)。トランザクション荷重算出部1120は、例えば、最大累積荷重が十分小さいこと、及び最小累積荷重が十分大きいことの少なくとも一方が満たされることを判定することによって、ステップS4060における確認終了の判定を行う。なお、ステップS4010において複数組のトランザクションペアを選択して、当該複数組のペアそれぞれにステップS4030~4050の処理を行った上で、ステップS4060の判定を実行してもよい。
前述したように。最大累積荷重は、今後さらに確認処理を行った場合においてとり得る最大の累積荷重であり、この値が十分に小さければトランザクションが有効と判定される確率は極めて小さい。このため、トランザクション荷重算出部1120は、例えば、確認対象トランザクションの最大累積荷重が閾値未満であると判定した場合、確認完了とし、ステップS2130におけるトランザクション荷重算出処理を終了する。なお、全てのトランザクションの累積荷重を算出して有効か否かの判定を行いたい場合は、最大累積荷重の判定を行わずに全ての組合せのトランザクションの同一人物確認を行ってもよい。
当該閾値は、予め定められた値であってもよいし、トランザクション荷重算出部1120がDAGに対するMCMCなどを活用して動的に求めてもよい。動的な閾値は、例えば非特許文献2で開示されている、MCMCに基づくトランザクション選択を使って、トランザクションの信頼度が十分に高くなる累積荷重を算出することで、求めることができる。
また、最小累積荷重は、今後さらに確認処理を行った場合においてとり得る最小の累積荷重であり、この値が十分に大きければトランザクションが有効と判定される確率は極めて大きい。このため、トランザクション荷重算出部1120は、確認対象トランザクションの最小累積荷重が閾値以上と判定した場合、確認完了とし、ステップS2130におけるトランザクション荷重算出処理を終了する。当該閾値は、最大累積荷重と同様に、予め定められた値であってもよいし、トランザクション荷重算出部1120がDAGに対するMCMCなどを活用して動的に求めてもよい。なお、全てのトランザクションの累積荷重を算出して有効か否かの判定を行いたい場合は、最小累積荷重の判定を行わずに全ての組合せのトランザクションの同一人物確認を行ってもよい。
また、トランザクション荷重算出部1120は、ステップS4050において、最大累積荷重が十分に小さくない、かつ最小累積荷重が十分大きくない、と判定した場合、ステップS4020に戻る。
また、トランザクション荷重算出部1120は、確認を途中で打ち切らずに全ての承認トランザクションに関して確認を実施してもよく、この場合、最大累積荷重と最小累積荷重を設けずに、未確認の承認トランザクションがなくなるまでステップS4020からステップS4050までの処理を継続する。以上により、確認対象トランザクションに対する累積荷重の算出が完了する。
前述したように、トランザクション検証部1130は、ステップS2130で得られた確認対象トランザクションの累積荷重の値を用いて、トランザクションが有効であるか否かを判定する(S2140)。トランザクションが有効であるとは、今後DAGが成長したときに、将来的に無効と判定される可能性が十分に小さく、トランザクションの有効性が確定した状態であることを示す。
ステップS2140におけるトランザクション判定において、ステップS2130で得られた最大累積荷重及び最小累積荷重に対する閾値処理を適用することができる。また、ステップS2130で得られた最大累積荷重又は最小累積荷重を確認対象のトランザクションの累積荷重としたときに、トランザクション検証部1130はDAGに対してMCMCなどのトランザクション選択アルゴリズムを適用し、確認対象トランザクションが承認される確率を求め、その確率に対する閾値処理を適用してもよい。
以上、トランザクション生成端末1000によるトランザクション生成処理、及びトランザクション確認端末1100によるトランザクション確認処理が完了する。なお、前述した例において、最大累積荷重及び最小累積荷重の双方が算出されていたが、一方のみを算出し、当該一方のみに基づいて、トランザクションの有効性が判定されてもよい。
トランザクション確認端末1100は、トランザクション確認処理において、確認対象トランザクションの累積荷重の算出に、確認対象トランザクションを直接的又は間接的に承認するトランザクションが同一人物により生成されたものかを判定する。そして、トランザクション確認端末1100は、同一人物が生成した承認トランザクションについては、1つのトランザクションの荷重のみを加算する。つまり、同一人物が何度承認トランザクションを生成しても1票しかカウントされないことになり、少数の人物が分散台帳システムの承認権限を独占することは困難となる。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることも可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、又は、ICカード、SDカード、DVD等の記録媒体に置くことができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。