钱包在 Web3 世界是资产、身份、账号的统一体,加上其在不同应用之间的一致性和可组合性,其重要程度甚至超过了微信或 Google 账号在传统世界位置。但由于钱包本身的使用门槛,Web3 钱包用户始终无法突破 Metamask 30 M 月活地址这个数量级。
以 Metamask 为代表的标准 EOA 钱包地址将用户自己管理的私钥对应的公钥做哈希映射。这句话本身就解释了为什么它阻挡了大多数人进入 Web3 世界——牵扯到太多让人听不懂的概念了。可问题在于,这些概念确实无法省掉。要想使用 EOA 钱包,就必须自己通过助记词的方式管理私钥,就必须理解什么是公钥,什么是数字签名,而且助记词一旦丢失或泄漏,资产和身份将永久丢失。这些门槛是如此之高,以至于用户必须有极强的动力才愿意进来。这也是为什么目前 Web3 应用的主流用户是投机和撸空投的用户,根本没有常规意义下的正常用户。这反过来将 Web3 应用的生态引向了错误的方向,没有人真正关心你的项目是否有长期价值。什么时候发币,怎么加白成为用户的主要诉求。
我们当然不只有 EOA 钱包,中心化托管、MPC 和账户抽象钱包都在尝试提出兼顾易用性与安全性的钱包解决方案。中心化托管由于单点风险和资管安全问题不被主流应用所接受。那么多方共管的 MPC 方案和集大成的抽象账户钱包方案是不是可以彻底解决安全与便捷的矛盾呢?
MPC 技术将密钥进行分片,用户和托管方各持一部分,使用钱包时需要双方协作完成签名。一旦用户侧的分片丢失,可以通过多个托管方进行恢复。任何一方都无法单独操作用户资产。该方案看上去同时解决了用户自己管理私钥门槛难题和资产托管的道德问题,也是目前被寄予厚望的解决方案。但 MPC 在解决这些问题的同时却引入了更大的问题,这些问题导致了 MPC 方案不可能成为未来 Web3 账户大规模普及的基础设施。
MPC 确实解决了用户持有私钥丢失的安全风险,但是 MPC 服务器损坏的风险却被大大忽视了。MPC 服务器往往采用 HSM 等基于硬件的加密机,他们存在被意外损坏的可能性,而一旦设备损坏,涉及的用户密钥就无法简单地恢复,甚至永久丢失。对此,有些 MPC 服务商对外宣称对这些服务器进行了投保。显然,保单只可能覆盖其硬件损失,不可能覆盖对应的数字资产损失。这恰恰暴露了这些安全风险的严重性。况且大多数 MPC 钱包都没有正面告知用户或者在公开场合提起如何应对这个风险,这无疑进一步扩大了风险。
MPC 声称解决了用户持有私钥的单点故障问题,即使用户密钥分片丢失,也可以通过 MPC 服务恢复。但当我们仔细审视整个方案,你会发现 MPC 服务商成为了新的「单点」。尽管 MPC 服务通常会用「云端保存多个独立分片,不存在单点故障」的话术让人忽视这个问题,但一旦 MPC 服务商停止运营(区块链创业公司的生命周期通常小于两年),不论它帮忙分散保管了几个密钥分片,用户都将无法正常使用账户。即使 MPC 服务商允许用户迁出密钥,该迁移过程对用户和应用方来说都将是噩梦。
用户的每次签名每次交互都需要通过 MPC 服务器,而 TSS 本身对性能要求并不低,这就导致了 MPC 服务器每秒处理的交易量有限。很多 MPC 服务商宣称自己使用 HSM 集群就是在用堆机器的方式解决这个问题。但无论如何,这种方式也不可能真正解决性能问题,因为 MPC 本质上就是 SaaS,相比于 EOA 这种分布式交易发起系统,永远存在性能瓶颈。
SaaS 是 MPC 的原罪,尽管用高深的数学包装,它也仍然是 SaaS。用户确实不在乎各种方案背后的技术,对终端用户来说只要好用即可。我们甚至不应该假设用户对去中心化性和非托管安全有什么深入理解。但对开发者和项目方来说,没有谁愿意将自己的用户绑定在一家前途未卜的创业公司上。这也是为什么 MPC 注定不会是正确的方向。
账户抽象(Account Abstraction,简称 AA)是另一个被广泛关注的钱包技术发展方向。理论上它可以绕开底层密码学限制,采用任意的账户鉴权逻辑,允许任意的 gas fee 支付方式,并支持账户恢复逻辑。这样一举解决了密钥、gas fee、丢失恢复等钱包普及的核心问题。AA 显然拥有光明的未来,而最近 EIP 4337 在以太坊主网也正是启动了,是否意味着钱包问题就此解决了呢?可惜并没有。EIP 4337 只不过在传统智能合约钱包的基础上在应用层做了优化,例如 AA 交易可以合并以降低单笔费用,提出标准化接口以方便钱包方和聚合服务提供者合作等。
EIP 4337 确实可以解决 gas fee 代付的问题,从而让例如 GameFi 用户做链上操作时无需自己付费。但它并没有触及更深层次的密码学算法问题,也因此并不能解决用户的密钥管理难题。
尽管 EIP 4337 或 CA 钱包(合约钱包)理论上允许任意的鉴权逻辑,但受限于 gas 成本和 gas 限制,用 EVM 对区块链世界之外的主流密码学进行解码验证的成本是不具备实用价值的。这就是说 EIP 4337 后,用户仍然只能实用默认的 K 1(或者软件模拟 RSA 进行数字签名),这就要求用户方仍然需要管理自己的密钥,也就仍然无法绕开这个用户入口的最大门槛。
设备账户(Device Account,简称 DA)是使用用户侧的现代计算设备(例如 PC、手机、平板等)上的硬件安全模块管理用户密钥与钱包账户的技术。设备账户同时结合账户抽象技术可以完美实现安全性、便捷性和去中心化性的三元平衡。
得益于现代终端设备安全体系的发展,现代的用户设备都内置了一个独立的安全芯片,用来存储用户的密钥信息。我们日常使用的指纹登陆、人脸登陆在其背后都是使用这颗安全芯片进行的数字签名来实现的高安全性鉴权方案。不论是移动端的 FaceID/FingerID,还是 PC 端的 Windows Hello,甚至独立的 Yubikey 硬件,他们都支持统一的一套浏览器接口,叫 WebAuthn。透过该接口,网页可以请求用户设备创建硬件安全级别的私钥,并获取签名。设备账户就是利用了这个接口,使用类似硬件钱包的机制唤起生物识别模块对用户交易签名。
设备账户的操作体验是非常完美的。用户打开 dApp 的网页,页面通过 js 即可免安装调用用户的设备账户。DA 会唤起系统级别的生物识别认证,认证通过后即可返回 dApp 相应的数字签名。为了支持多设备登陆、手续费代付和社交恢复等功能,DA 会在区块链上设置一个抽象账户,通过合约来实现多维度的管理。
DA 账户兼具如下特点:无助记词,用户的密钥由硬件设备生成管理,不需要用户管理,更不需要记录助记词;无密码,用户对密钥的访问由生物识别完成,比密码更安全,而且不会遗忘;无需邮箱、手机号码;免安装,dApp 通过浏览器即可使用 DA 账户,无需预先安装;安全防泄漏,密钥保存在硬件内部,无法读取,只能通过生物识别请求签名,不存在被盗用的情况;自签名自管理,没有中心化托管方,也不存在单点故障;可恢复,通过 AA 可以设置多台设备登陆同一个账号,并且支持社交恢复,一旦设备丢失也可恢复。
可以看出,设备账户在各方面都远远超越了其他账户解决方案,而且也具备极佳的硬件兼容性。但 DA 有个很大的普及障碍就是它依赖区块链底层的关键性支持,即完整的账户抽象和密码学抽象。目前只有少数几条公链具备这样的能力。
最早支持智能设备直接创建区块链账户的公链是 EOS,但它采用的是一种魔改的方式。EOS 在虚拟机层面加入了对设备签名密码学算法的直接支持,但是由于不支持账户抽象,导致其设备创建的账户无法进行多设备备份、丢失恢复等操作,因此无法普及。Difinity 也采用了和 EOS 类似的方案,但 Difinity 的账户内置了部分账户抽象的能力,因此会稍微灵活一些,但受限于 icp 的平台架构,并没有大规模推广开来。Near protocol 也在做类似的尝试,尚未见到成型的产品。此外,还有一些公链直接在硬件层面想办法,例如 Solana 和 Polygon 先后开发了」区块链手机」,通过硬件魔改的方式支持自己的密码学算法。但同样由于缺乏账户抽象,这种设备的使用体验无法兼顾用户的所有需求。
比较值得注意的是 Starknet 和 Nervos 的解决方案。和 Ethereum 等公链不同,二者都提供完整的账户抽象功能,Starknet 是以太坊的 Layer 2 ZK Rollup 链,Nervos 则是独立的 Layer 1 加 Layer 2 公链生态。著名的硬件钱包公司 Ledger 计划推出的「Ledger Fresh」就是将在 Starknet 上发布的设备账户,此外 braavos 钱包也宣布将把设备账户带到 Starknet 上。但作为零知识证明方案,考虑到设备账户所需的 secp 256 r 1 算法复杂度比 secp 256 k 1 算法高一个数量级,要想支持设备账户对应的密码学算法,其电路复杂度开销可能远远超过普通交易,Starknet 上是否能真正的承载设备账户还待进一步观察。Nervos 公链上则是有 JoyID Wallet 在开发支持 Nervos Layer 1 以及 Layer 2 EVM 兼容的设备账户,这些都是有益的尝试。
从 EOA 到 CA 再到 AA 和 DA,这些专有名词背后是开发者对产品的长期思考,设备账户一举克服了区块链账户的各种问题,很有可能成为 Web3 世界的终极方案。让我们共同期待更多更好的 Web3 基础设施产品出现。
2024年04月15日
2024年01月31日
2024年02月06日
2023年12月25日
2023年11月30日
2023年11月27日
2023年07月27日
2023年07月10日
2023年06月26日
2023年06月28日
2023年06月09日
2023年03月13日
2023年03月07日
2023年02月21日
2023年07月07日
2023年07月14日
2023年08月02日
2023年05月24日
2023年05月18日
2023年05月16日
2023年05月15日
2023年05月12日
2023年05月11日
2023年05月06日
2023年04月26日
2023年04月26日
2023年04月20日
2023年06月05日
2023年05月26日
2023年01月04日
2022年12月01日
2022年11月03日
2022年10月26日
2022年10月18日
2023年04月12日
2022年09月02日
2023年04月04日
2022年09月02日
2022年06月14日
2023年03月17日
2023年03月16日
2023年03月15日