各通貨には何%攻撃ができるのか?(BTC, ETH, XRP, EOS)

Leona Hioki (日置 玲於奈 )
10 min readJan 20, 2019

--

51%攻撃。これは仮想通貨の仕組みを知る際にもっとも最初の方で知る、大惨事といって良いでしょう。

ビットコインのブロック提案(マイニング)兼承認アルゴリズムPoWでは、50%以上のノードの権利、ハッシュパワーを集められると、好きに分岐チェーンを伸ばして追い越し正当性を奪取することで、一度支払いに使われたチェーンの正当性を失くし無かったことにすることが出来ます。つまり二重支払いが可能に。この事態は”reorg”リオルグと呼ばれます。

ここで注意して欲しいのは、「ブロックチェーンは改竄できないっていうのは嘘、51%攻撃されるとなんでも書き換えられてしまう」というのは間違いです。攻撃者が作る新しいチェーンは署名が間違っていたり、資産の残高を無視したり書き換えたりすることはできないので、基本的には自分1人がした支払いをなかったことにできるのが唯一の利益です。

PoS

さて、この世の中には色々なブロックチェーンのアルゴリズムがあります。PoSはおおよそPoWと並んで有名なアルゴリズムであり、たくさん通貨を持っている人がブロックを投票で承認するアルゴリズムです。Ethereumがこれに移行予定です。

マイニングにハッシュ計算をせず、データを作って投票にかけるだけなので、コストが90%以上抑えられると言われています。
ブロックを提案(マイニング)する段階には、通貨を持ってる人ほど高い確率で選出されてする場合や、誰でも作って投票にかけるケースなど色々あります。

PoSでは基本的に33%の資本集中で高い危険性に達します。これはブロック提案がノーコストでできるため、一気にバーっと分岐チェーンをつないで、そのチェーンに大量に投票して正当性を奪取するのです。long-range攻撃といいます。簡略に書くと、悪意のある33%と33%の普通のマイナーが競合し、それ以外はどちらについて良いか分からず半々に投票し、50%以上を悪意のある集団が占めるケースです。

攻撃チェーンとマトモなチェーンと区別つかないの?って考えると思いますが、基本的にネットワーク分裂というものを想定すると分かりやすいかと思います。
たまたま相互につながっていたネットワークが2つに別れてしまい、その後つながるケースを考えて下さい。両方のネットワークでそれぞれチェーンが伸び、それが後に競合することになります。どちらもマトモなチェーンです。この場合と、long-range攻撃の区別がつかないのです。

一気につないでいるのだから、時間間隔が短いものを排除すれば?って思う方いらっしゃるかもしれません。これが非常に重要な考え方でして、通常のPoSのネットワークでは、ブロック生成時刻(timestamp)が偽造可能であるため、この対策は成立しません。しかし、ブロック受け取りの時刻を承認者が決めてしまい、遅れたブロックを排除できるならば、long-rangeの対策ができます。次のDPoS-BFTがそのシステムです。time-clockの導入です。

ちなみに、PoWでブロック提案を行い承認をPoSでやるハイブリッド型では、33%の資本を持ちつつ、ある程度のハッシュパワーでチェーンをつないで初めて奪取できるため、少々強くはなりますが、微妙ですね。Jihan Wu氏はこれについて考えていたと思われます。

DPoS-BFT

DPoSは提案者・承認者をあらかじめステークに応じた投票権による選出で決めておいて、その中で承認アルゴリズムに沿って決めるという二段階PoSですね。議員内閣制的な間接民主制です。ネットワーク内のパブリックな投票でコンソーシアムチェーンを作ると言い換えても良いでしょう。
EOS、COSMOS、Tendermint、Liskなど沢山あります。

承認アルゴリズムにはBFT(Byzantine Fault Tolerance)が使われることが多く、これはリーダーが1人決まっていて、ブロックを提案し、ボーダーライン以上の署名を一定期間内(time-clock)で集めたら承認するという方式です。ボーダーラインは2/3である場合が多いです。

DPoSと組み合わせる場合、選挙で選ばれたノードを順番に、リーダーをブロック番号に割り振って提案させることになります。

この場合、1/3のノードが悪意があると、ブロックがいつまで経っても承認されず、チェーンがゴネ得で止まってしまいます。つまり、機能は33%の悪意で停止と。
これをLivenessが33%で失われると言います。これも攻撃と言えば攻撃ですが、コレを33%攻撃と呼ぶかと言えば違いますので注意して下さい。

このシステムに2重支払いをさせたりとハッカー的な攻撃をしたい場合は次のように行います。
まず、ブロック提案者が悪で、1/3の悪承認者G1と結託し、Aというブロック提案を承認します。そして1/3の他グループG2にそれを流し、Aを承認してもらい、2/3でAを可決します。次に、悪グループG1はBというブロックを残りの1/3 G3に承認させ、自分たちもBを承認して、Bを2/3で可決し、状態をヒックリ返します。

Aに支払いトランザクションをいれて、Bに入れなければ、二重支払いは成功します。つまり、33%攻撃により、経済的利益を得ます。これをSafetyが33%で失われると言います。

より一般化しましょう。
これは悪い数の割合Xを想定し、ボーダーラインをYとすると次の計算式が満たされた時、二重支払いが起きます。

X+(1- X)/2 > Y

Yに66.6%を設定するとXは33%になりますが、これがLiveness喪失と同じ33%なのが66.6%という値なので、計算されて設定された値でしょう。悪い奴はどちらもやってくるのだから、SafetyとLiveness、一方が低くならないようにしようという話かと察します。ここに違いをつけているのがRippleのコンセンサスです。

ちなみにY=50%でXは0%つまりは、ブロック提案者が悪な時いつでも二重支払いを起こせます。

Ripple

XRPは少々BFTと違うところもありますが、簡略化されたセキュリティモデルでは同型であると考えてよいでしょう。以降は略式モデルなので参考までに考えて下さい。修正はコメントに書いて頂けたら幸いです。

XRPはボーダーラインを80%に設定しています。つまり、20%の悪意があるとシステム全体が止まります。そして、上の計算式に当てはめると、60%の悪意で二重支払いが起こります。

おおよそ、参加した銀行の社会的信用を考えれば、20%は集まらず、60%の悪意に達して最悪の事態になることはないだろうという考えだと思われます。

ただし、選挙で選ばれてはおらず、Ripple社が選んだ協業社が承認者となるので、Ripple社が悪意を持って選んでいる場合は、60%に達するでしょう。

これらの企業が悪意があるかどうかは、その会社とRipple社がどの程度独立した資本と社会的信用を持っているかが鍵になると思われます。これは他のブロックチェーンとは前提が少々異なります。

多くのブロックチェーンは参加している承認者はそのブロックチェーンでの経済活動が主な業務であるという前提です。つまり、そこで支配的になることは一番の利益であるというBitmainのような形態です。
Rippleの場合は銀行はXRP以外の業務で社会的信用を使って利益を出している場合が想定され、XRPの改竄で得られる利益は失う社会的信用と比べて大きくないでしょうから、承認ノードがRipple社と別の社会的信用とビジネスがある場合改竄耐性は強いと考えられます。

余談ですが、XRPの資本分散性が低いので、現状不公平ではないかという点は言えますね。これはBitcoinでナカモトサトシが99%、1000億枚BTCをプレマインしていたら、どんなに大きいハッシュパワーで守られた堅牢な分散システムでも不公平だという話で、XRPが充分な資本分散性をもった時、評価は逐次変えるべきだろうと考えています。

完全にぶっ飛んでいる話

EthereumのVitalikからの提案ではビザンチン将軍問題を考えたLamport博士のアルゴリズムをブロックチェーンに用いれば、99%のビザンチン耐性を達成できる、つまりは200ノードに198人の悪人がいても、正しいソースコードを走らせれば、排除し2ノードが持つコンセンサスデータを得られるという提案です。

全解説を書いたので参照下さい。

簡単に説明するとtime-clockを設けて、ブロック伝播のとき毎回署名して他にブロードキャストします。これにより、悪意のあるノードが二重支払いをしようとする時、time-clockと署名経路の参照により、新しく上書きしようとするコンセンサスを排除できます。

最後に一言。time-clock導入はこのように色々可能性がある話なのですが、同期しなければならないため、ネットワーク分裂への耐性を損ないます。これは、ノードの匿名性と自由な参入権利を阻害し、ブロックチェーンの公共性を下げます。

EOSの場合は21の選ばれたノードを高速回線でつないで0.5秒ごとにブロックを作るというあの時の業界の文脈では狂人のような発想でクリアした部分があり、何事にも代償があるのです。

--

--

No responses yet