账户抽象对安全和用户体验的影响

本文介绍了ERC-4337 Account Abstraction(账户抽象)如何通过智能合约实现更灵活的账户管理,包括gas费支付、认证方式和交易批处理等,从而提升用户体验和安全性。同时,文章也深入探讨了开发者在使用ERC-4337时需要关注的安全风险,并提供了监控建议,以确保智能合约的安全性。

OpenZeppelin 为通过 增量安全审计 启动账户抽象提供了支持;本文旨在分享我们关于如何安全构建 ERC-4337 的见解。

账户抽象 为智能合约开发者支持了新的用例,使用户能够拥有免 gas 体验、使用生物识别进行身份验证,或利用社交恢复功能来保障他们的账户。然而,这些创新带来了额外的安全风险,Web3 开发者若想利用这些新功能,需要清楚地了解这些风险。强化的安全性不会止步于构建和测试阶段,对于开发者来说,使用 OpenZeppelin Defender 设置 安全监控 以保护已部署的合约免受已知风险参数的影响,对于安全代码而言也至关重要。

虽然诸如 zkSync EraStarknet 之类的 L2 已经在协议层实现了账户抽象,使 Visa 能够设计一个利用账户抽象的 自动化加密账单支付系统,但在以太坊主网上实现相同的账户抽象功能只能通过 ERC-4337 实现。该标准的开发工作已经进行了两年,并获得了以太坊基金会的资助。值得强调的是,ERC-4337 本身并不会自动带来新的安全优势,它只是提供了具有安全向量的新功能。

OpenZeppelin 通过 增量安全审计 为账户抽象的启动提供了支持,并且在 2023 年 3 月 1 日,经过 审计 和修复的 EntryPoint 版本在 ETH Denver 上展示并部署。在 Entrypoint 部署之后,以太坊基金会与 OpenZeppelin 合作审查了三个旨在增强用户操作安全性和合约功能的 pull request。

Quote_Yoav2 (1)

用例

ERC-4337 增加了一个新的基础设施层,因此也增加了复杂性,但用户并不需要处理这种复杂性。事实上,这种增加的复杂性将大大简化用户体验。

“支持智能合约账户,使其能够实现更广泛的身份验证、恢复和支付机制,同时尊重核心协议的约束和精神,这是一个有趣的挑战,协议设计者不得不重新思考流程中的每一步。”

– Nikesh Nazareth,OpenZeppelin 的安全研究员

“抽象验证”为典型用户启用了哪些功能?

  • 原生多重签名账户 - 能够添加/删除签名者

  • 社交恢复功能 - 通过限时锁定(time-locked)的社交/商业服务重新访问帐户。

  • 使用 ERC-20 代币支付 Gas 费用 - 用户无需交换/维护/花费 ETH 余额来支付用户交易费用。

  • Gas 费用赞助 - 协议、Dapp、DAO 和其他用户可以作为 paymaster 参与。

  • 支持量子安全或更高效的签名算法 - 智能账户交易不再与基础级别的 ECDSA 加密绑定。

  • 可升级性 - 随着时间的推移添加/删除账户功能。

  • 用户定义的分层账户权限 - 为多个用户、账户类型和使用场景设置使用角色。

  • 批量交易 - 节省交易提交成本并简化操作。

  • 用户指定的交易或花费限制 - 增加了针对用户错误相关安全问题的后备措施。

  • 双因素身份验证 - 允许用户使用指纹或面部扫描在手机上签署交易。

  • 基于时间的权限或花费限制 - 设置每周/每月的账户花费限制。

  • 会话密钥支持 - 使用会话密钥而不是手动交易审批来简化区块链游戏的玩法。

  • 通过 pull payments 启用订阅

  • 抗审查 费用模型 - EOA 交易要求用户将 ETH 转入账户,这通常可以追溯到 KYC 交易所,用户的隐私可能会受到损害。账户抽象消除了用户的这一要求。

账户抽象带来的最大优势在于用户采用和以用户为中心的安全领域。为了实现这一目标,智能合约将承担更多的工作,用户将能够在无需了解密码学、gas 或 nonce 管理的情况下与去中心化区块链进行有意义的交互。

开发者的安全注意事项

ERC-4337 的设计将许多账户属性(gas 支付、身份验证、交易批处理等)抽象成智能合约,这需要额外的审查,以防范由此带来的潜在攻击面。

由于最终用户将通过合约而不是 EOA 发出交易,因此依赖于 Solidity 代码的已部署智能合约,如果指定 tx.origin 而不是 msg.sender 来检查仅 EOA 调用者,则将变得无效,尽管这种检查的基本原理显然仍然存在,并且在更新此类代码时应保留必要的逻辑。

实现 EIP-4337 的代码使链下的人能够在无需信任用户的情况下代表用户部署交易。尽管账户抽象从用户的角度来看极大地提高了安全性和可用性,但在协议层启用它可以帮助确保开发人员在实现相关功能时的安全性和稳定性,否则 ERC 的复杂性可能会带来潜在的攻击媒介。以太坊现有的激励模型已被证明可以支持安全的使用场景。

ERC-4337 的设计不需要参与者相互了解。处理交易支付的智能合约(“paymaster”)仍在为用户提供服务。幸运的是,paymaster 将是公开的,并且可以作为具有自己定义条件的智能合约进行检查。Paymaster 将具有何时支付的条件,并且人们可能会想出欺骗这些 paymaster 的方法。简单的条件可能导致更大的操纵。

在构建 paymaster 时,有必要定义最终用户偿还所有者的规则,并防范操纵这种关系的机会。例如:

  • paymaster 是否已抵押(或者是否通过其他方式实现信任)?
  • 在用户认可交易后,paymaster 必须同意为其支付,这可能涉及检查前提条件,例如用户在执行后偿还的意愿和能力。
  • 在调用之后,执行必要的清理,paymaster 从用户那里检索资金。用户验证可能会使检查无效的可能性很小。例如,尽管确认用户拥有 DAI,但用户操作可能会使用过多资金或撤销。如果发生这种情况,则存在一个边缘情况,即它将停止交易并提供另一个调用来检索资金。恶意用户可以免费获得该操作,让 paymaster 承担支付费用。

监控建议

paymaster 中指定的逻辑应安全地进行设计。但是,重要的是设置任何项目负责的 paymaster 的安全监控,以帮助根据有关已提交交易的附加信息来识别潜在的边缘情况,或者是否存在交易规模或数量的峰值,例如:

  • 具有异常高或低 gas 参数的用户操作
  • 在 mempool 中始终无法通过验证的操作或 paymaster
  • 使用非标准账户、工厂和聚合器的交易
  • 链上任何回滚的捆绑包
  • 任何参与者的 stake 异常低的操作

可以将 OpenZeppelin Sentinels 配置为监视任何/所有指定合约的这些交易参数,并相应地触发自动功能或通知。有关如何使用 OpenZeppelin Defender 进行 安全监控和应急响应 的深入演练,请单击此处。

因为在某些情况下,人们会为了自己的利益而利用智能合约,所以重要的是要考虑可能出错的地方。一些 paymaster 可能会简单地定义,只要收到以给定货币的付款,它们就会为任何交易付款。涉及 gas 支付的情况为黑客开启了机会。抵御这种情况的一种方法是,paymaster 必须预先获得资金才能履行其职责,而那些经历快速消耗的 paymaster 通常不会用新资金来补充。

需要考虑的其他因素:

  • 考虑验证最大操作成本。账户可以查询 EntryPoint 合约的余额或将决定权推迟给用户。
  • 注意 paymaster 失败的情况。账户应避免违反 paymaster 的 after-operation 函数所假定的条件,以防止因不完整的操作而被收费。
  • 未预先向用户收费的 Paymaster 必须确保,如果未满足条件(例如,未付款),其 postOp 函数会回滚,以避免因用户操作而被错误收费。
  • 依赖 double-postOp 功能的 Paymaster 应保证在 validatePaymasterUserOp 成功的情况下成功完成 after-revert postOp 函数。差异可能导致 bundler 限制或禁止 paymaster 操作。

通过 ERC-4337 对以太坊进行持续改进的账户抽象有望消除新用户学习设置账户或记住助记词的复杂流程的需求,同时支持生物识别支持,并为账户恢复创建额外的保障,以及在不损害去中心化的情况下提供更丰富的功能。这对于让没有技术背景的人能够访问数字资产至关重要。

随着开发人员采用 ERC-4337 标准,至关重要的是在整个实施过程中优先考虑最佳实践。这包括使用 OpenZeppelin Defender 设置强大的安全监控,以便开发团队能够检查智能合约状态,防范潜在的风险媒介,并在发生安全事件时快速(甚至自动)响应。

与 OpenZeppelin 联系 以获取智能合约安全方面的安全建议、审计和产品。与 Web3 专家合作,确保安全地实施账户抽象。🔐

参考资料

  • 原文链接: openzeppelin.com/news/ac...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
OpenZeppelin
OpenZeppelin
江湖只有他的大名,没有他的介绍。