1. TOPTOP
  2. Webサービス

ビットコインを支える技術 「プルーフ・オブ・ワーク」について ~「アフター・ビットコイン: 仮想通貨とブロックチェーンの次なる覇者」より

|

proof_of_work_after_bitcoin_1

ビットコインにおけるプルーフ・オブ・ワーク(= Proof of Work)とは、直訳すると「仕事の証明」となります。ただ「仕事の証明」と訳しただけでは抽象的すぎてかえって分かりにくいですね。言葉を分解して「仕事」と「証明」に分けて説明をしましょう。

プルーフ・オブ・ワークの「仕事」とは

プルーフ・オブ・ワークの「仕事」を一言で表すと、ナンス値(Number used once = Nonce)を求めることを指します。ナンス値とは新しいブロックのハッシュ値に一定数以上のゼロをつけることができる数値です。

proof_of_work_after_bitcoin_2

ビットコインのマイナーは新しいブロックを作るために、以下の2つの計算値を求めなければなりません

  • 直前のブロックを表すハッシュ値に基づく新しいハッシュ値
  • その新しいハッシュ値の先頭に一定数以上のゼロをつけられるナンス値

各取引データの内容を引数としたハッシュ関数から生成されるハッシュ値は、どんな値が出力されるか全く検討がつきません。ハッシュ関数では入力する引数(取引データ)が少しでも違えば出力値が全く異なり、かつ予想ができないからです。そのためナンス値も予想することは誰にもできません。

したがってマイナーは新しいブロックを作成するために、ビットコインが提示する条件を満たすナンス値が見つかるまで、数億回から数兆回にわたる力づくの計算をしなければなりません。ビットコインのネットワークにおける「仕事」とは、こうした膨大かつ総当たり的な計算作業を経てナンス値を求めることを言います(その「仕事」の報酬としてマイナーにはビットコインが与えられます)。

プルーフ・オブ・ワークの「証明」とは

ビットコインネットワークにおける「仕事」の「証明」とは、その仕事(取引の承認)が正しいものであるかどうかのことを指します。

proof_of_work_after_bitcoin_3

ブロックには主に取引データ・ハッシュ値・ナンス値の3つがブロックを構成していますが、加えてブロック生成の難易度を示す”Difficulty Target“も含まれています。新しいブロックが「正しい」ものであるかどうかは、この”Difficulty Target”の値を見ればすぐに分かります。

ブロックを作成するためには10分間の時間が必要となりますが、そのブロックが「正しい」ものであるかどうかの検証作業は一瞬にして終わります。

プルーフ・オブ・ワーク自体がセキュリティシステム

ビットコインのネットワークでは、正当なブロックを作成するためだけでも膨大な計算作業が必要となります。この膨大な計算作業そのものがプルーフ・オブ・ワークであり、その複雑な「仕事」が二重利用や偽造を防止するためのセキュリティシステムとなっています。

proof_of_work_after_bitcoin_6

例えば、悪意のある改ざん者がブロックn+1のある取引データで1BTCの送金額を、0.1BTCの送金であったことに改ざんしたとしましょう。そのとき改ざん者がしなければならないことは、n’+1のブロックのナンス値を変更です。1BTCの取引データと0.1BTCの取引データで基づいて作成したハッシュ値は全く異なるからです。

さらに改ざん者はn’+1のブロックと同様にn’+2、n’+3と続くブロックのハッシュ値とナンス値を新たに求めた上で、最新のブロックに合わせるように再計算をする必要があります。

一方で改ざん者が再計算をしている間にも、他の大多数のマイナーは正当なブロックを次々につなげていきます。このため悪意のある改ざん者がいても、正しいブロックにたどり着くということは事実上、不可能ということになります。仮に再計算が追いついたとしても計算作業に要した労力と経済的なインセンティブは全く合いません。

ビットコインがプルーフ・オブ・ワークのような複雑なシステムを採用している理由は、そのネットワークが「お互いに顔も知らない、信頼できないもの同士が経済的インセンティブのみで集まっている」であることを前提としているためです。