Ethereumのハードフォークの概要と私見
Ethereumが近くまたハードフォークするということで、簡単に概要を説明して私見を書いておきます。
ハードフォークの背景ハードフォークにいたる拝啓などについては以下のリソースも参考にしてください。(情報の正確性は各自で判断お願いします)
以下のサイトは速報で情報を更新してくれています
一応自分でも簡単に背景を説明しておくと、
・9月に行われたDevconの直前あたりから、Ethereumネットワーク上にDoS攻撃(一種のスパム攻撃)が開始される。
・結果としてGethノードがクラッシュして使えなくなるという状況に。緊急事態警報がEthereum開発者から出されて、クライアントアップデートなどで応急手当がされる
・しかし犯人からの攻撃者はどんどん違う角度から攻撃を継続しており、ブロック承認タイムが通常の数倍くらいかかるような状況が今常態化している
・結局ハードフォークをしてコントラクト実行のGasコストの引き上げをしないと、根本的な問題の解決にはならないことが判明。
・現在ハードフォークに向けてコードの実装とテストが行われている。早ければ来週中くらいにはハードフォークが実行されるような様子。
ガスプライスとハードフォークの必要性DoS攻撃についてもう少し説明します。
ご存知の人も多いと思いますが、ビットコインの送金に少額のビットコイン手数料が必要なように、Ethereumのスマートコントラクトの実行にはガス(Gas)が必要です。ガスは、Etherから生成され、Etherとガスの変換率はEtherの市場価値に応じて変更が可能です。なんでわざわざEtherとガスの変換というめんどくさいことをするかというと(詳しくはここでは説明しませんが)、このようにすることでコントラクト実行に必要なガスの絶対値を固定しつつ(例えば100ガスとか)、変換値を変更できるようにすることでEtherの市場価格の変動の影響をなくすためです。Etherが高くなったら変換レートを変更して、100ガスのコスト(ドル建てのコスト)などは固定化できます。
さて、今回の攻撃はこのコントラクト実行に必要なガスの値段のひずみをついた攻撃です。簡単に言ってしまえば、コンピュータリソースを結構消費する特定のコマンドに対するガスコストが低すぎる状況になっており、めちゃくちゃガスコストが安いトランザクションを大量にネットワーク上に流すことで、Gethクライアントが対応できなくなってクラッシュしたり、ネットワークがパンパン状態になって他のトランザクションがなかなか承認されないような状態になっています。
ビットコインでも似たようなスパム攻撃はしょっちゅうあるのですが、Ethereumの方がビットコインよりコントラクトで実行できることが多いので、攻撃される領域もビットコインより広く、ビットコインへのスパム攻撃よりかなりひどい状況になっているともいえるかもしれません。
途中のテクニカルな話は結構省略しますが、要はこのスパム攻撃を元から解決するには、ハードフォークをして攻撃対象になっている部分のガスプライスを引き上げる必要があるということです。
こうすることで、ハッカーが攻撃すること自体は変わらず可能ですが、攻撃に必要なコストが上昇し、いずれDoS攻撃が止まるというわけです。(逆に言えばガスコストの引き上げをしないと多分攻撃は一生止まりません)
ちなみにEthereumの兄弟的なEthereum Classicも同様の攻撃を受けているようです。
Ethereumのハードフォークの是非
ニュースの見出しだけみていると、「え、Ethereumまたハードフォークするの?大丈夫なの?」という感じの印象も受けるかもしれないですが、個人的に今回のハードフォークは妥当というか仕方ないと思っています。
The DAO後のハードフォークの流れには反対する人も多かったし、今もそれが理由でEthereumを見限ってしまった人たちもいますが、それはThe DAOというプロトコル上の分散アプリの一つの救済(尻ぬぐい)をプロトコルの変更でやってしまうことで、ブロックチェーンの改ざん不能性を殺してしまったからです。
ただし、今回の件はプロトコル自体に対する攻撃、問題なのでそれに対してプロトコルを修正して対応するのは別に問題ないと個人的には思います。今後もこういう問題は出てきそうですし、ビットコインでも同様にプロトコル自体の攻撃でハードフォークを余儀なくされる可能性ももちろんあります(ビットコインはそこらへんのデバグ、攻撃への耐性がかなり進んでいるというのがビットコイナーの主張でもありますが)
残る疑問
今回のハードフォークは別に仕方ないかなと思う一方、何点か気になる点もあります。
・コンセンサスは本当にあるのか?
EthereumのRedditを見ていると、「ハードフォークのコンセンサスが取れた!」みたいな感じでEthereum開発者が謳っていますが、なんかEthereum開発者は簡単にコンセンサスって使うな~と感じることがあります。The DAOの時もそうでしたが。
そもそもコンセンサスが取れたという時に、何をもってコンセンサスといっているのでしょうか?Ethereum開発者内の同意でしょうか?マイナーの同意でしょうか?ユーザーの同意でしょうか?どう測っているんでしょうか?
今回の件は事実上コンセンサスはある程度とれているとは思うのですが、なんかこのコンセンサスという態度に関して少し違和感を感じる部分もあります(まあちょっと厳しく見過ぎかもしれないですが)
・ハードフォークは問題を解決するのか?
今回のハードフォークは二段階に分かれており、まずガスプライスを引き上げて攻撃を食い止め、残る空の大量のトランザクションをもう一つのフォークで取り除くとのことです。
これをすることで今の攻撃は確かに対応できるかもしれないですが、なんでもできることがウリのEthereumは、ハッカーにとっても攻撃の方法が色々存在するということでもあり、今後も似たような状況に陥るのは容易に想定できます。その度にハードフォークしていくのでしょうか?別にそれはそれでいいと思いますし、そうすることで段々成熟していき、ついに分散化され、耐性もつくというのがおそらくEthereumの青写真だと思いますが、いつまでこのイタチごっこが続くのか自分は全然わからないです。
また、一つ目のフォークはともかかく、二つ目のトランザクションを取り除くフォークは検閲ともとれ(トランザクションの差別を開発者がする)失敗するとまた分裂とかそういうことが起きてもおかしくない気もします。(確率は低いと思いますが)
応急処置的にハードフォークを今後も継続していくしかないとは思うのですが、最悪の展開ハードフォークしても新たな攻撃がすぐ始まり、またネットワークもまた二つに分裂するという展開もなくはないかな、と。
どんどんEthereum、Ethereum Classic、Ethereum NEO、Ethereum Legacy、Ethereum Originalとかなってったらちょっとウケる笑
最後に
なんかアンチEthereumとか思われることもあるのですが(笑)、別にそんなことはなく、リサーチ対象としては非常に面白いと思っています。特にガスコストのところもそうですし、Casperなど色んなインセンティブモデルを駆使した仕組みをリサーチ、実験しているのは個人的にはすごく面白く、今後もやってってほしいなと勝手に思っています。
同時にやはり安定性の問題などは今後もかなり問題になってきそうな感じで、1年くらい前から言われていたことがジワジワ表面化しているという感じですね。
とりあえず近く行われるハードフォークをターゲットにさらなる飛び技ハック攻撃が出てくる可能性もあるので注視しておきます。
それでは。
***
このブログではトークンを使った実験として、寄付+トークンという切り口で実験をしています。この記事が役にたった、もしくは面白かった場合は、上記の寄付ボタンをクリックして、IndieSquare Walletからビットコインで是非寄付をお願いします!このブログの独自コインCNPCOINをお返しします。
CNPCOINを集めると、CNPCOINを持っている人にしか見れないトークンフォーラムで自分のぶっちゃけ話を読めたり、トークンを使ったブロックチェーンゲームのカードの購入などに使えます!CNPCOINについて詳しくはこちらのページを参考にしてください。(もしくはサイドバーのCNPCOINについてという部分)
また、寄付金額やこのブログのアクセス数の推移により、お返しのCNPCOINのレートは変わっていきます。(初期に応援してくれる人ほどインセンティブがあるようにしています)最初は、CNPCOIN=1円から始めて、2016年8月時点でCNPCOIN=3円のレートでビットコイン寄付に対してお返ししています。