跳到内容

MPC Snap:将多因素身份验证集成到 MetaMask

在波哥大构建的 Sozu House Hackathon Snap

阅读需7分钟
MPC Snap:将多因素身份验证集成到 MetaMask

MetaMask Snaps 是将 MetaMask 打造成全球最具扩展性钱包的发展路线图。作为开发者,您可以以全新的方式将您的功能和 API 带入 MetaMask。Web3 开发者是这一增长的核心,本系列旨在展示当今正在构建的创新 MetaMask Snaps。

Web3Auth Snap

Snap 代码库: https://github.com/Web3Auth/openlogin-snap/

您为什么要构建它?

在 Web3Auth,我们一直坚信多因素身份验证是保护加密资产的最佳方式,远优于助记词。当我们在 ETHBogota 上看到最新版本的 MetaMask Snaps 支持外部密钥管理功能时,我们决定在 Sozu House 黑客马拉松上挑战自我,将 MPC 技术集成到 MetaMask 中。

您能带我们了解一下技术实现过程吗?

  • 我们的目标是让新用户能够登录并设置双因素身份验证(2FA),以便在 MetaMask 中访问其账户。此后,每当用户尝试签署交易时,我们的 MPC SDK 会在底层执行门限 ECDSA 签名。具体实现方式是将私钥拆分为两部分:一部分是存储在 snap 中的本地份额,另一部分存储在签名服务器上。经过多轮通信,签名服务器和 snap 能够联合签署以太坊交易,并在 Goerli 网络上完成确认。与助记词不同,这种设置不存在导致密钥永久丢失的单点故障:即使用户的笔记本电脑遭到入侵,或签名服务器被攻击,用户也不会丢失私钥。

  • 与其他所有 snap 一样,我们的 snap 由两部分组成:实际的 snap 包,以及一个用于加载和与 snap 交互的页面。我们理想的用户流程是将所有密钥管理交互保留在 MetaMask 扩展的 UI 内,但由于权限限制,我们无法实现这一点。因此,用户身份验证在 snap 外部完成,完成后再将状态迁移到 snap 中。随后,我们接入 MetaMask 的 RPC 引擎,通过使用 MPC SDK 和 snap 中迁移的状态来生成交易的门限 ECDSA 签名,以响应交易请求。令人惊喜的是,我们在黑客马拉松开始后的几个小时内就完成了状态迁移部分,剩下的只有签名功能。

  • 其余过程可进一步分为两项主要任务:

  • 将现有 Web3 提供商与我们的 MPC SDK 结合,以处理传入的交易请求

  • 使 MPC SDK 在 MetaMask Snaps 的 SES 环境中运行

  • 如果您熟悉 MetaMask 的工作原理或其他钱包的运作方式,您就会知道签署以太坊交易所需的工作远不止使用私钥签署消息那么简单。构建待签名的消息对象需要大量工作。每笔交易都遵循特定于各链和交易类型的格式,需要支持向后兼容的历史行为,需要获取当前 gas 价格信息,需要计算 gas 用量和 gas 限制,还需要追踪账户 nonce 等。幸运的是,大多数现有 Web3 提供商已经开箱即用地处理了这些事项。然而,为了让我们的门限签名库与这些 SDK 良好配合,我们不得不深入研究每个模块,将 eth-sig-util 库的签名函数替换为我们自己的门限签名库签名函数,这花费了大量时间。此外,由于我们的 MPC SDK 是链无关的,未考虑以太坊特定的检查,我们还必须对已替换的 eth-sig-util 库中的检查进行逆向工程并重新实现。例如,EIP-2 规定 ECDSA 签名中的 s 值不得大于 n/2 + 1(其中 n 是 secp256k1 椭圆曲线的阶),以防止交易可塑性攻击,这要求 ECDSA 签名库在 s 值超出此范围时对签名进行"翻转"处理。

  • 我们面临的另一个挑战是让 MPC SDK 在 MetaMask Snaps 环境中运行。我们的 MPC SDK 使用 wasm(由 Rust 编译)以在浏览器中高效运行。由于 SDK 与签名服务器之间需要多轮通信,它还使用 Socket.IO 进行通信,以避免 HTTP 头部带来的额外开销。在尝试将 wasm 代码加载到 snap 时,我们遇到了 wasm 方法中参数类型混用的奇怪问题。遗憾的是,wasm 调试工具仍然非常匮乏,错误信息既无帮助又缺乏信息量(例如:"Uncaught RuntimeError: unreachable")。最终,我们通过将所有混合输入参数接受为字符串,并在 wasm 代码内部将其解析为整数或字节数组,绕过了这一限制。我们遇到的另一个问题是 socket.io 在 MetaMask Snaps 环境中无法正常工作。Socket.IO 是一个构建在普通 WebSocket 之上的独立库和规范,处理连接升级、断线重连、长轮询回退等功能,在生产环境中使用 WebSocket 时非常有用。遗憾的是,我们无法让 Socket.IO 的库在 MetaMask Snap 环境中运行。因此,我们不得不回退到普通 WebSocket,并重写签名服务器以使用默认 WebSocket 替代 socket.io,同时在 WebSocket 出现问题时回退到轮询策略。

您能介绍一下您自己和您的团队吗?

Zhen 和我是 Web3Auth 的联合创始人,我们公司专注于提供直观、安全且非托管的密钥管理解决方案。我们相信,良好的安全性必须易于使用且无感知,否则将无法得到广泛采用。这也是我们大力倡导将多因素身份验证用于私钥管理的原因。

您是什么时候第一次接触 MetaMask Snaps 的,体验如何?

大约一年前,我们尝试了 MetaMask Snaps,但遗憾的是,当时它还不具备扩展 MetaMask 私钥管理功能的能力。随着近期 SIP-2 的引入(感谢 Olaf!),MetaMask Snaps 得以扩展 MetaMask 的密钥环,我们对其可能性感到非常兴奋!在构建 snap 的过程中,我也深入探索了 MetaMask Snaps 所基于的 SES 系统,我认为这是 MetaMask 作为开发者平台、通过 MetaMask Snaps 添加功能的坚实基础。

MetaMask Snaps 与其他钱包有何不同?

可扩展性!我认为 MetaMask Snaps 为开发者提供了一个安全的接口,可以在不影响 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 的开发者有什么建议?

直接上手试试吧!它看起来可能有些新颖,但到目前为止上手非常容易,而且在 Consensys Discord 频道的 MetaMask Snaps 板块中有很好的支持。许多优秀的开发者正在参与其中,如果您想参与塑造 MetaMask Snaps 的对话,现在正是在其上构建并提供反馈的最佳时机!

使用 MetaMask Snaps 进行构建

开始使用 MetaMask Snaps:

  1. 查阅开发者文档

  2. 安装 MetaMask Flask

  3. 查看 MetaMask Snaps 指南

  4. 通过 Twitter、GitHub 讨论区和 Discord 与我们保持联系

请关注我们团队在您附近举办的下一场黑客马拉松!祝 BUIDL 愉快 ⚒️

免责声明:MetaMask Snaps 通常由 Consensys Software 以外的第三方开发。使用第三方开发的 MetaMask Snaps 完全由您自行决定和承担风险,且您同意对因此类活动造成的任何损失或损害承担全部责任。Consensys 对第三方开发的 MetaMask Snaps 不作任何明示或暗示的保证,并对第三方开发的 MetaMask Snaps 免除一切责任。使用区块链相关软件存在风险,使用 MetaMask Snaps 即表示您完全承担这些风险。

AI 翻译。可能包含错误。请务必核实信息。

评价此翻译

本文作者:

  • MetaMask

    MetaMask(前身为 Consensys Software Inc)是全球最大的自托管金融平台,为用户提供一站式服务,涵盖加密资产与传统资产的持有、消费、储蓄与增值。公司正在打造实现上述功能的消费级平台,将支付、储蓄、投资与数字资产整合于一体,带来无缝一体化的使用体验。MetaMask 脱胎于全球使用最广泛的自托管钱包,让用户直接掌控自己的资金与资产,覆盖约 190 个国家和地区。自 2016 年起,MetaMask 在以太坊的发展历程中扮演了举足轻重的奠基角色。如今,MetaMask 处于区块链经济的核心位置,致力于构建「开放货币」的操作系统,让每个人都能全面掌控自己的财务生活。

    阅读所有文章