ビットコインの仕組みを通してブロックチェーンを学ぶシリーズ第3弾です。
第2弾では二重支払い問題を防止する方法として、P2Pネットワーク上の分散台帳によるデータ管理について紹介しました。
P2Pネットワークで生じた問題はデータを分散管理によって全員に共有することで改ざんリスクを高めてしまうことでした。そのため一度取引内容を台帳に書き込むと変更できないようにする必要がありました。
本記事ではその仕組みとしてブロックチェーンにおける取引の記録の仕組み、ブロックについて紹介していきます。
取引をブロックチェーンに書き込む
通常の台帳(データベース)に取引を記録する場合、台帳に取引を1つ1つ書き込み保存します。

一方でブロックチェーンでは一定数の取引をまとめてブロックというものを生成することで情報を保存しています。

ブロックは取引内容に加えて以下の2つの値も併せて保存していることが特徴です。これらの値をブロックが持つことによって改ざんが困難な台帳を実現しています。
- ハッシュ値
- ナンス
以下でそれぞれの役割について説明します。
ハッシュ値
ハッシュ値とは各ブロック内の取引を単に時系列に羅列するだけでなく、ブロック同士を関連付ける役割を果たしています。
ハッシュ値はブロックの指紋のようなもので各ブロック毎に固有の値です。ブロック内のデータをハッシュ関数という計算機に入力(ハッシュ化)することで計算されます。

各ブロックのハッシュ値はブロック内の取引内容をハッシュ化しただけではありません。実は前のブロックの情報(とナンス)もハッシュ値の入力に含まれています。

よって新しく生成されるブロックのハッシュ値には一個前のブロックの情報が含まれることになります。また一個前のブロックのハッシュ値にはさらに一個前のブロックの情報が…というように各ブロックのハッシュ値には過去の取引履歴の情報が全て詰まっていると言えます。
このようにブロック同士がハッシュ値を通してチェーン状につながっていることからブロックチェーンという名前がつけられています。
ではなぜこの仕組みが改ざんに強いかというと、ハッシュ値の特徴に理由があります。
- ハッシュ値から入力値は遡ることができない
- 入力値を少しでも変更するとハッシュ値も変更される
ハッシュ値は入力が変わると全く異なる値となります。例えばmd2というハッシュ関数を用いると下のように入力が1文字変わるだけで全く異なるハッシュ値となっています。
「Aさんに100円送る」のハッシュ値はd5ea37e1fcd30d86156f44eb80594993
「Bさんに100円送る」のハッシュ値は3b5676d32b4c588e160c478e6cbfbcb3
ではブロックのデータが変更されるとブロック内のハッシュ値に何が起こるでしょう?

各ブロックのハッシュ値は過去の取引の情報を全て含んでいるため、改ざんされたブロック以降の全てのブロックのハッシュ値が変更されてしまいます。
したがってブロックチェーンに書き込まれたデータを改ざんするためには、改ざんしたブロック以降の全てのハッシュ値を計算し直す(ブロックを生成し直す)必要があります。

ハッシュ値を書き換えるだけならそこまで難しくないのでは?
と思うかもしれませんが、実はとても難しいです。なぜならナンスが1つのブロックを生成するのに10分程度かかるようにブロック生成の難易度を調整しているからです。
ナンスの存在でブロックは簡単に作れない
実はブロックの生成は取引が一定数たまったら自動的に行われるわけではありません。
ブロックを生成するためにはハッシュ値がある数以下(先頭に0が続く)になるような入力値を見つけて初めて作ることができます。この入力値のことをナンスといいます。

ハッシュ値の特徴としてハッシュ値から入力値の逆算はできないので、ブロックの生成者は適切なナンスを片っ端から調べていく必要があります。これは非常に計算量を要するためブロックの生成に時間がかかるのです。
さらにナンスはブロックの生成時間が10分になるように調整する役割を果たしていて、たとえ計算性能の高いコンピュータが現れてもハッシュ値の先頭に必要な0の数が増えるようなナンスに設定することでナンスを探しにくくしてブロック生成の難易度を調整しています。
このようにブロックの生成には非常に時間がかかるため過去の記録を改ざんしようと思っても時間がかかりすぎてしまい現実的に改ざんは不可能なしくみとなっています。
残る課題
以上で改ざんされない分散台帳の仕組みが整ったように思えますがまだ問題は残ります。考えられる問題は主に下の二つです。
システムに参加する人がいない
そもそもの問題として取引内容を台帳に書き込むだけの作業になぜ自分のコンピュータの計算能力を費やさなくてはいけないのだという問題があります。
手間が大きすぎてだれもそんなシステムに参加しようと思わないという問題があります。
台帳の不整合が生じうる
ブロックチェーンではP2Pネットワーク上の各ノードがそれぞれ台帳を保有していて同期をとりながら管理をしています。
したがってブロックの生成や台帳の同期のタイミングで不整合が生じてしまう恐れがあります。そこでどの取引履歴が正しい情報であるかを見極める仕組みが必要です。
以上の問題はコンセンサスアルゴリズムというブロックチェーンにおいて正しい取引について参加者の合意形成のもとで決定する仕組みによって解決されています。次回はコンセンサスアルゴリズムについて説明します。
まとめ
- ブロックチェーンでは取引は一定数まとめられてブロックに格納され、同時にハッシュ値とナンスという値も格納される。
- ハッシュ値は過去の全ての取引履歴の情報を含んでいるためブロック同士を繋ぐ役割を果たしている。
- ブロックチェーン上の取引内容を改ざんするためには以降の全てのハッシュ値を改ざんする必要があり非常に手間がかかる。
- ナンスはブロックを簡単に生成されない(10分程度)ようにする役割を果たしており、ブロックの改ざんには非常に時間がかかるため現実的に不可能。
コメント