中央管理者がいないP2Pネットワークでは、分散台帳に誤ったデータが記録されたり、改ざんされないように工夫する必要があります。中央管理者がいればネットワークの参加者がその管理者を信頼することで、管理者がネットワーク全体の管理を管理・保持を行うことができます。
しかしP2Pネットワークではそのような管理者は存在せず、さらに悪意のある攻撃者が存在することを前提としてネットワークの信頼性を構築しなければなりません。
このような状況下にあるビットコインネットワークにおいて、ブロックチェーン上に正しくトランザクションが記録されるようにする作業をPoW(Proof of Work)と言います。
ここではどのようにPoWが行われているのか、そしてPoWのデメリットなどをお伝えしていきます。
PoW(プルーフオブワーク)の概要
PoW(Proof of Work、プルーフオブワーク)とはブロックを生成し、そのブロックに正しいトランザクションが記録されているか承認する作業のことを言います。
具体的には、膨大な計算であるマイニングという作業を行いブロックを生成します。次に、他のノード達がそのブロックの正当性をチェックし承認します。これが終わると、そのブロックがブロックチェーンに同期され合意形成を行うことができるのです。
この一連の流れにおいて最新のブロックをブロックチェーンに追加する作業をPoWと呼びます。
このようにPoWとは、ブロックチェーン上に記録された取引が「本当に正しい取引」であると認められる合意形成であるとも表現できます。
つまり、PoWのアルゴリズムによりブロックに記録される取引が二重に記録されたり、取引量、送金先・送金元のアドレスが改ざんされたりする「不正取引」を防ぐことができるのです。
PoWでは、ブロックチェーンに記録されるトランザクションの確認作業をするためには膨大な計算を行う必要があります。この計算量を必要とすることがトランザクションを改ざんできないようにしています。
また、現在では、合意形成アルゴリズムはさまざまな特徴を持つものが考案されていますが、以下ではビットコインで採用されているブロックチェーンとPoWにフォーカスしてお伝えしていきます。
PoWの具体的な仕組み
ブロックチェーン
PoWを理解するためにはブロックチェーンの仕組みを簡単に理解することが必要です。ブロックチェーンでは、取引情報(トランザクション)を含む個々のブロックが鎖(チェーン)のように連なっています。
そして個々のブロックには、「前ブロックに含まれるデータのハッシュ値」「取引情報(データ)」「ナンス」などのさまざまなデータが含まれています。(より正確にはヘッダーとボディに分かれていて、ボディに全てのトランザクションが含まれています。ヘッダーには、ハッシュ値、ナンスなどのさまざまな情報が入っています。)
ここで何がチェーンの役割をしているのかというと、「前ブロックに含まれるデータのハッシュ値」です。
このハッシュ値が次のブロックのハッシュ値を求めるために使われ、これはさらに次のブロックのハッシュ値を求めるために使われ、、、というようにチェーンのように連なっているのです。
前データが何らかの原因で1ビットでも改ざんされるとそのデータのハッシュ値も異なるので、チェーンをつなぐことができなくなってしまいます。
マイニング=ナンス探し
ナンスとは、ブロックのデータをハッシュ関数に通したときに先頭に0がたくさん並ぶような非常に小さいハッシュ値が生成されるように調整するための値です。
この値がターゲット値以下になるようにナンスを計算することができるとブロックを生成し、マイニング報酬を得ることができるのです。
このナンスを見つけ出すことは非常に大量の計算資源を必要とし、マイニングと言われています。ちなみにビットコインのブロックチェーンでは、ブロックの生成時間が約10分になるようにナンス探し(マイニング)の難易度が調整されています。具体的には、2016ブロックごとにターゲットの値をリターゲットすることで難易度調整が可能です。
また、ナンスはブロックのヘッダーのみに存在するのではなく、ブロックの最初のトランザクションであるcoinbaseトランザクションという特別なトランザクションにエクストラナンス(extra nonce)があります。
なぜかというと、マイニング難易度が上がるにつれて、ヘッダーのナンス(4バイト)だけではナンスの全ての値を使ってもマイニングが完了しなくなってしまうことが考えられるからです。この対策として、coinbaseトランザクションにもエクストラナンスを含めているのです。
ビットコインのブロックチェーンではSHA-256やRIPEMD-160というハッシュ関数が使用されていて、メッセージ(入力値)をハッシュ関数に通すことでハッシュ値が簡単に得られます。
しかし、ハッシュ値からメッセージを逆算することはできないので、総当り的に大量の計算を行うことが必要となるのです。
入力値であるメッセージを1ビットでも変化させると、全く異なるハッシュ値が出力されます。つまり、ハッシュ値から入力値を推測したり、逆に入力値からハッシュ値を推測することはできないのです。
なので、ターゲットよりも小さなハッシュ値を得るために、ナンスを0,1,2,…のように少しずつ変化させハッシュ値を探していきます。この作業をマイニングと言い、ビットコインでは専用のマイニングマシンであるASICが用いられています。
参考:ブロックチェーンの技術「一方向性ハッシュ関数」を理解しよう
ブロックの承認
ナンス探しによりブロックの生成が行われると、そのブロックに含まれるトランザクションは本当に正しいデータなのか確認する承認作業が始まります。
この承認作業は他のノード達の多数決によって行われ、過半数のノードに承認されればブロックチェーンに同期され合意形成が得られたことになります。
このようにブロックの生成と承認を繰り返し行なっていきながらブロックチェーンは伸びていくのです。
上述したようにブロックチェーンは、前ブロックデータのハッシュ値でチェーンがつながれています。なので、ある人が改ざんしたデータを含むブロックチェーンを作りたい場合は、他の大勢のノードを上回る速度で不正なブロックチェーンを伸ばし続ける必要があります。
実際にブロックチェーンが分岐することはたまにあります。しかし、「分岐点から長い方のブロックチェーンを正しいブロックチェーンとして認める」というルールがあることでメインのブロックチェーンを信頼することができます。
なぜなら、悪意のあるノードに対して善良なノードが多いことを前提とできるからです。
ブロックチェーンを攻撃することは大量のコストを必要とし、さらにブロックチェーンの攻撃によりビットコインの信頼性が崩れ価格が低下すれば、攻撃者が有するビットコインの価格も低下するので結果的に攻撃者自身が損をするのです。
つまり、攻撃者にとってもブロックチェーンを攻撃することはデメリットしかなく、その計算力を活かしてマイニングすれば多くの利益を得ることができるはずです。
PoWの必要性
もしPoWというコンセンサスアルゴリズムが働いていない場合を想像してみるとPoWの必要性は明らかになります。
PoWがないと、誰もが自由にブロックの生成ができてしまいます。つまり、改ざんされたトランザクションもブロックに書き込まれてしまうということです。
また、従来のP2PネットワークのようにIPアドレスごとに同等のブロック生成権が与えられた場合はどうでしょうか。このケースだと、悪意のある攻撃者が大量のIPアドレスを取得し大きな力を得てしまうことが考えられます。つまり、悪意のある攻撃に弱いネットワークになってしまうのです。
PoWでは以下のような特徴を持つことで非中央集権型かつ安全なネットワークを構築できています。
- 膨大な計算資源がないとブロックを作れない
- マイニングをすると報酬が得られる
- ブロックチェーンを攻撃すると損をする
PoWのデメリット
上述のようにProof of Workというブロックの承認作業は大規模な計算を行うマイニングを必要とします。
しかし、マイニングに対するデメリットがいくつか存在し、このデメリットを補う形で新しいコンセンサスアルゴリズムも他のブロックチェーンで実施されているのです。
そこでここではPoWのデメリットをいくつか考えてみましょう。
大量の電気を消費する
PoWでは消費電力が増えすぎて環境問題につながることが指摘されています。
PoWでは、ナンスを計算する必要があるのでこの膨大な計算を行うために大量の電力を必要とします。
この計算を行うことがPoWにおいて信頼性を担保しているのですがマイニング競争の激化や技術発展などに伴いマイニングによる消費電力が著しく上昇しているのです。
その結果、多くのマイニングセンターは電気料金の安い中国やアイスランドに設置されるようになってきています。
マイニングに莫大な初期投資が必要
現在では、マイニングで利益を出すことはとても難しくなってきています。つまり、採掘されるビットコインよりも電気代やマイニング施設などの初期費用が高くなってしまうのです。
初期のマイニングはCPUを利用していましたが、現在ではビットコインマイニング専用のASICと呼ばれる集積回路が主流になっています。
また、ビットコイン専用ASICの設計・製造には専門的技術を要するので人件費も必要となります。このようにビットコインマイニングを行うには莫大な初期投資が必要となっているのが現状です。
その結果、個人がマイニングにより利益を出すことは不可能となっています。現在では、ASICなどに多くの投資をしているマイナーが集まりマイナープールを形成しています。そのマイナープールに参加することで報酬を得やすくなるのです。
一方、イーサリアムではEthashというメモリーを多く必要とするアルゴリズムを導入することでマイニングにASICが使えないようになっています。
51%問題(マイニングプールの寡占化)
(引用:blockchain.info)
51%問題とは、ある特定のマイナーが全体の51%以上の計算能力を有することで取引の二重支払いなどの攻撃を行うことができるということです。
ネットワークに参加者が少ない状況ではこの51%問題は頻繁に起こることが予想されますが、現在のようにネットワークに多数の参加者が存在している状況では51%以上の計算能力を持つことは困難になります。
しかし、上述したようにマイニングの競争激化や莫大な初期費用の必要性により、マイニングプールの寡占化が進んでいます。
上図を参考にすると、1〜4位のマイニングプールの計算力を合計すると全体の半数以上を占めることが分かります。
つまり、大手マイニングプールの結託により理論上は51%攻撃が可能になっているのです。もちろん51%攻撃をすることはマイナーにとってもデメリットしかなく、マイニングのインセンティブを得る方が多くの恩恵を受けることができるはずです。
しかし、非中央集権化されセキュアであるはずのビットコインネットワークにおいて51%以上の計算能力を持つ可能性自体が脅威となっています。
また、51%攻撃により二重支払いなどを行うことができる一方で、他人のwalletからビットコインを奪ったりすることはできません。
このように51%攻撃でネットワーク自体が破壊されることはないとしても、ネットワークに対する信頼性が低下しビットコインの価値低下にもつながってしまうでしょう。
参考:ブロックチェーンの安全性を脅かす「51%攻撃」の仕組みと実態
以上のようにPoWにはいくつかデメリットがあるものの実際のブロックチェーンネットワークにおいて「機能する」ことがビットコインの誕生から長年かけて証明されているので信頼できるコンセンサスアルゴリズムであると言えます。PoSをはじめとして、とても多くのコンセンサスアルゴリズムが開発され、それらはPoWの欠点を解決していると表されることも多いです。
実際に、それらの中にはとても優れたコンセンサスアルゴリズムが存在するかもしれません。しかし、コンセンサスアルゴリズムは通貨のベースとなるので利用者から信頼されて初めて成り立つので、長年かけて多くの人に利用してもらい安全であると信頼してもらう必要があるのです。