(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-03-22
(45)【発行日】2022-03-30
(54)【発明の名称】ノード、合意形成システム及び当選者決定方法
(51)【国際特許分類】
H04L 9/32 20060101AFI20220323BHJP
【FI】
H04L9/32 200Z
H04L9/32 200B
H04L9/32 200E
(21)【出願番号】P 2018114659
(22)【出願日】2018-06-15
【審査請求日】2021-02-19
(73)【特許権者】
【識別番号】800000068
【氏名又は名称】学校法人東京電機大学
(74)【代理人】
【識別番号】100119677
【氏名又は名称】岡田 賢治
(74)【代理人】
【識別番号】100115794
【氏名又は名称】今下 勝博
(72)【発明者】
【氏名】小川 猛志
(72)【発明者】
【氏名】宮保 憲治
(72)【発明者】
【氏名】木間 勇翔
【審査官】金沢 史明
(56)【参考文献】
【文献】国際公開第2017/192837(WO,A1)
【文献】特表2019-512778(JP,A)
【文献】特開2017-157926(JP,A)
【文献】GILAD, Yossi et al.,Algorand: Scaling Byzantine Agreements for Cryptocurrencies,Cryptology ePrint Archive,International Association for Cryptologic Research,2017年10月14日,Report 2017/454, Ver. 20170924:210954,pp. 1-24,[2021年11月29日検索], インターンネット <URL: https://eprint.iacr.org/2017/454/20170924:210956>
【文献】KUME, Junichiro,New Cryptocurrency Protocol without Proof of Work,2016年暗号と情報セキュリティシンポジウム(SCIS2016),2016年01月22日,1A2-2,pp. 1-7
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/32
G09C 1/00
(57)【特許請求の範囲】
【請求項1】
新規ブロック
における自ノードの
IDとブロック番号に対する署名である暗号化IDを、自ノードに固有のID
、自ノードに固有の秘密鍵
及び前記新規ブロックにおけるブロック番号を
用いて生成し、
他のノードと共通の
Hash関数に、自ノードの暗号化ID及び前記新規ブロックを追加するブロックチェーンに既に含まれるブロックのうちの予め定められたブロックに格納されている
過去に当選したノードの暗号化IDを適用し、自ノードのHash値を求め、
自ノードのHash値を
閾値と比較することによって、自ノードが当選したか否かを判定する、
ノード。
【請求項2】
前記ノードは、
自ノードが当選した場合、自ノードの暗号化IDを格納した新規ブロックを前記他のノードに配信し、
他のノードから配信された複数の新規ブロックを受信し、複数のノードに共通の式に、各新規ブロックに格納されている暗号化IDを適用
することで、各新規ブロックに格納されている暗号化IDのなかから
抽選により1つを選択する、
請求項1に記載のノード。
【請求項3】
前記ノードは、
受信した新規ブロックに格納されている暗号化IDについて、対応する公開鍵を用いて検証し、
検証した暗号化IDに問題がなければ当該新規ブロックを有効として、ブロックチェーンに追加する、
請求項2に記載のノード。
【請求項4】
請求項1から3のいずれかに記載の複数のノードがピア・ツー・ピア・ネットワークで接続され、前記ブロックチェーンを前記複数のノードがそれぞれ生成し保持する、合意形成システム。
【請求項5】
ノードが、
新規ブロック
における自ノードの
IDとブロック番号に対する署名である暗号化IDを、自ノードに固有のID
、自ノードに固有の秘密鍵
及び前記新規ブロックにおけるブロック番号を
用いて生成し、
他のノードと共通の
Hash関数に、自ノードの暗号化ID及び前記新規ブロックを追加するブロックチェーンに既に含まれるブロックのうちの予め定められたブロックに格納されている
過去に当選したノードの暗号化IDを適用し、自ノードのHash値を求め、
自ノードのHash値を
閾値と比較することによって、自ノードが当選したか否かを判定する、
当選者決定方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ブロックチェーンを用いた分散合意形成技術に関し、特にブロックチェーンの検証者候補のノードを決定する当選者決定方法に関する。
【背景技術】
【0002】
取引データ(以下、トランザクションデータ)を記録する分散型台帳システムにおいて、台帳の更新時にトランザクションデータの内容の正当性について利用者間で合意を取る、ブロックチェーンを用いた分散合意形成技術が提案されている。
【0003】
台帳システムは、集中型と分散型に分類できる。
集中型の場合、利用者の識別子(Identifier、以下、ID)の一意性、IDに対応するIdentityの実在性を保証する機能(以下、IdP)と、利用者間のトランザクションデータの正当性を検証する機能と、それらトランザクションデータを蓄積する機能を1箇所(集中サーバ)に配備する。全利用者は集中サーバのIdP機能によりIDを割り当てられ、利用者間で取引の内容を合意すると、合意したトランザクションデータを集中サーバに登録する。集中サーバはトランザクションデータの正当性を確認すると、ディジタル署名を付与して、集中サーバ内に蓄積する。利用者が過去のトランザクションデータを閲覧したい場合は、集中サーバを参照し、集中サーバの署名によりトランザクションデータの内容が正当と判断する。ところが、集中サーバの信頼性が不確実な場合、トランザクションデータの正当性や、同一データを他の利用者も参照していることの確認(一貫性の確認)ができない問題がある。
【0004】
それら問題を解決する、分散型台帳システムが提案されている。以下に、Bitcoinの場合の実現方法を説明する。Bitcoinでは、集中サーバを設置せず、上記3機能を各利用者のノードに配備する。すなわち各利用者のノードは自分で公開鍵と秘密鍵のペアを生成し、秘密鍵を各利用者のノードが保持する。利用者のノード間で取引、例えば電子マネーの支払いが発生すると、当該取引のトランザクションデータを、全利用者のノードに転送し、全利用者のノードが全取引のデータ(台帳)を蓄積する。
【0005】
各利用者のノードは、トランザクションデータを受信すると、当該データの内容が正当かどうか、判定する。例えば、過去に同一な電子マネーの支払い(2重払い)がないことを、後述するメインチェーン内のトランザクションデータおよび、チェーンに接続せずに保持しているトランザクションデータと突合して確認する。
【0006】
各ノードは、正当と判断したトランザクションをまとめて、ブロックを構成する。
図1に、ブロックの構成を示す(
図1ではトランザクションをTxとして示している)。当該検証者が受信し検証済みの1つ前のブロック(メインチェーンの最上位のブロック)のHash値(
図1のPrev Hash)を付与し、当該一つ前のブロックに含まれる全トランザクションについても当該検証者が正当性を検証している、という証跡とする。図のNonceはPoW(Proof of Work)で用いる情報であるが、詳細は後述する。次に、利用者のノードの中から無作為に検証者を決定する。決定する方法は後述するPoWが使用されている。なおPoWの代替としてPoS(Proof of Stake)が提案されている。
【0007】
検証者のノードは、当該ブロックを、他の利用者のノードに転送する。他の利用者のノードは当該ブロックを受信すると、再度当該ブロック内のトランザクションの検証を行う。各トランザクションが正当であれば、当該ブロックのHash値が示すブロックに続く最上位ブロックとして保持する(以下、チェイニング)。また即時に、次のブロックを作成し、条件を満たすNonceの探索を開始する(Nonce探索の詳細は後述する)。
【0008】
ネットワーク内の転送遅延などの影響で、最上位ブロックの更新が伝わらず、古いブロックにチェイニングするブロックが遅れて到着する場合がありうる。その場合、各ノードは、チェーンを分岐し、遅れて到達したブロックを、セカンダリチェーン、分岐前のチェーンをメインチェーンとして保持する。検証者のノードはブロックをメインチェーンにチェイニングするため、多くの利用者がメインチェーンと認識した方のチェーンが長くなる。チェイニングされたブロックがメインチェーンに属する場合、そのブロックから最上位ブロックまでのブロックの繋がる数(ブロックの深さ)が大きくなるほど、当該ブロックの正当性と一貫性が、より多くの検証者に保証されたと考えることが出来る。Bitcoinでは、利用者間での合意が形成され、以降くつがえる可能性が低い安全な深さ(安全段数)として、深さ6を推奨している。
【0009】
なお、複数の利用者が結託し(以下、結託グループ)結託グループ内の利用者が連続して検証者に選ばれることに成功すると、過去に承認済みの支払いを以下に示す手順により無効にすることが出来る。
【0010】
結託グループ内の利用者の一人が、被害者に電子マネーを送金するトランザクション(以下正規トランザクション)を作成し被害者及び他の利用者に転送する。また、被害者に電子マネーを送金する前の時刻で、当該電子マネーを結託グループの別の利用者に送金するトランザクション(不正トランザクション)を作成する。次いで、当該トランザクションを含むブロックを作成し、前述の正規トランザクションを含むブロックより古いブロックにチェイニングし、チェーンを分岐する(正規であるメインチェーンと、不正なセカンダリチェーン)。ただし、当該ブロックは結託グループ以外には転送しない。なお、結託グループ内でブロックを転送する手段は任意のものを使用出来る。さらにセカンダリチェーンに続くブロックを作成する。こちらも結託グループ以外には転送しない。
【0011】
前述の生起ブロックを含むブロックの深さが十分深くなり、被害者が、当該正規トランザクションが広く承認されたと判断し、電子マネーの対価を結託グループに渡すと、結託グループは上記不正チェーンを構成するブロックを他の全利用者のノードに転送する。各利用者のノードは、不正チェーンを構成するブロック内のトランザクションを検証するが、各トランザクション(前述の不正トランザクションを含む)は正当(過去に同一電子マネーの支出はない)なため、前述のメインチェーンよりセカンダリチェーンの長さの方が長くなり、メインとセカンダリの立場が逆転し、前述の正規トランザクションは無効となる(支払いの不正取り消し)。
【0012】
ただし、「ブロックの深さが十分深い」と判断する深さ(安全段数)を長くすることで、等比級数的に、上記「支払いの不正取り消し」が成功する確率を低くすることができる。また、ネットワークの障害により、ある地域の利用者が他の利用者が接続するネットワーク(以下、インターネットとして記述する)から長時間孤立し、その後再接続した場合、以下に示す問題が発生する。
【0013】
第1に、孤立後、孤立したネットワーク内のメインチェーンが安全段数以上伸長し当該ブロックに含まれるトランザクションが確定したとみなされた後で、インターネットに再接続すると、確定したトランザクションが一旦不確定となってしまう。第2に、当該ネットワークがインターネットと孤立中に、双方のネットワークと接続する手段がある利用者のノードは、本来であればブロックを双方のネットワーク間で転送する必要がある。ところが、不正にブロックの転送を遮断し、代わりに同一電子マネーを異なる利用者向けに使用するトランザクションをそれぞれのネットワークに送信することで、不正な2重使用を実現できてしまう。
【0014】
このため、利用者のノードは、信頼する他の利用者や主要なWebサーバなどとのIP接続確認などの手段により、インターネットからの孤立を監視し、孤立中はトランザクションを生成しない(電子マネーの支払いを受け付けない)必要がある。
【0015】
利用者の中から無作為に検証者を決定する技術に、proof of works(以下、PoWと称する。)(例えば、非特許文献1及び2参照。)とproof of stake(以下、PoSと称する。)(例えば、非特許文献3参照。)がある。何れも検証者になると、報酬に電子マネーを与えることで、利用者が検証者になろうとする動機としている。ただし、ブロック生成毎に、検証者が無作為に選ばれるようにする仕組みに差分がある。
【0016】
PoWはBitcoinで使用されている技術である。PoWでは、検証者になろうとする利用者のノードは、トランザクションをまとめてブロックを構成すると、当該ブロックにNonceと呼ばれる一定の長さの任意のbit列を結合してHash計算を行う。Hash結果が予め設定されている上限値(difficulty-target)以下となるNonceを最初に発見(マイニング)した利用者のノードが検証者となる。検証者の上限値は平均検証時間間隔が10分になるように調整されている。当該ブロックを転送された他の利用者のノードは、Nonceを含むブロックのHash値を計算しdifficulty-target以下であることを確認できれば、当該ブロックの検証者のノードが無作為に決定されたと判断することができる。各利用者のノードは、正当なブロックを受信すると、当該ブロック受信までに受信したトランザクションを対象として、マイニングを開始する。
【0017】
現時点では、条件に合うNonceを逆計算により導出する方法は知られておらず、Hashが取りうる値を一つずつ変化させて、条件にあう結果になるか計算する必要がある。すなわち、使用する計算機の性能に比例して検証者となれる確率が増大する。なお、通常のトランザクションは、取引物の送り元と送り先の両方が必要である。ただし、検証者になると特別に、送り元が存在しない(ブランクな)一定量の電子マネーを検証者自身に支払うトランザクション(以下、コインベーストランザクション)を当該ブロックに含める事が可能になる(新しいマネーが発生することになる)。すなわち、当該コインベーストランザクションが、検証者になったことに対する報酬である。本技術には以下に示す問題がある。
【0018】
PoWにおける問題1:公平性の逸脱
PoWは、各利用者の利用可能な計算機リソースがほぼ同一であれば、各利用者が検証者になれる確率もほぼ同一となる。したがって、計算量に基づく公平性が保証された「くじ」と言える。しかしながら、検証者になれる確率が、当該利用者のもつ計算機リソースの量に比例するため、資金に余裕のある一部の利用者が計算機リソースに投資し、結果、公平性が損なわれる問題がある。
【0019】
PoWにおける問題2:処理量
PoWは、検証者になるためには条件を満たすNonceを発見する必要があるが、膨大な量の計算が必要であり、一般ユーザ向けの安価なスマートフォンやPCは、単独では検証者になることが困難である。また、計算のために膨大な量の電力の消費が必要であり、電力料金によっては報酬を上回る可能性がある。
【0020】
PoWにおける問題2に示す処理量の問題を解決することを目的とした技術に、PoSがある。PoSでは、電子マネーを多く持つ利用者は不正をしない、と仮定し、保有する電子マネーの量に基づく公平な「くじ」の実現をねらっている。PoSでは各利用者のノードは1秒毎に以下の計算(以下、富くじ)を行い、各利用者のIDが以下の式(1)を満たす場合(以下、富くじに当選)、検証者となる資格を得る(検証者候補)。
(数1)
Hash[前のブロックのHash値+自分のID+TS]<Stake/調整係数
…式(1)
【0021】
なお左辺はHash長をLとした時に、2^Lで除して0~1(double)の範囲に正規化されているものとする。TS(タイム スタンプ)は上記富くじを引く時刻(1秒単位)、Stakeは自分(当該ID)に紐づく電子マネーの総額である。調整係数は、当選確率を調整するためのパラメータである。
【0022】
TSがHashの入力にあるのは、1回の富くじで当選者が出ない場合、当選者が現れるまで再度富くじを引くためである。ここで、「+」はbit列の結合を意味する。あるデータのHash計算を行うと、その結果は当該データと相関のない値を取り、逆計算は困難である。よって式(1)のHashの入力値(前のブロックのHash、自分のID、TS)の全てが恣意的に選択出来ない場合、当該ブロックの検証者候補が無作為に決定されたと判断することができる。
【0023】
PoSでは利用者がもつIDは一人につき1つであり、トランザクション中に、送金後の送信元IDの持つ電子マネーの量Stakeが記載される。富くじに当たった検証者候補は、当該ブロックに報酬となるコインベーストランザクションを追加し、当該ブロックを全利用者に転送する。各利用者のノードは、受信したブロックについて、式(1)を計算し、式(1)を満たし、かつ、最初に当該利用者に到達したブロックを有効とする。すなわち、当該ブロックを作成した検証者候補が検証者となる。なお、利用者自身が自分のIDを作れるが、ID生成直後はStakeが0なため、IDの生成により不正に当選することは出来ない。以前にトランザクションを生成していないIDを除外する方法もある。
本PoS技術には以下に示す問題がある。
【0024】
PoSにおける問題1:検証者当選確率の不正制御
PoSでは、検証者のノードは、受信したトランザクションの中で、どれをブロックに加えるか選ぶことが出来る。n個のトランザクションについて、ブロックに加えるか除くか制御できる場合、当該ブロックのHash値を2^n個の中から選択することができてしまう。また新たなトランザクションを生成し、Hash値を変更することもできる。すなわち、今回当選した検証者が、結託者グループのメンバーであり、他の結託者のIDを知っている場合、他の結託者が次のブロックの富くじに当たる確率を制御できることになる。このため、結託者グループの誰かが運良く当選すると、当該グループの誰かが引き続く複数のブロックの検証者になれる確率を高くできる。PoSではお金持ちは不正をしない、と仮定しているので、連続してStakeが少ない検証者が当選している場合、不正があったと判断することが出来るが、どの程度有効に攻撃を検出できるか不明確である。また検証者が公正に富くじに当選しているにもかかわらず、不正があったと判断される可能性もある。
【0025】
PoSにおける問題2:転送遮断攻撃に対する安全性
ブロックチェーン技術では、ブロックは、利用者間で転送されて、全利用者に行き渡る。各利用者のノードは自分がメインチェーンの最上位と認めたブロックを、他の多くの利用者もメインチェーンの最上位と認めたほうが都合が良い(メインチェーン内で承認されれば、報酬を使用できるようになる)。このため、通常は、ブロックの転送を遮断する動機はない。ところが、PoSの式(1)の計算は、検証者候補以外でも実施することができる。このため、前のブロックを転送する利用者のノードは、転送先の利用者が当選するかどうか、転送前に評価することが出来るので、当該利用者へは当該ブロックを転送しないDoS攻撃が可能である。
【0026】
PoSにおける問題3:公平性の逸脱
本PoS技術では、保持する電子マネーが多いと、プログラムを起動しておくだけで、検証者に当選し、報酬を得ることができる。また、お金持ちは不正をしない、との仮説に基づいているため、お金持ちであれば不正に成功する確率が高いと言うことも出来る。
【先行技術文献】
【非特許文献】
【0027】
【文献】Nakamoto, Satoshi. “Bitcoin: A peer-to-peer electronic cash system.” (2008): 28.
【文献】Andreas M.Antonopoulos, “Mastering Bitcoin: unlocking digital cryptocurrencies.”,O’Reilly Media, Inc., 2014.
【文献】BitFury Group, “Proof of Stake vs Proof of Work,” http://bitfury.com/white-papers-research/page:2, Sept. 13, 2015.
【発明の概要】
【発明が解決しようとする課題】
【0028】
本開示は、PoWにおける公平性の逸脱及び処理量、並びにPoSにおける検証者当選確率の不正制御、転送遮断攻撃に対する安全性及び公平性の逸脱の問題を解決することを目的とする。すなわち、本開示は、検証者候補の当選がノードの処理能力に依存することなく公平であり、かつ検証者候補の不正制御や転送遮断攻撃を防ぐことを目的とする。
【課題を解決するための手段】
【0029】
本開示のノードは、
自新規ブロックに適用する自ノードの暗号化IDを、自ノードに固有のIDに秘密鍵を適用することで生成し、
他のノードと共通の演算式に、自ノードの暗号化ID及び前記新規ブロックを追加するブロックチェーンに既に含まれるブロックのうちの予め定められたブロックに格納されている暗号化IDを適用し、自ノードのHash値を求め、
自ノードのHash値を用いて自ノードが当選したか否かを判定する。
【0030】
本開示の当選者決定方法は、
ノードが、
新規ブロックに適用する自ノードの暗号化IDを、自ノードに固有のIDに秘密鍵を適用することで生成し、
他のノードと共通の演算式に、自ノードの暗号化ID及び前記新規ブロックを追加するブロックチェーンに既に含まれるブロックのうちの予め定められたブロックに格納されている暗号化IDを適用し、自ノードのHash値を求め、
自ノードのHash値を用いて自ノードが当選したか否かを判定する。
【発明の効果】
【0031】
本開示によれば、検証者候補の当選がノードの処理能力に依存することなく公平であり、かつ検証者候補の不正制御や転送遮断攻撃を防ぐことができる。
【図面の簡単な説明】
【0032】
【
図3】検証者候補の決定処理の一例を示すフローチャート。
【
図4】検証者の決定処理の一例を示すフローチャート。
【
図6】結託者による次回当選の予見を防ぐために必要なNの値の解析例。
【
図7】N=4の場合に次回当選の予見が実現する確率の解析例。
【
図8】pと平均連続当選間隔(年)の関係の解析例。
【発明を実施するための形態】
【0033】
以下、本開示の実施形態について、図面を参照しながら詳細に説明する。なお、本開示は、以下に示す実施形態に限定されるものではない。これらの実施の例は例示に過ぎず、本開示は当業者の知識に基づいて種々の変更、改良を施した形態で実施することができる。なお、本明細書及び図面において符号が同じ構成要素は、相互に同一のものを示すものとする。
【0034】
PoWとPoSの課題を同時に解決するためには、くじの結果を、くじを引く利用者のノードもそれ以外の利用者のノードも制御できず、また予見もできない必要がある。そのためには、各入力(入力1~入力m)は、以下を満たせば良い。
【0035】
(入力の条件)
入力条件1:各入力は、ブロック毎に、異なる値を取る。
入力条件2:どの入力の生成者にも、その値を操作できない。
入力条件3:くじを引く当事者のノード以外はくじを実施出来ない。
入力条件4:くじの結果は当該ブロックを生成する時刻の前に予見できない。
入力条件5:入力の生成者が公正に入力を生成したことを、他の利用者のノードが検証できる。
【0036】
そこで、本開示(以下、Proof of lucky ID、PoL)では、ディジタル署名の値は本人以外には導出できないことを利用し、複数のディジタル署名を入力としたくじ(以下「おみくじ」)を使用することで、誰であっても、結託していても、当選確率を制御できず、予見もできないくじを実現する。PoLのくじは、「おみくじ」と「抽選」の2段階で構成する。詳細を以下に示す。
【0037】
図2に、本開示に係るシステム構成の一例を示す。本開示に係るシステムは、複数のノード91がP2P(peer-to-peer)ネットワークで接続されている。ノード91は、コンピュータであり、例えば、処理部11、メモリ12、及び送受信部13を備える。各ノード91は、トランザクションデータの記録されたブロックチェーンを受信すると、ブロックチェーンのデータが正当かどうかを判定する。この際に、本開示に係るシステムでは、複数のノード91のうちのN台が検証者候補として当選し、検証者候補のN台のうちの1台のノードが検証者として選択される。
【0038】
本開示は、検証者候補の当選と検証者の選択において、各利用者に固有のID(Identifier)を用いる。このように、本開示では、第一に、Identityの実在性を保証するため、各利用者に、各利用者に固有のIDと公開鍵を供給する。なお、公開鍵をIDとして用いてもよい。本開示は、当該Identityに対応する唯一のIdentifierと公開鍵を各ノード91に供給することで、各利用者のIdentityを確認可能にする。
【0039】
本開示では、IDを単位として、検証者を公平に決定する。このため、公平性の根拠を保証できるIDの供給方式が必要となる。まずは、第1の方式は、ノード自身による供給である。Identifier(ID)は利用自身が生成し、年間の取引額が一定額以上など、検証者となれるIDの基準を決めておく。たとえば、コミュニティへの寄与量に基づく公平性が必要な場合などに適している。
【0040】
第2の方式は、IdPによる供給である。既存のIdentifier Provider (IdP)の機能を用いて、ノードのIdentityに1:1で対応するIdentifier(ID)を供給する。IdPは、IDを発行する機能を持つ、既存のPKI(Public Key Infrastructure,公開鍵暗号基盤)や、マイナンバーシステム、健康保険システム、銀行口座システム、電話会社、クレジット会社等の機能を活用可能である。なお、ブラインド署名技術と組み合わせ、IdPがノードのIdentityを確認後、ノードが公開鍵と取引用のIDを作成し、IdPがブラインド署名を行うことで、IdentityにリンクされないIDと公開鍵を用いた、匿名でのトランザクション実施も可能である。電子投票など、Identity単位での公平性が必要な場合や、マシンによる経済活動やマネーロンダリングなどへの不正利用を防ぎたい場合に適している。
【0041】
本開示では、第二に、検証者候補の決定に、式(2)に示す、Hash値と閾値の比較によるくじを使用する。以下、本実施形態におけるくじを「おみくじ」と称する。
(数2)
Hash[暗号化ID0+Lucky_ID1+Lucky_ID2+・・・
+Lucky_IDm+TS]<N/Num …式(2)
【0042】
ここで、暗号化ID0は自ノードの暗号化ID、Lucky_ID1~Lucky_IDmは、前回のブロックの検証候補者(「おみくじ」に当選したノード)の暗号化IDである。例えば、n段目の検証者候補のおみくじであれば、n-1段目のおみくじに当選したノードの暗号化IDである。Lucky_IDは、若番から並べて結合する、など順番を一意に決めておくことで、順番の操作による当選確率の操作を不可、とすることが好ましい。ただし、本開示では、おみくじに用いるLucky_IDは、n-2段目以前のおみくじに当選したノードの暗号化IDを用いてもよい。例えば、n-1段目に代えてn-2段目を用いてもよいし、n-1段目及びn-2段目の両方を用いてもよい。
【0043】
また、Numは利用者のノード数に相当する数であり動的に変更する(導出方法は後述)。閾値Nは一回のおみくじでの当選数の期待値を調整するパラメータであり、以下の説明ではシステム固定とする。TSは、PoSと同様、上記おみくじを引く時刻(例:1秒単位)である。各ノードの持つ時計はTSの単位時間に比べ十分小さい誤差の範囲で同期している必要がある。以下の例ではTSの単位時間を1秒として説明する。
【0044】
記号eは、bit列の結合やXORなど、入力を組合せることでランダム性が保証できれば任意の演算を適用して良い。なお左辺はHash長をLとした時に、2^Lで除して0~1(double)の範囲に正規化されているものとする。
【0045】
本開示に係るPoLでは、各利用者のIDとブロック番号を結合した値に対する利用者のディジタル署名値(以下、暗号化IDと称する。)をおみくじの入力として使用する。ブロック番号は、ブロックごとに異なる任意の値であり、例えば、チェーンの中でのブロックの段数である。ブロック番号は、利用者により操作できず、かつ、ブロック毎に異なる番号であればよい。ディジタル署名値は、公開鍵暗号方式の秘密鍵で暗号化した値である。
【0046】
暗号化IDは利用者のIDとブロック番号に対する署名なので、入力条件1及び入力条件2を満たす。またおみくじを引く利用者の暗号化IDも入力として使用するが、当該IDの生成には当該利用者の秘密鍵が必要なので、当該利用者以外には当該IDを生成できず、よって入力条件3も満たされる。さらに、当該利用者の公開鍵は公開されているので、当該暗号化IDが公正に生成されたことを任意の利用者のノードが検証することが出来き、入力条件5も満たされる。
【0047】
このように、本開示では、検証者候補のノードは作成したブロックに暗号化IDを含めることとし、前回の検証者以外の検証者候補の暗号化IDも、後述の仕組みにより「おみくじ」の入力として使用することが必要になるようにする。このため、たまたま結託者グループ中のある利用者がおみくじに当選したとしても、次のおみくじでは結託者以外の利用者の暗号化IDも入力になる可能性がある。結託者以外の暗号化IDを、結託者は事前には知りえないため、連続当選の予見が困難になる。したがって、本開示は、入力条件4を満たす。
【0048】
また、複数の検証者候補から検証者を決定する方法が、PoWとPoSでは、早い者勝ちである。一方、本開示に係るPoLでは一定時間の間におみくじに当選した検証者候補のなかから、ランダムに当選者を決定する(以下、「抽選」と称する。)。抽選では、使用した入力の数が最も多い検証者候補を検証者とすることが好ましい。これにより、検証者になろうとする利用者のノードは、前回の検証者以外の検証者候補の暗号化IDを全ておみくじの入力とすることが必要になる。多くの場合は入力の数が複数であり、そのような場合は、ランダムに当選者を決定する。「抽選」については後述する。
【0049】
図3に、n-1段目の検証者候補が4つ、n段目の検証者候補が2つになった場合の、おみくじと抽選の例を示す。本図では、n段目の抽選でn-1段目の検証者を決定するように表現している。
n-1段目の検証者候補のノード91は、ブロックに暗号化IDを含め、全利用者(1~k)のノード91に配布する。なお、利用者数kは任意である。
各利用者(1~k)は、n-1段目とn段目の境界のおみくじ予定時刻を過ぎると、n-1段目の検証者候補が作成したブロック受信の受付を開始する。当該ブロックの総数が、閾値N(例えば、2)を超えると、当該時刻(1秒刻み)で検証者候補からのブロック受信を締め切る(本例では合計4個)。なお、ネットワーク内の伝搬遅延によるチェーンの分岐を防ぐため、ブロックの送信は1秒内(TS単位時間内)で締め切り、受信は伝搬遅延の最大値分遅れて締め切っても良い。
次に、抽選(
図3の(1))によりn-1段目の検証者を選択し、n-1段目のブロックチェーンに接続する。
【0050】
次のおみくじ予定時刻になると、各利用者(1~k)は、n段目の検証者候補決定のため、前回の4つの検証者候補の暗号化IDと自分自身の暗号化IDを用いておみくじを引く。
図4に、おみくじを含む処理の一例を示すフローチャートの一例を示す。
【0051】
各ノード91は、自ノードの暗号化IDを生成し(S101)、式(2)の左辺で示す自ノードのHash値を求め(S102)、式(2)を用いて自ノードが当選したか否かを判定する(S103)。式(2)を満たせば検証者候補に当選したことになる。
【0052】
ここで、自ノードの暗号化IDの生成S101は、例えば、処理部11が、自ノードに固有のIDに秘密鍵を適用して利用者IDを生成し、利用者ID及び新規ブロックのブロック番号を用いて生成する。自ノードのHash値(S102)は、他のノードと共通の演算式に、自ノードの暗号化ID及びブロックに格納されている暗号化IDを適用することで、求める。ブロックに格納されている暗号化IDは、新規ブロックを追加するブロックチェーンに既に含まれるブロックのうちの予め定められたブロックに格納されている暗号化IDである。
【0053】
自ノードが検証者候補に当選した場合、自ノードの暗号化IDを格納した新規ブロックを、他のノード91に配信する(S104)。例えば、自身の暗号化IDを含めてブロック化し、全利用者のノード91に配布する。
【0054】
おみくじにあたっていない各利用者のノードは検証者候補の数が閾値Nを超えるまで、1秒刻みで再度おみくじを引く。
図3では利用者1と利用者kが検証者候補となり、閾値N(本例では、2)以上となったので、各利用者(1~k)は新規ブロックの受信を締め切っている。
【0055】
閾値N(本例では、2)以上となると、各ノード91は、抽選を行う。
図5に、抽選を含む処理の一例を示すフローチャートの一例を示す。
各ノード91は、n+1段目の処理で、N段目の新規ブロックを受信すると(S201)、当該新規ブロック内トランザクションの検証に加えて、当該新規ブロックの暗号化IDが正当か、当該新規ブロックの公開鍵により検証する。また、当該新規ブロックのおみくじで使用されたLucky_IDがN段目の処理で正当と判断された暗号化IDのリスト(後述のLucky_IDリスト)に含まれるか検証する(S202)。上記検証の結果正当でないと判断された新規ブロックは廃棄する(S203)。
【0056】
正当な新規ブロックの暗号化IDをN+1段目のLuck_IDリストに記録する(S204)。締め切り時刻を過ぎかつ正当と判断した新規ブロックの数が閾値を超過するまで、新規ブロックの受信を受け付ける(S205)。なお締め切り時刻はTSの単位時間を単位として延長する。新規ブロックの受付を締め切ると、Lucky_IDの数が最多のブロクが一つであれば(S206)、当該新規ブロックを検証者の新規ブロックとして、ブロックチェーンに接続する(S207)。Lucky_IDの数が最多のブロクが複数の場合、抽選を行い(S208)、抽選で選択された検証者の新規ブロックを、ブロックチェーンに接続する(S209)。
【0057】
抽選S208においては、各ノード91は、各ノード91に共通の式に、受信した各新規ブロックに格納されている暗号化IDを適用し、暗号化IDのなかから1つを選択する。これにより、各ノードにおいて、共通の検証者が抽選によって選択される。例えば、各利用者のノード91は、抽選により利用者1を検証者として選択する。
【0058】
なお、複数(閾値N以上)の検証候補者の中から検証者を決定する抽選方法は以下の条件を満たすことが好ましい。
・各利用者が受信した検証者候補(複数)が同じであれば、各利用者が決定した検証者は同一になる。合意形成のためである。
・検証者候補数がb個の場合、当選確率は常に1/bであり、1/bより大、あるいは小にならない。連続当選を予見不可とするためである。
・検証者候補も、当該候補が生成した新規ブロックを中継する利用者も、当該検証者候補が当選あるいは落選することを、締め切り時刻まで予見できない。転送遮断攻撃を不可とするためである。
【0059】
例えば、各利用者のノード91は以下の計算で抽選を行い、検証者を決定することができる。受付時間内(後述)に受信し、公正であると検証できたn段目の新規ブロックを作成した検証候補者の暗号化IDを若番からソーティングし、結合してHashを計算し、ブロック数(m)で割った余り+1を計算する。そして、若番から数えて当該数値(余り+1)番目の新規ブロックの検証者候補を検証者として決定する。
【0060】
上記手法は、同じ検証者候補の新規ブロックを受信した全利用者が同じ候補を選ぶことになる。また、暗号化IDと抽選の当選は、相関がないことが保証されている。例えば、暗号化IDが大きいほど当選しやすい、といった傾向はない。さらに、検証者候補の暗号化IDが全て揃うまでどの候補が選ばれるか予見出来ない。
【0061】
なお、PoSでは1秒ごとに富くじを引いて、平均ブロック間隔約10分を実現している。本開示に係るPoLの場合、ブロック毎に初回のおみくじを引く時刻(以下、おみくじ予定時刻)の間隔を一定(例えば10分)とすることが好ましい。
【0062】
おみくじ実施後、検証者候補からの新規ブロックの受信を受け付ける時間(式(2)のTSの単位時間)は、ネットワーク内の往復伝搬遅延時間の最大値より大きければ十分である。以下の例では1秒として示す。なお、本開示に係るPoLでは、PoSと同様に、各利用者のノードの持つ時計はTSの単位時間に比べ十分小さい誤差の範囲で同期している必要がある。
【0063】
式(2)に含まれるパラメータのNumは、PoWのdifficulty-targetに相当するパラメータである。このパラメータについては、利用者毎にそれぞれのチェーンについて、同一のアルゴリズムにより計算し、同一のチェーンに対して同一の値を使用する。例えば、PoWにおけるDifficulty-targetの増減と同様に、以下の計算により求めることができる。
【0064】
1回のおみくじ当たりの当選数の平均値とパラメータNを比較し、平均値の方が大きければ当該チェーンのNumを大きくし、平均値が小さければNumを小さくする。ここで、1回のおみくじ当たりの当選数は、例えば、「各回の抽選で入力としたブロック数」/「実施したおみくじ回数」で求めることができる。平均値は、1定期間毎(1日など)の加算平均や指数移動平均を用いることができる。
【0065】
本開示に関連するPoWやPoSでは、早い者勝ちで検証者を決定するので、ネットワーク内の伝搬遅延時間に起因するブロックの分岐が常時起こりうる。このため、ネットワークの孤立がありえない状況でも、分岐したブロックを合流させる仕組みが必要である。ところが、受信の締め切りを伝搬遅延時間の最大値だけ遅らせることで、ネットワークの孤立が発生しない状況では、ブロックの分岐は発生しない。よって、そのような状況ではブロックを合流させる仕組みは不要である。
【0066】
ただし、本開示に係るPoLにおいても、ネットワークが一旦2つに分断し、複数のブロックがそれぞれで検証され、チェーンが長くなった後に再びネットワークが合流した場合に備えて、各利用者が同じチェーンをメインチェーンとして合意する仕組みと、合流後に同一利用者が異なるチェーンに接続する複数のブロックを作成しない(させない)仕組み(後述)を追加することができる。
【0067】
本開示に関連するPoWは、利用者が検証者となる確率の逆数に比例するdifficulty-target(Nonceを計算する条件となる、Hash値の上限)をブロック内に記録し、当該difficulty-targetの合計が大きい方のチェーンをメインチェーンとすることで、前者を実現している。また、PoWではブロック作成時に必要なマイニングのための処理量(消費電力)が抑止となっている。(セカンダリチェーンに接続するブロックを作成するために消費電力代を支払っても、報酬を貰える可能性は低い)
【0068】
本開示に関連するPoSでは、Stakeが大きい利用者は不正をしないと前提を置いているので、各ブロックのStakeの合計が大きい方のチェーンをメインチェーンとすることができる。ただし、同一利用者が異なるチェーンに接続する複数のブロックを作成しない(させない)仕組みはない(PoWの消費電力のようなペナルティがない)。このため、結託者が不正のために分岐させたチェーンに、結託者以外の利用者がブロックを接続してしまい、不正が成功する可能性が高い問題がある。
【0069】
そこで、本開示では、不正にチェーンを分岐することによる支払いの不正取り消し攻撃を避けると同時に、不正なく孤立したネットワークの合流を可能とするため、以下の構成を備えることが好ましい。
【0070】
例えば、おみくじに当たった幸運が大きい方のチェーンを勝者とする。具体的には、各検証者がおみくじに使用したNumをブロック内に記録し、チェーンを構成するブロックとおみくじの入力として使用したブロックの全てのNumの合計を計算し、当該Numの合計が大きい方(おみくじが当たりにくかった方)のチェーンをメインチェーンとする。ただし、結託者グループによる不正なチェーンの切り替えを防ぐため、メインチェーンのNumがチェーン分岐時の値の一定比率以下(例1/2以下)になっていた場合に限り、メインチェーンとセカンダリチェーンの切り替えを可能とする。不正なく、小数の利用者グループのネットワークが孤立し、その後分離前のネットワークと再結合すると、孤立したネットワークの利用者の管理しているメインチェーンのNumが実際の利用者数に応じた値に小さくなってから当該グループのメインチェーンは交代する。なお、結託者は、ネットワークを不正に孤立化した後での、結託者グループ内での当選数を予見することは可能だが、非結託者の当選数を予見することは出来ないので、結託者グループによる不正なチェーンの切り替えを防ぐことができる。
【0071】
さらに本開示では、結託者以外の利用者が、不正なチェーンに接続するブロックを作成させないために、以下のような仕組みを備えることが好ましい。
・第1の仕組み:抽選の際に、メインチェーンに接続するブロックとセカンダリチェーンに接続するブロックがあった場合、それぞれ個別に抽選を行う。ただし、同一利用者が生成したブロックが複数あった場合はすべて無効とする。
・第2の仕組み:おみくじの入力として使用する暗号化IDは、メインチェーンとセカンダリチェーンの双方で抽選したものを全て含める。
【0072】
本開示に係るPoLでは、第1の仕組みにより、同一利用者が異なるチェーンに接続する複数のブロックを同時に作成できなくなる。さらに、第2の仕組みにより、同一利用者が異なるチェーンに接続する複数のブロックを交互に作成することも防ぐ。なぜなら、PoWやPoSでは、メインチェーンとセカンダリチェーンのそれぞれについて検証者となれるタイミング(マイニングの成功や、富くじでのあたり)が独立だが、本開示に係るPoLの場合上記の仕組みにより、独立ではない。正当な利用者のノードはおみくじに当たった場合、前述のように、メインチェーンを選択する。不正に作られた端末であれば、作成したブロックをセカンダリチェーンとメインチェーンのどちらに接続するか選択可能だが、メインチェーンを選択したほうが有利になる。(次の検証者が公正な端末であれば、セカンダリは選択されず、当該の不正端末は報酬を見逃す可能性が高くなる)
【0073】
なお、上記例では暗号化IDでブロック番号を使用しているが、それ以外でも、当該暗号化ID生成時に、生成者が変更できず、また当該暗号化IDを受信した者が正しい値を知っている番号であり、また、ブロックの段数毎に異なる番号であれば適用可能である。例えば、ブロック生成の周期時間で量子化したタイムスタンプを使用しても良い。また、IdPなどから全利用者に対して乱数の供給があれば、それを用いても良い。
【0074】
また、上記例では式(2)の入力に、1つ前のブロックの暗号化IDと検証者になろうとする利用者の暗号化IDとTSのみを使用しているが、過去のメインチェーン上のブロックが使用した暗号化IDを含めてもよい。例えば、メインチェーン上の各ブロックがおみくじに使用した全ての暗号化IDのXORを入力とすれば、データ量は増えない。
【0075】
また、上記説明では、IdPが利用者にIDと公開鍵を配布する実施例も説明しているが、その場合、トランザクションの実施者とIdentityの対応が全利用者に公開される。ただし、ブラインド署名技術と組み合わせ、IdPが利用者のIdentityを確認後、利用者が公開鍵と取引用のIDを作成し、IdPがブラインド署名を行うことで、IdentityにリンクされないIDと公開鍵を用いた、匿名でのトランザクション実施も可能である。
【0076】
(本開示の効果)
本開示により、PoWおよびPoSの課題を同時に解決し、公平で安全な分散合意形成が実現できる。本開示は合意形成に、IdPによりIdentityの実在が確認されたIDを使用可能であるため、マネーロンダリングや、マシンによる取引を防ぐことが出来る。また、一人一票であることの保証が必要な、電子投票へも応用が可能である。
【実施例1】
【0077】
本実施例では、「おみくじ」を、連続実施ではなく、ほぼ1回の実施で当選者がでるように当選確率を高くする。これにより、結託者は、非結託者が「おみくじ」に当選しないことを予見できなくなる。ただし、おみくじの当選者が結託者グループから多数出ることを予見できた場合、非結託者がおみくじに当選しても、結託者が連続して検証者になる確率が高くなってしまう。このため、ブロック間の接続構造を一次元のチェーンから二次元に拡張し、「おみくじ」の入力に、前回の検証者以外の検証者候補のLucky_IDも含めるようにする。これにより、結託者の当選者数にかかわらず、以降の予見を無効にすることができる。
【0078】
結託者グループ(全ノード中の比率p:0<p<1)が、今回のおみくじでグループ外のノードに当選者がいない場合、次回のブロックのおみくじで結託者メンバがH個以上当選する、と予見したとする。Hが大きいほど、高い確率で、それらの何れかが次回ブロックの検証者になる。H>>Nの場合でも、Nの値を適切に選ぶことで、結託者の誰かが次回ブロックの検証者になる確率をp以下とできることを示す。
【0079】
(1)次回当選予見を防止するNとpとの関係
非結託者の当選者数がk個となる確率Q(k)は、式(3)のポアソン分布に従う。
【数3】
k=0、λ=N(1-p)を代入すると、Q(0)=e
-N・(1-p)となる。この値(非結託者から「おみくじ」の当選者が出ない確率)がpとなるときのNを求めると-N・(1-p)=log p、よって求めるNは、
(数4)
N=-log p/(1-p)・・・・式(4)
となる。式(4)のpとNとの関係を
図6に示す。Pを対数とした片対数グラフで表現している。
【0080】
pが0に近づくとNは無限大に発散する。Nを大きくとると、ノード間で転送が必要なブロック数がN倍になるため、N=3~4程度が現実的と思われる。N=4とすると、結託者の比率pが0.02以下の領域では、結託者が連続当選を予見できた場合、結託者の比率pよりも高い確率で実現することになる。
【0081】
N=2、3、4とした場合に、結託者比率pと次回ブロックの当選の予見が実現する確率(非結託者が次回の「おみくじ」で当選者ゼロの確率Q(0)=e
-N・(1-p))の関係を
図7に示す。両対数グラフで表している。なおQ=pを破線で目標値として示している。
【0082】
N=4とすると、p<0.02の領域では、次回の連続当選が予見できた場合、その予見が実現する確率はpよりも大きくなるが、高々0.02程度である。p→0で、Q(0)=e-4=0.0183...に漸近する。N=3とすると、p=0.06でQと一致する。なお、N=3で、既存のbitcoinと同様に安全段数を6とすると、6回の連続当選を予見できたとして、それが実現する確率は0.06^6=4.67×10-8となる。
【0083】
(2)連続当選頻度
結託者グループの1回の「おみくじ」の当選者数期待値λ=N・pなので、m回連続してN人以上の当選者が出る平均間隔I(m)は式(5)となる。m=2、ブロック生成間隔=10分とし、p、NとIの関係を
図8に示す。
【数5】
【0084】
N=4の場合、p=0.02の場合の平均連続当選間隔は743万年、N=3、p=0.06で26.3年、N=2、p=0.2で約2日となった。なお、N=3で6回の連続当選が発生する平均間隔は5.05E13年(50兆年)である。よって事実上、N=3または4で十分と考えられる。
【実施例2】
【0085】
本実施例では、ネットワーク孤立の検出について説明する。
PoWでは、Nonceの発見間隔が平均値より著しく長くなった場合、ノードの数に変化がない、と言う仮説についてp値検定を行い、インターネットから孤立している可能性を検出することができる。例として、Nonceの平均発見間隔が10分で安定していた後で、発見間隔が40分に変化した場合を想定する。ノード数が25%に変化した場合に相当する。ノードの数に変化がないという仮説について、危険率5%で判定可能となる平均時間を、以下に示す。Nonceの発見間隔がt・10分未満となる確率F(t)は、式(6)の指数分布の累積分布に従う。
(数6)
F(t)=1-e-λt …式(6)
【0086】
λは10分あたりの平均Nonce発見数=1となる。F(t)=0.95を解くとおおよそt=3.8となる。すなわち、危険率5%で約40分の時間を要する。危険率1%で判定する場合は、80分程度必要となる。このため、インターネットからの孤立に気づかずにトランザクションを作成してしまい、その後インターネットと接続後に当該トランザクションが無効になる危険がある。
【0087】
これに対し、PoLでは、ブロック作成後、一定時間経過してから、当選数の期待値がNの「おみくじ」を実施する。周期を10分とすると、1秒あたりの当選数期待値は、PoWのN*600倍となる。すなわちサンプル数が非常に大きいので、PoWよりも素早く、正確に、インターネットからの孤立を検出可能である。例えば、1秒あたりの当選数が連続して1以下(ノード数が約25%)になったときに、ノードの数(Num)に変化がない、と言う仮説についてp値検定を行ったとする。単位時間あたりの当選者数がλ個の場合に当選者がk個となる確率は、式(3)のポアソン分布に従う。N=4とするとλ=4になるので、P(X=0)=e
-4、P(X=1)=4・e
-4となる。よって、1秒あたりの当選数が1以下の確率はおおよそ0.1となる。よって危険率5%で2秒、1%でも3秒(前回のくじから測っても10分+3秒)程度で、インターネットから孤立している可能性がある、と判断可能である。PoWとPoLの計算結果を
図9に示す。
【産業上の利用可能性】
【0088】
本開示は情報通信産業に適用することができる。
【符号の説明】
【0089】
11:処理部
12:メモリ
13:送受信部
91:ノード