IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ エレクトロニクス アンド テレコミュニケーションズ リサーチ インスチチュートの特許一覧

特開2025-1655パブリックノード識別子を用いた分散合意方法、装置およびこれを用いたブロックチェーン生成方法
<>
  • 特開-パブリックノード識別子を用いた分散合意方法、装置およびこれを用いたブロックチェーン生成方法 図1
  • 特開-パブリックノード識別子を用いた分散合意方法、装置およびこれを用いたブロックチェーン生成方法 図2
  • 特開-パブリックノード識別子を用いた分散合意方法、装置およびこれを用いたブロックチェーン生成方法 図3
  • 特開-パブリックノード識別子を用いた分散合意方法、装置およびこれを用いたブロックチェーン生成方法 図4
  • 特開-パブリックノード識別子を用いた分散合意方法、装置およびこれを用いたブロックチェーン生成方法 図5
  • 特開-パブリックノード識別子を用いた分散合意方法、装置およびこれを用いたブロックチェーン生成方法 図6
  • 特開-パブリックノード識別子を用いた分散合意方法、装置およびこれを用いたブロックチェーン生成方法 図7
  • 特開-パブリックノード識別子を用いた分散合意方法、装置およびこれを用いたブロックチェーン生成方法 図8
  • 特開-パブリックノード識別子を用いた分散合意方法、装置およびこれを用いたブロックチェーン生成方法 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2025001655
(43)【公開日】2025-01-08
(54)【発明の名称】パブリックノード識別子を用いた分散合意方法、装置およびこれを用いたブロックチェーン生成方法
(51)【国際特許分類】
   H04L 9/32 20060101AFI20241225BHJP
【FI】
H04L9/32 200Z
【審査請求】有
【請求項の数】20
【出願形態】OL
(21)【出願番号】P 2024098042
(22)【出願日】2024-06-18
(31)【優先権主張番号】10-2023-0078605
(32)【優先日】2023-06-20
(33)【優先権主張国・地域又は機関】KR
(31)【優先権主張番号】10-2024-0063090
(32)【優先日】2024-05-14
(33)【優先権主張国・地域又は機関】KR
(71)【出願人】
【識別番号】596099882
【氏名又は名称】エレクトロニクス アンド テレコミュニケーションズ リサーチ インスチチュート
【氏名又は名称原語表記】ELECTRONICS AND TELECOMMUNICATIONS RESEARCH INSTITUTE
(74)【代理人】
【識別番号】110002952
【氏名又は名称】弁理士法人鷲田国際特許事務所
(72)【発明者】
【氏名】オー ジン-テイ
(72)【発明者】
【氏名】キム ユン-チャン
(72)【発明者】
【氏名】イム ジョン-チュル
(57)【要約】      (修正有)
【課題】ブロック単位でランダムなノードを合意体として選択し、これらの合意体によって新規ブロックをチェーンに追加するための合意が行われるようにする方法及びシステムを提供する。
【解決手段】分散合意方法は、ブロックチェーンを構成するノードに相応するパブリックノード識別子を用いてパブリック投票識別子を生成するステップと、パブリック投票識別子それぞれに対して、成功確率(p)に相応する演算(operation)を行って通過投票リストを生成するステップと、前記通過投票リストに相応する合意体ノードの少なくとも一部に基づいて分散合意を行うステップと、を含む。
【選択図】図7
【特許請求の範囲】
【請求項1】
分散合意装置によって行われる分散合意方法において、
ブロックチェーンを構成するノードに相応するパブリックノード識別子を用いてパブリック投票識別子を生成するステップと、
パブリック投票識別子それぞれに対して、成功確率(p)に相応する演算(operation)を行って通過投票リストを生成するステップと、
前記通過投票リストに相応する合意体ノードの少なくとも一部に基づいて分散合意を行うステップと、
を含む、分散合意方法。
【請求項2】
前記通過投票リストは、
前記ブロックチェーンを構成するノードそれぞれが、前記パブリック投票識別子に基づいて自分を含む前記ノードに対する前記演算を行って生成され、前記ブロックチェーンを構成するノードが特定のタイミングで生成した通過投票リストは、互いに同一である、
請求項1に記載の分散合意方法。
【請求項3】
前記演算(operation)は、前記パブリック投票識別子および前ブロック情報を用いて生成されたランダム値を、前記成功確率に相応する閾値(threshold)と比較するものである、
請求項2に記載の分散合意方法。
【請求項4】
前記パブリック投票識別子は、
前記ノードそれぞれに相応するパブリックノード識別子を用いて、前記ノードそれぞれに対して前記ノードそれぞれの投票権数だけ生成される、
請求項3に記載の分散合意方法。
【請求項5】
前記合意体ノードは、前記通過投票リストに含まれるノードの中から選択される、
請求項4に記載の分散合意方法。
【請求項6】
前記前ブロック情報に相応する前ブロックに対する合意が、現在ブロックのための前記合意体ノードの中から選択されたチェア(chair)ノードによって最終的に確認される、
請求項5に記載の分散合意方法。
【請求項7】
前記パブリック投票識別子は、
前記ノードそれぞれに相応するパブリックノード識別子に、0を含む生成値のうち1を足したり引いたりして生成される、
請求項5に記載の分散合意方法。
【請求項8】
前記パブリックノード識別子は、
前記ノードに相応する公開キーである、
請求項7に記載の分散合意方法。
【請求項9】
前記合意体ノードのうち前記演算の結果に相応する値が最も大きいか最も小さいノードがチェア(chair)ノードになる、
請求項3に記載の分散合意方法。
【請求項10】
1つ以上のプロセッサと、
前記1つ以上のプロセッサによって実行される少なくとも1つ以上のプログラムを格納する実行メモリと、
を含み、
前記少なくとも1つ以上のプログラムは、
ブロックチェーンを構成するノードに相応するパブリックノード識別子を用いてパブリック投票識別子を生成し、
パブリック投票識別子それぞれに対して、成功確率(p)に相応する演算(operation)を行って通過投票リストを生成し、
前記通過投票リストに相応する合意体ノードの少なくとも一部に基づいて分散合意を行う、
分散合意装置。
【請求項11】
前記通過投票リストは、
前記ブロックチェーンを構成するノードそれぞれが、前記パブリック投票識別子に基づいて自分を含む前記ノードに対する前記演算を行って生成され、前記ブロックチェーンを構成するノードが特定のタイミングで生成した通過投票リストは、互いに同一である、
請求項10に記載の分散合意装置。
【請求項12】
前記演算(operation)は、前記パブリック投票識別子および前ブロック情報を用いて生成されたランダム値を、前記成功確率に相応する閾値(threshold)と比較するものである、
請求項11に記載の分散合意装置。
【請求項13】
前記パブリック投票識別子は、
前記ノードそれぞれに相応するパブリックノード識別子を用いて、前記ノードそれぞれに対して前記ノードそれぞれの投票権数だけ生成される、
請求項12に記載の分散合意装置。
【請求項14】
前記合意体ノードは、前記通過投票リストに含まれるノードの中から選択される、
請求項13に記載の分散合意装置。
【請求項15】
前記前ブロック情報に相応する前ブロックに対する合意が、現在ブロックのための前記合意体ノードの中から選択されたチェア(chair)ノードによって最終的に確認される、
請求項14に記載の分散合意装置。
【請求項16】
ブロックチェーンのノードに相応するコンピュータ装置が、
前ブロックに相応するコミッテッド(COMMITTED)メッセージを受信するステップと、
前記前ブロックに関する情報およびパブリック投票識別子を用いて通過投票リストを生成するステップと、
現在ブロックに相応するチェアノードが、前記通過投票リストに相応する合意体ノードからコンファーム(CONFIRM)メッセージを受信し、前記コンファームメッセージに基づいて前記前ブロックの合意結果を最終的に確認するステップ(前記チェアノードは前記通過投票リストに基づいて認識される)と、
前記チェアノードが、前記合意体ノードの中から選択された委員会ノードに、前記現在ブロックを前記ブロックチェーンに連結するためのプリペア(PREPARE)メッセージを送信するステップと、
を含む、ブロックチェーン生成方法。
【請求項17】
前記チェアノードが、
前記委員会ノードからコミット(COMMIT)メッセージを受信するステップと、
前記チェアノードが、すべてのノードに、前記現在ブロックに相応するコミッテッド(COMMITTED)メッセージを送信するステップと、
をさらに含む、請求項16に記載のブロックチェーン生成方法。
【請求項18】
前記通過投票リストは、
前記ブロックチェーンを構成するノードそれぞれが、前記パブリック投票識別子に基づいて、自分を含む前記ノードに対する、成功確率(p)に相応する演算(operation)を行って生成され、前記ブロックチェーンを構成するノードが特定のタイミングで生成した通過投票リストは、互いに同一である、
請求項17に記載のブロックチェーン生成方法。
【請求項19】
前記演算(operation)は、前記パブリック投票識別子および前記前ブロックに関する情報を用いて生成されたランダム値を、前記成功確率に相応する閾値(threshold)と比較するものである、
請求項18に記載のブロックチェーン生成方法。
【請求項20】
前記パブリック投票識別子は、
前記ノードそれぞれに相応するパブリックノード識別子を用いて、前記ノードそれぞれに対して前記ノードそれぞれの投票権数だけ生成される、
請求項19に記載のブロックチェーン生成方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ブロックチェーン分散合意技術に関し、特に、ブロック単位でランダムなノードを合意体として選択し、これらの合意体によって新規ブロックをチェーンに追加するための合意が行われるようにする技術に関する。
【背景技術】
【0002】
一般的に、ブロックチェーンの参加ノードの数が増加すると、ブロックを確定するのにかかる時間も共に増加する。これを克服するための方法の一つとして、全体ノードの一部を合意体(consensus congress)として選抜し、この合意体によって新規ブロックが確定されるようにすることでブロック確定時間を短縮することができる。この時、固定されたノードを合意体として用いる場合、中央化の問題が発生し、これを防止するために、ランダムノードを合意体として選抜する方式が使用されてきた。ランダムノードを合意体として選抜する既存の方式でVRF(Verifiable Random Function)を用いて全体ノードの中から任意にノードを選択したり、ナンスチェーン(nonce chain)を用いてランダムに合意体を構成するノードを選択したりする分散合意技術が紹介されている。
【0003】
VRFを用いた分散合意技術では、各ノードがVRFに相応する演算を行い、その結果に応じて合意体選定の有無が決定される。合意体として選抜されたノードは、ノードの投票結果を証拠と共に提出する。しかし、この方法の短所は、合意体の大きさを確率分布でしか知ることができず、正確にいくつのノードが合意体として選択されるかを知ることができないということである。したがって、合意体の過半または2/3がいくつのノードなのかを正確に知ることができないので、複雑な合意過程を経なければならない。
【0004】
2020年10月20日付で公開された論文「Algorithm based on Byzantine agreement among decentralized agents(BADA)」、米国公開特許第2019-0327084号、米国公開特許第2019-0379538号、米国公開特許第2020-0403776号および米国公開特許第2023-0066169号には、ナンス(nonce)チェーンベースの合意体選定方法およびこれを用いたブロックチェーン生成方法が詳細に開示されている。前記論文および特許に開示された技術は、参加ノードの数に応じて合意体の大きさを決定可能で、合意体が決定されると、過半または2/3がいくつのノードなのかを知ることができるので、PBFT(Practical Byzantine Fault Tolerance)のような簡単な合意アルゴリズムを用いることができる。しかし、この方式も、合意体を決定するためのメッセージ伝達プロトコルを必要とするという短所がある。
【0005】
合意体を決定するためのメッセージ伝達プロトコルは、合意体構成のためのメッセージをノードの間でやり取りする過程を含み、これはブロックチェーンに参加するノードの数が増加するほどシステムに大きな負荷となる。したがって、合意体構成のためのメッセージの交換を低減または除去できる新たなブロックチェーン合意技術の必要性が切実に求められる。
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明の目的は、合意体構成のためのメッセージの交換を最小化しながら参加ノードの数に応じて決定された合意体の大きさに相応する個数のランダムノードを選択してブロックチェーン合意体を構成することである。
【0007】
また、本発明の目的は、パブリックノード識別子を用いて合意体構成のためのメッセージの交換なしにも、毎ブロックごとにランダムに選択された合意体がPBFTなどの単純な合意アルゴリズムを用いて合意を行うことにより、ブロックチェーンシステムのメッセージ複雑度を低減し、性能を向上させながらも脱中央化を維持することである。
【課題を解決するための手段】
【0008】
上記の目的を達成するための、本発明による分散合意装置によって行われる分散合意方法は、ブロックチェーンを構成するノードに相応するパブリックノード識別子(public node identifiers)を用いてパブリック投票識別子(public vote identifiers)を生成するステップと、パブリック投票識別子それぞれに対して(for each of the public vote identifiers)、成功確率(p)に相応する演算(operation)を行って通過投票リスト(pass vote list)を生成するステップと、前記通過投票リストに相応する合意体ノードの少なくとも一部に基づいて分散合意を行うステップとを含む。
【0009】
この時、前記通過投票リストは、前記ブロックチェーンを構成するノードそれぞれが、前記パブリック投票識別子に基づいて自分を含む前記ノードに対する前記演算を行って生成される。この時、前記ブロックチェーンを構成するノードが特定のタイミングで生成した通過投票リストは、互いに同一であってもよい。
【0010】
この時、前記演算(operation)は、前記パブリック投票識別子および前ブロック情報を用いて生成されたランダム値を、前記成功確率に相応する閾値(threshold)と比較するものであってもよい。
【0011】
この時、前記パブリック投票識別子は、前記ノードそれぞれに相応するパブリックノード識別子を用いて、前記ノードそれぞれに対して前記ノードそれぞれの投票権数だけ生成される。
【0012】
この時、前記合意体ノードは、前記通過投票リストに含まれるノードの中から選択される。
【0013】
この時、前記前ブロック情報に相応する前ブロックに対する合意が、現在ブロックのための前記合意体ノードの中から選択されたチェア(chair)ノードによって最終的に確認される。
【0014】
この時、前記パブリック投票識別子は、前記ノードそれぞれに相応するパブリックノード識別子に、0を含む生成値のうち1を足したり引いたりして生成される。
【0015】
この時、前記パブリックノード識別子は、前記ノードに相応する公開キーであってもよい。
【0016】
この時、前記合意体ノードのうち前記演算の結果に相応する値が最も大きいか最も小さいノードがチェア(chair)ノードになってもよい。
【0017】
また、本発明の一実施例による分散合意装置は、1つ以上のプロセッサと、前記1つ以上のプロセッサによって実行される少なくとも1つ以上のプログラムを格納する実行メモリとを含む。
【0018】
この時、前記少なくとも1つ以上のプログラムは、ブロックチェーンを構成するノードに相応するパブリックノード識別子を用いてパブリック投票識別子を生成し、パブリック投票識別子それぞれに対して、成功確率(p)に相応する演算(operation)を行って通過投票リストを生成し、前記通過投票リストに相応する合意体ノードの少なくとも一部に基づいて分散合意を行うことができる。
【0019】
この時、前記通過投票リストは、前記ブロックチェーンを構成するノードそれぞれが、前記パブリック投票識別子に基づいて自分を含む前記ノードに対する前記演算を行って生成される。この時、前記ブロックチェーンを構成するノードが特定のタイミングで生成した通過投票リストは、互いに同一であってもよい。
【0020】
この時、前記演算(operation)は、前記パブリック投票識別子および前ブロック情報を用いて生成されたランダム値を、前記成功確率に相応する閾値(threshold)と比較するものであってもよい。
【0021】
この時、前記パブリック投票識別子は、前記ノードそれぞれに相応するパブリックノード識別子を用いて、前記ノードそれぞれに対して前記ノードそれぞれの投票権数だけ生成される。
【0022】
この時、前記合意体ノードは、前記通過投票リストに含まれるノードの中から選択される。
【0023】
この時、前記前ブロック情報に相応する前ブロックに対する合意が、現在ブロックのための前記合意体ノードの中から選択されたチェア(chair)ノードによって最終的に確認される。
【0024】
また、本発明の一実施例によるブロックチェーン生成方法は、前ブロックに相応するコミッテッド(COMMITTED)メッセージを受信するステップと、前記前ブロックに関する情報およびパブリック投票識別子を用いて通過投票リストを生成するステップと、現在ブロックに相応するチェアノードが、前記通過投票リストに相応する合意体ノードからコンファーム(CONFIRM)メッセージを受信し、前記コンファームメッセージに基づいて前記前ブロックの合意結果を最終的に確認するステップ(前記チェアノードは前記通過投票リストに基づいて認識される)と、前記チェアノードが、前記合意体ノードの中から選択された委員会ノードに、前記現在ブロックを前記ブロックチェーンに連結するためのプリペア(PREPARE)メッセージを送信するステップと、を含む。
【0025】
この時、本発明の一実施例によるブロックチェーン生成方法は、前記チェアノードが、前記委員会ノードからコミット(COMMIT)メッセージを受信するステップと、前記チェアノードが、すべてのノードに、前記現在ブロックに相応するコミッテッド(COMMITTED)メッセージを送信するステップとをさらに含むことができる。
【0026】
この時、前記通過投票リストは、前記ブロックチェーンを構成するノードそれぞれが、前記パブリック投票識別子に基づいて、自分を含む前記ノードに対する、成功確率(p)に相応する演算(operation)を行って生成される。この時、前記ブロックチェーンを構成するノードが特定のタイミングで生成した通過投票リストは、互いに同一であってもよい。
【0027】
この時、前記演算(operation)は、前記パブリック投票識別子および前記前ブロックに関する情報を用いて生成されたランダム値を、前記成功確率に相応する閾値(threshold)と比較するものであってもよい。
【0028】
この時、前記パブリック投票識別子は、前記ノードそれぞれに相応するパブリックノード識別子を用いて、前記ノードそれぞれに対して前記ノードそれぞれの投票権数だけ生成される。
【発明の効果】
【0029】
本発明によれば、議長(chair)ノードを含めたブロックチェーンノードがすべて、他のノードが合意体として選択されたか否かに関するメッセージを受ける前に、合意体に選定されたノードがどのノードであり、いくつなのか、議長が誰なのかを知ることができるので、合意体構成関連メッセージの交換なしにすぐに合意が進行できる。
【0030】
また、本発明は、合意体構成のためのメッセージの交換を最小化しながら参加ノードの数に応じて決定された合意体の大きさに相応する個数のランダムノードを選択してブロックチェーン合意体を構成することができる。
【0031】
また、本発明は、パブリックノード識別子を用いて合意体構成のためのメッセージの交換なしにも、毎ブロックごとにランダムに選択された合意体がPBFTなどの単純な合意アルゴリズムを用いて合意を行うことにより、ブロックチェーンシステムのメッセージ複雑度を低減し、性能を向上させながらも脱中央化を維持することができる。
【0032】
また、本発明は、追加的なメッセージの交換なしに、ブロック単位で大きさが確定されたブロック合意体を効率的に再構成することができる。
【0033】
さらに、本発明は、合意体構成のためのメッセージの交換が不要なため、それによるプロトコルの複雑度増加および遅延を減少させることができる。
【0034】
また、本発明は、合意体構成メッセージの交換なしにも、参加ノードの数に応じて大きさが確定された合意体を構成して、既存の単純な合意アルゴリズムに適用することが容易である。
【図面の簡単な説明】
【0035】
図1】本発明の一実施例によるパブリック投票識別子から通過投票リストが生成される過程の一例を示す図である。
図2】本発明の一実施例による分散合意方法の一例を示す図である。
図3】本発明の一実施例による分散合意方法の他の例を示す図である。
図4】本発明の一実施例による分散合意方法のさらに他の例を示す図である。
図5】本発明の一実施例によるパブリックノード識別子からパブリック投票識別子が生成される過程の一例を示す動作フローチャートである。
図6】本発明の一実施例による分散合意方法において通過投票リストの使用例を示す図である。
図7】本発明の一実施例による分散合意方法の一例を示す動作フローチャートである。
図8】本発明の一実施例によるブロックチェーン生成方法の一例を示す動作フローチャートである。
図9】本発明の一実施例によるコンピュータシステムの構成を示すブロック図である。
【発明を実施するための形態】
【0036】
本発明の利点および特徴、そしてそれらを達成する方法は、添付した図面と共に詳細に後述する実施例を参照すれば明確になる。しかし、本発明は以下に開示される実施例に限定されるものではなく、互いに異なる多様な形態で実現され、単に本実施例は本発明の開示が完全となるようにし、本発明の属する技術分野における通常の知識を有する者に発明の範疇を完全に知らせるために提供されるものであり、本発明は請求項の範疇によってのみ定義される。明細書全体にわたって同一の参照符号は同一の構成要素を指す。
【0037】
たとえ「第1」または「第2」などが多様な構成要素を述べるために使用されるが、このような構成要素は前記のような用語によって制限されない。前記のような用語は単に1つの構成要素を他の構成要素と区別するために使用される。したがって、以下に言及される第1構成要素は、本発明の技術的思想内で第2構成要素であってもよい。
【0038】
本明細書で使用された用語は実施例を説明するためのものであり、本発明を制限しようとするものではない。本明細書において、単数形は文言で特に言及しない限り、複数形も含む。明細書で使用される「含む(comprises)」または「含む(comprising)」は、言及された構成要素または段階が1つ以上の他の構成要素または段階の存在または追加を排除しないという意味を含む。
【0039】
他に定義がなければ、本明細書で使用されるすべての用語は、本発明の属する技術分野における通常の知識を有する者に共通して理解できる意味で解釈される。また、一般的に使用される辞書に定義されている用語は、明らかに特に定義されていない限り、理想的または過度に解釈されない。
【0040】
以下、添付した図面を参照して、本発明の実施例を詳細に説明し、図面を参照して説明する時、同一または対応する構成要素は同一の図面符号を付し、これに関する重複した説明は省略する。
【0041】
前述した既存の技術は、合意体の構成過程において、議長(chair)ノードが、他のノードが合意体として選択されたか否かに関するメッセージを受ける前には、いくつのノードが合意体候補として選択されるかを知ることができなかった。したがって、既存の技術による議長ノードは、合意体(consensus congress)構成のために閾値時間を設定し、3f+1(fはビザンチンサイズで1以上の整数)個のノードが応答するまで待機し、閾値時間が終了する時、合意体を構成するノードの個数が3f+1個より小さい場合、これを処理するための例外処理プロセスが必要であった。しかし、本発明によれば、すべてのノードがコイントス(coin toss)演算に成功したノードがいくつなのか、議長は誰なのか、合意体を構成するノードは誰なのかを知ることが可能で、合意体構成関連メッセージの交換なしにもすぐに合意を進行させることができる。
【0042】
ブロック合意開始のためにブロックチェーンに参加する参加ノードがネットワークに連結されたと仮定することができる。この時、一般的に、ノードは、伝達データ無欠性などのために公開キーベースの暗号化を用い、このために、ブロックチェーンノードxは、自分の個人キーskから公開キーpkを生成し、ネットワークに連結された他のノードに自分の公開キーを共有することができる。以後、ノードxは、自分の個人キーskを用いてデータを安全に伝達することができ、他のノードは、ノードxの公開キーpkを用いて伝達されたデータを復号することができ、データの出所を認証することもできる。この時、ブロックチェーンノードそれぞれの公開キーは、本発明の一実施例によるパブリックノード識別子(public node identifier)の一例になってもよい。すなわち、本発明の一実施例において、パブリックノード識別子は、他のノードに公開された情報で、特定のノードを識別できる情報であってもよい。この時、パブリックノード識別子は、他のノードが知っているか知ることのできる特定のノードの識別子であってもよい。この時、パブリックノード識別子は、当該ノードから他のノードに共有され、当該ノードから他のノードに送信されるメッセージに含まれた情報によって伝達される。例えば、パブリックノード識別子は、ブロックチェーンノードそれぞれに対して割当てられたシリアル番号であってもよい。例えば、パブリックノード識別子は、ブロックチェーンノードそれぞれの公開キー自体、または公開キーに基づいて生成された識別情報であってもよい。
【0043】
前述した米国公開特許第2023-0066169号に詳細に説明されているように、ブロックチェーンノードは、保有持分に相応する個数の投票権(votes)を有することができる。本発明においても、ブロックチェーンノードは、1を超える個数の投票権を有することができ、投票権に相応する個数だけ成功確率pに相応する演算を行った結果に基づいて合意体が選定される。例えば、特定のノードが2個の投票権を有し、これら2個の投票権の1つでも成功確率pに相応する演算に成功すれば、合意体候補になる。
【0044】
図1は、本発明の一実施例によるパブリック投票識別子から通過投票リストが生成される過程の一例を示す図である。
【0045】
図1を参照すれば、パブリック投票識別子が格納された投票識別子リストID_listを用いて通過投票リストpass_listが生成されることが分かる。
【0046】
パブリック投票識別子は、それぞれの投票権(vote)(またはコイントス)に対応する識別子であってもよく、パブリックノード識別子から生成される。この時、パブリック投票識別子は、ブロックチェーンに参加するノードそれぞれに相応するパブリックノード識別子を用いて、前記ノードそれぞれに対して前記ノードそれぞれの投票権数だけ生成される。例えば、ノードAが10個の持分(shares)を有していて10個の投票権を有するならば、ノードAのための10個のパブリック投票識別子がノードAのパブリックノード識別子に基づいて生成される。例えば、ノードBが2個の持分(shares)を有していて2個の投票権を有するならば、ノードBのための2個のパブリック投票識別子がノードBのパブリックノード識別子に基づいて生成される。
【0047】
図1に示された投票識別子リストID_listには、ブロックチェーンに参加するノードの個数が4の場合のパブリック投票識別子が格納されている。図1の例において、4個のノードは、それぞれ固有のパブリックノード識別子を有することができる。この時、1番目ノードのパブリックノード識別子はIDであってもよく、2番目ノードのパブリックノード識別子はIDであってもよく、3番目ノードのパブリックノード識別子はIDであってもよく、4番目ノードのパブリックノード識別子はIDであってもよい。この時、パブリックノード識別子ID、ID、ID、IDは各ノードの公開キーであってもよい。
【0048】
図1の例において、1番目ノードは3個の投票権を有し、2番目ノードは1個の投票権を有し、3番目ノードは1個の投票権を有し、4番目ノードは1個の投票権を有することができる。すなわち、図1に示された例において、総投票権の数は6である。
【0049】
1番目ノードは、自分のパブリックノード識別子(例えば、公開キーpk)と3個の投票権を所有した旨を他のノードに伝達する。このデータを受信した他のノードは、それぞれ1番目ノードのパブリック投票識別子3個(ID、ID+1、ID+2)を計算することができ、計算された1番目ノードのパブリック投票識別子3個は投票識別子リストID_listに格納される。他のノードも、同様の方式で自分のパブリックノード識別子と自分の有する投票権の数を他のノードに伝達するので、ブロックチェーンに参加したノードは、それぞれ図1に示された投票識別子リストID_listを生成することができる。
【0050】
図1に示された例において、4個のノードが計6個の投票権を有する場合に、ノードが互いに自分の投票権情報を交換し、それぞれ6個のパブリック投票識別子が含まれる投票識別子リストID_listを生成する。
【0051】
したがって、2番目ノード、3番目ノードおよび4番目ノードそれぞれのためには、1個ずつのパブリック投票識別子が生成され、1番目ノードのためには、3個のパブリック投票識別子が生成される。この時、1番目ノードのための3個のパブリック投票識別子の1つ(ID)は、1番目ノードのパブリックノード識別子(例えば、公開キーpk)と同一に設定される。この時、1番目ノードのための3個のパブリック投票識別子の他の1つ(ID+1)が自分のパブリックノード識別子に1を加えた値に設定される。この時、1番目ノードのための3個のパブリック投票識別子のさらに他の1つ(ID+2)が1番目ノードのパブリックノード識別子に2を加えた値に設定される。特に、パブリックノード識別子に公開キーが用いられる場合、このように、パブリックノード識別子に1ずつ加えて生成されたパブリック投票識別子を用いても、パブリック投票識別子の重複が問題になる可能性はゼロに近い。すなわち、パブリック投票識別子ID+1、ID+2は、ノードの公開キーに任意の値を加えた値で、これに対応する個人キーを見つけることは不可能に近くて、任意の(arbitrary)データといえる。このように、投票識別子リストID_listには、ノードの公開キーと任意の(arbitrary)データとが総投票権の数だけ格納される。
【0052】
この時、2番目ノードのためのパブリック投票識別子IDは、2番目ノードのパブリックノード識別子(例えば、公開キーpk)と同一に設定される。この時、3番目ノードのためのパブリック投票識別子IDは、3番目ノードのパブリックノード識別子(例えば、公開キーpk)と同一に設定される。この時、4番目ノードのためのパブリック投票識別子IDは、4番目ノードのパブリックノード識別子(例えば、公開キーpk)と同一に設定される。
【0053】
結果的に、図1に示されるように、4個のノードのための計6個のパブリック投票識別子ID、ID+1、ID+2、ID、ID、IDが投票識別子リストに格納され、この投票識別子リストは、すべてに公開されたパブリックノード識別子に基づいて生成されたものであるので、ブロックチェーンに参加するノードそれぞれによって独立に生成される。生成されたパブリック投票識別子は、投票権と1対1でマッチングされるものであってもよい。
【0054】
図1の例においては、1つのパブリックノード識別子から複数のパブリック投票識別子が生成される場合、パブリックノード識別子を予め設定された数(例えば、1)だけずつ増加させる方法(1番目パブリック投票識別子はパブリックノード識別子に設定)を使用したが、1つのパブリックノード識別子から複数のパブリック投票識別子を生成する方法は、その他にも多様な方式が使用可能である。特に、1つのパブリックノード識別子から複数のパブリック投票識別子を生成する時、重複するパブリック投票識別子が生成される可能性を最小化する方式が使用されることが好ましい。
【0055】
すなわち、本発明の一実施例によれば、ブロックチェーンに参加するノードそれぞれが、自分のパブリックノード識別子(例えば、公開キー)と自分の有する投票権の数を他のノードに公開することができる。したがって、ブロックチェーンに参加するすべてのノードそれぞれは、自分を含むブロックチェーンに参加するすべてのノードのパブリックノード識別子および投票権の数を知ることができるので、図1に示された投票識別子リストID_listを生成することができる。この時、投票識別子リストID_listに含まれるパブリック投票識別子は、それぞれ投票権(vote)に対応できる。
【0056】
図1に示された例において、ブロックチェーンに追加されるブロックが入力されると、投票識別子リストID_listに格納されたデータを抽出して通過投票リストpass_listを生成することができる。すなわち、本発明の一実施例による通過投票リストpass_listは、合意ブロックが完成した後に生成され、当該ブロックのためにのみ維持できる。
【0057】
ブロックチェーン合意過程で合意ブロックが完成してコミッテッドメッセージに格納されてすべてのノードに伝播される。すなわち、議長(chair)は、ブロックチェーン合意過程のうちコミット(COMMIT)ステップで完成したブロックを、コミッテッド(COMMITTED)ステップですべてのノードに伝播することができる。したがって、ブロックチェーンの各ノードは、合意ブロックが完成する時点ですでに投票識別子リストID_listを生成しておくことができ、合意ブロックが完成してすべてのノードに伝播されるコミッテッド(COMMITTED)メッセージを受信すると、完成したブロックのヘッド値Block_Headerを用いて、成功確率(p)に相応する演算を行って通過投票リストpass_listを生成することができる。
【0058】
すなわち、ブロックを受信したノードは、ブロックのヘッド値Block_Headerを抽出し、これを図1のように生成されている投票識別子リストID_list内のパブリック投票識別子と共に用いて、成功確率(p)に相応する演算(operation)を行うことにより、通過投票リストpass_listを生成する。
【0059】
図1に示された例において、Hash()は、ブロックのヘッド値Block_Headerとパブリック投票識別子とを入力とするハッシュ関数であり、H(iは投票権識別子)は、ハッシュ関数により生成されたランダム値である。この時、投票識別子リストID_listからパブリック投票識別子を1つずつ持ってきて、ブロックのヘッド値Block_Headerと共にハッシュ演算を行ってHを計算することができる。この時、Hは、Hash(Header_B、ID)のように示すことができる。この時、Header_Bは、図2に示されたブロックBに相応するBlock_Headerを示すものであってもよく、IDは、インデックスiに相当するパブリック投票識別子であってもよい。
【0060】
この時、ハッシュ関数は、SHA256などであってもよい。この時、パブリック投票識別子IDに相応して生成されたランダム値Hは、ハッシュ関数の出力の一部のビットのみを抽出した値であってもよい。例えば、ランダム値Hは、SHA256関数の出力256ビット[255:0]の一部のビット(例えば、下位32ビット[31:0])に相応する値であってもよい。
【0061】
すなわち、それぞれ投票権それぞれに相応するランダム値Hが生成され、生成されたランダム値のうち予め設定された閾値Tより大きくない値のみ通過投票リストpass_listに[ノード番号、H]対の形態で格納される。
【0062】
この時、閾値Tは、任意の(arbitrary)値が使用できるが、前述した米国公開特許第2023-0066169号などに説明されているように、下記数式1および2を適用してノードの投票(コイントス)成功確率pと合意体(consensus congress)の大きさ3f+1を計算することができる。この時、ランダム値Hの最大値を考慮して、コイントスの成功確率pを満足する閾値Tを計算することができる。
【数1】
【数2】
【0063】
閾値Tとランダム値Hの大きさを比較する過程(演算)により成功確率pであるコイントスを実現してすべてのランダム値Hに対してコイントスを行い、コイントスに成功した場合、[ノード番号、H]対を通過投票リストpass_listに追加する。
【0064】
図1に示された例において、6個の投票権のうち5個の投票権に相当するランダム値のみが通過投票リストpass_listに含まれていることが分かる。すなわち、1番目ノードのための3個のパブリック投票識別子ID、ID+1、ID+2のうち2個の投票識別子ID、ID+1に相応するランダム値H、H0+1のみが演算に成功(閾値比較結果、ランダム値がTを超えない)し、1個の投票識別子ID+2に相応するランダム値H0+2は、演算に失敗(閾値比較結果、ランダム値がTを超える)したことが分かる。残りのノードのためのパブリック投票識別子ID、ID、IDに相応するランダム値H、H、Hがすべて演算に成功(閾値比較結果、ランダム値がTを超えない)して、通過投票リストpass_listには、計5個のランダム値H、H0+1、H、H、Hが相応するノード番号と共に格納されたことが分かる。
【0065】
すなわち、図1の例の通過投票リストpass_listには、演算に成功(閾値比較結果、ランダム値がTを超えない)した結果のみが格納されるので、1番目ノードのためには、パブリック投票識別子IDを用いて演算した結果である[NODE、H]と、パブリック投票識別子ID+1を用いて演算した結果である[NODE、H0+1]の2個の結果が格納され、2番目ノードのためには、パブリック投票識別子IDを用いて演算した結果である[NODE、H]が格納され、3番目ノードのためには、パブリック投票識別子IDを用いて演算した結果である[NODE、H]が格納され、4番目ノードのためには、パブリック投票識別子IDを用いて演算した結果である[NODE、H]が格納される。
【0066】
この時、通過投票リストpass_listに格納された結果値は、ランダム値の大きさの順に整列される。例えば、通過投票リストpass_listに格納された結果値は、ランダム値の大きさに応じて昇順に整列される。図1に示された例において、ランダム値の大きさはH<H<H<H0+1<Hであることが分かる。この時、すべてのパブリック投票識別子に対する演算が終わった後、通過投票リストpass_listから昇順に3f+1個のノードを選定して合意体(consensus congress)として定めることができる。
【0067】
図2は、本発明の一実施例による分散合意方法の一例を示す図である。
【0068】
図2を参照すれば、計4個のノードNODE0、NODE1、NODE2、NODE3がブロックチェーンに参加し、総投票権の数は6個(NODE0のための3個、NODE1のための1個、NODE2のための1個、NODE3のための1個)であることが分かる。
【0069】
ノードNODE2は、ブロックBのための合意の議長(chair)ノードであり、ブロックBの合意のためのプリペア(PREPARE)メッセージを合意委員会ノードNODE1、NODE2、NODE3に送信し、合意委員会ノードNODE1、NODE2、NODE3からコミット(COMMIT)メッセージを受信して合意ブロックBを完成した後、完成した合意ブロックBをすべてのノードNODE0、NODE1、NODE2、NODE3に伝播するコミッテッド(COMMITTED)メッセージを送信する。
【0070】
完成した合意ブロックBに対するコミッテッド(COMMITTED)メッセージを受信したすべてのノードNODE0、NODE1、NODE2、NODE3は、完成した合意ブロックBに対するブロック情報Header_Bを用いてブロックBn+1のための合意体(consensus congress)を構成することができる。
【0071】
すなわち、図2に示されるように、合意ブロックBに相応する議長ノードNODE2は、コミット(COMMIT)ステップで完成したブロックBを、コミッテッド(COMMITTED)ステップですべてのノードNODE0、NODE1、NODE2、NODE3に伝播する。
【0072】
ブロックBを受信したノードは、ブロックBのヘッド値を抽出し、これを投票識別子リストに含まれるパブリック投票識別子それぞれと共にハッシュ演算してランダム値を生成し、このランダム値を予め設定された閾値と比較して通過投票リストを生成する。
【0073】
ブロックBn+1に対する通過投票リストは、ブロックBに相応するコミッテッドメッセージを受信したすべてのノードが計算することができ、通過投票リストの合意体の構成員に関する情報は、ブロックBn+1に相応するコミッテッドメッセージを受信したすべてのノードがブロックの有効な署名者によって署名されたことを確認するために維持される必要がある。この時、議長(chair)は、合意体(consensus congress)と委員会(consensus committee)を構成するために、合意のすべてのステップ(CONFIRM、PREPARE、COMMIT、COMMITTED)で通過投票リストの合意体の構成員情報が必要になりうる。議長を除いた残りのノードは、自分が合意体の構成員の場合、議長ノードを確認し、合意を進行させるために通過投票リストの合意体の構成員情報が必要になり、合意体に含まれていないノードは、コミッテッドブロックが委員会に属するノードによって署名されたかを確認するために通過投票リストの合意体の構成員情報が必要になりうる。
【0074】
この時、ブロックBn+1に対する通過投票リストは、ブロックBに相応するコミッテッドメッセージを受信した後にのみ生成され、よって、有効な通過投票リストの維持される時間が過度に長くないように管理され、適切にコイントス(成功確率がpの演算)に用いられるランダム値が生成される。
【0075】
図2に示された例において、ブロックBn+1のための通過投票リストには、[NODE、H]、[NODE、H]、[NODE、H]、[NODE、H0+1]および[NODE、H]がランダム値Hの大きさの順に昇順整列されて格納されていてもよい。すなわち、図2に示された例において、ランダム値の大きさはH<H<HH0+1<Hであることが分かる。また、図2に示された例において、6個の投票権のうちノードNODE0の3番目投票権に相応するパブリック投票識別子のみコイントスに失敗し、残りのパブリック投票識別子はすべてコイントスに成功したことが分かる。
【0076】
この時、[NODE、H]は、ノードNODE1のパブリック投票識別子(1個)に基づいて計算されたランダム値Hに相応する演算結果であり、[NODE、H]は、ノードNODE0のパブリック投票識別子(3個)のうち1番目パブリック投票識別子(例えば、ノードNODE0の公開キー)に基づいて計算されたランダム値Hに相応する演算結果であり、[NODE、H]は、ノードNODE3のパブリック投票識別子(1個)に基づいて計算されたランダム値Hに相応する演算結果であり、[NODE、H0+1]は、ノードNODE0のパブリック投票識別子(3個)のうち2番目パブリック投票識別子(例えば、ノードNODE0の公開キー+1)に基づいて計算されたランダム値H0+1に相応する演算結果であり、[NODE、H]は、ノードNODE2のパブリック投票識別子(1個)に基づいて計算されたランダム値Hに相応する演算結果であってもよい。図2の例において、ノードNODE0のパブリック投票識別子(3個)のうち3番目パブリック投票識別子(例えば、ノードNODE0の公開キー+2)に基づいて計算されたランダム値H0+2は、閾値比較(コイントス)を通過できないことが分かる。
【0077】
この時、Bn+1ブロックの合意体201は、[NODE、H]、[NODE、H]、[NODE、H]、[NODE、H0+1]で構成される。この時、[NODE、H]が最も小さいランダム値に相応するので、図2に示されるように、ノードNODE1が次ブロックBn+1の合意のための議長ノードになってもよい。
【0078】
図2の例において、ブロックBn+1の合意が始まって、議長であるノードNODE1が合意委員会(consensus committee)202として[NODE、H]、[NODE、H]、[NODE、H]を選択し、これに相当するノードNODE1、NODE0、NODE3にプリペア(PREPARE)メッセージを送信する。
【0079】
このように、既存の技術は、ノードの持分による投票権それぞれが合意体の個別で行使できなかったが、本発明の一実施例によれば、合意体を選ぶ時、ノードの投票権別に分けられて合意体選定のための投票権が行使できる。
【0080】
ブロックBn+1の合意は、図2に示されるように、議長ノードNODE1が合意委員会に相当するノードNODE0、NODE1、NODE3からコミット(COMMIT)メッセージを受信し、これに相応するコミッテッド(COMMITTED)メッセージをすべてのノードに送信する過程で行われる。
【0081】
ブロックBn+1に相応するコミッテッドメッセージを受信すると、すべてのノードは、ブロックBn+2に相応する通過投票リストを生成することができる。すなわち、ブロックBn+1に相応するコミッテッドメッセージを受信したノードは、それぞれブロックBn+1のヘッド値を抽出し、これを投票識別子リストに含まれるパブリック投票識別子それぞれと共にハッシュ演算してランダム値を生成し、このランダム値を予め設定された閾値と比較してブロックBn+2のための通過投票リストを生成する。
【0082】
図2に示された例において、ブロックBn+2のための通過投票リストには、[NODE、H]、[NODE、H0+1]、[NODE、H]、[NODE、H]および[NODE、H]がランダム値Hの大きさの順に昇順整列されて格納されていてもよい。すなわち、図2に示された例において、ブロックBn+2の合意のために生成されたランダム値の大きさはH<H0+1<H<H<Hであることが分かる。また、図2に示された例において、6個の投票権のうちノードNODE0の3番目投票権に相応するパブリック投票識別子のみコイントスに失敗し、残りのパブリック投票識別子はすべてコイントスに成功したことが分かる。
【0083】
この時、[NODE、H]は、ノードNODE3のパブリック投票識別子(1個)に基づいて計算されたランダム値Hに相応する演算結果であり、[NODE、H0+1]は、ノードNODE0のパブリック投票識別子(3個)のうち2番目パブリック投票識別子(例えば、ノードNODE0の公開キー+1)に基づいて計算されたランダム値H0+1に相応する演算結果であり、[NODE、H]は、ノードNODE0のパブリック投票識別子(3個)のうち1番目パブリック投票識別子(例えば、ノードNODE0の公開キー)に基づいて計算されたランダム値Hに相応する演算結果であり、[NODE、H]は、ノードNODE2のパブリック投票識別子(1個)に基づいて計算されたランダム値Hに相応する演算結果であり、[NODE、H]は、ノードNODE1のパブリック投票識別子(1個)に基づいて計算されたランダム値Hに相応する演算結果であってもよい。図2の例において、ノードNODE0のパブリック投票識別子(3個)のうち3番目パブリック投票識別子(例えば、ノードNODE0の公開キー+2)に基づいて計算されたランダム値H0+2は、ブロックBn+2のための合意体の構成時にも閾値比較(コイントス)を通過できないことが分かる。
【0084】
この時、Bn+2ブロックの合意体205は、[NODE、H]、[NODE、H0+1]、[NODE、H]、[NODE、H]で構成される。この時、[NODE、H]が最も小さいランダム値に相応するので、図2に示されるように、ノードNODE3が次ブロックBn+2の合意のための議長ノードになってもよい。
【0085】
図2の例において、ブロックBn+2の合意が始まって、議長であるノードNODE2が合意委員会(consensus committee)206として[NODE、H]、[NODE、H0+1]、[NODE、H]を選択し、これに相当するノードNODE3、NODE0にプリペア(PREPARE)メッセージを送信する。
【0086】
ナンスチェーンを用いた分散合意方式など既存の分散合意技術は、コイントスに成功したノードが、自分がコイントスに成功したことを証明するためのメッセージを作って他のノードに送信しなければならなかった。他のノードは、特定のノードから受信されたメッセージに基づいて当該ノードがコイントスに成功したことを確認し、合意体を構成するしかなかった。
【0087】
しかし、本発明によれば、公開キーなどノードそれぞれに対して割当てられたパブリックノード識別子を用いて、すべてのノードが特定のブロックに対して同一の通過投票リストを生成することができ、よって、どのノードで合意体が構成されたか、合意体構成のための別のメッセージなしにも容易に確認可能なため、合意効率が極大化できる。
【0088】
すなわち、本発明によれば、ブロックチェーンに連結された分散ノードが他のノードから新規合意体関連メッセージを受けなくても、自ら次ブロックの合意体の構成を計算することができる。合意に参加したノードは、独立にすべての参加ノードのパブリック投票識別子と現在ブロックから抽出したデータから、各ノードのための次ブロックの合意体選定のための値を計算して次ブロックの合意体を計算することができる。
【0089】
図3は、本発明の一実施例による分散合意方法の他の例を示す図である。
【0090】
図3を参照すれば、計5個のノードNODE0、NODE1、NODE2、NODE3、NODE4がブロックチェーンに参加し、総投票権の数は5個(各ノードが1個ずつ)であることが分かる。すなわち、図3は、参加ノードがすべて1の持分を有する場合、合意体構成のための追加的なメッセージの交換なしにランダム合意体を構成し、これらが合議する過程を示す。
【0091】
図3の例は、ブロックチェーンに参加する参加ノードが互いにパブリックノード識別子および保有した投票権数を共有した後、初期ブロック生成の過程に相当するものであってもよい。この時、図3に示された過程が行われる前に、パブリック投票権識別子を含む投票権識別子リストのセットアップが完了していてもよい。
【0092】
図3に示された例においては、説明の便宜のために、すべてのノードがそれぞれ1個の投票権を有する場合を仮定して、初期ブロック生成と合意過程のためのプロトコルを説明したが、前述のように、ノードそれぞれは複数の投票権を有してもよい。ノードの一部が複数の投票権で合意体に参加する場合、合意のためのメッセージは1つのみ伝達し、合意カウントは委員会(committee)に含まれたカウントを用いると、効率的な合意が可能である。
【0093】
初期ブロックBinitのための合意過程で任意に初期ブロックの合意のための議長に選定されたノードNODE0が、単独でプリペア(PREPARE)およびコミット(COMMIT)ステップなどを経て、ブロックに署名して初期ブロックを作り、これをすべてのノードNODE0、NODE1、NODE2、NODE3、NODE4に伝達する。
【0094】
図3に示されるように、合意過程は4段階を経る。初期ブロックBinitのための合意過程で合意体にはノードNODE0のみが参加しているため、プリペア(PREPARE)およびコミット(COMMIT)ステップは、ノードNODE0の内部で行われる。この過程で、ノードNODE0の個人キーを用いて初期ブロックBinitに対する署名が行われ、署名が完了した最終ブロックがコミッテッド(COMMITTED)ステップですべてのノードNODE0、NODE1、NODE2、NODE3、NODE4に伝達される。図3の例においては、EC-schnorr多重署名を合意に用いることができる。合意過程での多重署名などは、前述した米国公開特許第2020-0403776号などに詳細に開示されている。
【0095】
コンファーム(CONFIRM)ステップにおいて、各ノードは、初期ブロックBinitの署名を検証して、問題がある場合には、合意に失敗したものであるので、再合意プロトコルを進行させる。検証結果に問題がない場合、格納されたノードの投票識別子リストID_listに格納された投票識別子と、初期ブロックBinitのヘッダー値とを用いて、図1により説明したように、通過投票リストpass_listを生成する。前述のように、コミッテッドメッセージを受信したすべてのノードは、通過投票リストを生成することができる。
【0096】
図3の例においては、5個のノードNODE0、NODE1、NODE2、NODE3、NODE4がそれぞれ1個の投票権をもって参加したと仮定するので、前記数式1および数式2を満足するpは1.0であり、fは1である。閾値比較条件を満足したすべての[ノード番号、H]対は通過投票リストpass_listに追加され、これらの中からHの昇順に4個のノードが合意体として選択される。図3の例において、5個の投票権のすべてが閾値比較を通過して、5個の[ノード番号、H]対が通過投票リストpass_listに昇順に整列されて格納されていてもよい。この時、格納された値の中から、3f+1である4個のノードNODE2、NODE0、NODE4、NODE3に関する結果値が合意体に相応するものとして選択される。したがって、次ブロックBinit+1の合意のための合意体ノードはノードNODE2、ノードNODE0、ノードNODE4およびノードNODE3になり、このうち最も小さいHに相応するノードNODE2がブロックBinit+1の議長ノードになる。
【0097】
図3には、ノードNODE2、NODE0、NODE4、NODE3が合意体として選択されて合意を進行させる例が示されている。この過程は、分散したすべてのノードによって行われ、同一の初期ブロックBinitを確認したすべてのノードの演算(コイントス)結果が同一であるので、合意体を構成するためのノード間のメッセージの交換なしにも、すべてのノードが同一の合意体を構成することができる。
【0098】
再び図3を参照すれば、コンファーム(CONFIRM)ステップにおいて、次ブロックの合意体に選定されたノードNODE2、NODE0、NODE4、NODE3は、それぞれランダムkを生成し、楕円曲線上でQを生成する。合意体に含まれる各ノードは、自分の受けたブロックヘッダーのチェックサム(checksum)とQを次ブロックBinit+1の議長ノードであるノードNODE2に伝達して初期ブロックBinitの合意結果を確証できるようにし、次ブロックの合意を準備する。この時、チェックサム(checksum)とQは、ノードiの署名と共に伝達して無欠性を保障する。この時、合意体に選定されたノードは、未処理のトランザクションを議長ノードに伝達して議長がこれらを処理できるようにする。
【0099】
ブロックBinit+1の議長であるノードNODE2は、チェックサムとQを提出したノードの中から任意に2f+1個を選定して、選定されたノードのチェックサムが互いに同一であるかを検査して、ノードが同一のブロックBinitを受信したことを確認し、これら2f+1個のノードと合意を進行させる。図3に示された例において、ブロックBinit+1の議長であるノードNODE2は、4個(3f+1個)の合意体ノードNODE2、NODE0、NODE4、NODE3のうち3個(2f+1個)の委員会ノードNODE2、NODE0、NODE3を選択し、ノードNODE2、NODE0、NODE3のチェックサムが同一であることを確認し、ノードNODE2、NODE0、NODE3と合意を進行させる。
【0100】
図3から分かるように、初期ブロックBinitを始めた議長はノードNODE0であるが、次ブロックBinit+1の議長であるノードNODE2が初期ブロックBinitの合意結果を最終的に確認することができる。
【0101】
ブロックBinit+1のプリペア(PREPARE)ステップにおいて、ノードNODE2は、自分がゲスト(guest)から受信したトランザクション、またはブロックBinitのコンファーム(COMFIRM)ステップでノードから伝達されたトランザクションを含む予備ブロックを生成する。この時、合意のために、ノードNODE2、NODE0、NODE3それぞれの公開キーとQとを結合したPk、Qおよびr値をブロックに含むことでプリペア(PREPARE)メッセージ(プリペアブロックを含む)を生成し、これをノードNODE2、NODE0、NODE3に伝達することができる。プリペア(PREPARE)メッセージを受けたノードNODE2、NODE0、NODE3は、ブロックの異常の有無を確認し、異常がない場合、自分の個人キーで署名したsを生成して議長ノードNODE2にコミット(COMMIT)メッセージを送り返す。すべてのコミット(COMMIT)メッセージを受信した議長ノードNODE2は、sを結合してSを生成した後、署名(r、S)を完成してコミッテッド(COMMITTED)ブロックを生成して、すべてのノードに伝達する。
【0102】
コミッテッドブロックを受信したノードは、それぞれ合意体の2f+1個のノードに相応する公開キーと署名を検査して、ブロックの有効性を検査する。検査結果が有効であれば、ブロックBinit+1のヘッダー値でHを計算し、次の通過投票リストを作ることができ、ブロックBinit+2の合意体を構成することができる。図3の例においては、ノードNODE4、NODE3、NODE1、NODE2が合意体になって、ブロックBinit+2の議長であるノードNODE4にコンファームメッセージを送信する。すなわち、ブロックBinit+1のコンファーム(COMFIRM)ステップでは、ノードNODE4、NODE3、NODE1、NODE2がそれぞれチェックサムとQをノードNODE4に伝達してブロックBinit+1の合意を完成する。すると、ブロックBinit+1に対して前述のような過程によりブロックBinit+2の合意を進行させることができる。
【0103】
図4は、本発明の一実施例による分散合意方法のさらに他の例を示す図である。
【0104】
図4を参照すれば、ノードNODE5が、既存の5個のノードNODE0、NODE1、NODE2、NODE3、NODE4に加えて、参加ノードに追加されることが分かる。
【0105】
すなわち、図4を通して、ブロックBの合意時間にノードNODE5が参加ノードに追加された場合、ノードNODE5がブロックBn+1の合意から正常に合意体に参加可能であること(ノード追加過程)が分かる。
【0106】
図4の例において、ブロックBの議長であるノードNODE3にノードNODE5の合意参加の意思が伝達されたと仮定する。ノードNODE5は、合意が進行しているネットワークにまず接続して、現在合意に参加したノードの情報を収集する。合意ノードに関する情報とパブリックノード識別子(例えば、公開キー)を受信した後、これに基づいてパブリック投票識別子を含む投票識別子リストID_listを作り、自分の合意参加の意思を他のノードに伝達する。ブロックBn-1に相応する時間に新規参加ノードに関する情報を受信したノードは、それぞれブロックBに相応する時間に議長であるノードNODE3に当該内容を伝達することができる。ノードNODE3は、当該内容を合議するトランザクションに含ませて合意を進行させることができる。この時、コミット(COMMIT)ステップが完了したブロックには、新規参加ノードに関する情報が含まれていてもよい。したがって、議長であるノードNODE3は、コミット(COMMIT)ステップが完了すると、自分の投票識別子リストID_listにノードNODE5のパブリック投票識別子を追加することができる。議長であるノードNODE3は、コミッテッド(COMMITTED)ステップですべてのノードに生成されたブロックを伝達することができる。コミッテッドメッセージを受信したすべてのノードは、それぞれ新規ノードであるノードNODE5のパブリック投票識別子を自分の投票識別子リストID_listに追加する。したがって、ブロックBのコンファーム(COMFIRM)ステップからノードNODE0、NODE1、NODE2、NODE3、NODE4、NODE5が合意に参加できるようになる。
【0107】
ブロックBn+1の合意ステップにおいて、議長ノードであるノードNODE2は、プリペア(PREPARE)とコミット(COMMIT)により新規ブロックを合意し、完成したブロックをすべてのノードに伝播する。すなわち、図4に示されたような過程により新しいノードが合意に参加できる。
【0108】
図5は、本発明の一実施例によるパブリックノード識別子からパブリック投票識別子が生成される過程の一例を示す動作フローチャートである。
【0109】
図5を参照すれば、ノードのパブリックノード識別子の一例として公開キーが用いられ、ノードの公開キーに基づいてパブリック投票識別子が生成されて投票識別子リストID_listに含まれることが分かる。
【0110】
図5に示されたステップは、特定のノードのために、当該ノードのパブリックノード識別子を用いて1つ以上のパブリック投票識別子を生成する過程を示す。図5に示された各ステップは、パブリックノード識別子ごとに行われる。図5に示された過程により特定のパブリックノード識別子(例えば、公開キー)に対して当該ノードの投票権数だけのパブリック投票識別子が生成される。
【0111】
まず、ステップS510において、パブリック投票識別子を生成するための変数が初期化される。すなわち、ステップS510において、変数loopは、当該ノードの投票権数(NUMBER OF VOTES)に相当する値に設定され、変数countは0に設定され、投票識別子リストID_listは初期化される。
【0112】
以後、ステップS520において、変数countと変数loopとが比較される。ステップS520の比較結果、countがloopより小さい場合、投票識別子リストID_listに当該ノードの公開キー(PUBLIC KEY、パブリックノード識別子)に変数countを加えた値に相当するパブリック投票識別子が追加される(S530)。図5に示されるように、投票識別子リストID_listには、パブリック投票識別子と共にノード番号が格納されてもよい。
【0113】
ステップS530において、パブリック投票識別子が追加されると、変数countを1増加させ(S540)、再びステップS520へ戻って、変数countと変数loopとを比較する。
【0114】
ステップS520の比較結果、countがloopより小さくない場合、当該ノードに対する投票識別子生成過程を終了する。
【0115】
図5に示された過程により特定のノードに対して相応する投票権数だけのパブリック投票識別子(公開キー、公開キー+1、公開キー+2、...、公開キー+投票権数-1)が生成される。
【0116】
図5の例において、パブリックノード識別子に予め設定された数が加えられてパブリック投票識別子が生成される場合を例に挙げたが、パブリックノード識別子から投票権数だけのパブリック投票識別子が生成される方式は、多様な方式であってもよい。
【0117】
この時、パブリック投票識別子は、投票識別子生成器(関数)によって生成される。図5に示された例において、投票識別子生成器は、入力されるパブリックノード識別子(公開キー)に1ずつ増加するcountを加える関数であってもよい。
【0118】
投票識別子生成器(関数)は、パブリックノード識別子を入力として受けて投票権数だけのパブリック投票識別子を出力する多様な形態の関数であってもよい。この時、投票識別子生成器は、生成されたパブリック投票識別子の重複の有無をチェックする重複チェック器を含むことができる。この時、重複チェック器は、生成されたパブリック投票識別子と他の投票識別子との重複の有無だけでなく、生成されたパブリック投票識別子と他のノードに相応するパブリックノード識別子との間の重複の有無をチェックすることもできる。
【0119】
このように、1つのノードの投票権の数だけパブリック投票識別子を生成し、これを用いてコイントスを行う場合、特定のノードで1つのコイントス結果をハッシングして次のコイントスを行う方式に比べてコイントスの並列実行が可能で、合意体選定のための演算速度が速くなる。
【0120】
投票識別子生成器によって生成されたパブリック投票識別子は、結局、ノードが有する投票権にそれぞれ対応する固有識別子であってもよく、パブリック投票識別子を示すビット数と、パブリックノード識別子を示すビット数とは、互いに同一でもよく、異なっていてもよい。
【0121】
図6は、本発明の一実施例による分散合意方法において通過投票リストの使用例を示す図である。
【0122】
図6を参照すれば、ブロックBのコミッテッドブロックを受信したノードNODE0、NODE1、NODE2、NODE3が生成した通過投票リスト601が同一であることが分かる。この時、ノードNODE0、NODE1、NODE2、NODE3は、それぞれ議長がノードNODE1であり、自分が合意体に含まれているか否かを確認することができる。
【0123】
ノードNODE0は、通過投票リストから[NODE、H]、[NODE、H]、[NODE、H]、[NODE、H0+1]までが合意体として選択されたことを確認し、自分に相当する結果値([NODE、H])が通過投票リスト上の2番目に位置することを確認して、自分が合意体に選定されたことを確認することができる。この時、ノードNODE0は、通過投票リストの1番目の結果値([NODE、H])に基づいてノードNODE1が議長になったことが分かる。さらに、ノードNODE0は、自分に相当する結果値([NODE、H0+1])が通過投票リスト上の4番目に位置することを確認して、自分が合意体で2個の投票権を有することを確認することができる。
【0124】
ノードNODE1は、通過投票リストから[NODE、H]、[NODE、H]、[NODE、H]、[NODE、H0+1]までが合意体として選択されたことを確認し、1番目の結果値([NODE、H])に基づいて自分が合意体に選定されたことと、自分が議長になったことが分かる。
【0125】
ノードNODE2は、通過投票リストから[NODE、H]、[NODE、H]、[NODE、H]、[NODE、H0+1]までが合意体として選択されたことを確認し、自分に相当する結果値([NODE、H])が合意体に含まれていないことを確認することができる。この時、ノードNODE2は、通過投票リストの1番目の結果値([NODE、H])に基づいてノードNODE1が議長になったことが分かる。
【0126】
ノードNODE3は、通過投票リストから[NODE、H]、[NODE、H]、[NODE、H]、[NODE、H0+1]までが合意体として選択されたことを確認し、自分に相当する結果値([NODE、H])が通過投票リスト上の3番目に位置することを確認して、自分が合意体に選定されたことを確認することができる。この時、ノードNODE3は、通過投票リストの1番目の結果値([NODE、H])に基づいてノードNODE1が議長になったことが分かる。
【0127】
ノードNODE1は、自分が議長であるので、合意体ノードNODE0、NODE1、NODE3からコンファーム(COMFIRM)メッセージを受信する。
【0128】
ノードNODE0およびノードNODE3は、自分が議長ではないものの、合意体に含まれていることを確認し、コンファーム(COMFIRM)メッセージをノードNODE1に送る。
【0129】
議長は合意体(consensus congress)のうち委員会(consensus committee)を構成するが、図6に示された例においては、ノードNODE1、ノードNODE0およびノードNODE3が委員会に選定されたことが分かる。この時、ノードNODE0の2番目パブリック投票識別子ID0+1に相応する結果値([NODE、H0+1))は、合意体には含まれるが、委員会には含まれない。
【0130】
もし、議長が図6に示されるように、ノードNODE1、ノードNODE0およびノードNODE3を委員会として構成する場合、議長が公開キーを結合する時、ノードNODE1、ノードNODE0およびノードNODE3の公開キーを結合したPk103を用いてr103を生成し、これを委員会ノードに提供する。
【0131】
もし、議長が、図6に示されたものとは異なり、合意体に相当する結果値のうち[NODE、H]、[NODE、H]、[NODE、H0+1]で委員会を構成する場合、議長が公開キーを結合する時、ノードNODE1およびノードNODE0の公開キーを結合したPk10を用いてr10を生成し、これを委員会ノードに提供する。
【0132】
したがって、委員会の構成によって生成されたPkとrが異なるので、委員会の構成員は互いに誰が署名するかを知らない状態で、受信されたrを用いてsを生成し、議長は同時に2個の多重署名を作ることができない。
【0133】
しかし、議長が2f+1個の署名を受けて合意を完成するかを確認するために、委員会に属するノードが誰なのかを委員会ノードに知らせる必要がある(603)。この時、すべてのノードが通過投票リストpass_listを有しているので、議長ノードに0番を付与し、通過投票リスト上の位置によって順に番号を付与し、委員会の構成情報はビットマップで表現して伝達することができる。
【0134】
図6に示されるように、議長は、署名した委員会の構成員を確認するために、通過投票リストpass_listで委員会を維持する(604)。
【0135】
多重署名が完了すると、コミッテッドブロックで合意完了したブロックを伝達する。この時、委員会の構成情報が提供されて、通過投票リストpass_list上で署名したノードを確認するのに用いられる(605)。
【0136】
さらに、ノードは、受信されたブロックを用いて、次ブロックBn+2のための合意体構成のために通過投票リストpass_listを再び生成する。
【0137】
図7は、本発明の一実施例による分散合意方法の一例を示す動作フローチャートである。
【0138】
図7を参照すれば、本発明の一実施例による分散合意方法は、ブロックチェーンを構成するノードに相応するパブリックノード識別子を用いてパブリック投票識別子を生成する(S710)。
【0139】
この時、前記パブリック投票識別子は、前記ノードそれぞれに相応するパブリックノード識別子を用いて、前記ノードそれぞれに対して前記ノードそれぞれの投票権数だけ生成される。
【0140】
この時、前記パブリック投票識別子は、前記ノードそれぞれに相応するパブリックノード識別子に、0を含む生成値のうち1を足したり引いたりして生成される。
【0141】
この時、前記パブリックノード識別子は、前記ノードに相応する公開キーであってもよい。
【0142】
また、本発明の一実施例による分散合意方法は、パブリック投票識別子それぞれに対して、成功確率(p)に相応する演算(operation)を行って通過投票リストを生成する(S720)。
【0143】
この時、前記通過投票リストは、前記ブロックチェーンを構成するノードそれぞれが、前記パブリック投票識別子に基づいて自分を含む前記ノードのための前記演算を行って生成される。この時、前記ブロックチェーンを構成するノードが特定のタイミングで生成した通過投票リストは、互いに同一であってもよい。
【0144】
この時、前記演算(operation)は、前記パブリック投票識別子および前ブロック情報を用いて生成されたランダム値を、前記成功確率に相応する閾値(threshold)と比較するものであってもよい。
【0145】
また、本発明の一実施例による分散合意方法は、前記通過投票リストに相応する合意体ノードの少なくとも一部に基づいて分散合意を行う(S730)。
【0146】
この時、前記合意体ノードは、前記通過投票リストに含まれるノードの中から選択される。
【0147】
この時、前記前ブロック情報に相応する前ブロックに対する合意が、現在ブロックのための前記合意体ノードの中から選択されたチェア(chair)ノードによって最終的に確認される。
【0148】
この時、前記合意体ノードのうち前記演算の結果に相応する値が最も大きいか最も小さいノードがチェア(chair)ノードになってもよい。
【0149】
図7に示された分散合意方法は、分散合意装置によって行われる。分散合意装置は、図9に示された構成で実現可能である。
【0150】
図8は、本発明の一実施例によるブロックチェーン生成方法の一例を示す動作フローチャートである。
【0151】
図8を参照すれば、本発明の一実施例によるブロックチェーン生成方法は、前ブロックに相応するコミッテッド(COMMITTED)メッセージを受信する(S810)。
【0152】
また、本発明の一実施例によるブロックチェーン生成方法は、前記前ブロックに関する情報およびパブリック投票識別子を用いて通過投票リストを生成する(S820)。
【0153】
この時、前記通過投票リストは、前記ブロックチェーンを構成するノードそれぞれが、前記パブリック投票識別子に基づいて、自分を含む前記ノードに対する、成功確率(p)に相応する演算(operation)を行って生成される。この時、前記ブロックチェーンを構成するノードが特定のタイミングで生成した通過投票リストは、互いに同一であってもよい。
【0154】
この時、前記演算(operation)は、前記パブリック投票識別子および前記前ブロックに関する情報を用いて生成されたランダム値を、前記成功確率に相応する閾値(threshold)と比較するものであってもよい。
【0155】
この時、前記パブリック投票識別子は、前記ノードそれぞれに相応するパブリックノード識別子を用いて、前記ノードそれぞれに対して前記ノードそれぞれの投票権数だけ生成される。
【0156】
また、本発明の一実施例によるブロックチェーン生成方法は、現在ブロックに相応するチェアノードが、前記通過投票リストに相応する合意体ノードからコンファーム(CONFIRM)メッセージを受信し、前記コンファームメッセージに基づいて前記前ブロックの合意結果を最終的に確認する(S830)。この時、前記チェアノードは前記通過投票リストに基づいて認識される。
【0157】
また、本発明の一実施例によるブロックチェーン生成方法は、前記チェアノードが、前記合意体ノードの中から選択された委員会ノードに、前記現在ブロックを前記ブロックチェーンに連結するためのプリペア(PREPARE)メッセージを送信する(S840)。
【0158】
さらに、本発明の一実施例によるブロックチェーン生成方法は、前記チェアノードが、前記委員会ノードからコミット(COMMIT)メッセージを受信する(S850)。
【0159】
また、本発明の一実施例によるブロックチェーン生成方法は、前記チェアノードが、すべてのノードに、前記現在ブロックに相応するコミッテッド(COMMITTED)メッセージを送信する(S860)。
【0160】
図9は、本発明の一実施例によるコンピュータシステムの構成を示すブロック図である。
【0161】
実施例による分散合意装置、ブロックチェーン生成装置およびブロックチェーンを構成するノードは、コンピュータで読み込み可能な記録媒体のようなコンピュータシステム900で実現される。
【0162】
コンピュータシステム900は、バス920を介して互いに通信する1つ以上のプロセッサ910と、メモリ930と、ユーザインターフェース入力装置940と、ユーザインターフェース出力装置950と、ストレージ960とを含むことができる。また、コンピュータシステム900は、ネットワーク980に連結されるネットワークインターフェース970をさらに含むことができる。プロセッサ910は、中央処理装置またはメモリ930やストレージ960に格納されたプログラムまたはプロセッシングインストラクションを実行する半導体装置であってもよい。メモリ930およびストレージ960は、揮発性媒体、不揮発性媒体、分離型媒体、非分離型媒体、通信媒体、または情報伝達媒体の少なくとも1つ以上を含む記憶媒体であってもよい。例えば、メモリ930は、ROM931やRAM932を含むことができる。
【0163】
この時、メモリ930には少なくとも1つのプログラムが記録される。
【0164】
この時、プロセッサ910は、前記プログラムを実行することができる。この時、前記プログラムは、ブロックチェーンを構成するノードに相応するパブリックノード識別子を用いてパブリック投票識別子を生成し、パブリック投票識別子それぞれに対して、成功確率(p)に相応する演算(operation)を行って通過投票リストを生成し、前記通過投票リストに相応する合意体ノードの少なくとも一部に基づいて分散合意を行うことができる。
【0165】
この時、前記通過投票リストは、前記ブロックチェーンを構成するノードそれぞれが、前記パブリック投票識別子に基づいて自分を含む前記ノードのための前記演算を行って生成される。この時、前記ブロックチェーンを構成するノードが特定のタイミングで生成した通過投票リストは、互いに同一であってもよい。
【0166】
この時、前記演算(operation)は、前記パブリック投票識別子および前ブロック情報を用いて生成されたランダム値を、前記成功確率に相応する閾値(threshold)と比較するものであってもよい。
【0167】
この時、前記パブリック投票識別子は、前記ノードそれぞれに相応するパブリックノード識別子を用いて、前記ノードそれぞれに対して前記ノードそれぞれの投票権数だけ生成される。
【0168】
この時、前記合意体ノードは、前記通過投票リストに含まれるノードの中から選択される。
【0169】
この時、前記前ブロック情報に相応する前ブロックに対する合意が、現在ブロックのための前記合意体ノードの中から選択されたチェア(chair)ノードによって最終的に確認される。
【0170】
この時、前記パブリック投票識別子は、前記ノードそれぞれに相応するパブリックノード識別子に、0を含む生成値のうち1を足したり引いたりして生成される。
【0171】
この時、前記パブリックノード識別子は、前記ノードに相応する公開キーであってもよい。
【0172】
この時、前記合意体ノードのうち前記演算の結果に相応する値が最も大きいか最も小さいノードがチェア(chair)ノードになってもよい。
【0173】
以上、本発明による分散合意方法、装置、これを用いたブロックチェーン生成方法は、上記のように説明された実施例の構成と方法が限定されて適用できるのではなく、上記の実施例は多様な変形が行われるように各実施例の全部または一部が選択的に組み合わされて構成されてもよい。
【符号の説明】
【0174】
900:コンピュータシステム
910:プロセッサ
920:バス、930:メモリ
931:ROM、932:RAM
940:ユーザインターフェース入力装置
950:ユーザインターフェース出力装置
960:ストレージ、970:ネットワークインターフェース
980:ネットワーク
図1
図2
図3
図4
図5
図6
図7
図8
図9