導入
「ブロックチェーン」という名前は、取引をまとめた「ブロック」が鎖(チェーン)のように連なる構造から来ています。この鎖のつなぎ方が、改ざんを事実上不可能にしている核心です。
説明
取引はいくつかまとめて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) と呼ばれます。
このように、ハッシュの鎖が「過去の記録は後から書き換えられない」という改ざん耐性を生み出しています。
やってみよう
ハッシュ関数は「入力が少し違うと出力が激変する」性質(雪崩効果)を持ちます。hello と Hello のハッシュがまったく別物になる、とイメージしてみましょう。この性質があるからこそ、1文字の改ざんも即座に検出できます。