最終更新:

【仕組み解説】ブロックチェーンはどうやって改ざんを防いでいるのか — 分散台帳の仕組みを図解


前のハッシュでつながる記録
ブロック1取引データ前:H0ハッシュ H1ブロック2取引データ前:H1ハッシュ H21を書き換えて H1 が変わると…2の「前:H1」と食い違う
線は前のブロックへの参照、H0〜H2は値を略した記号です。後続も再計算する攻撃への対策には、PoWなどの合意と検証の条件も必要です。
ひよこ ひよこ
ブロックチェーンって「改ざんできない」ってよく聞くけど、どういう仕組みなの?
ペンギン先生 ペンギン先生
取引の記録をブロックにまとめて、ハッシュという値で鎖のようにつなぐ仕組みだよ。ビットコインでは複数のコンピュータが記録を検証し、どの履歴を採用するか決める。「絶対に書き換えられない」のではなく、書き換えを検出し、偽の履歴を受け入れさせにくくしているんだ。
ひよこ ひよこ
ブロックの中には何が入っているの?
ペンギン先生 ペンギン先生
ビットコインなら取引データと、前のブロックを指すハッシュ値などが入るよ。取引をまとめたハッシュや時刻、計算で試すナンスもヘッダーに入る。すべてのブロックチェーンが同じ形式というわけではなく、これはビットコインの例だね。
ひよこ ひよこ
ハッシュ値って、どうやって書き換えを見つけるの?
ペンギン先生 ペンギン先生
ハッシュはデータから計算する「指紋」のような値だよ。安全な暗号学的ハッシュでは、書き換えても同じ値になるデータを意図的に探すのは非常に難しい。過去の取引を変えると通常はそのブロックのハッシュも変わり、後続が参照している値と食い違う。ただし、照合は必要だし、ハッシュの鎖だけで再計算を防げるわけではないんだ。
ひよこ ひよこ
じゃあ後ろのブロックも全部計算し直せばいいんじゃないの?
ペンギン先生 ペンギン先生
ビットコインのPoWでは、条件を満たすハッシュが見つかるまで計算を繰り返すんだ。履歴を差し替えるには後続分も計算し直し、その間も伸び続ける正規のチェーンの累積作業量を上回る必要がある。約10分はネットワーク全体のブロック生成間隔の目標で、1ブロックの固定計算時間ではない。だから100ブロックの攻撃時間を1000分と計算することはできないよ。
ひよこ ひよこ
最近「PoS」っていうのも聞くけど、PoWとどう違うの?
ペンギン先生 ペンギン先生
PoSは、資産を預けた検証者がブロックの提案や投票に参加する方式だよ。2022年にPoSへ移行したイーサリアムでは、矛盾した投票などの違反に対して預けたETHの一部または全部を失う罰則がある。計算競争とは違う方法で不正を抑えるんだね。
ひよこ ひよこ
でも、参加者が結託したら不正ができるの?
ペンギン先生 ペンギン先生
できる攻撃は方式と支配する資源によるよ。ビットコインで計算力の過半数を握れば、自分の支払いの取り消しなどを狙いやすくなる。過半数未満なら成功率ゼロという意味でもないし、他人の署名を偽造できるわけでもない。イーサリアムのPoSは確定に少なくとも3分の2のステークの票が必要など、別の条件がある。「どの方式も51%で同じ攻撃」とは言えないよ。
ひよこ ひよこ
お金以外にも使えるの?例えば荷物が届いたら自動で支払うとか?
ペンギン先生 ペンギン先生
スマートコントラクトなら、決めた条件に応じた処理を書けるよ。ただし荷物が届いた事実をチェーン自身が知るわけではなく、外部情報を取り込むオラクルなどが必要。その情報が間違えば処理も誤るから、記録の改ざん対策と、入力情報が本当かどうかは分けて考えよう。
ひよこ ひよこ
なるほど、使えば何でも信用できるわけじゃないんだね!
ペンギン先生 ペンギン先生
そのとおり。履歴を共有して検証する仕組みと、合意を支える条件がそろってこそ意味があるんだ。誰が検証するのか、攻撃者がどの程度の資源を持てるのか、外部の情報を誰が保証するのかを考える必要がある。中央管理で十分な用途もあるから、目的に合わせて選ぼうね。

「記録が変わった」と「記録が本当」は別

たとえば荷物の受け渡し記録を共有するとします。「受け取った」という記録を後から書き換えたら気づけることと、実際に荷物が届いていたことは、別の問題です。ブロックチェーンの改ざん対策を理解するときは、この違いを出発点にすると整理しやすくなります。

図のH1は、ブロック1から計算したハッシュを短く表す記号です。ブロック1を書き換えて値が変われば、ブロック2が持っている「前のハッシュ」と食い違います。ただし後ろも再計算される可能性があるため、ビットコインではPoWと履歴の検証も関わります。

読んだ後は、①誰が記録を検証するか、②書き換えた履歴を採用させにくくする条件は何か、③現実の出来事を誰が入力するか、を一つずつ確認してみましょう。計算で指紋を作る考え方はハッシュ値、方式の違いはPoWとPoSで補えます。

参考資料