ビットコインや仮想通貨を支える技術のブロックチェーン(Blockchain)、聞いたことはあるけど正しく理解できていない人も多いのではないでしょうか。
この記事では、ブロックチェーンの仕組みについて図解を交えて徹底的に解説します。
ブロックチェーン=ビットコインという誤解
という誤解がよくありますが、これは間違いで、
というのが正しいです。
ビットコインを発明したサトシナカモト氏は、ビットコインを実現するために革新的なブロックチェーン技術を考案しました。
そのためか、ビットコインとブロックチェーンは同じものと考えられることがまだ多いです。
しかし、ブロックチェーンには色々なタイプがあり、仮想通貨以外の色々な分野に使われる可能性を秘めています。
本記事では、ブロックチェーン技術の中でも、ビットコインで使われているブロックチェーンにフォーカスして、ブロックチェーンの仕組みを徹底的に説明したいと思います。
ブロックチェーンとはみんなで共有する巨大な台帳(Excel)
ブロックチェーンはすごく乱暴に説明すると、世界中の人たちで共有する巨大なExcel(エクセル)ファイルです。
世界中の人たちが、自分たちのPCの中に持っているExcelに、ビットコインの取引情報を書き込んで、書き込んだ内容をみんなで共有していることをイメージしてください。
全ての情報をみんなで共有しているため、みんなが持っているExcelの中身は全て同じ内容になります。
※変更内容が反映されるまでの時間差はあります。
ブロックチェーンが使っている仕組みを、分散型台帳技術(Distributed Ledger Technology, DLT)と言います。
つまり、世界中の人たちが「分散」して保有している「台帳(≒Excel)」ということです。
台帳には取引が記録されている
世界中の人たちが共有している、台帳には、世界中の人たちの取引が記録されています。
これも、Excelの表のイメージで、概念を説明してみましょう。
例えば、以下を例として考えてみましょう。
Aさんが10BTC(ビットコイン)保有していて、Bさんに7.0BTC送ったとします。
さらに、Bさんは受け取った7.0BTCをCさんに全額送ることを考えましょう。
この場合、分散台帳は以下のように取引の情報が書き込まれます。(あくまでイメージです)
ここで、注意して欲しいのは以下の2点です。
送金が全額で無い場合は、残額(おつり)を自分に送る必要がある
Aさんは保有10BTCのうち、7.0BTCのみをBさんに送りたいので、
のように記録すればいいと思うかもしれませんが、
ブロックチェーンでは、おつり分は自分宛に送る(AさんがAさんに2.9BTCを送金)という取引情報を書き込む必要があります。
つまり、ビットコインアドレスの残高を使って取引しようと思ったら、そのインプットとなる残高は使い切らなければいけないという制約があるということです。
では、なぜこのような変わった仕組みにしているのでしょうか?
それは、ずばり
取引情報と残高を1つの台帳で一元管理するため
です。
比較として、一般の銀行口座を考えてみましょう。
銀行は、「残高情報」と「取引情報」を別々に管理しています。
例えば、100万円の残高があるところに、10万円を出金(取引)すると、残高情報が90万円に更新されます。
一方で、ブロックチェーンでは、残高情報のデータがなく、取引の情報しかありません。
ところが、上図の表のような取引構造にしておくと、取引情報の中から、未使用分の取引を合計すると、それがビットコインで利用可能な残高であることが分かるのです。
(上図だと、Aさんの2.9BTC、Cさんの6.9BTCが未使用=使える残高になります。)
ちなみに、この未使用の取引のことを、UTXO(Unspent Transaction Output)と呼びます。
手数料が必要
ビットコインは手数料無料という誤解している人もいるかもしれませんが、実は手数料がかかります。
上記の例では、AさんやBさんが送金する際に、0.1BTCが手数料として引かれています。
この0.1BTCは、後述するマイニングに成功した人の報酬として、マイナーに支払われます。
ブロックチェーンの構造
取引は上記のような構造で記録されますが、それではブロックチェーンとしての構造はどのようになっているのでしょうか。
ブロックチェーンは、その名前から分かるように、ブロックがチェーンで繋がっている構造をしています。
Excelの例で言うと、ブロックはExcelのシート、さらにExcelシートが複数チェーン上に繋がって、1つのExcelファイルが出来上がっていると考えるとイメージしやすいかもしれません。
ビットコインの場合、1つのブロックには10分間に発生した取引の情報が入るルールになっていますが、
最初のブロック(Genesisブロックと言います)が作られてから、10分ごとに今日現在までの取引情報が全て繋がって1つの巨大な台帳が出来上がっています。
そのため、2018年3月現在では、この台帳は約145GBの容量まで膨れ上がっています。
次に、ブロックの中身をもう少し詳細に見てみましょう。
ブロックには取引データの他に、それがハッシュ値とナンス値と呼ぶ、とても重要な要素があります。
取引データは、上で説明した通りですが、次にハッシュ値とナンス値について説明しましょう。
ハッシュ値とナンス
ハッシュ値(Hash Value)とナンス値(Nonce)を説明するにあたっては、まずハッシュ値を説明します。
ハッシュ値とは、あるインプットデータを、ハッシュ関数で異なる値に変換したときに得られる値のことですが、以下の特徴があります。
①インプットからハッシュ値を求めることは、非常に簡単
②ハッシュ値からインプットを求めることは、非常に難しい(一方向性)
③インプット情報を少しでも変えると、ハッシュ値は全く異なるものになる
④インプット情報の桁数に関わらず、ハッシュ値は常に同じ桁数になる
一方で、ナンス値とは、Number Used Once(一度だけ使われる数字)の略称で、ただの使い捨てのランダムな数字であって、これだけでは特別な意味はありません。
しかし、ハッシュ値とナンス値を組み合わせることで、ブロックとブロックを繋ぐ高度な接着剤を作り上げています。
まず、ブロックとブロックを繋ぐために、前のブロックのハッシュ値を接着剤として次のブロックの情報として持たせます。
ただし、そのハッシュ値にはルールがあり、
一定の条件「ハッシュ値の最初に一定以上のゼロが続く」を満たすハッシュ値のみが接着剤として認められる
ようになっています。
つまり、「前のブロックのハッシュ値+取引情報+ナンス」のハッシュ値が、最初に一定以上のゼロが続く(例えば、0000000000afda2c79aa)ことが求められます。
では、条件を満たすハッシュ値を得るためにはどのようにすればよいでしょうか?
取引データと前のブロックのハッシュ値は変更ができないので、変えることができるのはナンスのみです。
つまりナンスが変わるとブロックの値が変わる、ブロックの値が変わるとハッシュ値が変わることを利用して、一定以上のゼロが続くハッシュ値を探します。
上記の例では、ナンス値を、
0000000001、0000000002、0000000003・・・と変えていって、
ナンス値が、0ad9e00a12 となったときのハッシュ値が
000000000afd3
とハッシュ値の最初に一定以上のゼロが続くナンスを発見しました!
このような、一定以上のゼロが続くハッシュ値を探す作業はとても大変です。
なぜなら、ハッシュ関数は一方通行の関数(ハッシュ値の特徴②)のため、ナンス値を色々な値に変更しながら総当りでハッシュ値を確認する以外に、一定以上のゼロが続くハッシュ値を探す方法がないからです。
では、なぜそこまで面倒なハッシュ値を接着剤としてルール化しているのでしょうか?
結論から言うと、悪意のある人の改ざんを防ぐためです。
そこで、重要になってくるのが、ハッシュ値から元の数字を探すのがとても大変(ハッシュ値の特徴②)ということに加えて、インプットを少しでも変えるとハッシュ値は全く異なるものになるという特徴(ハッシュ値の特徴③)です。
仮に、悪意のある人が、不正な取引(自分への送金額に、100万ビットコインをセットするなど)で台帳の取引情報を書き換えようとしたとします。
そうすると、何が起きるかを例にあげると、
100番目のブロックの取引情報を改ざんする(書き換える)と、ブロックとブロックを接着するために101番目のブロックのハッシュ値を変える必要があります。
101番目のブロックのハッシュ値が変わると、その次の102番目のブロックのハッシュ値も変える必要が出てきます。
102番目のブロックのハッシュ値が変わると、その次の103番目のブロックのハッシュ値も変える必要が出てきます。
このように、1箇所の取引を変えたことが後続に波及してしまい、全体を書き換える必要がでてきますが、一定の条件「ハッシュ値の最初に一定以上のゼロが続く」を満たすハッシュ値を見つけるのは非常に難しく、膨大な計算時間が必要な作業なので、台帳の改ざんが実質的にできない仕組みになっているのです。
プルーフオブワーク(Proof of Work:POW)とマイニング
前で説明した、ブロックとブロックを繋ぐためのハッシュ値を計算する作業は、ブロックチェーンを作り上げるのにとても重要な要素です。
このハッシュ値を求めるには膨大な計算量が必要です。
(計算量が少ないと、簡単に改ざんできてしまうため、あえてそのようなルールにしています。)
つまり、ブロックチェーンはそのような膨大な計算をすることで、取引の承認をしているということになります。
このように、膨大な作業量を通じて、承認をする仕組み(Consensus Algorithm、コンセンサスアルゴリズム)のことを、プルーフオブワーク(Proof of Work:PoW)と呼びます。
最後の疑問は、このような膨大で手間のかかるハッシュ値を、いったい誰が見つけてくれるのか?という点です。
ビットコインでは、ハッシュ値を見つける作業を承認レースとすることで、この疑問を解決しています。
ビットコインでは、一定の条件「ハッシュ値の最初に一定以上のゼロが続く」を満たすハッシュ値を見つけた人に報酬として、新たなビットコインが新規発行される仕組みになっています。
このように、作業を通じて、新規通貨が発行されることから、この承認レースの作業をマイニング(Mining)、承認レースに参加してお金を稼いでいる人たちをマイナー(Miner)と呼ぶのです。
まとめ
本記事では、ビットコインを支えるコア技術のブロックチェーンについて解説しました。
他の仮想通貨(アルトコイン)で使われているブロックチェーン技術も、基本的な概念は今回紹介したビットコインと同様ですが、コンセンサスアルゴリズム、参加者の権限など、違いもあります。
まずは、ビットコインのブロックチェーンの仕組みをしっかりと理解した上で、他のアルトコインはどのようにビットコインと異なるのかを理解していくようにするといいでしょう。
この記事がためになったら、ぜひTwitterのフォローをお願いします。記事作成の励みになります。
-
【完全版】図解!わかりやすいブロックチェーン技術の仕組み〜仮想通貨を支える技術
ビットコインや仮想通貨を支える技術のブロックチェーン(Blockchain)、聞いたことはあるけど正しく理解できていない人も多いのではないでしょうか。 この記事では、ブロックチェーンの仕組みについて図 ...