每月,MetaMask 安全总监 Luker 都会报告您需要了解的最新加密攻击事件和新兴风险。
2022 年 5 月版涵盖了 MetaMask HackerOne 漏洞赏金计划的启动、Endo 对 import.meta 和 __dirname 的实现(以提升 MetaMask 依赖兼容性),以及一个分布式密钥生成原型 snap——展示了 MetaMask Flask 中的多方计算签名功能。请阅读以下详细内容,但首先……
精选 STEM 先驱:Adi Shamir——RSA 联合发明人与秘密共享方案创始人
Adi Shamir 是一位以色列密码学家,1977 年与 Ron Rivest 和 Leonard Adleman 共同发明了 RSA 算法——这是首个实用的公钥密码系统,三人因此荣获 2002 年图灵奖。1979 年,他发表了《如何共享一个秘密》,提出了 Shamir 秘密共享方案:该方案将秘密拆分为若干份额,只需达到阈值数量的份额即可重建原始秘密。这一特性是本报告所涉及的分布式密钥生成工作的基础。
MetaMask 启动 HackerOne 漏洞赏金计划
MetaMask 于 2022 年 6 月在 HackerOne 上启动了漏洞赏金计划,在 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 的实现已完成(规范 issue、实现 PR)。剩余工作是在 Endo 中默认实现将 import.meta.url 传入模块。__dirname 的实现也已完成(PR),经过多次迭代以确保正确性并支持 Windows 路径。
此外,还新增了对嵌套 package.json 文件的支持,可更改 .js 文件的默认模块类型假设,使 compartment-mapper 能够处理旨在同时支持 CommonJS 和 ES 模块规范的复杂结构包(来源)。
__esModule 行为支持目前处于搁置状态。两次实现尝试均导致端到端测试得分下降。第三种方案——将支持逻辑放置在 SES 内部的 ThirdPartyModuleInstance 中——被认为存在争议。该功能在 issue #927 中持续跟踪。
分布式密钥生成原型 snap 展示 MetaMask Flask 中的 MPC 签名
多方计算(MPC)能力方面取得了新进展。我们的团队基于早期的概念验证 WebAssembly(WASM)绑定,创建了一个可在 MetaMask Flask 中使用的原型 snap,展示了分布式密钥生成(DKG)和消息签名功能。该 snap 支持导出和导入密钥份额,以及密钥生成和保存消息签名证明。
在底层实现上,该软件包采用了 GG2020(Gennaro and Goldfeder 2020,论文)的一个实现。该协议支持非交互式在线阶段,允许参与方异步参与而无需同时在线,并能高效检测中止方。
后续步骤包括:为 snap_manageState 添加加密支持,以消除 snap 代码中对密钥份额的手动加密;随后添加对签名交易的支持。该原型在 tss-snap 仓库中持续跟踪(最初以 ecdsa-wasm 名称发布)。
MetaMask 2022 年 5 月加密安全报告涵盖了 Endo 对 import.meta 和 __dirname 的实现(用于 MetaMask 模块兼容性链),以及展示 MetaMask Flask 中多方计算签名的分布式密钥生成原型 snap。浏览 MetaMask 加密安全报告的往期内容,了解更多威胁、趋势及生态系统安全防护建议。