🐻

ブロックチェーンは攻撃手法で分類するとよい

2020/12/15に公開

この記事はpyspaアドベントカレンダー2020の15日目です。

ブロックチェーンによって出来ることを吹聴する無責任な記事は枚挙にいとまがないが、出来ることではなく出来ない事に関して論じる方がその技術の輪郭を適切に表現できると考えたので手の勢いのまま書いてみる。

シビル攻撃(Sybil Attack)

匿名P2Pを作る際によく登場するのがこの攻撃手法である。内容は端的に言うと「大量の悪意ある参加者をP2Pシステムに加えまくる」という物である。計算力の原価は半導体技術の発達と共に大幅に下がり続けており仮想マシンやらコンテナやらプロセスやらを沢山立ち上げるコスト的ハードルは低い。違法なデータのやり取りが行われている匿名P2Pに対して警察が捜査を仕掛けるような道理さえあれば現実的なコストで匿名性を攻撃できる。
BitcoinのようなPoW型のシステムがブレークスルーを果たしたのはまさにこの攻撃手法に対する耐性の獲得であって、他の部分(IDが疎結合??とか)はそれと比べれば枝葉末節と考えている。
ビザンチン障害はそもそも問題設定としてこの攻撃を想定しておらず、ビザンチン将軍問題に登場する帝国将軍達も、まさか自分たち自身が顔も名前も知らない1000倍の人数のSybil達に囲まれているとは夢にも思うまい。なので「ブロックチェーン(bitcoin)がビザンチン将軍問題を解決した」という表現は実はちょっと間違っており、参加者数が不明というビザンチン将軍問題よりも難しい問題を確率的に解いたとは言える。ビザンチン将軍問題はコンセンサス問題とされる一方でビットコインが示したのはナカモト・コンセンサス(NC)と呼ばれる別のコンセンサスに至る方法であり、アカデミックな文脈ではコンセンサスとNCを混同してはならない。
いわゆるプライベートチェーンは言い換えればシビル攻撃が不可能になるようにアルゴリズムとは別のレイヤーで対策を行った方式という整理ができる。シビル攻撃の可能性を端から排除できるのであれば「自分たちは合意を行っているつもりだが実は世間から見たら少数派の閉鎖的グループに過ぎなかった」という状況に対処する必要がなくなる。ビットコインはSplitBrain問題に対してナカモトコンセンサスで解決し、プライベートチェーンはビザンチン耐性アルゴリズムで解決する。ナカモトコンセンサスは後から覆るかも知れないがビザンチン耐性のある合意アルゴリズムは後から覆る事はない。そしてそれらを両立する事はおそらく原理的に無理である。
頭が痛いのは、単にブロックチェーンの改良として「参加者の中でランダムに選んだ参加者の多数派を次のブロックの選定者にすれば良い」みたいなシビル攻撃にすら耐えない脆弱なアルゴリズムが「もうPoWは古い!次の最先端ブロックチェーン技術はこれだ!」みたいなノリで鳴り物入りで時々登場することである、目を覚ませそれはただの退化だ。
あとByzantine Fault Tolerant(BFT)系のアルゴリズムを用いたブロックチェーンを持ち出してきてPoWは古いとか煽っている無知な人もたまにいるが、ビザンチン将軍問題に対する解法とされるアルゴリズムはシビル攻撃に対しておよそ無力である。プライベートチェーンとパブリックチェーンの区別すら付かない状態で知ったかぶりをするのは恥ずかしいのでやめよう。

51%攻撃

これはPoWを用いた確率的合意に対する攻撃手法であり、計算力版シビル攻撃とも言える。やり方は簡単で全体の計算力の51%を超えるほどの計算リソースを叩き込む事で正当なチェーンより自分にとって都合が良いチェーンを正当な物とすることでP2Pシステムを思い通りにしようというものである。シビル攻撃は「悪意ある参加者の頭数を揃える」というものだったのに対し、51%攻撃は「悪意ある参加者の計算力を揃える」という点でPoW版シビル攻撃という見方はできるかも知れないがPoWはそもそもそういう攻撃に耐性を得るために考案されており例えば現在のBitcoinに対して51%攻撃を仕掛けようと思ったら国家予算ぐらいの経済力が要求される。とはいえ実際にそれぐらいの経済力をもって攻撃を仕掛けてきた場合に対する究極的な解決策は知る限り未だ発明されていない。
暗号通貨に限らず、誰でもアクセス出来る金庫というのは破るコストが破るメリットを下回ったタイミングで誰かしらに破られるものであり、Bitcoinを攻撃するのは容易い話では無いがマイニングがさほど行われていない草コインは現実的な経済コストで攻撃可能である。草コインを適当に買って価値が暴投する日を夢見ている人もいるが、その草コインの時価総額は攻撃にかかるコストを超えることはまずない(超えたらいずれ攻撃される)のでそのコインの合計ハッシュパワーが伸びる事を夢見る方が順番としては先である。

イクリプス攻撃

例えば何らかの物理的な商品をビットコインで購入する際、ビットコインを受け取る側は自分のwalletにBTCを振り込むトランザクションがブロックとして認められた時に自分がBTCを受け取ったと判定するのだが、品物を渡した後で自分が認めたものより長いチェーンが正当なものとして頒布されたら自分がBTCを受け取ったというブロックは不当なものとして扱われてしまい最終的に自分のwalletには一切振り込まれていなかった事になる。イクリプス攻撃というのはこういう事態を意図的に起こす。レジの裏で動いているノードに対して間違った短いチェーンしか見えなくなるようにプロセスなりネットワークなりのレイヤーから小細工をする。その短いチェーンの中で支払いを行って認めさせた後でその細工を解除するとより長いチェーンが世間では認められていた事になり支払いはロールバックされる。攻撃者は支払いの代価の品物と支払ったはずのコインの両方を持って姿をくらますことが出来る。51%攻撃よりは現実的なコストで実現可能な攻撃として登場したが、新規ブロックを認める条件を難しくする等の方法によってアルゴリズムレベルでかなり緩和可能である。

ロングレンジ攻撃

PoWコスト掛かりすぎ問題に対する対抗策の一つとして有力視されているのがProof of Stake(PoS)である。これはPoWの「計算量の大多数を持つ側に決定権を与える」を変えて「通貨の大多数を持つ側に決定権を与える」という方針にしたものである。とはいえその実装の幅はまだまだ広く、詳細に関しては現時点でも毎年のように改良した論文が出ている。ナイーブなものでは「沢山コインを持っているマイナーに要求されるnonceの条件を数桁分緩和しよう」みたいなハイブリッドから「コインを沢山持っている奴の中で代表者をランダムで複数選んで合議」みたいなものもある。詳細に関してはここでは立ち入らないが、およそ共通してPoS系に通用しうるのがロングレンジ攻撃である。
コインを沢山持っていれば高いマイニングコストを支払わなくてもブロックを生成できるので、複数の矛盾するブロックを安価に生成して利益を誘導できる、というPoSの性質を利用して長大なチェーンを安価に生成して現在の正規チェーンに長さ競争で打ち勝って過去のトランザクションの一部または全部を無効化する事ができる。そのためには現在の時点で大量のコインを保有している必要は無く、何らかの方法で過去に一時的でも大量のコインを持っていたならばそこを起点にして長いチェーンを安価に生成できるという点がロングレンジの名前の由来であろう。PoSに本気であるところのEthereumはこれに対応する方法として正規チェーンに対して定期的(100ブロックごと)に「これが正規なチェーンであり以降は覆らない」という投票を行う事で対策ができるとしているが、そもそも合意を得ることが難しいからPoWによるBitcoinが発明されたのであり、不特定多数かつ悪意があるかも知れない参加者の間で非中央集権的に信頼できる投票が可能なのであれば初めからその投票でトランザクションを実装してしまえばよかったのでは…?と思わなくもない。いくらかの記事を読み漁っているとまるで解決済みの問題かのように扱われているが、ArXivの論文とかを眺めると究極的な解決策はまだ無く、飽くまで緩和というレベルまでしか解決していないように見える。

他にもググってたらグラインド攻撃とか細々と出てきたが興味が尽きたのでここまで。
分散システムにおける合意という観点での攻撃手法というだけでいくつかあるが、これとは別にこの上に構成される金融システムに対する攻撃という形で例えばステーブルコイン同士を交換したり借りたり出来るプラットフォームで大量のコインを借りて相場を変動させて売り抜けて返済して儲ける(フラッシュローン攻撃)といった、仮に現金でやったら金融犯罪になるんじゃないかという攻撃手法も次々現れておりもう流石に追いきれない。

言いたいことは多くはなく

  • シビル攻撃に耐えるというのがBitcoinのそもそもの原点
  • Bitcoinの改良のつもりでシビル攻撃への耐性を失った物はそういう物として認識されて欲しい
  • PoSを改善する過程でも新たな攻撃手法は登場しておりアカデミックではまだジリジリと論文を重ねている段階
  • 安易に全ての問題が解けたとは言えないが、絶対無理とも証明しきれないぐらいのラインを漂っているので強い言葉で煽っている人は大体疑ったほうが良い

以上です。

Discussion

Hidden comment