ビットコインなどの仮想通貨のブロックチェーンは、マイナーと呼ばれる人たちによって計算問題を解くことで作られています
仮想通貨の安全性について「この計算問題が難しいため仮想通貨の安全が保たれる」と説明されていることが多いです
でも、こんな風に思ったことはありませんか?
「マイナーが解いているのはどんな計算問題なのだろうか」 「計算が難しいとどうして安全になるのか」 「マイニングとハッシュ関数のつながりがわからない」 「難しいならどうしてマイニングなんかやる人がいるの?」
このような疑問を持っている人はすごく多いのではないでしょうか
しかし、意外とこれらの疑問に丁寧にわかりやすく説明してくれるサイトはありません
どうしても難しくなってしまうからです
この記事はこれらの疑問にわかりやすく答えるために書かれています
できるだけ専門用語を使わずに、かみ砕いて説明しているのでぜひ最後まで読み通して理解してください
この内容が分かっていれば十分ブロックチェーンを理解できていると言えるでしょう
では、一緒に詳しく確認していきましょう
ブロックチェーンについて全く知らないという人はこちらの記事を先に読むことをお勧めします
ブロックチェーンのチェーンは何でできている?ハッシュ値のおかげ!
先ほど書いた通り、ブロックチェーンはコンピューターで計算問題を解くことで作られています
ここではマイナーが解いている「難しい問題」について、また、問題の難しさと安全性の関係を詳しく説明します
マイナーがあるブロックをひとつ前のブロックにつなげたいとき、新たなブロックは「ひとつ前のブロックの取引データと、前のブロックに含まれるハッシュ値と、前のブロックに含まれるノンス(各ブロックに含まれる乱数)」から生成されるハッシュ値を含む必要があります
マイナーがあるブロックをひとつ前のブロックにつなげたいとき、ブロックのつながりを証明する必要があります
この図のようなイメージです
ブロックチェーンのチェーンの部分を作ってブロックチェーンに新たなブロックをつなげようとしているイメージです
では、そのチェーンは何でできているのでしょう
実はこのチェーンは前のブロックの「内容を表す数値」をあとのブロックに含むことで作られています
この「内容を表す数値」は「ハッシュ値」と呼ばれています
ハッシュ値とは任意のデータに対し同じ長さの文字列を返す関数です
例えばあるハッシュ関数で「かそうつうか」は「48b75fe4dbc800987f77a53442e04c3f」となり、 「かそうつうかかそうつうかかそうつうか」は「40bf8d21d50a6306d5b0e989c842f0ef」となります
また、この関数の特長は生成された文字列から元のデータを復元するのが非常に困難だという点です
例えば「かそうつうが」をハッシュ関数に通すと「0a9925aee46e2fa3bc8be052b180112c」となり、 「かそうつうか」の「48b75fe4dbc800987f77a53442e04c3f」とは全然違う文字列になります
さて、このハッシュ関数に、ブロックチェーンの一番端のブロックを通すとその内容を表すハッシュ値が得られます
このハッシュ値を新たにつなげたいブロックに含むことでチェーンが作られるのです
マイナーはどんな計算を解いている?ハッシュ値と計算の難しさの関係
先ほど書いた通り、ハッシュ値とは任意のデータに対し同じ長さの文字列を返す関数です
ハッシュ関数の特長は生成されたハッシュ値から元のデータを復元するのが非常に困難だという点です
先ほどの例では
「かそうつうか」が「48b75fe4dbc800987f77a53442e04c3f」 「かそうつうが」が「0a9925aee46e2fa3bc8be052b180112c」となっています
元のデータが少し違うだけでハッシュ値が全く異なっていることがわかると思います
この例はハッシュ値から元のデータを復元することが非常に困難であることを示しています
さて、さきほど新たなブロックは一番端のブロックのハッシュ値を含まなくてはいけないと説明しました
新たなブロックチェーンに含むハッシュ値は値の先頭に決められた数(例えば10個)の0が並ぶ必要があるというルールがあります
最初に並ぶ0の数が多いほどマイニングは難しくなり、マイニング難易度を示すディフィカルティという値が大きくなります
具体的には「0000000000c800987f77a53442e04c3f」のように0が最初に定められた数(時により変動します)0が並んだハッシュ値にする必要があるということです
このルールを守るために、マイナーは前のブロックのデータに「ノンス」と呼ばれる任意の文字列を含めることができます
このノンスを変更していくことで先頭に0が並ぶハッシュ値が得られるノンスを探すのです
先ほど説明した、ハッシュ関数の逆関数が作れないという特長のせいで、求めるノンス値は逆算できません
そこでマイナーは高い計算能力を持ったコンピューターを使うことで条件を満たすノンスを総当たりで求めていくことになります。
この計算問題を解く作業は非常に難しい(=時間がかかる)ため鉱山から鉱物を掘る作業に例えて「マイニング」と呼ばれています
ちなみに、計算に時間がかかりすぎたり、計算が簡単になりすぎたりしないようにハッシュ値の最初に並ぶ0の数は定期的に見直されています
平均10分で計算が終わるように設定されているようです
計算に時間がかかると取引データがブロックチェーンに保存できなくなってしまい、逆に簡単すぎると誰でもデータを偽造したブロックチェーンを延ばせてしまい、信頼性が損なわれてしまうからです
マイナーがマイニングをするメリット
どうしてマイナーはわざわざそんな面倒な仕事をしているのでしょうか
仮想通貨には中央管理組織がないのでマイニングは世界中の誰でも出来ます
しかし、誰かがやらないと仮想通貨の価値はなくなってしまうのです
そこで仮想通貨ではマイナーに報酬が払われる仕組みになっています
一番に新たなブロックを追加できたマイナーには報酬として新しく発行された仮想通貨が与えられるのです
ちなみに、仮想通貨はこのプロセスでのみ新規発行される仕組みになっています
また、コインの発行上限枚数は決まっているので、マイニングでもらえる報酬は数年ごとに減っていく仕組みになっています
ここで発行される通貨量は仮想通貨の価格に大きく影響します。詳しくは以下の記事をご覧ください
ブロックチェーンは本当に改ざんできないのか?する理由がない!
ここまでの話を読んで
「すごく高性能なコンピューターを作れば改ざんできてしまうのでは」
と思った方も多いと思います
しかし、このような不正は大変難しく、さらに、不正をするメリットもないのです
まず、ブロックの追加を困難にしたことで過去のブロックから分岐したブロックチェーンを現在のブロックチェーンより長くすることは事実上不可能になります
世界中で新規発行される通貨をめぐって競っているマイナーの何倍もの速さで計算を解く必要があるためです
さらにブロックチェーンが世界中のデバイスに分散されて記録されていることも改ざんをより困難にしています
仮に、新たなブロックチェーンをもとのブロックチェーンから枝分かれさせて最長にできるくらいの計算能力があったとします
それでも、それほど早い計算ができるとしたら最初から改ざんなどせずにマイナーとして報酬をもらうはずです
そのほうが簡単なうえ、不正をしたブロックチェーンは信頼が損なわれて価値がなくなることが目に見えているからです
以上の理由によりブロックチェーンは信頼性を保てています