第4回 仮想通貨オフ会参加者募集中!

実は単純?ビットコインのマイニング計算方法

この記事は、湯本さんから寄稿頂きました。

膨大なハッシュ値を計算することで、新しい通貨を発行する仕組み採掘(マイニング)
スペックの高いコンピューターと長い時間を必要とし、現在は多くの企業が事業として取り組んでいます。

湯本

ビットコインの計算自体はとっても簡単!

近年では仮想通貨マイニング専用のパソコンや、マイニング専門の工場なども登場し注目を集めていますが、その計算方法はどのようなものなのでしょうか?

そこで今回は、最も知名度が高く、採掘された枚数も多いビットコインを例に、その計算方法に触れていきたいと思います。

ブロックチェーンとマイニングの基本的な仕組み

ビットコインの取引は、ブロックチェーンと呼ばれる分散帳簿に記録を残していく方法で決済をしています。
ブロックチェーンは、取引情報を「ブロック」という単位で管理し、それらをハッシュ値という計算を行う事で繋いでいます(チェーン)。
ハッシュ値の計算を行って情報を暗号化する事で、外部からの介入無く、ブロックチェーンは独立して正当性を確保しています。

このハッシュ値を計算するためには、大きなエネルギーが必要となります。
このエネルギーは、ビットコインのマイニングを行っている人達「マイナー」から供給されており、マイナーはこのエネルギー提供の対価として新しく発行(採掘)されたビットコインを受け取ることが出来ます。

最初は誰でもマイニングを行えるとされてきましたが、ビットコインは現在、発行上限に達しようとしており、その難易度は素人が手を出せる領域をはるかに超えてます。
現在は最新鋭のハイスペックマシンを複数台、しかも長時間稼働させなければ採掘は不可能とされています。

計算方法に入る前に、基本的な情報をおさらいしてみましょう。

ハッシュ値(hash)

前述したとおり、「ブロック」化された取引情報を繋ぐ役割をもつのがハッシュ値です。
ハッシュ値は特定のアルゴリズムを計算する際に算出され、他では代用できないような特徴があります。

ハッシュ値の特徴
・元となる情報から作り出されるハッシュ値は必ず同じ数列を持つ
・元となる情報が少しでも変われば、ハッシュ値はまったく別の数列に変化する
・ハッシュ値から、元となる情報を特定することはできない
・ハッシュ値の数列は必ず256桁で構成され、同じものは存在しない

これらの特徴からわかるように、ハッシュ値だけでは元の情報を特定する事ができず、複数のハッシュ値を計算する事で徐々に暗号化を解くということもできません。
これによりブロックチェーンは高い安全性を誇り、改ざんが難しいと言われています。

ナンス(nonce)

ナンスとは、ハッシュ値と組み合わせることでセキュリティ強度を高める、暗号化された数列のことです。
ナンスはランダムな変数として作られており、ナンスとハッシュ値が合わさったものが「ブロックハッシュ」としてブロックチェーンに組み込まれています。

画像を見て頂けるとわかるとおり、採掘されたビットコインのナンスは全て「0」が連続した数字になっています。
これはビットコインが掘り起こされた状態を示しており、これを求める計算を行うことがマイニングの基本的な仕組みになっています。

湯本

マイニングの計算は、「0」の連続するナンス(ブロックハッシュ)を見つけるために行われます

ビットコインマイニングの計算方法

ビットコインのマイニングの計算は非常に簡単なものです。
基本的には「前ブロックのハッシュ値」「Merkle root」、「ナンス」をハッシュ関数に代入して計算していきます。
現在は「0」が19桁連続した数字から始まれば正解で新しいビットコインが誕生し、この連続した「0」は掘り起こされたビットコインが多いほど増えていきます。

今回はビットコインのブロックチェーン情報を確認できるサービス「ブロックチェーンエクスプローラー」の、最も新しいビットコインを例にとって見ていきましょう。

計算手順

・前ブロックのハッシュ値①と、Merkle root②を確認

・好きな32ビットの変数を決める(ナンス)③
・①、②、③をハッシュ関数(ビットコインの場合は「SHA-256」)に代入し、256桁の値「ブロックハッシュ」を得る
・答えの先頭が19桁の「0」であればマイニング成功、違った場合は別の③を試す

この計算手順を、ひたすら変数ナンスを変えて計算していきます。

19桁の「0」が連続するブロックハッシュが算出される確率は1垓に1回、1垓は10の20乗です。

紙とペンで計算する計算式がある

2014年、ケン・シュリッフ氏という人物が、紙とペンだけで上記の計算方法を行うため、下記のような表を作成して実際に計算しています。

ケン・シュリッフ氏のマイニング計算方法は、各ブロックA~Hを16進数で書き、それぞれの下に2進数の値を置いています。
この表にブロックのハッシュ値、Merkle root、ナンスを当てはめていくいき、ブロックハッシュの値を求めることが可能だそうです。

ちなみにこの計算は動画でも紹介されています。

シュリッフ氏のブログ「Ken Shirriff’s blog: Mining Bitcoin with pencil and paper: 0.67 hashes per day 」によると、16分45秒ほどで計算が完了すると語られています。
手計算でも、1ブロックハッシュ値を17分ほどで計算する事ができるのは確かに凄いことなのですが、正解が1垓に1回の割合でしか算出することができないことを考えると効率的ではありませんね…。

まとめ

今回はビットコインマイニングの計算式についてご紹介してきましたがいかがだったでしょうか?
現在はマイニングツールなどが開発されて、これらの計算式を理解しなくても簡単にマイニングを行うことも出来ます。

最近はゲームを行う事で自動的にマイニングができるというコンテンツも数多く登場し、今後さらにマイニングのハードルは下がっていくと思います。

ただ、今後本格的に仮想通貨マイニングを行っていこうと思っている人には仕組みを覚えておくということは非常に大切です。

既存のツールにばかり頼っていると、何かトラブルが発生した場合にその原因がわからないということも非常に多いです。