【ビジネスパーソン向け】ブロックチェーンの仕組みを20分で理解しよう!

ブロックチェーンは「分散型台帳」とも呼ばれるビットコインの中核技術です。P2Pネットワークで繋がった世界中のノード間で瞬時に、安全に、データ共有ができます。どんな仕組みなのでしょうか?ビジネスパーソン向けに、難解な用語をほぐして解説します!

ブロックチェーンって何?

ブロックチェーンとビットコイン

ブロックチェーンは、ここ数年ニュースを騒がせている「ビットコイン」を支える中核技術の一つです。

ビットコインとは、仮想通貨あるいはその背景にあるネットワークおよびソフトウェアの総称のことで、下記のような、暗号技術を中心とする新旧さまざまなテクノロジーを駆使し、うまく組み合わせることで実現されたイノベーションであると言われています。

  • 分散化されたP2P(Peer-to-Peer)ネットワーク(=Bitcoinプロトコル)
  • 数学的かつ決定論的な通貨発行(=分散マイニング)
  • 分散取引検証システム(トランザクションscript)
(出典:pixabay

その中でも、近年、特に注目を集めているのが、日本語では「分散型台帳」などと表現される新技術、「ブロックチェーン」です。
ブロックチェーンは、従来のデータベースが抱えていた諸課題を解決しうる期待の新技術として、金融、物流、医療、不動産、セキュリティなど、ありとあらゆる産業への応用が期待されており、経済産業省のブロックチェーン関連市場規模予測では全体で67兆円とも言われています。

なお、ブロックチェーンの技術について詳しくお知りになりたい方は、下記の記事も併せてご確認ください。
ブロックチェーンは技術の組み合わせ?〜P2P・Hash・公開鍵暗号〜

ブロックチェーンの定義

ブロックチェーンには様々な定義が存在しますが、本記事では、出来るだけ分かり易くするために、ビットコイン環境下を前提にしつつ、次のように簡略化した定義で解説していきたいと思います。

ブロックチェーンの定義:「取引データを適切に記録するための形式やルール。また、保存されたデータの集積(≒データベース)」

一般に、取引データを集積・保管し、必要に応じて取り出せるようなシステムのことを一般に「データベース」と言います。
ブロックチェーンは、このデータベースの一種であり、その中でも特に、データ管理手法に関する新しい形式やルールをもった技術なのです。

ブロックチェーンの特徴:「分散型台帳」って?

ブロックチェーンは、「分散型台帳」とも表現される通り、ビジネスに限らず、あらゆる取引記録を保管するデータベースとしての機能をもっています。
後に説明するように、この「分散型」という特徴が、ブロックチェーンを際立たせています。

では、具体的に、ブロックチェーンは従来のデータベースと何が違うのでしょうか?

従来のデータベースの特徴

各主体がバラバラな構造のDBを持つ
それぞれのDBは独立して存在する
相互のデータを参照するには新規開発が必要

ブロックチェーンの特徴

①’ 各主体が共通の構造のデータを参照する
②’ それぞれのストレージは物理的に独立だが、Peer to Peerネットワークを介して同期されている
③’ 共通のデータを持つので、相互のデータを参照するのに新規開発は不要

従来のデータベースは基本的に独立しており、データ共有にあたっては主従関係が発生します。
その点、ブロックチェーンは常に同期されており中央を介在せずデータが共有できるので参加者の立場がフラット(=非中央集権、分散型)という特徴をもちます。

こうしたブロックチェーンの「非中央集権性」の恩恵としては、

  • 中央を介さないので中間手数料がない、または安い
  • フラットな関係でデータの共有が行えるので競合他社同士でもデータを融通できる
  • 改竄や喪失に対して耐性がある

ということが挙げられます。
まさにこの「非中央集権、分散型」という特徴こそ、ブロックチェーンが様々な領域で注目・活用されている理由だと言えるでしょう。

こうした、ブロックチェーンのメリットやデメリットをまとめると、以下の通りです。

これらのデメリットについてはBitcoin以降のブロックチェーンで次々に改善されるものが登場してきており、将来的には解消されていくものと予想されています。

なお、「ブロックチェーンとは何か?」をより詳しく、全体的にお知りになりたい方は、下記の記事も併せてご覧ください。
【初心者必見】ブロックチェーンとは?ビジネスの新常識を分かり易く!

ブロックチェーンの仕組み(1):基本構造

ブロックチェーンをシンプルに図解すると、次のような構造をしています。

上図からもわかるように、ブロックチェーンは、その名の通り「ブロック」を「チェーン」のように順番に繋いだ形をしています。
では、「ブロック」や「チェーン」とは、どういう意味でしょうか?

ブロックチェーンの基本構造①:「ブロック」

ブロックチェーンでは、一定量に取りまとめられた取引データを「Tx(Transaction、トランザクション)」と呼んでいます。
「ブロック」とは、このトランザクションを1MB分だけ集めてきて、日付などのメタ情報を付与して、ひとまとまりにしたものです。

身近なものに例えるなら、ブロックは、引き出しがいくつか付いているタンスのようなものだと言えます。
一つのタンスの中には複数の同じ大きさの引き出しがあり、その中にはさらに、例えば紙の契約書だとか現金が入っている、というようなイメージです(下図)。

出典:「かわいいフリー素材集いらすとや」画像より筆者作成)

ブロックチェーンの基本構造②:「チェーン」

タンスの中に契約書や現金をしまいこんだら、次に考えるべきことは、「どこに何があるかを正しく把握」して「泥棒に盗まれないようにしっかりと鍵をかけておく」ことでしょう。

これらの機能を果たしているのが、「チェーン」と例えられる、ブロックチェーンの記録・保管形式です。

具体的にいうと、各ブロックには、日付(タイムスタンプ)に加えて、「Hash(ハッシュ、ハッシュ値)」「nonce(ナンス)」「ターゲット」と呼ばれるメタ情報が付与されており、これらの情報をもとにして、ある一定のルールのもとで前のブロックと後ろのブロックがまるで鎖のように連結されています(これらの用語やルールに関しては、後ほど解説します)。

これらをタンスの例で言えば、1番目のタンスの鍵を2番目のタンスの中に入れて、2番目のタンスの鍵を3番目のタンスの中に入れて・・・としているイメージです。
さらに、より細かく見れば、引き出しごと(つまりトランザクションごと)にも個別に鍵がかけられているので、ブロックチェーンのセキュリティは非常に堅牢だと言えるでしょう。

(出典:「かわいいフリー素材集いらすとや」画像より筆者作成)

なお、こうしたブロックチェーンの基礎構造は、Bitcoin以降のブロックチェーンのほぼ全てに採用されています。

稀にチェーン型でないブロックチェーンというものもありますが、それらは分散型台帳であるもののブロックチェーン構造ではないので、厳密には区別されます(例えばIOTAで有名な「タングル」構造など)。

ブロックチェーンの仕組み(2):データの共有方法

先ほどの説明で、ブロックチェーンの基本構造が、

  • ブロック①
    • 複数のトランザクション
      • 一つのブロック内に、1MBのトランザクションを記録
    • メタ情報
      • (前のブロックの)ハッシュ値
      • ナンス
      • ターゲット
      • タイムスタンプ
  • ブロック②
    • 複数のトランザクション
    • ・・・
  • ブロック③
    • ・・・

というように、取引データをたくさん詰め込んだブロックが、メタ情報によってチェーンのように繋がれていることがわかりました。

では、ブロックおよびブロック内の取引データは、参加者に対してどのように共有されていくのでしょうか?
また、ブロックは、いつ、誰が、どのようにつくっているのでしょうか?

まずは、ブロック生成の前提となるデータ共有の考え方からみていきましょう。

ブロックチェーンのデータ共有方法①:「ノード」によるブロックの生成と伝播

ブロックチェーンでのデータ共有において重要な役割を持っているのが「ノード」と呼ばれる個々のネットワーク参加者です。

すでに述べた通り、ブロックチェーンは、従来のデータベースとは異なり中央管理者が不在のため、データの管理や共有はすべて参加者だけで行う必要があります。
この参加者のことを「ノード」と呼び、世界中に散らばるノードが競争した結果、競争に勝利した一つのノードによって、絶えず新しいブロックが生成されていきます(ビットコインでは平均10分に1つのペースで新しいブロックが生成されるように設計されています)。

また、各ノードは、P2Pネットワーク内の他のノードの一部と繋げられており、あるノードでつくられた新しいブロックの情報は、そのノードと繋がっている他のノードにすぐさま伝播します
そして、この「ブロックの伝播」を繰り返していくことで、ブロックおよびブロックに含まれる取引データが、瞬く間に世界中の参加者へと共有される(=データが同期される)のです。

このように、ブロックチェーンでは、P2Pネットワークの参加者自身がブロックの生成やデータの共有(=ブロックの伝播)を行なうことで、分散型のデータベースが高い精度で実現されています。

ブロックチェーンのデータ共有方法②:ノードによるブロック生成・伝播の問題点と解決策(コンセンサスアルゴリズム)

今みたように、ノードによるブロック生成・伝播の仕組みによって、世界中のノードがほぼ同時に、同じ内容のデータをもつことができるようになりました。
そして、多数のノードがデータを持ち合うことで、データの改竄や捏造が難しくなりました。

しかし、この方法は、あくまで「ブロック化された元のデータ内容が正しいこと」を前提としています。
ブロックチェーンの世界には第三者としての中央管理者がいません。
従って、もし、ブロックをつくった人間に悪意があった場合、その人間を管理できる存在がいないため、世界中の人が間違ったデータを同時に持ってしまうことになります。
つまり、P2Pネットワーク参加者のみで行うデータ共有の仕組みでは、「管理者不在の中、どうやってデータの真正性を担保するか?」という問題を解決する必要があるのです。

そこで、考え出されたのが、「コンセンサスアルゴリズム」と呼ばれる、ネットワーク内での合意形成の方法です。
ブロックチェーンでは、個々のネットワークごとに、「複数それっぽいブロックが出てきた時にどれを選ぶか?」という論点に対する合意方法が、コンセンサスアルゴリズムという形で事前に決められているのです

(出典:pixabay

例えば、代表的なところでは、ビットコインのPoW(Proof of Work、プルーフオブワーク)、イーサリアムのPoS(Proof of Stake、プルーフオブステーク)、ネムの PoI(Proof of Importance、プルーフオブインポータンス)、リップルのPoC(Proof of Consensus、プルーフオブコンセンサス)あたりが有名です。

ブロックチェーンの仕組み(3):コンセンサスアルゴリズム

コンセンサスアルゴリズムの2つの役割

一般に、コンセンサスアルゴリズムには、次の2つの役割があります。

  1. ネットワーク内の発言権を誰に持たせるかを決める(=一定の条件を満たすノードにブロック生成を認める)
  2. 複数の発言者がいる場合に、誰の発言が最も有力かを決める(=2つ以上の異なるブロックが同時に生成されたとき、どのブロックが正しいかについての合意を形成する)

身近な例えで考えてみましょう。
例えば、高校の文化祭で模擬店のメニューを何にするかを決めなくてはいけないとします。

(出典:pixabay

文化祭に関しては、生徒の自主性を重んじて先生(=中央管理者)は口を出さないことになっているため、異なる意見をもった生徒間で話し合って合意を得なければなりません。
模擬店は、クラス全員から出資金を集めて運用することになっているので、みんな必死です。
また、クラス全体についての決めごとなので、クラス全員、誰でも自由に発言できるようになっています。

こういった状況で「メニューを何にするか」、言い換えれば「誰の意見が正しいか」をスムーズに決めるにはどうしたら良いでしょうか?

コンセンサスアルゴリズムの役割①:「発言権の制限」

まず、一つ目の問題として考えられるのが、大勢が口々に出した様々な意見がすべて正式な発言として認められてしまうと、全く収集がつかなくなってしまうということです。
実は、これはブロックチェーンに限らず、中央管理者のいないP2Pネットワーク全般で起こりがちな問題でもあります。

(出典:pixabay

そこで登場するのが、コンセンサスアルゴリズムの一つ目の役割である「発言権の制限」です。
基本的には誰でも発言できるものの、それが発言として正式に認められるために何かしらの努力や条件が必要だとしたら、どうでしょう?
今回の例で言えば、「文化祭の準備期間にどれだけクラスに貢献したか」で決めるとしたら、おそらく、正式に認められる発言の量は減ってくるはずです(「お前何もやってないくせに意見すんなよ」「うっ・・・」というイメージです)。
あるいは逆に、模擬店での発言権を獲得するために文化祭の準備を頑張る人が増えるかもしれませんが、そこには健全な競争が生まれますよね。

こうした発言権の制限、ブロックチェーンの文脈で具体的に言えば「ブロックの生成条件の設定」によって、いたずらや悪意によって誤ったブロックをつくろうとするノードをある程度排除することができます
(ちなみに上記の「働きの量と発言力が相関する」というルールは、後ほど説明するビットコインのコンセンサスアルゴリズム、PoW(Proof of Work)でも用いられている原理の一つです)

コンセンサスアルゴリズムの役割②:「有力な発言の選択(方法の設定)」

次に、二つ目の問題として考えられるのが、ある程度発言が絞られたはいいけれど、それでも複数の正式な発言が残っている場合、最終的にどの意見を採用するのかという問題です。
実際に、ブロックチェーンネットワークにおいても、異なる複数のブロックが同時に生成され、それによってチェーンが複数に枝分かれしてしまう「フォーク」と呼ばれる現象が起こります。
フォークが起こってしまうと、複数のブロックのうちどれが「正統」なのかをネットワーク参加者が判断できなくなり、データ自体の真正性が疑われてしまいます。

(出典:pixabay

こうした「複数の発言が並立する問題」に対して、パッと思いつくわかりやすい解決策としては、「投票による多数決」があげられるでしょうか。
あるいは、事前に「クラス委員」を決めておいて、意見が割れた場合にはクラス委員の一存で決めるという方法もあり得るでしょう。
いずれにせよ、このように「複数の発言(=ブロック)が並立している場合に何かしらのルールで決着をつける」のが、コンセンサスアルゴリズムの二つ目の役割です。

コンセンサスアルゴリズムの留意点

ただし、すべてのコンセンサスアルゴリズムがこれら両方の役割を担っているわけではありません。
あくまで、コンセンサスアルゴリズムは、そのネットワーク内での合意形成に必要な役割だけを担うことになります。

例えば、先ほどのクラスの例で言えば、実際には、2つ目の役割、例えば「クラス委員による決定」のみで十分かもしれません。
これは、高校のクラスが、①全員がお互いに素性を知っている閉じられたネットワークであること、②せいぜい数十名の規模であるために全体の総発言量や意見の食い違いが少なく済むこと、という合意形成に有利な特定の条件をもつネットワークだからです。

実際に、ブロックチェーンの世界でも、後ほど紹介する「コンソーシアム型」あるいは「プライベート型」と呼ばれるネットワークは、高校のクラスに近い特性をもっています。
したがって、そのコンセンサスアルゴリズムには、PoA(Proof of Authorioty)と呼ばれる、権威を認められた一部のノードがブロックを承認するルールが採用されています。

このように、ブロックチェーンネットワークでは、そのネットワークの特性に合った形で、データの真正性を担保するためのコンセンサスアルゴリズムが個別に定められています。

なお、ブロックチェーンの種類について詳しく知りたい方は、下記の記事も併せてご確認ください。
ブロックチェーンの種類は?〜パブリック・コンソーシアム・プライベート〜

ビットコインのコンセンサスアルゴリズム:PoW(Proof of Work)

では、具体的に、コンセンサスアルゴリズムはどのようにして「データの真正性問題」を解決しているのでしょうか?
本記事はビットコインを前提に執筆しているため、ここでは、代表例としてPoW(Proof of Work、プルーフオブワーク)の説明を行います。

先ほどみた、コンセンサスアルゴリズムの2つの役割からみると、PoWは次の2つの原理によって成り立っています。

PoWの原理①(1つ目の役割:ブロックの生成条件)=「メタ情報に関する計算に成功するとブロックを生成できる」
PoWの原理②(2つ目の役割:フォークへの対応)=「複数のブロックが生成された場合、最も長いチェーンを正統とし、その中に含まれるブロックを正しいと認める」…”ナカモト・コンセンサス”

それぞれ、順にみていきましょう。

PoWの原理①:ブロックの生成条件としての「マイニング」

まず、1つ目の原理として、PoWでは、ブロックの生成過程で、「マイニング」と呼ばれる、ブロックのメタ情報(ハッシュ、ナンス、ターゲット)を用いた計算作業をノードに課しています
計算作業とは、具体的に、「ブロックのバイトにnonceを加えたものをHash化した値が、特定のターゲット値以下になるようなnonceを見つける作業」のことです(この計算の原理については、「ブロックチェーンの生成過程」の項目で詳しく解説しますので、ここでは「ふーん、とにかく何かしらの計算をコンピュータにやらせるんだね」と理解してください)。

(出典:pixabay

この「ある数字(nonce)を見つけ出す」計算に成功するためには、「マイニング(英:mining)」という名称からもわかるように、まるで巨大な鉱山からわずかな鉱石を採掘するかのごとく、途方もないレベルの膨大な作業量が必要になります。
そのため、一つのブロックを生成するために、ノードは、コンピュータに大量の計算を行わせるための大きなコスト(電気代)を支払わなければなりません
PoWでは、誰でもブロック生成に参加できるものの、この計算量とそれにかかるコストの大きさが制約条件となって、ブロック生成に参加するノード(マイニングをするノードなので、「マイナー」と呼ばれます)の数を制限することに成功しています。

PoWの原理②:フォークへの対応策としての「ナカモト・コンセンサス」

次に、2つ目の原理として、PoWでは、フォークによって複数のチェーンが生まれた場合、最も長いチェーンに含まれるブロックを正統と認めるルールを設けています。
これは、コンセンサスアルゴリズムであるPoWの中でも特に、「ナカモト・コンセンサス」と呼ばれるルールです。
(ビットコインの発明者が「サトシ・ナカモト」と呼ばれる謎の人物であることを思い出してください)

(出典:pixabay

すでに説明した通り、一つのブロックは、ある一定量(1MB)のトランザクションをひとまとめにして生成されています。
このトランザクションは、「トランザクションプール」と呼ばれるトランザクションの集積場所から、ブロックの生成を試みる各マイナーの任意で抽出されてきます。
そのため、「ある新しくつくられたブロックにどんなトランザクションが含まれているか」は、ネットワーク側からは指定されておらず、その時々に、個々のブロック生成者が決めることになります。
したがって、例えば、2020年の元日の正午に、A,B,Cという3つのマイナーがそれぞれにマイニング(計算)を行い、ブロック生成に成功したとすると、各マイナーが新しくつくったブロックA、ブロックB、ブロックCには、それぞれ異なったトランザクションが含まれている可能性があるわけです。

さて、マイナーにより生成されたブロックは、次に、他のノードへと伝播されます。
ブロックの伝播は、A→D,E,F、B→G,H,I、C→J,K,L、D→M,N,O、E→P,Q,R・・・といった具合に、各マイナーとP2Pネットワークで繋がっている隣接ノードへと、そしてその隣接ノードとさらに隣接しているノードへと、それぞれのネットワーク経路にしたがって順に行われていきます。

しかし、ここで、困った問題が生じます。
この時点では、例えばAの隣接ノードであるDと、Bの隣接ノードであるGでは、持っている最新のブロック情報(つまりデータ内容)が異なってしまうのです。
この結果、下図のように、異なるブロックを持った複数のチェーン分岐が発生してしまうことになります。

これが、「フォーク」と呼ばれる問題です。

そこで、フォークを解消するために、ブロックA,B,Cのうち、どのブロックが正しいかを決める必要が生じます。
しかし、PoWの原理①では、この問題を解決することができません。
なぜなら、A,B,Cの3名とも、ブロック生成に必要な計算を無事に終えているからです。

この問題に対して、ナカモト・コンセンサスでは、ブロックの伝播にかかる時間のタイムラグと、10分に1つの新しいブロックが生成されていくというビットコインの設計を利用して、ブロックの中身に優劣をつけるのではなく、「結果として最も長いチェーンを形成したブロックが正しい」という原理が採用されました(上図では、青い背景色のチェーンとブロックが正統と認められます)。

以下で、実際にマイナーがブロックを作成し、最長のチェーンが切り替わる様子を見てみましょう。

まず、東京とサンフランシスコでマイナーが異なるブロックを作成し、世界に伝播させます。
この際のタイミングは同時ですが、伝播するにはネットワークを通じるのでタイムラグが生じます。

カイロに先にサンフランシスコのブロックが到着しました。
東京のブロックは傍流になります。

しかし、ここで、東京のブロックが先に届いたモスクワが発見したブロックが新たに伝播されてきます。

モスクワのブロックがカイロに届くと、もともと傍流であったチェーンが最長になり、本流となります。

このように、ビットコインネットワークでは、

  1. 大きなコストのかかる膨大な計算(マイニング)を完了したノードだけがブロックを生成できる
  2. 同時期に複数のブロックが生成された場合(フォーク)は、時間の経過によって最長となったチェーンに含まれるブロックを正統なデータとして認める(=ナカモト・コンセンサス)

という2つのルール(PoW)、平たくまとめると「計算のスピード競争に勝ったマイナーが正統」とする原理によって、全世界のP2Pネットワーク上で正しいデータをリアルタイムに共有することを実現しました。

ちなみに、こうしたルールが現実に効果を発揮するために、ビットコインでは、マイナーに対する経済的インセンティブ(報酬)が用意されています。

先ほど説明した通り、マイニングを行うために、マイナーは高性能なコンピュータを用意し、電気代をかけて計算を行い続けなければなりません。
これは、マイナーにとってのコストになるため、このままでは、誰もブロックをつくろうという気にはなりません。

そこで、彼らへのインセンティブとして、新たなブロックを見つけて一番最初に伝播させたマイナーには採掘の報酬と、トランザクションに含まれる手数料の合計が振り込まれるというインセンティブが用意されています。

この「採掘報酬+手数料」というわかりやすいインセンティブをめぐって、マイナー達が我先にと計算競争を繰り広げるようになることで、PoWがうまく効果を発揮し、ブロックチェーンネットワークにおけるリアルタイムでのデータ共有が実現されているのです。

ブロックチェーンの仕組み(3):ブロックの生成過程

取引〜ブロック生成〜データ共有の流れ

ブロックチェーンは、ある取引のデータをブロック内に格納し、ネットワーク内の全ノードにリアルタイム共有する仕組みでした。
この仕組みは、次の一連の作業によって実現されます(この章でも、ビットコインを前提に説明します)。

  1. 取引が行われる
  2. 取引データに鍵がかけられ、トランザクションプールに貯められる
  3. マイナーが、トランザクションプールの中から一定量のトランザクション(1MB)を取り出し、データを検証する
  4. マイナーがPoWで定められた計算を行い、取り出したトランザクション群にメタ情報を付加して、ブロックを生成する(=マイニング)
    1. メタ情報①:一つ前のブロックのハッシュ値(Hash)
    2. メタ情報②:ナンス(nonce)
    3. メタ情報③:タイムスタンプ(ブロック生成の日時)
    4. メタ情報④:ターゲット
  5. マイナーが他の隣接ノードにブロックを伝播する
  6. ブロック情報を受け取ったノードが、そのブロックの正しさを検証する
    1. 届いたブロックを再度ハッシュ化し、ハッシュ値<ターゲットとなればOK
  7. 検証したノードが、さらに繋がっている他の隣接ノードにブロックを伝播する
  8. 以下、6~7を繰り返す

まず、1は問題ないでしょう。

次に2は、取引データをトランザクション化する際に、後ほど紹介する「公開鍵暗号方式」と呼ばれる暗号化技術を用いて、そのデータ自体が改竄・喪失されないように保護するための作業です。

3は、マイニングの前に、トランザクション自体が「ちゃんとフォーマット通りかどうか」「ミスや不正がないか」といった検証を行う作業です。
データ分析の世界で言うところの「データの前処理」に近い工程と言えます。
また、身近な例で言えば、郵便物の配送前に、切手の値段や貼る位置、差出人の有無などが正しいかどうかをチェックしているのとも似ています。

4のマイニングは、次の項目で詳しく解説します。

5は、先ほどの章で説明した通りですが、実際には、ブロックの伝播時には6の工程も合わせて行われます。
6は、4のマイニングでなされた計算が合っているかを検証する、つまり「検算」のための作業です。
この作業は、ただの答え合わせなので、マイニングとは異なり、大きな計算量やそれに見合うコストは必要ありません。

最後に、7で、検算が終わったブロックをさらに他のノードに伝播し、以降、全員に伝播されるまで6〜7の工程が繰り返されます(8)。

マイニングの仕組み

前章でもみたように、ビットコインのコンセンサスアルゴリズム(PoW)では、ブロックの生成過程で、「マイニング」と呼ばれる、ブロックのメタ情報(ハッシュ、ナンス、ターゲット)を用いた計算作業をノードに課しています。
この計算作業とは、具体的に、「ブロックのバイトにnonceを加えたものをHash化した値が、特定のターゲット値以下になるようなnonceを見つける作業」のことです。

どういうことか、順に、詳しくみていきましょう。

マイニングで用いられるメタ情報①:Hash

改めて、マイニングに用いられるメタ情報は、次の3つです。

  • Hash(ハッシュ、ハッシュ値)
  • nonce(ナンス)
  • Target(ターゲット)

Hashとは「一連の取引データが、ハッシュ関数と呼ばれる暗号化技術によって、文字列化された値」であり、このHashをつくる作業をハッシュ化と呼びます。

ブロックチェーンの仕組みでは、あるブロック(A)内に格納された諸データ(トランザクション+メタ情報)がハッシュ化され、そこでつくられたHashが次のブロック(B)のメタ情報の一つとして格納されます。

そして、そのブロック(B)内に格納された諸データがハッシュ化され、そのHashがまた次のブロック(C)に格納され、・・・といったことを繰り返していきます。
こうして、前後のブロックがHashによってチェーン状に繋げられているために、その仕組み全体をブロックチェーンと呼ぶのでした(こうしたHashによる繋がりを「ハッシュチェーン」と呼ぶこともあります)。

マイニングで用いられるメタ情報②:nonce・Targetとハッシュ化

さて、ビットコインにおけるマイニングでは、このHashと、ブロックごとに予め定められている「Target」という特定の値をもとに、「nonce」と呼ばれる未知数を求める計算を行います
具体的には、「あるブロックをまとめた情報(バイト)にnonce(未知数)を加えたものをハッシュ化した値(Hash)が、特定のTarget(値)以下になるようなnonceを見つける作業」がProof of Workです。

実際には、例えば、次のような形の式を解くことになります。

「NotNonce」をブロックの情報そのものとすると、それにnonceの値を付加してHash関数を通します。

ここでは、nonceが5の時に条件を満たしたのでnonce=5としてブロックが生成されます(Hash値の先頭にある文字列が00であり、これは01から始まるTargetよりも小さな値であると言えます)。

nonceは一つの値とは限らないため、他の値で条件を満たすものがあった場合も、問題ありません。
そのため、条件を満たしてさえいれば良いので、運良くたままた早く見つかることもあれば全く見つからないこともあります。
したがって、ブロックの生成スピードは、マイナーによって異なります。

このように、ビットコインのPoWでは、マイナーはHash、nonce、Targetを用いた計算(マイニング)を行うことで、ブロックを生成することができます。

ちなみに、先ほど説明したブロック生成過程における一連の作業6「ブロック情報を受け取ったノードが、そのブロックの正しさを検証する」では、マイニングで見つけたnonceを加えた全てのブロック情報をハッシュ化し、それをTargetと比べることで検算を行います。
上の式では未知数だったnonceが明らかになった状態で、各値を代入して式の正しさをみるだけなので、計算自体は非常にシンプルです。
まさに、「検算」としての役割を果たしていることをおわかりいただけるかと思います。

マイニングの計算難易度とビットコイン供給量

マイニングの計算は、ブロックごとにTargetの値が変化し、基本的な傾向としては、徐々に計算難易度が上がっていく設計になっています。
計算難易度が上がる理由は、ビットコインが仮想通貨としての役割を果たすために、総発行ビットコイン数が決まっているからです。
(経済における通貨の話なのでここでは深く立ち入りませんが、大雑把には「インフレを避けたいから」と理解しておけば良いでしょう)

総発行数に上限を設けるために、ビットコインには、一定期間ごとに供給量を半分に減らす「半減期」と呼ばれる設計がなされています。

  • 1ブロック生成ごとに供給され、最初は50BTC
  • 4年に一度半減期を迎える。2020年5月12日に3度目の半減期を迎え、現在、6.25
  • BTC
  • 2140年以降、最小単位を下回るので供給が止まる
  • 最終的な発行数は21万BTC

そして、ビットコインでは、この半減期と通貨の総発行数を守るために、計算難易度の調整が行われています。

先の説明からおわかりのように、マイニング、つまりnonceを見つける難しさは、ターゲットになる値の小ささに依存します。

身近なものに例えるとすれば、マイニングの計算はディズニーの『シンデレラ』で、シンデレラの正体を突き止めるためにガラスの靴を国中の女性に履かせた、あの作業のようなものです。
ある女性がシンデレラと認められるかどうか(=ブロック生成を認められるかどうか)は、ガラスの靴のサイズ(=Targetの大きさ)に、その女性の足のサイズ(Hash)が適応できるかどうかで決まる、というわけです。

そして、そうした女性(nonce)を見つけるための作業の難易度は、当然、ガラスの靴のサイズによって異なります。
もし、靴のサイズが大きければ、その靴にあてはまるような女性はそれなりにいるでしょうし、小さくなればなるほど、該当者はどんどんと少なくなっていくでしょう。
そう考えると、シンデレラ姫は、相当に小さな足の持ち主だったのでしょうね。

これと同じように、ブロックチェーン(ビットコイン)のマイニングでも、Targetが小さいほど、計算難度が上がります。
具体的にはターゲットの値で0がたくさん並ぶほどnonceの発見は難しくなります

そしてTargetは、先ほど述べた発行数の上限と半減期の設計をもとに、ブロックの作成スピードから計算して自動で調整されます。

具体的には、2,016ブロックごとに、予想時間の20,160分以上かかっていれば難易度を下げ、20,160分以下なら難易度を上げます。
また、急激な変化をしないように、4倍または1/4の間に収まるようにする、というルールで運用されています。