ブロックチェーンとは
従来はなにかの取引において、取引の記録(台帳)を権限があり信頼の置ける機関が持ち、取引の正当性を保証していた。
それを、取引に関わる全員が同じ台帳を共有し、取引の正当性を全員で相互に保証する仕組みのこと。
ブロックチェーンのメリット
- 中央集権的ではないので、特定の権力に支配されない。
- 管理コストを参加者全員で負担しているため、コストがかからない。
- 取引履歴の改ざんが実質的に不可能。
- 取引履歴は全て公開されている。
- 単一障害点がないので、システム全体が停止するリスクが低い。
ブロックチェーンの使い所
取引履歴の改ざんが実質的に不可能である特性より、価値の所在や価値の交換を参加者全員で共有する場合に活用できる。例えば以下のような取引に活用される。
- 取引相手が信頼できない場合の取引
- 登録したら一切改ざんできないことがメリットとなる取引
最近では送金決済、電力売買、著作権管理、第三者証明、鑑定書管理、仮想通貨、選挙投票・・・など多岐にわたって利用されている。
ブロックチェーンでの取引の流れ
取引が一定個数集まると、ブロック#100を追加する権利を持つノードがブロック#100を生成し、全ノードにブロック#100をブロードキャストする。
コンセンサス・アルゴリズム(=合意形成のやり方)を利用して、ブロック#100が正しいことを検証する。(コンセンサス・アルゴリズムは②にて記載、そして実際どう使われているのかは③にて記載する予定。)
検証結果に問題がなければ、全ノードの台帳にブロック#100を追加し、ブロック#100が最新である状態に更新される。(=取引成立)
※ここで、取引をしたノードの個人情報は暗号化されているが、どんな取引をしたかどうかは全ノードから見ることができる。
ブロックチェーンデータ構造
ブロックチェーンのデータ構造は、ブロックが前ブロックのハッシュ値を持つことで、ブロックが鎖で繋がれる構成をしていることからブロックチェーンと呼ばれる。
ハッシュ関数とハッシュ値
ハッシュ関数とは、同じデータからは必ず同じ文字列が生成される関数で、それにより生成された値をハッシュ値と呼ぶ。また、ハッシュ値から元のデータを復元することはできない。また、どんなサイズのデータでも決まった長さのハッシュ値が出力され、少しでもデータが変わると全く違う出力となる特徴を持つ。
ブロックチェーンでは、ヘッダにそのブロックの取引情報、前ブロックの圧縮データ(ハッシュ値)、ナンス値を持ち、ヘッダをハッシュ関数の入力値として、次ブロックの前ブロックの圧縮データ(ハッシュ値)を生成する。
例えば、ハッシュ関数がSHA-256だと、出力されるハッシュ値は256ビットの0/1となる。
ナンス値
Number used onceと呼ばれ、32ビットの任意の値。
ビットコインでは、ナンス値を含むヘッダのハッシュ値の先頭に、一定数以上の"0"が並ぶナンス値を求める。(正確には、ハッシュ関数を2回通している。)
この計算は総当たりの繰り返し計算で求める必要があり、計算に膨大な処理・時間を要する。ナンス値を最初に見つけたノードが、全ノードにブロックを追加する権利を得る事ができる。(=ナンス値を見つける競争が行われる。)
改ざんのしにくさ
ブロックチェーンのデータ構造と取引の流れから、どんなデータがどういうルールで取引されているのかをなんとなく掴めた。ここで改ざんのしにくさを考えてみる。
ブロックチェーンにおいて、特定の取引を改ざんするには、
- 改ざんされたブロック以降の全ブロックのハッシュ値・ナンス値の再計算を行い改ざんする。
- 1.の計算を次のブロックが追加されるよりも早く行わなければならない。
- 1.の計算を全ノード(正確には51%)の台帳に対して改ざんを同時に行う必要がある。
そもそも1.を行うには莫大な計算量が必要であるため、現実的ではない。
仮に1.が実行できたとしても、その計算よりも早く次のブロックが追加されてしまうので、2.を満たすことができない。(短いチェーンは排除されるため)
仮に1.を実行し、2.を満たすことができたとしても、全ノード(51%以上のノード)の台帳で同時にこの処理を行うことは現実的に不可能である。
以上より、"理論的には改ざん可能"だが"実質的には改ざん不可能"であるのがブロックチェーンのデータ構造の特徴となっている。