今回はIstanbulアップデートで導入されたEIP-1344についてまとめたいと思います。EIP-1344の説明をする前にMeta-Transactionの仕組みとMeta-Transactionが抱える問題を簡単に説明します。その後に、EIP-1344で何が解決されたのかを説明します。
EIPの原文はこちら
github.com
Meta-Transactionとは
Meta-TransactionはエンドユーザがETHを保有することなくDappsにアクセスするために考案された仕組みです。暗号通過の取り扱い(つまりは秘密鍵の管理やETHの購入方法など)に不慣れなユーザでもDappsにより簡単にアクセス可能にするための仕組みでもあります。
簡単に説明すると、エンドユーザの署名つきのデータをリレイヤーと呼ばれる仲介者がエンドユーザの代わりにブロードキャストすることで、データ改ざんがされることなく、手数料をリレイヤー肩代わりできる仕組みとなります。
Meta-Transactionの処理の流れ
Meta-Transactionは通常以下の流れで処理されます。
1. Contract作成者はMeta-Transaction対応のContractをデプロイする(以降ではこのContractをMetaTxContractと表記する)
2. エンドユーザはMetaTxContractの引数データと、そのデータに対する自身の秘密鍵で作成した署名の2つをリレイヤーに送る
3. リレイヤーは2. で受け取ったエンドユーザのデータと署名をMetaTxContractに送信する
4. MetaTxContractは受け取ったデータと署名をSolidityのecrecover関数を用いてエンドユーザのaddressを復元する
5. MetaTxContractは以降、4. で復元したaddressを送信元として任意の処理を行う。
ecrecoverの使い方については以前の記事でまとめてますのでそちらも参照ください。
y-nakajo.hatenablog.com
Meta-Transactionの適用シナリオ
Meta-Transactionは2017年ごろから利用されている古くからある仕組みです。今日では様々なシーンで使われています。以下で簡単に紹介します。
Meta-Transactionが抱える問題
Meta-Transactionは検閲問題とリプレイ攻撃問題の2つの大きな問題を抱えていると考えられています。以下でそれぞれの問題を簡単に説明します。
検閲問題
Meta-TransactionはリレイヤーがEthereumへブロードキャストしてくれることを信頼しないといけません。一般的なMeta-Transactionではリレイヤーは一人(例えばサービスプロバイダ自身)が担当することが多いため、検閲の問題が発生します。(今の所、この検閲の問題による大事件というのは聞いたことがないですが。。。)
それぞれの解決作
上記2つの問題について、それぞれ解決のための研究が行われています。また、リプレイ攻撃に関してはEIP-1344で防ぐことが可能となりました。以下でそれぞれの解決策について紹介します。
検閲問題の解決策
検閲問題の解決策として、複数人のリレイヤーからなるネットワークを構築し、リレイハブコントラクトを介して任意のリレイヤーにMeta-Transactionを送信してもらうというアイデアが研究されています。
このアイデアはTabookeyによってい提唱され、OpenZeppelinの監修の元、GSN(Gas Station Network)として実装されました。このプロジェクトは現在mainnetで稼働しています。
gsn.openzeppelin.com
リプレイ攻撃の解決策
ようやく本記事の本題です。Meta-Transactionのリプレイ攻撃の対策としてEIP-1344が導入されました。EIP-1344の内容としては、スマートコントラクトが実行されているnetworkのchainIDを取得するためのオペコード:CHAINIDを追加するだけの非常にシンプルなものです。
しかし、このオペコードの追加によって、スマートコントラクトは自身が動作しているnetworkをオラクルに頼ることなく正確に認識できるようになります。
このオペコードを用いたリプレイ保護の仕組みは、Ethereum自体にも導入されているEIP-155のアルゴリズムで行います。
github.com
EIP-155については、以前に解説記事を書いてますので詳細はそちらを参照ください。
y-nakajo.hatenablog.com
EIP-155は簡単に説明すると、Transactionの署名を算出するときに、chainIdも署名の対象に含めるという非常にシンプルなアルゴリズムです。
EIP-1344によって現在稼働しているnetworkのchainIdが取得可能となり、またEIP-155が利用可能になるため強力なリプレイ保護が可能となります。この保護ではたとえネットワークが分裂したとしても新しいネットワークに対するリプレイ攻撃も保護されます。
まとめ
今回はEIP-1344の目的と説明でした。EIP-1344がリプレイ攻撃保護のための仕組みのため、EIP-1344自体の説明というよりもMeta-Transactionの概要、およびMeta-Transactionが抱える問題に対しての説明が長くなってしまいました。
Meta-Transactionは現在では色々なところで使われている、一般的な概念ではありますが、自分自身がMeta-Transactionについてまとめたことがないなぁと思ったので、今回の記事ではMeta-Transactionの解説をメインとしました。
本文でも述べた通り、EIP-1344の導入によってMeta-Transactionをより安全に利用することが可能となりました。今後はエンドユーザのエクスペリエンスのためにMeta-Transactionを用いたアプリがより多く作られていくと思います。