Each month, MetaMask Security Director Lukerが最新の暗号資産攻撃と新たなリスクについてレポートします。
2022年5月版では、MetaMaskのHackerOneバグバウンティプログラムの開始、MetaMaskの依存関係の互換性を向上させるためのEndoによるimport.metaおよび__dirnameの実装、そしてMetaMask Flaskにおけるマルチパーティ計算署名を実証する分散鍵生成プロトタイプSnapについて取り上げました。詳細は以下をご覧ください。その前に…
注目のSTEMパイオニア:RSAの共同発明者であり秘密分散の考案者、Adi Shamir
Adi Shamirは、1977年にRon RivestおよびLeonard AdlemanとともにRSAアルゴリズムを共同発明したイスラエルの暗号学者です。これは初めて実用化された公開鍵暗号システムであり、3人は2002年のチューリング賞を受賞しました。1979年には「How to Share a Secret」を発表し、Shamirの秘密分散を提唱しました。これは秘密をシェアに分割し、一定の閾値数のシェアがあれば元の秘密を復元できる方式です。この特性は、本レポートで取り上げる分散鍵生成の研究の基盤となっています。
MetaMask、HackerOneバグバウンティプログラムを開始
MetaMaskは2022年6月、HackerOne上でバグバウンティプログラムを開始し、セキュリティ研究者がMetaMask製品の脆弱性を報告するための正式なチャネルを設けました。
Endoがimport.metaと__dirnameを実装し、MetaMaskの依存関係の互換性が向上
2022年4月のEndoのCommonJSサポートの進捗を受け、エンドツーエンドのテスト結果から、一般的なモジュールを実行する上での最大の障壁がimport.meta.urlと__dirnameのサポートであることが明らかになりました。
2022年5月3日に行われたAgoric、MetaMask、Moddableの会議では、モジュールのインポートプロセスにおいてimport.metaをどの段階で処理すべきかについて合意が得られました。importMetaHookのコンセプトがCompartment仕様に導入されました。このフックは、静的解析によってモジュールがimport.metaにアクセスすることが確認された場合にのみ呼び出されます。Node.jsはそこにresolve関数をアタッチしており、その生成にはコストがかかるため、結果が使用される可能性がある場合にのみフックを呼び出すことが最善とされています。
import.metaの実装は完了しています(spec issue、implementation PR)。残る作業は、Endoにおいてimport.meta.urlをデフォルトでモジュールに渡す実装です。__dirnameの実装も完了しており(PR)、正確性とWindowsパスのサポートを確保するために複数回の反復を経ています。
また、.jsファイルのデフォルトモジュールタイプの前提を変更するネストされたpackage.jsonファイルのサポートも追加されました。これにより、compartment-mapperがCommonJSとESモジュール仕様の両方をサポートするために複雑な構造を持つパッケージを処理できるようになります(source)。
__esModuleの動作サポートは保留中です。2回の実装試行はいずれもエンドツーエンドテストのスコアを悪化させる結果となりました。3番目のアプローチ——SES内のThirdPartyModuleInstanceにサポートロジックを配置する方法——は議論を呼ぶものとして検討されています。この機能はissue #927で追跡されています。
分散鍵生成プロトタイプSnapがMetaMask FlaskでのMPC署名を実証
マルチパーティ計算(MPC)機能において進展がありました。チームは以前のプルーフオブコンセプトであるWebAssembly(WASM)バインディングをもとにプロトタイプSnapを作成しました。このSnapはMetaMask Flaskで使用可能であり、分散鍵生成(DKG)とメッセージ署名を実証します。このSnapは、鍵生成とメッセージ署名のための証明の保存に加え、鍵シェアのエクスポートとインポートをサポートしています。
内部的には、このパッケージはGG2020(Gennaro and Goldfeder 2020、論文)の実装を活用しています。GG2020は、参加者が同時にオンラインである必要なく非同期で参加できる非インタラクティブなオンラインフェーズをサポートするプロトコルであり、中断する参加者の効率的な検出を可能にします。
次のステップとして、snap_manageStateへの暗号化サポートの追加によりSnapコード内での鍵シェアの手動暗号化を不要にすること、続いてトランザクション署名のサポート追加が予定されています。このプロトタイプはtss-snapリポジトリ(元々はecdsa-wasmとして公開)で追跡されています。
MetaMaskの2022年5月暗号資産セキュリティレポートでは、MetaMaskのモジュール互換性チェーンのためのEndoによるimport.metaおよび__dirnameの実装と、MetaMask FlaskでのマルチパーティコンピューティングによるMPC署名を実証する分散鍵生成プロトタイプSnapを取り上げました。エコシステム全体での安全性を保つための脅威、トレンド、ヒントについては、MetaMask暗号資産セキュリティレポートのバックナンバーもご覧ください。