改ざん困難な台帳とは
研究を進めるうちに少し見失ってきたので、雑記的にちょっとまとめてみる。
ブロックチェーンは改ざん困難な台帳
みたいな言説をよく目にしますよね。改ざん不可能ってなんでしょうか。雰囲気でブロックチェーンをやっているのでわからなくなってきたので、ざっとよくわからないということを説明してみる。
ブロックチェーンの動作
まずブロックチェーンの動作を考えてみる。ここではPoWベースのものを想定してみる。正直PoWベースでないブロックチェーンにはあまり新しさを感じないのだが、その話はまた別途。
基本的な動作は以下だと考えている*1。
- 誰でも検証可能なトランザクション
- 検証済みトランザクションをまとめたものをブロックとする *ブロックには直前のブロックのハッシュ値が含まれる
- ネットワーク上で最も累積difficultyが高くなる(=計算パワーを投入された)ブロックが正しいとみなす
- 善良なノード*2たちは、典型的には累積difficultyが現在最も高いブロックに続くようにブロックを作る
- 改ざんを試みる攻撃者は、善良なノードの計算パワー < 攻撃者の計算パワー でなければ、累積difficultyを自分のフォークしたチェーンの方が大きくすることは困難
- つまり改ざんを他のノードたちに認めさせることは困難 = 改ざん困難
なるほどネットワークの全ての善良なノードたちより大きな計算パワーを持つのは難しそうだ、そんな攻撃してもペイしないだろう。 というのがブロックチェーンの安全性として語られているように思う。
どこに正しいチェーンってあるんですか?
さてここで考えてみよう。改ざん困難、書き換えるのが難しい、ということだが、そうだろうか。例えば、あるノードへ攻撃者が侵入して、ノードの持つDBを書き換えたとする。改ざんできていないだろうか。いやいやネットワークからブロックが流れてきてすぐ正規のチェーンへと修正できるはずですよ、と言うだろう。
ではネットワークってそんなに単純なものなのだろうか。Eclipse攻撃へ脆弱だ、という話は前から議論されている。ネットワークを分断することで、正しいチェーンへの同期を阻害することは理論上可能だ。繋がったPeerのDBが改ざんされていないかどうかなんて自分からは知りようがない。パブリックな非構造Peer-to-Peerネットワークにおいて、ネットワークに前提を置かずに同期すればいいなんていい加減だなぁ、と個人的には思う。
さらに言えば、最も計算パワーが費やされたブロックを正しいとする、という仕組みだが、計算パワーに(理論上は)上限はないので、新たに計算パワーが大量に費やされたブロックを受信する可能性はいつまでも無くならない。いやいや十二分に大きいネットワークであれば現実的ではない計算パワーを投入しなければならないんですよ、と言うかもしれない。過去のネットワーク全体の計算パワーの2倍以上に計算パワーが短期間で投入されている事実を鑑みれば*3、過去の時点においてより強大な計算パワーを投入することは可能であったということだ。しかも、こういったことを考えているとネットワークが十分に拡大しなければ改ざん耐性を持ってるとは言えない。
もっと言おう。過去の時点において計算パワーの50%に支持されていたブロックに対して、現在の計算パワーの何%がそれに当たるだろうか。また、過去の時点以上の計算パワーを投入して新規にその時点のブロックを作ることは容易なのではないだろうか。いやいやタイムスタンプというものがありまして、それで一定時間以内のものしか受け付けないんですよ、と言うかもしれない。P2Pで時刻ほど信頼できないものはない。ブロックのタイムスタンプなんて書き換えてからブロードキャストすればいい話だ。
そう思うと、ネットワーク上に合意された正しいチェーンというのはどこに存在するのだろうか。いつでもひっくり返る可能性があり、自らのDBや、ネットワークへの前提条件もなく、改ざん困難、と言うのはどういうことだろうか。正しい台帳、というものがどこにあるのか、自分の中でいまいちしっくりこなくなってきてしまった今日この頃。
推測する前提条件
ということでかなりいきなり
ネットワーク上の計算パワーの50%以上が善良なノードに維持されていれば改ざんが困難
というのは結構いろんな条件を無視している気がする。
少なくとも
- 有限時間内にネットワークを通じて善良なノードに全てのブロック/トランザクションは到達する
- ネットワーク上の計算パワーは常にその攻撃にかかるコストがペイしない程度に投入されている
という条件があると自分は考えている*4。
しかしこの二つの条件は、パブリックな非構造P2Pネットワークで常に実現可能なことだろうか。答えはおそらくNOではないだろうか。 この辺の話をしっかり整理して改ざん困難、ということを説明してくれる人がいたら泣いて喜びます。
こうP2Pでの改ざん困難性や同期、といったことを考えてるとState Machine Replicationとかそういう話な気がしてきた。そういった方面から分析した論文をしっかり漁ってみようと思う。
*1:ここに対するツッコミを歓迎します
*2:正確には善良なマイナー
*3:統計をみると2倍なんてものではないことがわかる https://www.blockchain.com/ja/charts/hash-rate?timespan=all
*4:精査していないので今度精査して記事を書いてみたい。