MPC Snap: MetaMaskへの多要素認証の統合

ボゴタで開発されたSozu House HackathonのSnap

7分で読める
MPC Snap: MetaMaskへの多要素認証の統合

MetaMask Snapsは、MetaMaskを世界で最も拡張性の高いウォレットにするためのロードマップです。開発者として、まったく新しい方法でMetaMaskに機能やAPIを追加することができます。Web3開発者はこの成長の中核を担っており、本シリーズでは現在開発中の革新的なMetaMask Snapsを紹介することを目的としています。

Web3Auth Snap

Snapリポジトリ: https://github.com/Web3Auth/openlogin-snap/

開発した理由は?

Web3Authでは、多要素認証(MFA)が暗号資産を保護する最善の方法であり、シードフレーズよりもはるかに優れていると常に考えてきました。ETHBogotaにて、MetaMask Snapsの最新ビルドが外部の鍵管理機能を提供できるようになったことを知り、Sozu Houseハッカソンでメタマスクにテクノロジーを統合するという挑戦を決意しました。

技術的な実装について説明していただけますか?

  • 私たちの目標は、新規ユーザーがMetaMaskでアカウントにアクセスするためにログインして2FAを設定できるようにすることでした。その後、ユーザーがトランザクションに署名しようとするたびに、バックグラウンドでMPC SDKが閾値ECDSAシグネチャを実行します。これは秘密鍵を2つの部分に分割することで実現されます。1つはSnapに保存されるローカルシェア、もう1つは署名サーバーに保存されます。複数回の通信ラウンドを経て、署名サーバーとSnapが共同でEthereumトランザクションに署名し、Goerliネットワーク上で確認されます。シードフレーズとは異なり、この仕組みには鍵の不可逆的な損失につながる単一障害点がありません。ユーザーのノートパソコンがハッキングされた場合や、署名サーバーがハッキングされた場合でも、ユーザーは秘密鍵を失いません。

  • 他のすべてのSnapと同様に、私たちのSnapは2つの部分で構成されています。実際のSnapパッケージと、Snapを読み込んで操作するページです。理想的なユーザーフローとしては、すべての鍵管理操作をMetaMask拡張機能のUI内で完結させることでしたが、権限の制限によりそれは実現できませんでした。代わりに、ユーザー認証はSnapの外部で行われ、完了後に状態をSnapに移行します。その後、MetaMaskのRPCエンジンにフックし、MPC SDKとSnapに移行した状態を使用してトランザクションの閾値ECDSAシグネチャを生成することで、トランザクションリクエストに応答します。驚いたことに、ハッカソン開始から数時間以内に状態移行の部分が完成し、残るは署名機能のみとなりました。

  • 残りのプロセスはさらに2つの主要なタスクに分けられます:

  • 既存のWeb3プロバイダーをMPC SDKで再利用し、受信するトランザクションリクエストを処理すること

  • MetaMask Snaps SES環境でMPC SDKを動作させること

  • MetaMaskの仕組みや他のウォレットの機能に精通している方なら、Ethereumトランザクションへの署名には、単に秘密鍵でメッセージに署名する以上の多くの作業が必要であることをご存知でしょう。署名対象のメッセージオブジェクトの形成には多大な作業が伴います。各トランザクションはチェーンとトランザクションタイプごとに固有のフォーマットに従い、後方互換性のためにレガシーな動作をサポートし、現在のガス価格に関する情報を取得し、使用するガス量やガスリミットを計算し、アカウントのnonceを追跡するなどの処理が必要です。幸いなことに、既存のWeb3プロバイダーのほとんどはこれらの機能をすぐに利用できる形で提供しています。しかし、閾値署名ライブラリをこれらのSDKと適切に連携させるために、すべてのモジュールを詳細に調査し、eth-sig-utilライブラリの署名関数を独自の閾値署名ライブラリの署名関数に置き換える必要があり、これには相当な時間を要しました。さらに、MPC SDKはチェーン非依存であり、Ethereum固有のチェックを考慮していなかったため、置き換えたeth-sig-utilライブラリのチェックをリバースエンジニアリングして再実装する必要もありました。例えば、EIP-2では、トランザクションの可鍛性攻撃を防ぐために、ECDSAシグネチャのs値がsecp256k1楕円曲線の位数nに対してn/2 + 1を超えてはならないと規定されており、s値がこの範囲外になった場合にECDSA署名ライブラリがシグネチャを「反転」する処理が必要です。

  • もう1つの課題は、MPC SDKをMetaMask Snaps環境で動作させることでした。MPC SDKはブラウザで効率的に動作するためにwasm(Rustからコンパイル)を使用しています。SDKと署名サーバー間の複数回の通信ラウンドにより、HTTPヘッダーのオーバーヘッドを避けるためにSocket.IOも使用しています。wasmコードをSnapに読み込もうとした際、wasmメソッドの引数型の混在に関する奇妙な問題が発生しました。残念ながら、wasmのデバッグツールはまだ非常に不十分で、エラーメッセージも役に立たず情報量が少ない状態です(例:「Uncaught RuntimeError: unreachable」)。最終的には、すべての混在入力引数を文字列として受け入れ、wasmコード内で整数やバイト配列として解析するという方法でこの制限を回避しました。もう1つの問題は、socket.ioがMetaMask Snaps環境で動作しなかったことです。Socket.IOは通常のWebSocketの上に構築された独立したライブラリ/仕様であり、接続のアップグレード、切断の処理、ロングポーリングへのフォールバックなどを処理します。これらはWebSocketを本番環境で使用する際に非常に役立ちます。残念ながら、Socket.IOのライブラリをMetaMask Snap環境で動作させることができませんでした。そのため、通常のWebSocketにフォールバックし、署名サーバーもsocket.ioの代わりにデフォルトのWebSocketを使用するように書き直し、WebSocketに問題が生じた場合はポーリング戦略にフォールバックするよう対応しました。

あなた自身とチームについて少し教えていただけますか?

ZhenとPrivは、Web3Authの共同創業者です。私たちの会社は、直感的で安全かつ非カストディアルな鍵管理ソリューションの提供を専門としています。優れたセキュリティは使いやすく目立たないものでなければ広く普及しないと考えています。だからこそ、私たちは秘密鍵に多要素認証を使用することを強く支持しています。

MetaMask Snapsを初めて知ったのはいつで、どのような体験でしたか?

約1年前にMetaMask Snapsを試しましたが、当時はMetaMask内の秘密鍵管理機能を拡張する機能がありませんでした。最近SIP-2が導入され(Olafに感謝!)、MetaMask SnapsがMetaMaskのキーリングを拡張できるようになったことで、何が可能になるのかとても楽しみにしています!Snapを構築しながら、MetaMask Snapsの基盤となっているSESシステムも調査しましたが、開発者がMetaMask Snapsを通じて機能を追加するためのプラットフォームとしてMetaMaskが機能するための非常に堅固な基盤だと思います。

MetaMask Snapsが他のウォレットと異なる点は何ですか?

拡張性です!MetaMask Snapsは、MetaMask拡張機能自体のセキュリティを損なうことなく、開発者が実験を行いMetaMaskを強化するための安全なインターフェースを提供していると思います。他の種類のプロジェクトとは異なり、ウォレットには高いセキュリティ基準が求められます。そのため、サードパーティからの新機能の統合は常に長く困難なコードレビューと監査のプロセスを伴い、イノベーションを阻害します。MetaMask Snapsにより、MetaMaskチームは安全な製品の開発を継続しながら、外部の開発者が機能を実験・拡張できるようになります。

MetaMask Snapsを使った開発はあなたとチームにとってどのようなものですか?

MetaMask Snapsは間違いなく正しい方向性だと思います。ベースとなるMetaMask拡張機能のセキュリティを維持しながら、機能を構築できるようになります。現時点ではいくつかの課題もありますが、毎日改善が進んでおり、全体的にとても期待が持てると思います。

MetaMask Snapsはあなたにとって何を意味しますか?

MetaMask Snapsを通じてMetaMaskに多要素認証機能を追加することで、MetaMaskの数百万人のメインストリームユーザーがより安全にアカウントを管理し、詐欺やハッキングの被害から守られることを願っています。MFAはすでに数十億人のWeb2ユーザーに対してこれを実現しており、そのセキュリティのベストプラクティスをWeb3にも取り入れたいと考えています。

MetaMask SnapsがWeb3空間にもたらす可能性についてどのような機会を見出していますか?

全般的に、MetaMask Snapsはセキュリティを損なうことなく、MetaMaskが他者にコードベースへの貢献を開放するための現実的な方法を示していると思います。

MetaMask Snapsを試したい開発者へのアドバイスはありますか?

とにかく試してみてください!少し新しく感じるかもしれませんが、これまでのところ非常に取り組みやすく、MetaMask Snaps向けのConsensys Discordチャンネルでのサポートも充実しています。多くの優秀な開発者が取り組んでおり、MetaMask Snapsの形成に関する議論に参加したいなら、今こそ開発してフィードバックを提供する絶好の機会です!

MetaMask Snapsで開発を始める

MetaMask Snapsを始めるには:

  1. 開発者ドキュメントをご確認ください

  2. MetaMask Flaskをインストールしてください

  3. MetaMask Snapsガイドをご覧ください

  4. TwitterGitHubディスカッションDiscordでつながり続けましょう

次のハッカソンでも私たちのチームにご注目ください!Happy BUIDLing ⚒️

免責事項:MetaMask Snapsは一般的に、Consensys Software以外のサードパーティによって開発されています。サードパーティが開発したMetaMask Snapsの使用は、ご自身の判断とリスクのもとで行われ、そのような活動から生じる損失や損害についてはお客様が単独で責任を負うことに同意したものとみなされます。Consensysはサードパーティが開発したMetaMask Snapsについて、口頭または書面による明示的または黙示的な保証を一切行わず、サードパーティが開発したMetaMask Snapsに関するすべての責任を否認します。ブロックチェーン関連ソフトウェアの使用にはリスクが伴い、MetaMask Snapsを使用する際にはそのリスクをすべて自己負担するものとします。

AIによる翻訳です。エラーが含まれている可能性があります。常に情報を確認してください。

翻訳を評価する
  • MetaMask
    MetaMask

    ConsenSysが構築した、Web3への入口となる主要なセルフカストディ型暗号資産ウォレット。

    すべての記事を読む