(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024131172
(43)【公開日】2024-09-30
(54)【発明の名称】通信システム、ノード、及びプログラム
(51)【国際特許分類】
G06Q 10/06 20230101AFI20240920BHJP
G06Q 50/26 20240101ALI20240920BHJP
H04L 9/32 20060101ALI20240920BHJP
G06F 21/62 20130101ALI20240920BHJP
【FI】
G06Q10/06
G06Q50/26
H04L9/32 200Z
G06F21/62 318
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2023041267
(22)【出願日】2023-03-15
(71)【出願人】
【識別番号】000006633
【氏名又は名称】京セラ株式会社
(74)【代理人】
【識別番号】110001106
【氏名又は名称】弁理士法人キュリーズ
(72)【発明者】
【氏名】▲高▼橋 良浩
(72)【発明者】
【氏名】山下 裕之
(72)【発明者】
【氏名】石原 聡子
(72)【発明者】
【氏名】鄭 亥勝
(72)【発明者】
【氏名】藤澤 將
(72)【発明者】
【氏名】小山 亮
(72)【発明者】
【氏名】須藤 大貴
【テーマコード(参考)】
5L010
5L049
5L050
【Fターム(参考)】
5L010AA06
5L049AA06
5L049CC35
5L050CC35
(57)【要約】
【課題】低性能ノードに適用することが容易なコンセンサスアルゴリズムを実現する。
【解決手段】通信システムは、ブロックチェーン技術を用いて台帳を分散管理する複数のノードを備える。前記複数のノードは、前記台帳に追加する候補として生成されたブロックに賛成するか否かの投票を行う権利を有する複数の第1ノードと、前記複数の第1ノードの投票内容を集計する第2ノードと、を含む。前記第2ノードは、前記複数の第1ノードにおいて前記投票に参加した参加ノード及び前記投票に参加しなかった不参加ノードが存在することに基づいて、前記不参加ノードが前記参加ノードに前記投票を委任したとみなし、前記不参加ノードの投票内容として前記参加ノードの投票内容を採用する。
【選択図】
図9
【特許請求の範囲】
【請求項1】
ブロックチェーン技術を用いて台帳を分散管理する複数のノードを備え、
前記複数のノードは、
前記台帳に追加する候補として生成されたブロックに賛成するか否かの投票を行う権利を有する複数の第1ノードと、
前記複数の第1ノードの投票内容を集計する第2ノードと、を含み、
前記第2ノードは、前記複数の第1ノードにおいて前記投票に参加した参加ノード及び前記投票に参加しなかった不参加ノードが存在することに基づいて、前記不参加ノードが前記参加ノードに前記投票を委任したとみなし、前記不参加ノードの投票内容として前記参加ノードの投票内容を採用する
通信システム。
【請求項2】
前記第2ノードは、前記不参加ノードが存在し、且つ複数の参加ノードが存在する場合、前記複数の参加ノードのそれぞれの信頼度情報に基づいて、前記複数の参加ノードの中から前記投票の委任先とみなす参加ノードを決定する
請求項1に記載の通信システム。
【請求項3】
前記第2ノードは、複数の不参加ノードが存在し、且つ前記複数の参加ノードが存在する場合、前記複数の参加ノードの中から優先度が高い順に前記複数の不参加ノードの数と同じ数の参加ノードを前記委任先として決定する
請求項2に記載の通信システム。
【請求項4】
前記第2ノードは、前記不参加ノードの数が前記参加ノードの数よりも多い場合、1つの参加ノードを2以上の不参加ノードの前記委任先として決定する
請求項3に記載の通信システム。
【請求項5】
前記第2ノードは、1つの参加ノードに対して委任を行う数が上限を超えないように、前記1つの参加ノードを前記複数の不参加ノードの委任先として決定する
請求項3に記載の通信システム。
【請求項6】
前記信頼度情報は、前記複数の参加ノードのそれぞれの過去の投票の参加状況及び/又は過去の投票の投票内容の妥当性に基づく情報である
請求項2に記載の通信システム。
【請求項7】
前記第2ノードは、前記不参加ノードが存在し、且つ前記不参加ノードが前記投票の委任に承諾していない場合、前記不参加ノードが前記委任を行わないとみなす
請求項1乃至6のいずれか1項に記載の通信システム。
【請求項8】
前記第2ノードは、前記不参加ノードが存在し、且つ前記不参加ノードが前記投票の委任に承諾すること又は前記投票を常に委任することを選択している場合、前記不参加ノードが前記委任を行うとみなす
請求項1乃至6のいずれか1項に記載の通信システム。
【請求項9】
ブロックチェーン技術を用いて台帳を分散管理する複数のノードを備える通信システムにおいて、前記台帳に追加する候補として生成されたブロックに賛成するか否かの投票を行う権利を有する複数の第1ノードの投票内容を集計する第2ノードであって、
前記複数の第1ノードにおいて前記投票に参加した参加ノード及び前記投票に参加しなかった不参加ノードが存在することに基づいて、前記不参加ノードが前記参加ノードに前記投票を委任したとみなし、前記不参加ノードの投票内容として前記参加ノードの投票内容を採用する制御部を備える
第2ノード。
【請求項10】
ブロックチェーン技術を用いて台帳を分散管理する複数のノードを備える通信システムにおいて、前記台帳に追加する候補として生成されたブロックに賛成するか否かの投票を行う権利を有する複数の第1ノードの投票内容を集計する第2ノードに、
前記複数の第1ノードにおいて前記投票に参加した参加ノード及び前記投票に参加しなかった不参加ノードが存在することに基づいて、前記不参加ノードが前記参加ノードに前記投票を委任したとみなし、前記不参加ノードの投票内容として前記参加ノードの投票内容を採用する処理を実行させる
プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、通信システム、ノード、及びプログラムに関する。
【背景技術】
【0002】
近年、ブロックチェーン技術が注目されている。ブロックチェーン技術では、複数のノードによって自律分散型のネットワーク、具体的には、ピアツーピア(P2P)ネットワークが形成されるため、システムダウンが起きないというメリットがある。
【0003】
ブロックチェーン技術は、P2Pネットワーク内の取引(トランザクション)の履歴を各ノードが台帳として管理する仕組みを有する。このような仕組みは分散型台帳技術とも称され、台帳は分散台帳とも称される。1つのノードでトランザクションが発生した場合、参加している全てのノードで計算(検算)処理を行う。これにより、参加しているノードの中に不正がある場合や正常に動作しなかった場合でも、改ざんが非常に困難な正しい取引の履歴が残る仕組みが提供される。
【0004】
ブロックチェーン技術において、P2Pネットワークに所属する各ノードが、台帳に追加されるブロックの正当性を評価するためにコンセンサスアルゴリズムが用いられている。コンセンサスアルゴリズムの1つにPoS(Proof of Stake)がある。PoSでは、参加ノードは、保有する保証金(Stake)に応じて、新規ブロックの正当性を検証するバリデータに選出される。バリデータは、プロポーザと称されるノードが生成した新規ブロックについて不正がないか等を検証し、その正当性について投票を行う。新規ブロックに賛成する旨の投票が一定の割合で集まった場合、当該ブロックが正当であるという合意が形成され、当該ブロックが台帳に追加される。
【0005】
PoSの欠点として、ノード数が多くなるとブロックの合意形成に時間がかかるという問題がある。この問題を解決する手法として、DPoS(Delegated Proof of Stake)がある(例えば、特許文献1参照)。DPoSでは、各ノードの事前の投票によってブロックの生成及び承認を行うノードを選出し、選出したノードに対してブロックの生成及び承認を委任する。
【先行技術文献】
【特許文献】
【0006】
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、既存のコンセンサスアルゴリズムは、ノードが十分な性能を有することを前提としたものが多く、IoT(Internet of Things)機器等の低性能ノードに適用することが難しい。例えば、予めノード同士の投票によりブロック生成・承認者を決定しておくDPoSでは、事前の選出処理を行う必要がある。また、DPoSでは、不正や改ざんの可能性を考慮して、ブロック生成・承認者の入れ替えを行うために選定処理を定期的に行う必要がある。上述のように、既存のコンセンサスアルゴリズムは、低性能ノードには負担が大きいという問題がある。
【0008】
そこで、本開示は、低性能ノードに適用することが容易なコンセンサスアルゴリズムを実現する通信システム、ノード、及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0009】
第1の態様に係る通信システムは、ブロックチェーン技術を用いて台帳を分散管理する複数のノードを備える。前記複数のノードは、前記台帳に追加する候補として生成されたブロックに賛成するか否かの投票を行う権利を有する複数の第1ノードと、前記複数の第1ノードの投票内容を集計する第2ノードと、を含む。前記第2ノードは、前記複数の第1ノードにおいて前記投票に参加した参加ノード及び前記投票に参加しなかった不参加ノードが存在することに基づいて、前記不参加ノードが前記参加ノードに前記投票を委任したとみなし、前記不参加ノードの投票内容として前記参加ノードの投票内容を採用する。
【0010】
第2の態様に係るノードは、ブロックチェーン技術を用いて台帳を分散管理する複数のノードを備える通信システムにおいて、前記台帳に追加する候補として生成されたブロックに賛成するか否かの投票を行う権利を有する複数の第1ノードの投票内容を集計する第2ノードである。前記第2ノードは、前記複数の第1ノードにおいて前記投票に参加した参加ノード及び前記投票に参加しなかった不参加ノードが存在することに基づいて、前記不参加ノードが前記参加ノードに前記投票を委任したとみなし、前記不参加ノードの投票内容として前記参加ノードの投票内容を採用する制御部を備える。
【0011】
第3の態様に係るプログラムは、ブロックチェーン技術を用いて台帳を分散管理する複数のノードを備える通信システムにおいて、前記台帳に追加する候補として生成されたブロックに賛成するか否かの投票を行う権利を有する複数の第1ノードの投票内容を集計する第2ノードに、前記複数の第1ノードにおいて前記投票に参加した参加ノード及び前記投票に参加しなかった不参加ノードが存在することに基づいて、前記不参加ノードが前記参加ノードに前記投票を委任したとみなし、前記不参加ノードの投票内容として前記参加ノードの投票内容を採用する処理を実行させる。
【発明の効果】
【0012】
本開示の一態様によれば、低性能ノードに適用することが容易なコンセンサスアルゴリズムを実現する通信システム、ノード、及びプログラムを提供できる。
【図面の簡単な説明】
【0013】
【
図1】一般的なブロックチェーン技術を用いる通信システムにおけるネットワーク構成例を示す図である。
【
図2】各ノードが管理する台帳の構成例を示す図である。
【
図3】台帳に新たなブロックを追加する際の動作例を示す図である。
【
図4】台帳に新たなブロックを追加する際の動作例を示す図である。
【
図6】一実施形態に係る自動的な投票委任について説明するための図である。
【
図7】一実施形態に係る自動的な投票委任について説明するための図である。
【
図8】一実施形態に係る第3ノードが管理する情報の一例を示す図である。
【
図9】一実施形態に係る自動的な投票委任に関する第2ノードの動作フロー例を示す図である。
【
図10】一実施形態に係る自動的な投票委任に関する信頼度情報(信頼性リスト)の管理フロー例を示す図である。
【
図11】一実施形態に係るグループ署名を説明するための図である。
【
図12】一実施形態に係るグループ署名に関する概略動作フロー例を示す図である。
【
図13】一実施形態に係るグループ署名に関する第1動作パターンの一例を示す図である。
【
図14】一実施形態に係るグループ署名に関する第1動作パターンの変更例を示す図である。
【
図15】一実施形態に係るグループ署名に関する第2動作パターンの一例を示す図である。
【
図16】一実施形態に係るグループ署名に関する第3動作パターンの一例を示す図である。
【
図17】一実施形態に係るネットワーク構成例を示す図である。
【
図18】一実施形態に係る台帳の管理方法について説明するための図である。
【
図19】一実施形態に係る台帳の管理方法について説明するための図である。
【
図20】一実施形態に係る階層構造ネットワークを一般的なネットワーク構成と比較した場合の計算量の削減効果を説明するための図である。
【
図21】一実施形態に係る上位階層台帳と下位階層台帳とのリンクについて説明するための図である。
【
図22】一実施形態に係る上位階層台帳と下位階層台帳とのリンクについて説明するための図である。
【発明を実施するための形態】
【0014】
図面を参照しながら実施形態に係る通信システムについて説明する。図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。
【0015】
(1)通信システムの概要
まず、
図1乃至
図4を参照して、一般的なブロックチェーン技術について説明する。
【0016】
図1は、一般的なブロックチェーン技術を用いる通信システムにおけるネットワーク構成例を示す図である。
図1において、ノード間を結ぶ線はノード間の通信接続を表している。このような通信接続を直接的な通信接続とも称する。
【0017】
ブロックチェーン技術では、複数のノード100によって自律分散型のネットワーク、具体的には、P2Pネットワーク(「グループ」とも称する)200が形成される。各ノード100は、相互に通信可能に接続されている。ノード100間の通信は、公衆通信網及び/又はローカル通信網を介して行われてもよい。なお、
図1において、ノード100a乃至100eの合計5つのノードを例示しているが、ノード100の数は5つに限定されない。各ノード100は、少なくとも通信機能及び演算処理機能を有する機器、例えば、PC(Personal Computer)である。一般的なブロックチェーン技術では、P2Pネットワーク200の各ノード100が十分な性能(スペック)を有していることが前提となっている。
【0018】
各ノード100は、P2Pネットワーク200内の取引(トランザクション)の履歴を台帳として管理する。1つのノード100(例えば、ノード100a)でトランザクションが発生した場合、参加している全てのノード(ノード100a乃至ノード100e)が計算(検算)処理を行う。これにより、参加しているノード100の中に不正がある場合や正常に動作しなかった場合でも、改ざんが非常に困難な正しい取引の履歴が残る仕組みが提供される。なお、トランザクションは、例えば、金銭又はポイント等の送金又は決済等、或いは、通信の発生等であってもよい。その場合、台帳のブロックに格納されるトランザクションデータは、送金又は決済のデータであってもよいし、通信のデータであってもよい。トランザクションは、P2Pネットワーク200におけるノードの参加又は削除等であってもよい。その場合、台帳のブロックに格納されるトランザクションデータは、ノード100のデータ(パラメータ)であってもよい。トランザクションは、台帳の更新であってもよい。台帳のブロックに格納されるトランザクションデータがノード100のデータ(パラメータ)であってもよい。一実施形態では、台帳のブロックに格納されるトランザクションデータがノード100のデータ(パラメータ)を含む一例を主として想定する。このようなノード100のデータ(パラメータ)を台帳で管理することにより、ネットワーク内のノード100が真正な機器であることを保証することが容易になる。
【0019】
図2は、各ノード100が管理する台帳の構成例を示す図である。
【0020】
各ノード100は、ネットワーク内で発生したトランザクションの記録をブロックに格納する。1つのブロックは、ヘッダ部分であるブロックヘッダと、少なくとも1つのトランザクションのデータ(単に「データ」とも称する)を格納するトランザクションデータ部分とを有する。ブロックヘッダには、1つ前に生成されたブロックから計算されたハッシュ値等が格納される。例えば、ブロックn+1のブロックヘッダには、ブロックnから計算されたハッシュ値等が格納される。このように、台帳は、生成された各ブロックが時系列に沿ってチェーン状に繋がるデータ構造を有する。ブロックヘッダは、該当するブロックの番号を表すハイトと、ハッシュ値の計算に用いる値であるナンスとをさらに含んでもよい。
【0021】
このように、台帳は、時系列に沿ってチェーン状に繋がる複数のブロックを含む。具体的には、ブロックチェーン技術においては、台帳における最初のブロックであるジェネシスブロックから現在のブロック(最新のブロック)まで連鎖するブロックに関する情報を全て台帳に記載することによりセキュリティを担保している(例えば、特許文献1参照)。
【0022】
図3及び
図4は、台帳に新たなブロックを追加する際(すなわち、台帳を更新する際)の動作例を示す図である。
【0023】
図3に示すように、P2Pネットワーク200内でトランザクションが発生した後、当該トランザクションに対応する新たなブロックを、「プロポーザ」と称されるノード100が生成し、他のノード100に対して新たなブロックを通知することで提案する。プロポーザは、マイニングに成功したノード100であってもよい。例えば、複数のノード100がナンスの値を変化させながらトランザクションデータ等と合わせてそのハッシュ値を計算し、特定条件を満たすハッシュ値を見つけたノード100(プロポーザ)が、生成したブロックを他のノード100に通知する。新たなブロックの提案を受けた他のノード100は、新たなブロックのハッシュ値を検算する。ここでは検算に成功したと仮定して説明を進める。
【0024】
続いて、
図4に示すように、新たなブロックの提案を受けた他のノード100は、検算したブロックを新たなブロックとして認めるようにノード100(プロポーザ)に対して投票する。ブロックの正当性を検証して投票を行う他のノード100を「バリデータ」と称する。ノード100(プロポーザ)は、他のノード100(バリデータ)からある一定数の投票が得られた場合、提案した新たなブロックを確定し、当該新たなブロックを台帳に追加する。
【0025】
このように、ブロックチェーン技術においては、P2Pネットワーク200に所属する各ノード100が、台帳に追加されるブロックの正当性を評価するためにコンセンサスアルゴリズムが用いられている。コンセンサスアルゴリズムの1つにPoS(Proof of Stake)がある。PoSでは、参加ノードは、保有する保証金(Stake)に応じて、新規ブロックの正当性を検証するバリデータに選出される。バリデータは、プロポーザが生成した新規ブロックについて不正がないか等を検証し、その正当性について投票を行う。新規ブロックに賛成する旨の投票が一定の割合で集まった場合、当該ブロックが正当であると合意が形成され、当該ブロックが台帳に追加される。PoSの欠点として、P2Pネットワークに所属するノードの数が多くなるとブロックの合意形成に時間がかかるという問題がある。この問題を解決する手法として、DPoS(Delegated Proof of Stake)がある。DPoSでは、各ノードの事前の投票によってブロックの生成及び承認を行うノードを選出し、選出したノードに対してブロックの生成及び承認を委任する。
【0026】
図5は、各ノード100の構成例を示す図である。各ノード100は、IoT(Internet of Things)機器等の低性能ノードであってもよい。
【0027】
図5に示すように、ノード100は、通信部110と、制御部120と、記憶部130とを有する。ノード100は、バッテリ140を有していてもよい。
【0028】
通信部110は、他ノードとの通信を行うための通信インターフェイスを含む。通信インターフェイスは、無線通信インターフェイスであってもよいし、有線通信インターフェイスであってもよい。
【0029】
制御部120は、ノード100における各種の制御及び処理を行う。上述及び後述のノード100の動作は、制御部120の制御による動作であってもよい。制御部120は、少なくとも1つのプロセッサ121を含む。プロセッサ121は、記憶部130に記憶されるプログラムを実行して各種の処理を行う。
【0030】
記憶部130は、プロセッサ121により実行されるプログラム、及びプロセッサ121による処理に用いられる情報を記憶する。記憶部130は、不揮発性メモリ及び揮発性メモリを含む。
【0031】
バッテリ140は、ノード100(機器)の各部に供給する電力を蓄える。
【0032】
(2)自動的な投票委任
次に、
図6乃至
図10を参照して、一実施形態に係る自動的な投票委任について説明する。
【0033】
既存のコンセンサスアルゴリズムは、ノード100が十分な性能を有することを前提としたものが多く、IoT機器等の低性能ノードに適用することが難しい。例えば、予めノード同士の投票によりブロック生成・承認者を決定しておくDPoSでは、事前の選出処理を行う必要がある。また、DPoSでは、不正や改ざんの可能性を考慮して、ブロック生成・承認者の入れ替えを行うために選定処理を定期的に行う必要がある。よって、既存のコンセンサスアルゴリズムは、低性能ノードには負担が大きいという問題がある。
【0034】
図6に示すように、一実施形態に係る通信システムは、ブロックチェーン技術を用いて台帳を分散管理する複数のノード100を有する。複数のノード100は、P2Pネットワーク200を構成する。複数のノード100は、台帳に追加する候補として生成されたブロック(すなわち、新規ブロック)に賛成するか否かの投票を行う権利を有する複数の第1ノード100Aと、第1ノード100Aの投票内容(具体的には、新規ブロックに対する賛成(OK)又は反対(NG))を集計する第2ノード100Bと、を含む。
【0035】
第1ノード100Aは、バリデータの役割を果たすノード100であってもよい。バリデータは、投票権を有するノード100である。
図6及び
図7において、ノード内で示す数字(例えば、「1」)は、当該ノードの投票権を意味する。基本的には、各第1ノード100Aは、1票分の投票権を有している。一方、第2ノード100Bは、プロポーザの役割を果たすノード100であってもよい。プロポーザは、バリデータの中から選出され、ブロックを生成するノード100である。
【0036】
複数のノード100は、P2Pネットワーク200を構成する各ノード100の情報を管理する第3ノード100Cをさらに含んでもよい。第3ノード100Cは、P2Pネットワーク200のピア情報及び/又は接続情報などを管理するシードノードの役割を果たすノード100であってもよい。なお、バリデータ、プロポーザ、及びシードノードのうち2つ以上の役割を1つのノード100が有していてもよい。第1ノード100A、第2ノード100B、及び第3ノード100Cのうち2つ以上のノード100が同一のノード100であってもよい。
【0037】
また、複数のノード100のそれぞれは、台帳の全体を保持及び管理するフルノードであってもよい。或いは、複数のノード100の一部は、ライトクライアント(クライアント)であってもよい。ライトクライアントは、台帳の一部のみを保持し、ブロックチェーン技術を利用するノード100(例えば、資産を保有している及び/又は台帳にデータを格納している等のノード100)であってもよい。
【0038】
一実施形態では、第2ノード100B(プロポーザ)は、複数の第1ノード100A(複数のバリデータ)において投票に参加した参加ノード(参加バリデータ)及び投票に参加しなかった不参加ノード(不参加バリデータ)が存在することに基づいて、不参加ノードが参加ノードに投票を委任したとみなし、不参加ノードの投票内容として参加ノードの投票内容を採用する。このように、一実施形態では、投票に参加しなかった第1ノード100Aを自動的に委任とみなす。これにより、DPoSのような事前の選出処理が発生しないため、負担を軽減でき、低性能ノードに適用することが容易なコンセンサスアルゴリズムを実現できる。
【0039】
なお、不参加ノードは、投票締め切りのタイミングまでに投票を行わなかった第1ノード100Aである。投票締め切りのタイミングは、投票の受け付け開始から所定時間が経過(すなわち、タイマの満了によるタイムアウト)したタイミングであってもよい。また、投票の受け付けは、新規ブロックに賛成する旨の投票(委任を含む)が一定の割合(例えば、2/3)で集まったタイミングで終了する。その場合、新規ブロックが確定(承認)されて台帳に追加される。さらに、投票の受け付けは、新規ブロックに反対する旨の投票(委任を含む)が一定の割合(例えば、1/3)で集まったタイミングで終了する。その場合、新規ブロックが否決されて破棄される。
【0040】
第2ノード100Bは、複数の不参加ノード100が存在し、且つ複数の参加ノードが存在する場合、当該複数の参加ノードの中から優先度が高い順に当該複数の不参加ノードの数と同じ数の参加ノードを委任先として決定する。これにより、不参加ノードの委任先を分散させることができ、1つの参加ノードの投票が支配的になることを防止しやすくなる。
【0041】
図7の例では、「a」及び「b」で示す2つの第1ノード100Aが不参加ノードであり、残りの8つの第1ノード100Aが参加ノードである。一般にブロックチェーン技術を用いる通信システムにおけるセキュリティを担保するためには、ブロックチェーン技術におけるP2Pネットワークにおいて、ビザンチン・フォールトトレラント性を有するコンセンサスアルゴリズムが適用される必要がある。すなわち新規にブロックが生成された場合、ブロックチェーン技術におけるP2Pネットワークに参加するノードのうち2/3以上が賛成と投票したブロックを確定するべきであり、また、P2Pネットワークに参加するノードのうち1/3以上が反対と投票したブロックを破棄するべきである。このような条件を満たすコンセンサスアルゴリズムを、ビザンチン耐性を有するコンセンサスアルゴリズムと称する。一実施形態におけるコンセンサスアルゴリズムにおいて、ビザンチン耐性を担保するためには、全体のバリデータの数に相当する10票に対し、7票が正常に動作している(7票の賛成)が必要である。しかしながら、「a」及び「b」で示す2つの第1ノード100Aが投票に不参加であるため、参加ノード8票中7票の賛成が必要であるとすると、ブロックが承認される確率が必要以上に低下し、ブロック承認に係る効率が悪化する。
【0042】
そこで、第2ノード100Bは、投票に参加した第1ノード100Aのうち、「X」及び「Y」で示す2つの参加ノードを委任先として決定する。例えば、第2ノード100Bは、不参加ノード「a」の委任先として参加ノード「X」を決定する。その場合、第2ノード100Bは、参加ノード「X」の投票内容(具体的には、新規ブロックに対する賛成(OK)又は反対(NG))を、参加ノード「X」及び不参加ノード「a」のそれぞれの投票内容、すなわち、2票分の投票としてカウントする。また、例えば、第2ノード100Bは、不参加ノード「b」の委任先として参加ノード「Y」を決定する。その場合、第2ノード100Bは、参加ノード「Y」の投票内容(具体的には、新規ブロックに対する賛成(OK)又は反対(NG))を、参加ノード「Y」及び不参加ノード「b」のそれぞれの投票内容、すなわち、2票分の投票としてカウントする。
【0043】
但し、第2ノード100Bは、不参加ノードの数が参加ノードの数よりも多い場合、1つの参加ノードを2以上の不参加ノードの委任先として決定してもよい。
【0044】
一実施形態では、第2ノード100Bは、不参加ノードが存在し、且つ複数の参加ノードが存在する場合、複数の参加ノードのそれぞれの信頼度情報に基づいて、当該複数の参加ノードの中から投票の委任先とみなす参加ノードを決定する。このように、不参加ノードの委任先は信頼度の高い第1ノード100Aとする。第1ノード100Aの信頼度は、当該第1ノード100Aの過去の行動(投票率や投票結果など)で判断される。信頼度の低い第1ノード100A(例えば、問題のある第1ノード100A)は委任先として選ばれない。以上の動作により、高信頼バリデータが不参加ノードの代わりに投票したことになり、実質的な投票数が確保されるため、ブロック承認にかかる効率の悪化を低減することができる。
【0045】
各第1ノード100Aの信頼度情報は、
図6に示すように、例えば第3ノード100C(シードノード)により管理される。信頼度情報は、複数の参加ノードのそれぞれの過去の投票の参加状況及び/又は過去の投票の投票内容の妥当性に基づく情報であって、例えば信頼度を示す値(指標値)である。第3ノード100Cは、各第1ノード100Aの信頼度を示すリスト(「信頼性リスト」と称する)を管理する。
【0046】
図8は、一実施形態に係る第3ノード100Cが管理する情報の一例を示す図である。第3ノード100Cは、第1ノード100A(バリデータ)ごとに、信頼度を示す値を管理する。第1ノード100Aとその信頼度とを対応付けたリストが信頼性リストに相当する。信頼性リストでは、信頼度が高い順に並べられている。
【0047】
第3ノード100Cは、過去の投票の参加率(すなわち、過去の投票の回数のうち投票に参加した割合)が高いほど、信頼度を示す値が大きくなるように信頼性評価を行ってもよい。第3ノード100Cは、過去の投票の投票内容が妥当であった確率が高いほど、信頼度を示す値が大きくなるように信頼性評価を行ってもよい。過去の投票の投票内容が妥当であった場合とは、新規ブロックが確定(承認)された場合は賛成と投票した場合をいい、ブロックが否決された場合は反対と投票した場合をいう。
【0048】
信頼性評価を行う対象期間は、可変設定可能であってもよい。例えば、第3ノード100Cは、現時点から過去のある時点までを対象として信頼性評価を行ってもよい。また、第3ノード100Cは、時間的に古い評価結果については、信頼度を示す値が小さくなるように重み付けを行ってもよい。言い換えると、第3ノード100Cは、時間的に新しい評価結果については、信頼度を示す値が大きくなるように重み付けを行ってもよい。例えば、最新の投票における信頼度の加算値は1、その前の投票について0.9、・・・、9つ前の投票について0.1で、10以上の前の投票については評価結果を0とする、といった重み付けが可能である。
【0049】
詳細については後述するが、それぞれ個別の台帳を管理する複数のグループが存在し、且つ、各グループにリーダーノード(「親ノード」とも称する)が存在する場合、第3ノード100Cは、リーダーノードについては無条件で信頼できると評価してもよい。例えば、第3ノード100Cは、リーダーノードの信頼度を示す値を無限大に設定したり、常に信頼性リストで1位にしたりといった評価が可能である。
【0050】
なお、過去の投票の参加率については、ブロックの確定(承認)又は否決による投票締め切りのタイミング(具体的には、新規ブロックに賛成する旨の投票が一定の割合(例えば、2/3)で集まったタイミング、又は、新規ブロックに反対する旨の投票が一定の割合(例えば、1/3)で集まったタイミング)の後であって、タイムアウトまでに投票を行った第1ノード100Aを、投票に参加したとして扱ってもよい。その場合、第3ノード100Cは、投票締め切り後に参加率を計算するのではなく、タイマ満了後に参加率の計算を行う。
【0051】
図8に示すように、第3ノード100Cが管理する情報は、各第1ノード100Aについて他ノードへの委任可否を示す情報を含んでもよい。例えば、各第1ノード100Aは、P2Pネットワーク200に参加する際に、「委任を承諾する」及び「委任を承諾しない」のいずれかを選択可能であってもよい。「委任を承諾しない」と宣言した第1ノード100Aについては、自動的な投票委任が行われない。第2ノード100Bは、不参加ノードが存在し、且つ当該不参加ノードが投票の委任に承諾していない場合、当該不参加ノードが参加ノードに対して投票の委任を行わないとみなす。一方、「委任を承諾する」と宣言した第1ノード100Aについては、自動的な投票委任が可能である。第2ノード100Bは、不参加ノードが存在し、且つ当該不参加ノードが投票の委任に承諾している場合、当該不参加ノードが参加ノードに対して投票の委任を行うとみなす。
【0052】
また、各第1ノード100Aは、「常に委任する」という選択が可能であってもよい。「常に委任する」と宣言した第1ノード100Aについては、自動的な投票委任が常に行われるとしてもよい。第2ノード100Bは、不参加ノードが存在し、且つ当該不参加ノードが「常に委任する」ことを選択している場合、当該不参加ノードが参加ノードに対して投票の委任を行うとみなす。
【0053】
或いは、P2Pネットワーク200の全体で、投票に不参加の場合は強制的に委任となるとしてもよい。その場合、P2Pネットワーク200に参加中のノード100は、P2Pネットワーク200に新たに参加するノード100に対して、グループ参加の条件として、投票に不参加の場合は強制的に委任となる旨を通知しておくことが好ましい。
【0054】
図9は、一実施形態に係る自動的な投票委任に関する第2ノード100Bの動作フロー例を示す図である。
【0055】
ステップS11において、第2ノード100Bは、新規ブロックを各第1ノード100Aに送信し、当該新規ブロックに対する投票の受け付けを開始する。また、第2ノード100Bは、投票を受け付ける期間を規定するタイマを開始してもよい。
【0056】
ステップS12において、第2ノード100Bは、例えばタイマの満了に応じて、各第1ノード100Aからの投票の受け付けを終了し、各第1ノード100Aからの投票を集計する。具体的には、第2ノード100Bは、各第1ノード100Aからの投票のうち、賛成票(賛成を示す投票)及び反対票(賛成を示す投票)のそれぞれをカウントする。
【0057】
ステップS13において、第2ノード100Bは、全第1ノード100Aのうち賛成(OK)を示す投票を行った第1ノード100Aの割合と、全第1ノード100Aのうち反対(NG)を示す投票を行った第1ノード100Aの割合とを計算する。全第1ノード100Aのうち賛成(OK)を示す投票を行った第1ノード100Aが一定の割合(例えば、2/3)以上であるか、又は全第1ノード100Aのうち反対(NG)を示す投票を行った第1ノード100Aが一定の割合(例えば、1/3)以上である場合(ステップS13:YES)、第2ノード100Bは、投票処理を終了する(ステップS14)。
【0058】
ここで、全第1ノード100Aのうち賛成(OK)を示す投票を行った第1ノード100Aの割合が2/3以上である場合、第2ノード100Bは、新規ブロックを確定し、新規ブロックを台帳に追加するよう処理する。一方、第1ノード100Aのうち反対(NG)を示す投票を行った第1ノード100Aの割合が1/3以上である場合、第2ノード100Bは、新規ブロックを破棄する。
【0059】
ステップS13でNOの場合、ステップS15において、第2ノード100Bは、不参加ノードを特定するとともに、参加ノードの信頼度情報について第3ノード100Cに問い合せ、不参加ノードの委任先とする参加ノード(すなわち、信頼度の高いバリデータ)を信頼度情報に基づいて決定する。例えば、2つの不参加ノードが存在する場合、第2ノード100Bは、信頼度が最も高い参加ノードについて委任があったとみなして2票分とカウントし、信頼度が2番目に高い参加ノードについても委任があったとみなして2票分とカウントする。ここで、委任可能とする信頼度の最低値を設定してもよい。一定以下の信頼度の参加ノードに不参加ノードの投票権を渡さないことでセキュリティの低下を防止できる。
【0060】
ステップS16において、第2ノード100Bは、ステップS15の結果を反映して投票内容を再計算する。具体的には、第2ノード100Bは、委任を含む全投票のうち賛成票(賛成を示す投票)及び反対票(賛成を示す投票)のそれぞれをカウントする。その後、第2ノード100Bは、再度ステップS13の処理を行う。
【0061】
なお、本フローでは、ステップS15において、不参加ノードの数が多くなると、1つの参加ノードに対して投票権(Voting Power)の再追加が行われる場合がある。例えば、
図8の信頼度の例では、2つの不参加ノードの投票権(2票分)がバリデータ#6に委任され、バリデータ#6について3票分とカウントされる場合がある。第2ノード100Bは、1つの参加ノードに対して2票目以降の委任を行う際は、信頼度の重みづけをして委任の順番を決めてもよい。
図8の信頼度の例では、3つの信頼できる第1ノード100A(バリデータ#6、#9、#3)があって、それぞれ信頼度が「10」、「7」、「4」である。その場合、最も信頼度の高いバリデータ#6に委任が行われた後、再度委任先を決定する際には、バリデータ#6の信頼度の重みづけを0.5とし、バリデータ#6の2回目の信頼度が5となる。その結果、追加の順番が、「バリデータ#6:1回目の委任先」→「バリデータ#9:1回目の委任先」→「バリデータ#6:2回目の委任先」→「バリデータ#3:1回目の委任先」…といった態様になる。
【0062】
また、1つの第1ノード100Aにおける委任を含む投票数(投票権)が全体に対して支配的になることを防止する必要がある。例えば、1つの第1ノード100Aの投票数(投票権)を全体の1/3以下とする必要がある。別途仕様として、1つの第1ノード100Aに対して委任可能な投票数(投票権)の上限値を定めてもよい。例えば、1つの第1ノード100Aの投票数(投票権)を全体の1/5以下とするというように規定されてもよい。その場合、第2ノード100Bは、当該上限値を超えないように委任先の決定を行う。
【0063】
図10は、一実施形態に係る自動的な投票委任に関する信頼度情報(信頼性リスト)の管理フロー例を示す図である。
【0064】
ステップS21において、第2ノード100Bは、新規ブロックの確定(承認)又は否決による投票締め切り、又はタイマの満了により、投票の受け付けを終了する。
【0065】
ステップS22において、第2ノード100Bは、投票に参加した各第1ノード100Aを第3ノード100C(シードノード)に通知する。或いは、第2ノード100Bは、正しく判断した第1ノード100を第3ノード100Cに通知してもよい。具体的には、第2ノード100Bは、新規ブロックが承認された場合は賛成と投票した第1ノード100Aを、新規ブロックが否決(破棄)された場合は反対と投票した第1ノード100Aを、第3ノード100Cに通知してもよい。
【0066】
ステップS23において、第3ノード100Cは、信頼性リスト中の信頼度を更新する。上述のように、第3ノード100Cは、過去の投票の参加率が高いほど、信頼度を示す値が大きくなるように信頼性評価を行ってもよい。第3ノード100Cは、過去の投票の投票内容が妥当であった確率が高いほど、信頼度を示す値が大きくなるように信頼性評価を行ってもよい。
【0067】
ステップS24において、第3ノード100Cは、信頼性リスト中のレコードを信頼度の高い順に並べ替える。
【0068】
(3)グループ署名
次に、
図11乃至
図16を参照して、一実施形態に係るグループ署名について説明する。
【0069】
第2ノード100B(プロポーザ)が生成するブロック候補の正当性に係る投票について、前回の投票と今回の投票との間で、一定割合(例えば、1/3)以上の投票者(第1ノード100A)が共通していることが求められる。すなわち、ブロックチェーン技術では、投票間の投票者の連続性を保証することで、台帳の連続性を担保する必要がある。特に、上述の自動的な投票委任を適用する場合、委任を行う第1ノード100Aが増えると、連続性が保証できなくなる可能性がある。また、後述のように階層構造ネットワークを導入する場合、同一の台帳を分散管理するグループ間でノード100が移動することがあり、連続性が保証できなくなる可能性がある。
【0070】
投票間の投票者の連続性を保証するために、台帳に追加するブロック(新規ブロック)に、当該ブロックに対する投票に参加した各第1ノード100A(投票者)の署名を格納する方法が考えられる。例えば、第2ノード100Bは、前回のブロックの署名に基づいて前回の投票に参加した第1ノード100Aを確認し、今回の投票に参加した第1ノード100Aが一定割合以上で共通している場合に限り、今回の新規ブロックを確定可能と判断できる。
【0071】
しかしながら、投票に参加する第1ノード100Aが多い場合、ブロックに格納する署名の量も多くなり、各ブロックの情報量が多くなる。各ブロックに格納する署名はそれほど大きなサイズではないが、台帳中のブロック数が増えてくると、台帳の肥大化に繋がるという問題がある。
【0072】
図11は、一実施形態に係るグループ署名を説明するための図である。
【0073】
ブロックチェーン技術を用いて台帳を分散管理する複数のノード100は、P2Pネットワーク200を構成する。複数のノード100は、台帳に追加する候補として生成されたブロック(新規ブロック)に賛成するか否かの投票を行う権利を有する複数の第1ノード100A(バリデータ)と、投票の集計結果に応じて確定されたブロックに、投票者を示す署名を格納する第2ノード100B(プロポーザ)と、を含む。第2ノード100Bは、複数の第1ノード100Aのうちの2つ以上からなるグループ(「投票者グループ」とも称する)を設定した場合、投票者グループのグループ署名を新規ブロックに格納する。
【0074】
このように、投票者グループを構成する2つ以上の第1ノード100Aについては、当該第1ノード100Aのそれぞれに個別の署名を新規ブロックに格納することに代えて、投票者グループのグループ署名を新規ブロックに格納する。例えば、5つの第1ノード100Aの個別の署名を新規ブロックに格納すると、新規ブロックに格納する署名の数は「5」になる。これに対し、当該5つの第1ノード100Aからなる投票者グループが設定された場合、新規ブロックに格納する署名(グループ署名)の数は「1」になり、新規ブロックに格納する署名の数を1/5に削減できる。よって、投票間の投票者の連続性を保証することを容易にしつつ、台帳の肥大化を抑制可能である。
【0075】
第2ノード100Bは、あるブロック(「第1ブロック」とも称する)に対する投票の結果に基づいて、第1ブロックの次の第2ブロックに対する投票に適用する投票者グループを設定する。例えば、第2ノード100Bは、複数の第1ノード100Aのうち第1ブロックに対する投票内容が賛成を示す2つ以上の第1ノード100A(
図11の例では、4つの第1ノード100A)を投票者グループとして設定する。或いは、第2ノード100Bは、複数の第1ノード100Aのうち第1ブロックに対する投票に参加した全ての第1ノード100Aを投票者グループとして設定してもよい。
【0076】
ここで、投票者グループについては、当該グループ全体で投票内容(新規ブロックに対する賛成又は反対)が統一される必要がある。そのため、第2ノード100Bは、投票者グループを構成する各第1ノード100Aの投票内容のうち同一の内容を示す投票数の割合が閾値(例えば、2/3)以上であることに応じて、投票者グループを構成する全ての第1ノード100Aが当該同一の内容で投票を行ったとみなす。例えば、第2ノード100Bは、投票者グループを6つの第1ノード100Aで構成する場合を想定する。その場合、第2ノード100Bは、6つの第1ノード100Aの投票内容のうち「賛成」を示す投票数が4以上であれば、投票者グループを構成する全ての第1ノード100Aが「賛成」の投票を行ったとみなす。
【0077】
第2ノード100Bは、投票者グループを構成する各第1ノード100Aに、秘密分散方式を用いて秘密情報から生成されたシェア情報を配布してもよい。秘密分散方式は、元の秘密情報を複数のシェア情報に分けて秘密を分散配布し、分散した情報の全て又は特定の数がそろうと、元の秘密情報を復元できる方式である。投票者グループを構成する各第1ノード100Aは、配布されたシェア情報を投票の際に第2ノード100Bに提供(通知)する。第2ノード100Bは、投票の際に提供されたシェア情報から秘密情報を復元できたことに応じて、グループ署名を新規ブロックに格納する。第2ノード100Bは、当該秘密情報を用いて生成したグループ署名を新規ブロックに格納してもよい。
【0078】
ここで、投票者グループを構成する各第1ノード100Aは、グループ署名への参加を承諾する場合に限り、投票の際にシェア情報を第2ノード100Bに提供してもよい。言い換えると、投票者グループを構成する各第1ノード100Aは、グループ署名への参加を拒否する場合には、投票の際にシェア情報を第2ノード100Bに提供しない。第2ノード100Bは、投票の際にシェア情報を提供しない第1ノード100Aを、投票者グループに属する第1ノード100Aではないとみなす。
【0079】
第2ノード100Bは、前回のブロックの署名に基づいて、前回の投票者と今回の投票者とが一定割合以上で共通しているか否かの連続性の確認を行い、連続性が確認された場合に限り、今回のブロックを確定可能と判断する。第2ノード100Bは、前回のブロックにグループ署名が含まれており、且つ、今回のブロックにグループ署名を含めることに応じて、前回の投票者と今回の投票者とが一定割合以上で共通していることを示す連続性が担保されているとみなし、今回のブロックを確定可能と判断してもよい。これにより、連続性を確認するためにグループ署名を活用できる。例えば、グループ署名を生成できればブロックを確定できるため、合意形成に要する時間を短縮できるとともに、ブロック確定の成功率を向上できる。
【0080】
図12は、一実施形態に係るグループ署名に関する概略動作フロー例を示す図である。
【0081】
ステップS31において、第2ノード100Bは、新規ブロックを生成及び提案し、投票処理(第1ノード100Aからの投票の受け付け)を行う。
【0082】
投票処理により新規ブロックが承認(確定)された場合(ステップS32:YES)、ステップS33において、第2ノード100Bは、承認された新規ブロックを台帳に追加する処理を行う。その際、第2ノード100Bは、投票を行った各第1ノード100Aの署名を新規ブロックに格納する。
【0083】
また、第2ノード100Bは、投票結果に基づいて投票者グループを設定する。上述のように、第2ノード100Bは、複数の第1ノード100Aのうち新規ブロックに対する投票内容が賛成を示す2つ以上の第1ノード100Aを投票者グループとして設定する。或いは、第2ノード100Bは、複数の第1ノード100Aのうち第1ブロックに対する投票に参加した全ての第1ノード100Aを投票者グループとして設定してもよい。第2ノード100Bは、設定する投票者グループを構成する各第1ノード100Aに、秘密分散方式を用いて秘密情報から生成されたシェア情報を配布する。
【0084】
ステップS33において、第2ノード100Bは、次の新規ブロックを生成及び提案し、投票処理(第1ノード100Aからの投票の受け付け)を行う。
【0085】
投票処理により次の新規ブロックが承認(確定)された場合(ステップS35:YES)、ステップS36において、第2ノード100Bは、承認された新規ブロックを台帳に追加する処理を行う。その際、第2ノード100Bは、投票者グループのグループ署名を新規ブロックに格納する。
【0086】
また、第2ノード100Bは、投票結果に基づいて投票者グループを設定(再設定)する。上述のように、第2ノード100Bは、複数の第1ノード100Aのうち新規ブロックに対する投票内容が賛成を示す2つ以上の第1ノード100Aを投票者グループとして設定する。或いは、第2ノード100Bは、複数の第1ノード100Aのうち第1ブロックに対する投票に参加した全ての第1ノード100Aを投票者グループとして設定してもよい。第2ノード100Bは、設定(再設定)する投票者グループを構成する各第1ノード100Aに、秘密分散方式を用いて秘密情報から生成されたシェア情報を配布する。その後、ステップS34に処理が戻る。
【0087】
図13は、一実施形態に係るグループ署名に関する第1動作パターンの一例を示す図である。第1動作パターンでは、第2ノード100Bは、複数の第1ノード100A(ノードA乃至ノードIの9つのノード)のうち投票内容が賛成を示す2つ以上の第1ノード100Aを投票者グループとして設定する。
【0088】
ステップS101において、第2ノード100Bは、ブロック#0を生成及び提案し、ブロック#0に対する投票結果(すなわち、1回目の投票結果)を集計する。ここでは、投票結果が、ノードA:賛成、ノードB:賛成、ノードC:賛成、ノードD:不参加、ノードE:反対、ノードF:賛成、ノードG:賛成、ノードH:反対、ノードI:賛成、であるものとする。
【0089】
ステップS102において、第2ノード100Bは、ノードA乃至ノードIの9つのノードのうち、6つのノード(ノードA、ノードB、ノードC、ノードF、ノードG、ノードI)の投票内容が「賛成」であることから、全体の2/3がブロック#0に賛成したことになり、ブロック#0が承認されたと判断し、ブロック#0を台帳に追加する処理を行う。この時点では、未だ投票者グループが設定されていないことから、第2ノード100Bは、投票に参加した各ノード(ノードD以外の各ノード)の個別の署名をブロック#0に格納してもよい。
【0090】
ステップS103において、第2ノード100Bは、投票内容が「賛成」であった6つのノード(ノードA、ノードB、ノードC、ノードF、ノードG、ノードI)を投票者グループとして設定し、これら6つのノードのそれぞれにシェア情報(「秘密共有鍵」とも称する)を配布する。
【0091】
ステップS104において、第2ノード100Bは、ブロック#1を生成及び提案し、ブロック#1に対する投票結果(すなわち、2回目の投票結果)を集計する。ここでは、投票結果が、ノードA:賛成、ノードB:賛成、ノードC:賛成、ノードD:不参加、ノードE:賛成、ノードF:賛成、ノードG:不参加、ノードH:反対、ノードI:不参加、であるものとする。なお、投票者グループとして設定された各ノード(ノードA、ノードB、ノードC、ノードF、ノードG、及びノードI)は、グループ署名に承諾しており、秘密共有鍵を投票時に第2ノード100Bに通知する。
【0092】
ステップS105において、第2ノード100Bは、ノードA、ノードB、ノードC、ノードF、ノードG、及びノードIが投票者グループとして設定されており、これら各ノードが秘密共有鍵を通知していることから、これら各ノードの投票内容に基づいて投票者グループ全体で統一した投票内容を決定する。ノードA、ノードB、ノードC、ノードF、ノードG、及びノードIのうち、ノードA、ノードB、ノードC、及びノードFのそれぞれの投票内容が「賛成」であるため、投票者グループ全体の2/3がブロック#1に賛成したことになる。
【0093】
そのため、ステップS106において、第2ノード100Bは、投票者グループ全体で統一した投票内容として「賛成」を決定し、投票者グループに対応する1つのグループ署名を生成する。
【0094】
ステップS107において、第2ノード100Bは、投票者グループの6票分及びノードEの1票分が「賛成」であり、全体の7/9がブロック#1に賛成したことになるため、ブロック#1が承認されたと判断し、ブロック#1を台帳に追加する処理を行う。ここで、第2ノード100Bは、グループ署名(6票):賛成、ノードEの署名:賛成、ノードHの署名:反対、といった情報をブロック#1に格納する。さらに、第2ノード100Bは、ブロック#1に対する投票内容が「賛成」であったノードA、ノードB、ノードC、ノードE、及びノードFを新たな投票者グループとして設定し、これらノードのそれぞれに秘密共有鍵を配布する。
【0095】
図14は、一実施形態に係るグループ署名に関する第1動作パターンの変更例を示す図である。ここでは、
図13の動作との相違点を主として説明する。
【0096】
ステップS201乃至S203の動作は、
図13の動作と同様である。
【0097】
ステップS204において、第2ノード100Bは、ブロック#1を生成及び提案し、ブロック#1に対する投票結果(すなわち、2回目の投票結果)を集計する。ここでは、投票結果が、ノードA:賛成、ノードB:賛成、ノードC:賛成、ノードD:不参加、ノードE:賛成、ノードF:賛成、ノードG:不参加、ノードH:賛成、ノードI:不参加、であるものとする。
【0098】
本変更例では、投票者グループとして設定された各ノード(ノードA、ノードB、ノードC、ノードF、ノードG、及びノードI)のうち、ノードCは、グループ署名に承諾せず、秘密共有鍵を投票時に第2ノード100Bに通知しないと仮定する。
【0099】
ステップS205において、第2ノード100Bは、ノードA、ノードB、ノードC、ノードF、ノードG、及びノードIが投票者グループとして設定されているものの、ノードCが秘密共有鍵を通知しておらず、投票者グループ内で、ノードA、ノードB、及びノードFのそれぞれの賛成票のみが有効であるとみなす。その場合、投票者グループ全体の2/3がブロック#1に賛成したことにならず、第2ノード100Bは、投票者グループ全体で統一した投票内容を決定できないと判断する。
【0100】
但し、ノードA、ノードB、ノードC、ノードE、ノードF、及びノードHが「賛成」であることから、個別の署名だけで全体の2/3が「賛成」であり、ブロック#1が承認されたと判断し、ブロック#1を台帳に追加する処理を行う。
【0101】
図15は、一実施形態に係るグループ署名に関する第2動作パターンの一例を示す図である。第2動作パターンでは、第2ノード100Bは、複数の第1ノード100A(ノードA乃至ノードIの9つのノード)のうち投票に参加した全ての第1ノード100Aを投票者グループとして設定する。
【0102】
ステップS301において、第2ノード100Bは、ブロック#0を生成及び提案し、ブロック#0に対する投票結果(すなわち、1回目の投票結果)を集計する。ここでは、投票結果が、ノードA:賛成、ノードB:賛成、ノードC:賛成、ノードD:不参加、ノードE:反対、ノードF:賛成、ノードG:賛成、ノードH:反対、ノードI:賛成、であるものとする。
【0103】
ステップS302において、第2ノード100Bは、ノードA乃至ノードIの9つのノードのうち、6つのノード(ノードA、ノードB、ノードC、ノードF、ノードG、ノードI)の投票内容が「賛成」であることから、全体の2/3がブロック#0に賛成したことになり、ブロック#0が承認されたと判断し、ブロック#0を台帳に追加する処理を行う。この時点では、未だ投票者グループが設定されていないことから、第2ノード100Bは、投票に参加した各ノード(ノードD以外の各ノード)の個別の署名をブロック#0に格納してもよい。
【0104】
ステップS303において、第2ノード100Bは、不参加のノードD以外の各ノードを投票者グループとして設定し、ノードD以外の各ノードに秘密共有鍵を配布する。
【0105】
ステップS304において、第2ノード100Bは、ブロック#1を生成及び提案し、ブロック#1に対する投票結果(すなわち、2回目の投票結果)を集計する。ここでは、投票結果が、ノードA:賛成、ノードB:賛成、ノードC:賛成、ノードD:反対、ノードE:賛成、ノードF:賛成、ノードG:賛成、ノードH:賛成、ノードI:不参加、であるものとする。なお、投票者グループとして設定された各ノードは、グループ署名に承諾しており、秘密共有鍵を投票時に第2ノード100Bに通知する。
【0106】
ステップS305において、ノードD以外の各ノードが投票者グループとして設定されており、これら各ノードが秘密共有鍵を通知していることから、これら各ノードの投票内容に基づいて投票者グループ全体で統一した投票内容を決定する。投票者グループ内で「賛成」が2/3以上であるため、投票者グループ全体で統一した投票内容として「賛成」を決定し、投票者グループに対応する1つのグループ署名を生成する。
【0107】
ステップS306及びS307において、第2ノード100Bは、投票者グループの8票分が「賛成」であり、全体の8/9がブロック#1に賛成したことになるため、ブロック#1が承認されたと判断し、ブロック#1を台帳に追加する処理を行う。ここで、第2ノード100Bは、グループ署名(8票):賛成、ノードDの署名:反対、といった情報をブロック#1に格納する。さらに、第2ノード100Bは、ブロック#1に対する投票に参加した各ノード(ノードI以外のノード)を新たな投票者グループとして設定し、これらノードのそれぞれに秘密共有鍵を配布する。
【0108】
なお、ステップS304において、
図14に記載されるように、グループ署名に承諾せず、秘密共有鍵を投票時に第2ノード100Bに通知しないノードが存在してもよい。例えば、ノードC、ノードE及びノードFがグループ署名に承諾せず、秘密共有鍵を投票時に第2ノード100Bに通知しなくてもよい。この場合、第2ノード100Bは、ノードA、ノードB、ノードC、ノードE、ノードF、ノードG、ノードH、及びノードIが投票者グループとして設定されているものの、ノードC、ノードE及びノードFが秘密共有鍵を通知しておらず、投票者グループ内で、ノードA、ノードB、ノードG及びノードHのそれぞれの賛成票のみが有効であるとみなす。その場合、投票者グループ全体の2/3がブロック#1に賛成したことにならず、第2ノード100Bは、投票者グループ全体で統一した投票内容を決定できないと判断する。
【0109】
但し、ノードA、ノードB、ノードC、ノードE、ノードF、ノードG、及びノードHが「賛成」であることから、個別の署名だけで全体の2/3が「賛成」であり、ブロック#1が承認されたと判断し、ブロック#1を台帳に追加する処理を行う。
【0110】
図16は、一実施形態に係るグループ署名に関する第3動作パターンの一例を示す図である。第3動作パターンは、上述の自動的な投票委任を、上述のグループ署名の第1動作パターンと組み合わせた動作例である。ここでは、ノードDが委任を行うものとし、上述のグループ署名の第1動作パターンと重複する動作については重複する説明を省略する。
【0111】
ステップS401において、第2ノード100Bは、ブロック#0を生成及び提案し、ブロック#0に対する投票結果(すなわち、1回目の投票結果)を集計する。ここでは、投票結果が、ノードA:賛成、ノードB:賛成、ノードC:賛成、ノードD:不参加、ノードE:反対、ノードF:賛成、ノードG:賛成、ノードH:反対、ノードI:賛成、であるものとする。
【0112】
ステップS402において、第2ノード100Bは、ノードA乃至ノードIの9つのノードのうち、6つのノード(ノードA、ノードB、ノードC、ノードF、ノードG、ノードI)の投票内容が「賛成」であることから、全体の2/3がブロック#0に賛成したことになり、ブロック#0が承認されたと判断し、ブロック#0を台帳に追加する処理を行う。ここで、ノードDが高信頼ノードに委任を行っているため、第2ノード100Bは、高信頼ノードが2票分の投票を行ったとみなす。
【0113】
ステップS403において、第2ノード100Bは、投票内容が「賛成」であった6つのノード(ノードA、ノードB、ノードC、ノードF、ノードG、ノードI)を投票者グループとして設定し、これら6つのノードのそれぞれに秘密共有鍵を配布する。
【0114】
ステップS404において、第2ノード100Bは、ブロック#1を生成及び提案し、ブロック#1に対する投票結果(すなわち、2回目の投票結果)を集計する。ここでは、投票結果が、ノードA:賛成、ノードB:賛成、ノードC:賛成、ノードD:不参加、ノードE:賛成、ノードF:賛成、ノードG:不参加、ノードH:反対、ノードI:不参加、であるものとする。なお、投票者グループとして設定された各ノード(ノードA、ノードB、ノードC、ノードF、ノードG、及びノードI)は、グループ署名に承諾しており、秘密共有鍵を投票時に第2ノード100Bに通知する。
【0115】
ステップS405において、第2ノード100Bは、ノードA、ノードB、ノードC、ノードF、ノードG、及びノードIが投票者グループとして設定されており、これら各ノードが秘密共有鍵を通知していることから、これら各ノードの投票内容に基づいて投票者グループ全体で統一した投票内容を決定する。ノードA、ノードB、ノードC、ノードF、ノードG、及びノードIのうち、ノードA、ノードB、ノードC、及びノードFのそれぞれの投票内容が「賛成」であるため、投票者グループ全体の2/3がブロック#1に賛成したことになる。そのため、第2ノード100Bは、投票者グループ全体で統一した投票内容として「賛成」を決定し、投票者グループに対応する1つのグループ署名を生成する。ここで、ノードG及びノードIが不参加であるが、ノードG及びノードIは投票者グループに含まれている。グループ署名を適用できない場合は委任処理を適用する。ノードDについては委任を行っている。
【0116】
(4)階層構造ネットワーク
次に、一実施形態に係る階層構造ネットワークについて説明する。上述の自動的な投票委任及び/又はグループ署名を階層構造ネットワークに適用してもよい。以下において、上述のP2Pネットワークをグループと称することがある。
【0117】
一実施形態に係る通信システムは、階層構造を有するネットワークである階層構造ネットワーク10を含んで構成される。上述のように、ブロックチェーン技術では、各ノード100が十分な性能を有していることを前提として、いずれか1つのノード100でトランザクションが発生すれば全てのノード100で計算(検算)を行う。そのため、バッテリ容量が小さい、計算能力が低い、記憶容量が小さいといった性能の劣る機器、例えば、センサデバイス等のIoT機器に対してブロックチェーン技術を適用することが難しい。
【0118】
一実施形態では、階層構造ネットワーク10を形成し、各ノード100を当該ノード100の性能に応じた階層に配置する。階層構造にすることで、上位の階層を計算頻度(すなわち、台帳の更新頻度)が高い階層としつつ、下位の階層を計算頻度が低い階層とすることで、下位の階層については計算頻度を抑制できる。そして、性能の高い機器を上位の階層に配置し、性能の低い機器を下位の階層に配置することで、性能の良し悪しに依存することなくブロックチェーンの階層構造ネットワーク10に参加可能になる。
【0119】
図17は、一実施形態に係るネットワーク構成例を示す図である。図示の例では、階層構造ネットワーク10は、階層1乃至階層3の3つの階層からなる階層構造を有する。以下において、3つの階層を用いる一例について主として説明するが、階層の数は2つであってもよいし、4つ以上であってもよい。階層1が最上位の階層であって、階層3が最下位の階層であるものとする。
【0120】
このような階層構造ネットワーク10において、各ノード100は台帳を管理する。各ノード100は、当該ノード100の性能に基づいて、3つの階層のうち当該性能に応じた階層に配置される。ここで、ノード100の性能とは、計算能力(例えば、プロセッサ能力)、記憶容量(例えば、メモリサイズ)、及びバッテリ容量のうち少なくとも1つをいう。ノード100の性能には、後述のスリープ時間が含まれてもよい。例えば、新たなノードが追加される場合、当該新たなノード又は他ノードは、当該新たなノードが配置される階層を当該新たなノードの性能に基づいて決定する。また、当該新たなノードは、階層構造ネットワーク10における3つの階層のうちのいずれかの階層に既に配置されたノードであってもよい。当該ノードの性能が変化にしたことに応じて、当該ノードが現在配置されている階層とは異なる階層に再配置されてもよい。例えば、当該ノードが有するプロセッサの使用率に制限がかけられた場合、当該ノードの性能が低下するため、当該ノードは、現在当該ノードが配置されている階層より下位の階層に再配置されてもよい。
【0121】
階層1に配置される各ノード100及び階層2に配置される各ノード100は、上位階層グループを形成する。
図17において、階層1に属するノード100がノード100Aのみである一例を示しているが、階層1に複数のノード100が配置されてもよい。
【0122】
階層2に配置されるノード100は、ノード100B1、ノード100C1、及びノード100D1の3つである。上位階層グループであるグループ200Aに属する各ノード100は、上位階層台帳である台帳(A)を管理する。
【0123】
階層2に配置される各ノード100及び階層3に配置される各ノード100は、下位階層台帳を管理する下位階層グループを形成する。例えば、性能の高い機器は階層1(又は階層2)に配置され、当該機器に比べて性能が低い機器は階層3に配置される。すなわち、下位階層グループに属するノード100は、上位階層グループに属するノード100に比べて低い性能を有する。
【0124】
図17において、グループ200B乃至グループ200Dの合計3つの下位階層グループが形成される一例を示している。但し、下位階層グループの数は3つに限定されず、下位階層グループの数は1つ又は2つであってもよいし、4つ以上であってもよい。
【0125】
グループ200Bには、階層2に配置される1つのノード100B1と、階層3に配置される複数のノード100B2とが属している。グループ200Bに属する各ノード100Bは、下位階層台帳である台帳(B)を管理する。ノード100B1は、グループ200A及びグループ200Bの両方に属し、台帳(A)及び台帳(B)の両方を管理する。以下の実施形態の説明において、ノード100B1を、グループ200Bの親ノード又はリーダーノードとも称する。ノード100B2は、グループ200Bのみに属するため、台帳(B)のみを管理する。
【0126】
同様に、グループ200Cには、階層2に配置される1つのノード100C1と、階層3に配置される複数のノード100C2とが属している。グループ200Cに属する各ノード100Cは、下位階層台帳である台帳(C)を管理する。ノード100C1は、グループ200A及びグループ200Cの両方に属し、台帳(A)及び台帳(C)の両方を管理する。以下の実施形態の説明において、ノード100C1を、グループ200Cの親ノード又はリーダーノードとも称する。ノード100C2は、グループ200Cのみに属するため、台帳(C)のみを管理する。
【0127】
同様に、グループ200Dには、階層2に配置される1つのノード100D1と、階層3に配置される複数のノード100D2とが属している。グループ200Dに属する各ノード100Dは、下位階層台帳である台帳(D)を管理する。ノード100D1は、グループ200A及びグループ200Dの両方に属し、台帳(A)及び台帳(D)の両方を管理する。以下の実施形態の説明において、ノード100D1を、グループ200Dの親ノード又はリーダーノードとも称する。ノード100D2は、グループ200Dのみに属するため、台帳(D)のみを管理する。
【0128】
各グループ200A乃至200D内では、各ノード100が相互に通信可能に接続されており、グループ内で共通の台帳を保持及び管理し、グループ内では第1実施形態と同様の処理を行う。このようなグループ化により、各グループ内のノード数を減らすことができるため、台帳の肥大化を抑制できる。
【0129】
一般的に、性能の低いノード100(例えば、センサデバイス等のIoT機器)は、性能の高いノード100に比べてトランザクションの発生頻度が低い。例えば、性能の低いノード100は、消費電力を低減するために通信を間欠的に行い、通信を行わない間はスリープ状態になり、スリープ時間中はトランザクションが発生しない。
【0130】
性能の高いノード100により形成される上位階層グループであるグループ200A内では、下位階層グループに比べて、台帳(A)が頻繁に更新され得るとともに、台帳(A)のデータ量(サイズ)が大きくなり易い。一方、性能の低いノード100により形成されるグループ200B内では、台帳(B)の更新頻度を抑制できるとともに、台帳(B)のデータ量の増大を抑制できる。同様に、性能の低いノード100により形成されるグループ200C内では、台帳(C)の更新頻度を抑制できるとともに、台帳(C)のデータ量の増大を抑制できる。同様に、性能の低いノード100により形成されるグループ200D内では、台帳(D)の更新頻度を抑制できるとともに、台帳(D)のデータ量の増大を抑制できる。
【0131】
しかしながら、グループごとに個別に台帳を管理することで台帳の更新頻度及び肥大化を抑制できるが、各グループの台帳の内容が他グループの台帳とリンクしていないと、ブロックチェーン技術における信頼性が低下し得る。そこで、一実施形態では、グループ間で台帳の内容をリンクさせることで、台帳の更新頻度及び肥大化を抑制しつつ信頼性の低下を抑制可能とする。
【0132】
具体的には、第1台帳を管理する1つ又は複数のノード100により形成される第1グループと、第1台帳と異なる第2台帳を管理する1つ又は複数のノード100により形成される第2グループと、を含む複数のグループにより構成される階層構造ネットワーク10において、第2グループに属するノード100は、第2台帳に関する台帳情報を第1グループに通知する。第1グループに属する各ノード100は、通知された台帳情報を第1台帳の一部として管理する。これにより、グループ間で台帳の内容をリンクさせることができる。
【0133】
ここで、第1グループは上位階層グループ及び下位階層グループのうち一方であり、第2グループは上位階層グループ及び下位階層グループのうち他方である。すなわち、直接的な通信接続を有するグループ間で台帳をリンクさせる。一方、下位階層グループ間、すなわち、直接的な通信接続を有しないグループ間では、台帳をリンクさせない。これにより、1つの下位階層グループにおける台帳の更新が他の下位階層グループにおける台帳に影響を与えずに、下位階層グループ間で独立して台帳を管理可能になる。
【0134】
次に、一実施形態に係る台帳の管理方法について説明する。
図18に示すように、上位階層台帳を管理する上位階層グループに属するノード100は、当該上位階層グループ内のトランザクション及び下位階層グループ内のトランザクションのそれぞれに応じて、当該上位階層台帳を更新する。
【0135】
例えば、上位階層グループであるグループ200Aに属するノード100(ノード100A、100B1、100C1、及び100D1)は、グループ200A内のトランザクションに応じて、上位階層台帳である台帳(A)を更新するだけではなく、いずれかの下位階層グループ(グループ200B、グループ200C、グループ200D)内のトランザクションに応じて台帳(A)を更新する。
図12においては、グループ200Aに属するノード100(ノード100A、100B1、100C1、及び100D1)が、グループ200Bにおいて台帳(B)が更新されたことに応じて台帳(A)を更新する一例を示している。
【0136】
上位階層グループにおける上位階層台帳の更新頻度は、階層構造を有しない一般的なP2Pネットワーク(グループ)における台帳の更新頻度と同様である。下位階層グループ(グループ200B、グループ200C、グループ200D)内のトランザクションが上位階層台帳である台帳(A)に反映されることにより、ブロックチェーン技術における信頼性を維持できる。
【0137】
一方、下位階層台帳を管理する下位階層グループに属するノード100は、上位階層グループ内のトランザクションに応じて当該下位階層台帳を更新せずに、当該下位階層グループ内のトランザクションに応じて下位階層台帳を更新する。すなわち、上位階層台帳が更新されても、下位階層台帳は更新されない。これにより、下位階層グループにおける下位階層台帳の更新頻度を低減できる。
【0138】
例えば、下位階層グループであるグループ200Bに属するノード100B(ノード100B1、100B2)は、グループ200B内のトランザクションに応じて下位階層台帳である台帳(B)を更新するが、グループ200A内のトランザクションに応じて台帳(B)を更新しない。同様に、下位階層グループであるグループ200Cに属するノード100C(ノード100C1、100C2)は、グループ200C内のトランザクションに応じて下位階層台帳である台帳(C)を更新するが、グループ200A内のトランザクションに応じて台帳(C)を更新しない。同様に、下位階層グループであるグループ200Dに属するノード100D(ノード100D1、100D2)は、グループ200D内のトランザクションに応じて下位階層台帳である台帳(D)を更新するが、グループ200A内のトランザクションに応じて台帳(D)を更新しない。
【0139】
また、
図19に示すように、下位階層台帳を管理する下位階層グループに属するノード100は、他の下位階層グループ内のトランザクションに応じて当該下位階層台帳を更新しない。例えば、下位階層グループであるグループ200Bにおいて台帳(B)が更新されても、他の下位階層グループであるグループ200C及びグループ200Dは台帳(C)及び台帳(D)を更新しない。これにより、下位階層グループにおける下位階層台帳の更新頻度を低減できる。
【0140】
このように、下位階層グループでトランザクションが発生した場合、上位階層グループで上位階層台帳の更新が発生するが、それ以外の下位階層グループでは台帳の更新は不要である。また、上位階層グループでトランザクションが発生しても下位階層グループで下位階層台帳の更新は不要である。これにより全体の計算量を削減することができる。よって、計算処理能力及び/又はメモリ容量の少ない機器に対してもブロックチェーン技術を適用可能になる。
【0141】
図20は、一実施形態に係る階層構造ネットワーク10を一般的なネットワーク構成(
図1参照)と比較した場合の計算量の削減効果を説明するための図である。ここでは、2分木による階層構造を採用する一例を示している。また、n個(n≧4)のノード100が存在し、各ノード100におけるトランザクション発生頻度が同等であるものとする。
【0142】
最上位階層(Layer1)のノード100は、すべてのノードのトランザクションの計算が必要であるため、一般的なブロックチェーン技術と同じ計算頻度である。一方、最下層のノード100は、自身の参加しているグループのトランザクションについてのみ計算が必要である。2分木の場合、各グループ内のノード数は3であるため、3/nの計算頻度に抑制できる。
【0143】
例えば、最上位階層以外が2層構造(n=7)である場合、全体の約38%の計算が削減可能である。最上位階層以外が3層構造(n=15)である場合、全体の約61%の計算が削減可能である。nが十分大きい(limit→∞)場合、全体の約67%の計算が削減可能である。すなわち、階層が下になればなるほど、計算頻度を削減できる。よって、一般的なブロックチェーン技術と比較して、通信量及び計算回数を抑制することができる。そのため、一般的なブロックチェーン技術では参加することができない性能の機器でもブロックチェーン技術を活用することができる。
【0144】
なお、
図20に示すようなネットワーク構成において、直接的な通信接続を有する2つのグループ間で上位階層グループ及び下位階層グループが構成される。例えば、グループ200Bを基準とすると、グループ200Aが上位階層グループであり、グループ200D及びグループ200Eのそれぞれが下位階層グループである。グループ200D及びグループ200Eを基準とすると、グループ200Bが上位階層グループである。同様に、グループ200Cを基準とすると、グループ200Aが上位階層グループであり、グループ200F及びグループ200Gのそれぞれが下位階層グループである。グループ200F及びグループ200Gを基準とすると、グループ200Cが上位階層グループである。
【0145】
次に、一実施形態に係る上位階層台帳と下位階層台帳とのリンクについて説明する。
図21に示すように、台帳(A)を管理するノード100(ノード100A、100B1)により形成されるグループ200Aと、台帳(B)を管理するノード100(ノード100B1、100B2)により形成されるグループ200Bと、により階層構造ネットワーク10が構成されている。
【0146】
グループ200Aに属するノード100は、台帳(A)に関する台帳情報をグループ200Bに通知する。例えば、グループ200Aに属するノード100B1は、台帳(A)に関する台帳情報をグループ200B内の他ノード100B2に通知する。そして、グループ200Bに属する各ノード100(ノード100B1、100B2)は、当該台帳情報を台帳(B)の一部として管理する。このように、下位階層台帳を管理する下位階層グループに属する各ノード100は、上位階層台帳に関する台帳情報を当該下位階層台帳の一部として管理する。これにより、下位階層台帳を上位階層台帳とリンクさせることができる。
【0147】
例えば、下位階層台帳である台帳(B)の一部として管理する台帳情報は、上位階層台帳である台帳(A)を示すチェーンIDを含んでもよい。台帳(B)の一部として管理する台帳情報は、台帳(A)のブロックから計算されるハッシュ値を含んでもよい。台帳(B)の一部として管理する台帳情報は、台帳(A)のブロック番号を示すブロックハイトを含んでもよい。ここで、グループ200Bに属する各ノード100(ノード100B1、100B2)は、当該台帳情報を台帳(B)のブロックにおけるヘッダ部分(ブロックヘッダ)に格納してもよい。これにより、グループ200Bにおける検算時に、台帳(A)を特定して台帳(A)のどのブロックとリンクしているかを検索することが容易になるとともに、検算結果等の情報をグループ200Bからグループ200Aに伝達することが容易になる。
【0148】
一方、グループ200Bに属するノード100は、台帳(B)に関する台帳情報をグループ200Aに通知する。例えば、グループ200Bに属するノード100B1は、台帳(B)に関する台帳情報をグループ200A内の他ノード100Aに通知する。そして、グループ200Aに属する各ノード100(ノード100B1、100A)は、当該台帳情報を台帳(A)の一部として管理する。このように、上位階層台帳を管理する上位階層グループに属する各ノード100は、下位階層台帳に関する台帳情報を当該上位階層台帳の一部として管理する。これにより、上位階層台帳を下位階層台帳とリンクさせることができる。
【0149】
例えば、上位階層台帳である台帳(A)の一部として管理する台帳情報は、下位階層台帳である台帳(B)を示すチェーンIDを含んでもよい。台帳(A)の一部として管理する台帳情報は、台帳(B)のブロックから計算されるハッシュ値を含んでもよい。台帳(A)の一部として管理する台帳情報は、台帳(B)のブロック番号を示すブロックハイトを含んでもよい。ここで、グループ200Aに属する各ノード100(ノード100B1、100A)は、当該台帳情報を台帳(A)のブロックにおけるトランザクションデータ部分に格納してもよい。これにより、台帳(B)の更新頻度が少なく、その長さが十分に長くなくても、十分に長い台帳(A)と交わることで、セキュリティの強度の低下を抑制できる。例えば、グループ200Aにおける検算時に、台帳(B)のフォークプロテクションの確認をすることが容易になる。つまり、間違った(偽物の)ブロックチェーンが分岐せず、正しい台帳(B)の確認をすることが容易になる。また、台帳(B)の更新頻度が少なく、その長さが十分に長くない場合、台帳(B)に新しいブロックが追加される前に、台帳(B)に含まれるすべてのブロックが改ざんされてしまうと、台帳(B)を管理するノードは、台帳(B)が改ざんされていることを認識することができない。このような場合においても、台帳(A)と台帳(B)をリンクさせておくことで、台帳(B)が改ざんされていることを台帳(A)を管理するノードが認識することができるため、セキュリティの強度の低下を抑制できる。
【0150】
図22は、グループ200Aが形成された後、新たにグループ200Aの下位にグループ200Bが形成される場合における動作例を示す図である。ここでは、グループ200Aに属するノードをノード(A)と称し、グループ200Bに属するノードをノード(B)と称する。但し、親ノードはグループ200A及びグループ200Bの両グループに属するため、
図22の動作は同一のノード(親ノード)内で実行されてもよい。
【0151】
第1に、台帳(A)を管理するノード(A)は、m-1番目のブロックを台帳(A)に追加することで台帳(A)を更新する。当該m-1番目のブロックは、台帳(A)の前のブロックから計算されたハッシュ値を含むブロックヘッダと、グループ200Aにおける少なくとも1つのトランザクションに関するトランザクションデータとを有する。当該ブロックヘッダは、台帳(A)を示すチェーンID(親チェーンID)と、当該ブロックのブロック番号であるm-1を示すブロックハイトとの少なくとも一方をさらに含んでもよい。
【0152】
第2に、グループ200Bが形成される。台帳(B)を管理するノード(B)は、台帳(B)における最初のブロック、すなわち、0番目のブロックを台帳(B)に追加することで台帳(B)を更新(生成)する。当該0番目のブロックは、そのブロックヘッダ部分に、当該0番目のブロックを追加する時点で最新の台帳(A)のブロック、すなわち、台帳(A)のm-1番目のブロックにおけるブロックヘッダを、台帳(A)に関する台帳情報として含む。また、当該0番目のブロックは、そのトランザクションデータ部分に、グループ200Bにおける少なくとも1つのトランザクションに関するトランザクションデータを含む。ここで、当該トランザクションは、例えば、グループ200Bにおけるノード追加(ノードjoin)であってもよい。当該トランザクションデータは、当該追加されたノードのノードパラメータを含んでもよい。
【0153】
第3に、台帳(A)を管理するノード(A)は、m番目のブロックを台帳(A)に追加することで台帳(A)を更新する。当該m番目のブロックは、そのブロックヘッダ部分に、台帳(A)の前のブロックであるm-1番目のブロックから計算されたハッシュ値を含む。また、当該m番目のブロックは、そのトランザクションデータ部分に、グループ200Aにおける少なくとも1つのトランザクションに関するトランザクションデータと、台帳(B)に関する台帳情報とを含む。当該台帳情報は、m番目のブロックを追加する時点で最新の台帳(B)のブロック、すなわち、台帳(B)の0番目のブロックから計算されたハッシュ値と、台帳(B)を示すチェーンIDとを含む。当該台帳情報は、0番目のブロックのブロック番号である0を示すブロックハイトをさらに含んでもよい。
【0154】
第4に、台帳(B)を管理するノード(B)は、台帳(B)における1番目のブロックを台帳(B)に追加することで台帳(B)を更新する。当該1番目のブロックは、そのブロックヘッダ部分に、当該1番目のブロックを追加する時点で最新の台帳(A)のブロックにおけるブロックヘッダを、台帳(A)に関する台帳情報として含む。また、当該1番目のブロックは、そのブロックヘッダ部分に、台帳(B)の0番目のブロックから計算されたハッシュ値を含む。また、当該1番目のブロックは、そのトランザクションデータ部分に、グループ200Bにおける少なくとも1つのトランザクションに関するトランザクションデータを含む。ここで、当該トランザクションは、例えば、グループ200Bにおけるノード追加(ノードjoin)であってもよい。当該トランザクションデータは、当該追加されたノードのノードパラメータを含んでもよい。
【0155】
第5に、台帳(A)を管理するノード(A)は、n番目のブロックを台帳(A)に追加することで台帳(A)を更新する。当該n番目のブロックは、そのブロックヘッダ部分に、台帳(A)の前のブロックであるn-1番目のブロックから計算されたハッシュ値を含む。また、当該n番目のブロックは、そのトランザクションデータ部分に、グループ200Aにおける少なくとも1つのトランザクションに関するトランザクションデータと、台帳(B)に関する台帳情報とを含む。当該台帳情報は、n番目のブロックを追加する時点で最新の台帳(B)のブロック、すなわち、台帳(B)の1番目のブロックから計算されたハッシュ値と、台帳(B)を示すチェーンIDとを含む。当該台帳情報は、当該1番目のブロックのブロック番号である1を示すブロックハイトをさらに含んでもよい。
【0156】
(5)その他の実施形態
上述の実施形態において、ノード100がバッテリ駆動型の機器であることを主として想定している。しかしながら、階層構造ネットワーク10には、外部電源駆動型の機器が含まれていてもよい。例えば、外部電源と接続された機器は、階層構造ネットワーク10において最上位階層に配置されてもよい。
【0157】
上述の各動作フローは、別個独立に実施する場合に限らず、2以上の動作フローを組み合わせて実施可能である。例えば、1つの動作フローの一部のステップを他の動作フローに追加してもよいし、1つの動作フローの一部のステップを他の動作フローの一部のステップと置換してもよい。また、上述の各動作フローにおけるステップの順番は一例であって、ステップの順番は適宜変更してもよい。
【0158】
ノード100が行う各処理をコンピュータに実行させるプログラムが提供されてもよい。プログラムは、コンピュータ読取り可能媒体に記録されていてもよい。コンピュータ読取り可能媒体を用いれば、コンピュータにプログラムをインストールすることが可能である。ここで、プログラムが記録されたコンピュータ読取り可能媒体は、非一過性の記録媒体であってもよい。非一過性の記録媒体は、特に限定されるものではないが、例えば、CD-ROMやDVD-ROM等の記録媒体であってもよい。また、ノード100が行う各処理を実行する回路を集積化し、ノード100の少なくとも一部を半導体集積回路(チップセット、SoC)として構成してもよい。
【0159】
本開示で使用する「に基づいて」、「に応じて」という記載は、別段に明記されていない限り、「のみに基づいて」、「のみに応じて」を意味しない。「に基づいて」という記載は、「のみに基づいて」及び「に少なくとも部分的に基づいて」の両方を意味する。同様に、「に応じて」という記載は、「のみに応じて」及び「に少なくとも部分的に応じて」の両方を意味する。また、「含む(include)」、「備える(comprise)」、及びそれらの変形の用語は、列挙する項目のみを含むことを意味せず、列挙する項目のみを含んでもよいし、列挙する項目に加えてさらなる項目を含んでもよいことを意味する。また、本開示において使用されている用語「又は(or)」は、排他的論理和ではないことが意図される。さらに、本開示で使用した「第1」、「第2」などの呼称を使用した要素へのいかなる参照も、それらの要素の量又は順序を全般的に限定するものではない。これらの呼称は、2つ以上の要素間を区別する便利な方法として本明細書で使用され得る。したがって、第1及び第2の要素への参照は、2つの要素のみがそこで採用され得ること、又は何らかの形で第1の要素が第2の要素に先行しなければならないことを意味しない。本開示において、例えば、英語でのa,an,及びtheのように、翻訳により冠詞が追加された場合、これらの冠詞は、文脈から明らかにそうではないことが示されていなければ、複数のものを含むものとする。
【0160】
以上、図面を参照して実施形態について詳しく説明したが、具体的な構成は上述のものに限られることはなく、要旨を逸脱しない範囲内において様々な設計変更等をすることが可能である。
【0161】
(6)付記
上述の実施形態に関する特徴について付記する。
【0162】
(付記1)
ブロックチェーン技術を用いて台帳を分散管理する複数のノードを備え、
前記複数のノードは、
前記台帳に追加する候補として生成されたブロックに賛成するか否かの投票を行う権利を有する複数の第1ノードと、
前記複数の第1ノードの投票内容を集計する第2ノードと、を含み、
前記第2ノードは、前記複数の第1ノードにおいて前記投票に参加した参加ノード及び前記投票に参加しなかった不参加ノードが存在することに基づいて、前記不参加ノードが前記参加ノードに前記投票を委任したとみなし、前記不参加ノードの投票内容として前記参加ノードの投票内容を採用する
通信システム。
【0163】
(付記2)
前記第2ノードは、前記不参加ノードが存在し、且つ複数の参加ノードが存在する場合、前記複数の参加ノードのそれぞれの信頼度情報に基づいて、前記複数の参加ノードの中から前記投票の委任先とみなす参加ノードを決定する
付記1に記載の通信システム。
【0164】
(付記3)
前記第2ノードは、複数の不参加ノードが存在し、且つ前記複数の参加ノードが存在する場合、前記複数の参加ノードの中から優先度が高い順に前記複数の不参加ノードの数と同じ数の参加ノードを前記委任先として決定する
付記2に記載の通信システム。
【0165】
(付記4)
前記第2ノードは、前記不参加ノードの数が前記参加ノードの数よりも多い場合、1つの参加ノードを2以上の不参加ノードの前記委任先として決定する
付記3に記載の通信システム。
【0166】
(付記5)
前記第2ノードは、1つの参加ノードに対して委任を行う数が上限を超えないように、前記1つの参加ノードを前記複数の不参加ノードの委任先として決定する
付記3又は4に記載の通信システム。
【0167】
(付記6)
前記信頼度情報は、前記複数の参加ノードのそれぞれの過去の投票の参加状況及び/又は過去の投票の投票内容の妥当性に基づく情報である
付記2乃至5のいずれかに記載の通信システム。
【0168】
(付記7)
前記第2ノードは、前記不参加ノードが存在し、且つ前記不参加ノードが前記投票の委任に承諾していない場合、前記不参加ノードが前記委任を行わないとみなす
付記1乃至6のいずれか1項に記載の通信システム。
【0169】
(付記8)
前記第2ノードは、前記不参加ノードが存在し、且つ前記不参加ノードが前記投票の委任に承諾すること又は前記投票を常に委任することを選択している場合、前記不参加ノードが前記委任を行うとみなす
付記1乃至7のいずれか1項に記載の通信システム。
【0170】
(付記9)
ブロックチェーン技術を用いて台帳を分散管理する複数のノードを備える通信システムにおいて、前記台帳に追加する候補として生成されたブロックに賛成するか否かの投票を行う権利を有する複数の第1ノードの投票内容を集計する第2ノードであって、
前記複数の第1ノードにおいて前記投票に参加した参加ノード及び前記投票に参加しなかった不参加ノードが存在することに基づいて、前記不参加ノードが前記参加ノードに前記投票を委任したとみなし、前記不参加ノードの投票内容として前記参加ノードの投票内容を採用する制御部を備える
第2ノード。
【0171】
(付記10)
ブロックチェーン技術を用いて台帳を分散管理する複数のノードを備える通信システムにおいて、前記台帳に追加する候補として生成されたブロックに賛成するか否かの投票を行う権利を有する複数の第1ノードの投票内容を集計する第2ノードに、
前記複数の第1ノードにおいて前記投票に参加した参加ノード及び前記投票に参加しなかった不参加ノードが存在することに基づいて、前記不参加ノードが前記参加ノードに前記投票を委任したとみなし、前記不参加ノードの投票内容として前記参加ノードの投票内容を採用する処理を実行させる
プログラム。
【符号の説明】
【0172】
10 :階層構造ネットワーク
100 :ノード
110 :通信部
120 :制御部
121 :プロセッサ
130 :記憶部
140 :バッテリ
200 :P2Pネットワーク(グループ)