暗号通貨の合意形成、PoW (Proof of Work) の仕組み図解。PoW はブロックチェーンをどう強化するか?

Proof of Work ブロックチェーン解説

ビットコインやイーサリアムなどの暗号通貨は分散型台帳を使うため、世界中の匿名参加者で、世界中の価値のやりとりを一緒に記録していく必要があります。

 

一人(一社) が独断で記録するなら簡単ですが、全員で一つの台帳を記入するからこそブロックチェーンの価値があります。

ブロックチェーン ノード

 

もちろん、世界中の全ノードで「正しい記録台帳」を一つに決定していく必要があるため、「どんな方法で “これが正しい台帳” と判断するか」をよく考える必要があります。

 

今回ではブロックチェーンの台帳記入方法の代表である Proof of Work (PoW) の概要に加え、

 

  • 実際にどんな計算をしているか
  • それにより、ブロックチェーンで何が可能になるか

 

を技術的詳細を抜きにして、正確に把握してもらえるように書いていきます。

 

Proof of Work (PoW) の概要

Proof of Work こそ、ブロックチェーンの元祖であるビットコインで採用された合意形成プロセスです。一般的には最も基本となるコンセンサス・アルゴリズムだと考えられています。

コンセンサス・アルゴリズム…ブロックチェーンで「台帳の記入と、どれが正しい台帳かをどのように合意して決めるか」というアルゴリズムを、一般的にコンセンサス・アルゴリズムと呼ぶ。PoWやPoSのこと。

 

Proof of Workを採用している主な通貨は、

  • Bitcoin (BTC)
  • Bitcoin Cash (BCH)
  • Ethereum (ETH) ※PoSへ移行予定
  • Ethereum Classic (ETC)
  • Litecoin (LTC)
  • Monero (XMR)
  • Zcash (ZEC)
  • DASH (DASH)
  • MonaCoin (MONA)

などがあります。古くから存在したり、安定した通貨にはPoWを採用するものが多いです。

 

Proof of Workの元祖 Hashcash

Proof of Workはブロックチェーンやビットコインの文脈で初めて登場する概念ではなく、DoS攻撃やスパムを防ぐための古くからあるコンセプトです。ビットコインの誕生である Satoshi論文にも “Proof-of-Work” の章で、 最初の PoW コンセプトを採用した Hashcash に簡単に触れられています。

 

1997年に、メールのスパム攻撃を阻止するため、Proof of Work を採用した Hashcash が提案されます。これは無差別のスパム攻撃を予防するため、「送信者がメッセージを送る前に、ほどよいCPUパワーを消費しなければならない」というシステムです。「CPUを消費した」ことを証明するスタンプがメールのヘッダーに追加された場合のみ、メールを問題なく送信することができます。メールの送信ごとに Work (仕事) を求めるのです。

 

Hashcashの PoW

メールにおける Proof of Work の略図。送信者は “Solve” で計算リソースを消費する

 

一通ごとにCPUを消費することはスパマーにとって多大なコストになるため、彼らはこの制度では攻撃を控えるはずです。従って、Proof of Work (仕事の証明)「送信者はスパマーではない」という証明となります。

「メールを本当に送信したいのなら、送信者は適度な CPU の消費も厭わないはず」という仮定のもと成立しています。

スパム防止の解決策としては優れていますが、善良なサービス利用者にまで計算リソースを要求する点で社会的には非効率な方法です。

 

PoW では何を計算しているのか?ハッシュ値、Nonce (ノンス) などの解説

最初に登場したブロックチェーンであるビットコインでは、「台帳記録の正確性を、いかにして一つに決定するか」という合意形成プロセスに Proof of Work のコンセプトを採用することにしました。

以下の説明はビットコインを例とした説明です。同じ PoW でも細かな点はブロックチェーンでそれぞれ異なることに注意してください。

 

これはビットコインのブロックに書かれた情報の一部の図です。

Proof-of-work

世界中に散らばるマイナーは、ブロードキャストされた取引履歴をいくつか束ねてブロックに書き込み、チェーンの次のブロックとしてそれを追加しようとします。正当なブロックチェーンは世界に一つであるため、次のブロックを繋げる権利はどのマイナーにあるのか、競争を行います。 (次のブロックを繋げるのは誰だ?)

最初に正当なブロックを接続できた一つのマイナーだけがビットコインの報酬を受け取ることができるため、一瞬の休みなくハイレベルな競争が行われています。

マイナーの競争

 

しかし簡単にブロックを繋げられるわけではありません。ここからが Proof of Work (仕事の証明) の始まりです。

ブロックに書き込まれる情報の代表的なものには以下があります。(細かな他の要素は除外します。)

 

  • 前のブロック情報のハッシュ値
  • ブロックに詰め込んだトランザクション情報
  • Nonce (ノンス, Number used once, 使い捨て番号)

 

ハッシュ値…ある数や文字をハッシュ関数に通してぐちゃぐちゃに出力されたもの。もとの数字が少しでも変わると全く違うハッシュ値が出る。

「もとの数からハッシュ値はすぐ計算できるが、ハッシュ値からもとの数を計算で求めることはほぼ不可能」という性質がある。

例: ポテトをハッシュポテトにするのは非常に簡単だが、ハッシュポテトからポテトにするのは不可能。

 

まず、ブロックはチェーンとして連続性を持って繋がるため、前のブロックの情報 (のハッシュ値) が入力されている必要があります。前のブロック情報が参照されたブロックしか認められないからこそ、台帳の整合性を破壊する二重支払い (ダブルスペンディング) の危険を回避しているのです。

 

そして、ブロックに詰め込んだトランザクションの情報はいくつかまとめてブロック内に書き込まれています。

 

最後の Nonce (ノンス) はスパイスのようなもので、マイナーが勝手に加える数字です。

 

マイナーはこの3つ情報を混ぜてハッシュ関数に入力し、そのハッシュ値を出力します。そして、そのハッシュ値の数字がネットワークが指定する数字 (target) より低いものが出た場合のみ、ブロック接続の成功となります。

「target より低いハッシュ値を出す」ということは主に「ハッシュ値の先頭にいくつ 0 を並べるか」という問題になります。

 

Bitcoinネットワークが「ハッシュ値の最初に 0 が10回続くように調整せよ」と指定している場合は、その条件を満たすまで Nonce を変えてひたすらハッシュ値の出力を繰り返します。ブロックに書き込まれる情報では Nonce のみが勝手に変更してもよい数字ですので、とにかく Nonce を微調整して正解が見つかるまで試行を繰り返します

 

Nonce, ナンスの発見

 

一定数の 0 のことを ”Difficulty, (難易度)” と呼びます。例えば、最初の1桁だけが 0 であるハッシュ値を求めるより、最初の10桁が 0 が続くハッシュ値を導くほうが遥かにマイナーにとって難問です。この Difficulty は、1つのブロックの生成が約10分になるように2016ブロック生成ごとに調整されます。当然、マイナーの計算性能は高まってくるので難易度は徐々に高くなることが多いです。

 

この Nonce の見つけ方に効率的な方法は存在せず、マイナーは条件を満たす Nonce の発見のために総当たりでハッシュ値を変更していく必要があります。

ハッシュポテトからポテトに戻すことが不可能なように、ハッシュ関数の性質上、正解のハッシュ値から Nonce を逆算することも現在の数学では不可能です。

 

つまり、一瞬で何通りもの Nonce の試行錯誤ができるコンピューターが有利です。

例えば51万2345番目のブロックを繋げたい場合、51万2344番目のブロック情報に加えて取引履歴を取りまとめ、スパイスである Nonce を自由に付け加え試行錯誤、指定された 0 が続くハッシュ値を見つければ採掘成功、それを全ネットワークに知らせます。

他のノードがそれを認めれば、ネットワーク上で正式な 51万2345番目のブロック生成者と認められ、暗号通貨 (Bitcoinなら BTC) の報酬を受け取ることができます。

当然、普通は他のマイナーに先に発見される可能性の方が高いため、大抵は受信した51万2345番目のブロックを参考にしてすぐに 51万2346番目の Nonce の探索に移ります。

 

前のブロック情報が組み込まれたハッシュ値により接続するので、時間的な連続性が確保されます。これにより、並行して行われた決済 (二重支払い) の矛盾を防止しています。

 

以上が代表的なブロックチェーンの合意形成プロセス、Proof of Work (仕事の証明) の概要です。ビットコイン以外のPoWブロックチェーンは少々データ構造が違うことに注意してください。

 

Proof of Work の優れている点の一つとして、「Nonce の発見には多大な労力が求められるが、周囲がその正しさを検証するのは簡単である」という性質を利用している点です。マイナーに労力を求めることができ、なおかつその「仕事の証明」は他者が簡単に検証できるわけです。

 

ブロックのフォークにどう対処するか?

ブロックの生成に成功して報酬をもらえるのは一つのマイナーのみですが、たまに同じ場所に2つ以上のブロックが繋がれ、チェーンが分かれてしまうこともあります。2つのマイナーが微妙な時間差で、それぞれ条件を満たす Nonce を見つけることもあるからです。

チェーンが分かれることを、その見た目から “フォーク” と呼びます。ここで話すフォークはよく聞く “ハードフォーク” などの言葉とは異なるので注意してください。

 

しかし2つに取引台帳が別れれば決済に矛盾が生じるため、当然たった一つに決定されなければなりません。

 

Proof of Work はその場合、最も仕事 (計算パワー) が注入されたチェーンを正当とみなす」というルールに従います。

 

proof-of-workの仕組み

このルールは、世界中に散らばるマイナーの “多数決” ではなく、“計算パワーが最も多かったもの” であることに注意です。パブリックブロックチェーンでは、誰でもいつでもネットワークに参加/離脱できるため、そもそも総数を把握することが困難です。民主主義よりも株主総会型の合意方法です。

 

「最も仕事 (計算パワー) が注入されたチェーンを正当とみなす」ということは、「最も長いチェーンを正当とみなす」と同義です。各ノードは、自分が正しいと思う方のチェーンを記録すればよいし、マイナーは正しいと思うチェーンに沿って Nonce の発見を続ければよいわけです。

 

※2つのマイナーからそれぞれ同じ番号を持つ異なるブロックが送信された場合、基本的には以下の順番でチェーンの生成は進みます。

 

  1. 2つのマイナーがそれぞれ、自分のブロックの正当性をネットワーク全体に知らせる
  2. 他のマイナーは最初に自分が受信したブロックを正当と見做し、それを前提として次のブロックの採掘に移る。多くの場合はこれで問題ない。
  3. しかしもう一方が最長となった場合に備え、2番目に到着したブロック情報も保存しておく
  4. 仮にもう一方が最長になれば、今まで記録していたチェーンを廃棄し、乗り換えて記録を続ける

 

あるブロックの採掘競争に負けた他のマイナー (ノード) は、悔しさのあまり他人が成功したブロックを承認したくないでしょう。しかし正当に採掘されたものを無視すると、他の大多数の誠実なノードはそれを前提にチェーンを形成していくため自らが乗り遅れることになります。

従って、素直に採掘された新規ブロックを承認し、切り替えて次のブロック作成に移ることが最適解になります。

 

ブロックチェーンの PoW は、データの改ざんを困難にする

Proof of Work は上記のような「正当なチェーンの決定方法」を採用しますが、この仕組みはブロックチェーンに Immutability (不変性, 改ざん耐性) を与えています。一度ブロックチェーンに取引履歴が書き込まれれば、それは取り消したり、改ざんしたりできないという意味です。

 

カード会社など第三者に依存した決済方法ならば、彼らは自らに不都合な決済 (不正利用等) を独断で取り消します。また、国家が個人の自由を侵害し、国外送金を取り消すかもしれません。それら第三者の影響から逃れるための Immutability です。

 

例えば、PoWのブロックチェーンの台帳を書き換えて不正に通貨を取得したり、支払いを取り消そうとする攻撃者を仮定します。(攻撃者は、特定の政治犯の財産を差し押さえたい国家かもしれません。)

 

しかし全てのブロックは直前のブロック情報を参照し、ハッシュ値を調整しています。従って仮に彼らが過去の任意のブロックを書き換えようとすれば、それ以降の全てのブロックが不正となってしまいます。書き換えたければ、そのブロック以降の全ての PoW をやり直すことが必要になります。

 

Satoshi Nakamoto” 過去のブロックを修正するためには、攻撃者は該当ブロックに加え、それ以降の全ブロックのproof-of-workをやり直し、誠実なノードの仕事においつき、追い越さなければなりません。

Satoshi Nakamoto  4. Proof of Work より引用

 

「そんなハッシュパワーを持っているのなら誠実に PoW に参加したほうが儲かる」ため、攻撃者の意思を削いでいます。

ハッシュパワー…Nonce を見つけるための計算力のこと。単位は hash/s であり、例えば1秒に約24兆回を計算するマシンも珍しくない。つまり、0が続くハッシュ値を見つけるため、1秒に24兆通りの Nonce を試している。
1台あたり24兆回/秒のハッシュ計算をするGMOのマイニングマシン
GMOインターネットは6月5日に記者向けの発表会を開催し、2018年6月6日から販売が開始される7nmプロセスの半導体チップを搭載したマイニングマシン「GMO マイナー B2」について、性能や価格などの情報を公開した。

 

  1. ブロック生成をやり直し、誠実なチェーンを追い越すことは大量の計算リソースを投入しない限り、ほぼ不可能
  2. それをやるなら誠実になった方が儲かる

 

Proof of Work はこの2点を持って、ブロックチェーンを「改ざんが著しく困難なデータベース」にしています。

こういった、セキュリティを担保している PoW 等のメカニズムを、 Cryptoeconomics と呼んだりします。

 

ブロックチェーンの改ざん耐性

 

上記で記述しているのは全て「無許可でネットワークに参加できるパブリックブロックチェーン」についての話です。許可が必要な、閉じた世界のプライベートブロックチェーンやコンソーシアム型ブロックチェーンでは全く話が変わってきます。

プライベートブロックチェーンやコンソーシアム型ブロックチェーンでは、そもそも PoW など必要ありません。

 

 PoW ブロックチェーンと暗号通貨は切り離せない関係

ビットコインなどの PoW ブロックチェーンでは、世界中から匿名で、いつでもマイナーとしてネットワークに参加できます。誰でも今すぐに取引記録を台帳に記入できるわけです。

 

もちろんマイニングには Nonce を見つけるための膨大な計算リソースが求められるためボランティアでは困難です。そこで、採掘者に bitcoin (BTC) のインセンティブを与えています。

2018年11月現在では、採掘成功したマイナーに約12BTC (1BTC = 約50万円 ) の報酬があります。
以下のサイトで任意のブロックをクリックした場合の、取引履歴の一番上がマイナーへの報酬額です。
chainFlyer | Blockchain Explorer
Blockchain Explorer -- chainFlyer(チェーンフライヤー)でブロックチェーンがもっと見やすく。 See the blockchain like never before.

 

長いチェーンが正当であるとみなすため、短いチェーンのブロックを掘ったマイナーには、BTCの報酬はありません。不正をしようと短いチェーンを採掘しつづけても、多大なマシンパワー (電気代) が無駄になるだけです。

 

誰でも参加できるパブリックブロックチェーンにおいては、「誰でも匿名で参加できる」ことは非常に重要です。なぜなら世界中で多くのノード/マイナーが参加し分散化が進めば進むほど、ネットワーク全体のハッシュパワー (計算力) が高まり、攻撃者のコストが高まりセキュリティも向上するからです。

 

従って、多くのネットワーク参加者を誘い込むため、パブリック・ブロックチェーンでは報酬となる暗号通貨の存在が不可欠です。

 

もう一歩踏み込んで考えると、もっとマイナーを増やして安定性のあるネットワークにするために、「暗号通貨の価格は堅調に伸びるであろう」と期待してもらうことが必要です。現状は最も堅牢なビットコインでさえ激しいボラティリティを持っているため、まだまだ真に安定した公共の通貨システムになるには時間がかかるかもしれません。

 

実際、ビットコインの価格が暴落するたびにマイナーが撤退し、全体の計算パワーが弱くなり、攻撃に脆くなっています。

 

この点を考えると、たまに見る「ブロックチェーンの技術はよいが、仮想通貨はダメだ」という意見が、あまり深く考えられていないことが分かります。その人がコンソーシアム型ブロックチェーンのことを明示的に言っているのならば筋が通りますが、多くの場合はそうではなさそうです。

 

Bitcoinのような Proof of Work を採用するブロックチェーンにとっては、そのコインが ETF等で金融商品として認められ、価格が安定することが非常に重要です。

 

コメント