17日午後1時に予定されていた大型ハードフォーク「コンスタンティノープル」が、正式に延期となったことがイーサリアム公式Twitterにて発表された。

今回のアップグレード延期は、スマートコントラクト監査団体ChainSecurityによるコンスタンティノープル脆弱性の指摘が発端となった模様だ。

アップグレード延期は、イーサリアムをより利用しやすくするために改善を行ったが、それが起因してセキュリティ上の脆弱性が発現するという二律背反な構造的問題が背景にある。


ELP-1283導入によるガスの低コスト化

今回のアップデートのポイントの1つに、ガス(送金手数料と考えて良い)を安くすることで、イーサリアム参加者の参入障壁を下げコミュニティを活発にしようというものがあった。

そこで導入される予定となっていたものが、ELP-1283​である。

アップデート前には、5000ガス(*)が1つの保存を行うコントラクトを動かすの最低限必要とされていたが、アップデート後にはそれが200ガスにまで減少するというのだ。

今まで、多くのユーザーがガスの高さに苦しんできた。しかし、劇的に減少したガスは、多くのユーザーが心理的障壁なく利用できるようになるだろう。

今後、イーサリアムが多くのユーザーを囲い日常生活に溶け込むためには必須のアップデートだ。

しかし、このガス引き下げに今回の脆弱性を生む問題が潜んでいたのだ。

​​​

特定のコントラクトに対し、リエントリー攻撃が可能に

今回のハードフォークが実行されてしまった場合、「どのような」ハッキングが「なぜ」可能になってしまったのかを解説する。​

まずイーサリアムには、予期せぬエラーに対して対処する目的で作られた​フォールバック関数*というものが存在している。

このフォールバック関数が今回のハッキングで鍵となる。

フォールバック関数は、コントラクト実行にかかる2300ガス以下の時に働く関数だということだけ覚えてほしい。

以下が、図解である。

実際に送金を行うcontract Aと、フォールバック関数を含む攻撃用contract Bが存在する。

このようにして、ブロックチェーンに正常に記述されながら2度支払いが行われてしまう減少が起こる。

では、「なぜ」この事態になったのか。

それはイーサリアムが、コンスタンティノープル以前では、ガスは基本的なコントラクトを稼働させるのに5000ガス以上必要だったため、フォールバック関数が2300ガス以下でないと発動しない条件をクリアしていたからだ。

ガスの減少によって、イーサリアムの利用拡大を狙っていたが、その一方で致命的な構造ミスを見つけてしまう二律背反な状況となってしまった。

今後、イーサリアムがこの構造的問題にどう取り組むのか要注目である。


*フォールバック関数とは、「システム稼働中にエラーが発生しても、機能制限や応答速度低下などで対応するしシステム稼働を継続すること」を指す。

しかし、フォールバック関数は、かつてイーサリアム最大のハッキング事件The DAO事件の原因となる関数でもあった。


また、この事実を発見した、ChainSecurityはブロックチェーン全体にわたってセキュリティを確認しており、現在もその作業は進行中である。

しかし、特筆すべきは実際に脆弱なポイントを検知したというわけではない点である。

正確にいうと脆弱性を示す「可能性がある」ことを発見しただけだが、イーサリアムはアップデートの中止を決断した。

イーサリアム(ETH)の今後の展望

延期期間に関しては、1月18日にイーサリアムコア開発者たちが電話会議にて議論し合う予定となっており、ELP実装の是非も含めた長期的な事業計画について決断を下すようだ。

その他にも脆弱性解決の手段として、複数の開発者はバグ検証の賞金プログラムを提案している。

具体的な延期期間が公表されるのはまだ先の話になりそうだが、今回見つかった問題の解決が先決であることは間違いないだろう。