本文へスキップ
BecomeCoder

Solidityコース · 第1章 ブロックチェーンとスマートコントラクト · レッスン2

ブロックがチェーンでつながる ― ハッシュの鎖

ローカル実施

導入

ブロックチェーン」という名前は、取引をまとめた「ブロック」が鎖(チェーン)のように連なる構造から来ています。この鎖のつなぎ方が、改ざんを事実上不可能にしている核心です。

説明

取引はいくつかまとめて1つの ブロック に入れられます。各ブロックは、直前のブロックの「ハッシュ」を含んでいます。ハッシュ値とは、データを入れると固定長の短い文字列を返す計算(ハッシュ関数)の結果で、元データが1文字でも変わると結果が全く別物になるという性質を持ちます。

graph LR
    B0["ブロック #0<br/>(ジェネシス)<br/>hash: 0000a1"]
    B1["ブロック #1<br/>prevHash: 0000a1<br/>取引データ<br/>hash: 0000b2"]
    B2["ブロック #2<br/>prevHash: 0000b2<br/>取引データ<br/>hash: 0000c3"]
    B3["ブロック #3<br/>prevHash: 0000c3<br/>取引データ<br/>hash: 0000d4"]
    B0 --> B1 --> B2 --> B3

各ブロックが「前のブロックのハッシュ」を抱えているので、鎖は次のように守られます。

  • もし誰かが ブロック#1 の取引を書き換える と、#1 のハッシュが変わる。
  • すると #2 が持っている prevHash(#1 のハッシュ)と食い違い、#2 以降が全部つながらなくなる
  • 直そうとすれば #1 より後のすべてのブロックを計算し直す必要があり、しかも後述のとおり莫大な計算コストがかかるため、現実的に不可能。

最初のブロック(#0)は前がないので特別に ジェネシスブロック(genesis block) と呼ばれます。

このように、ハッシュの鎖が「過去の記録は後から書き換えられない」という改ざん耐性を生み出しています。

やってみよう

ハッシュ関数は「入力が少し違うと出力が激変する」性質(雪崩効果)を持ちます。helloHello のハッシュがまったく別物になる、とイメージしてみましょう。この性質があるからこそ、1文字の改ざんも即座に検出できます。