这篇文章深入探讨了ERC-4337账户抽象(Account Abstraction)带来的安全挑战,分析了从EOA模型转向分布式系统后,如签名重放、哈希不匹配、拒绝服务等新的威胁向量。文章提供了详细的工程实践指南,涵盖了签名、支付大师和打包器等核心组件的安全设计,并给出了实用的测试和风险控制清单。

ERC-4337 将“账户安全”从单一的外部拥有账户 (EOA) 签名检查,根本性地转变为一个分布式系统,该系统包含智能账户代码、链上 EntryPoint 和链下基础设施。
虽然这带来了巨大的灵活性(自定义身份验证、Gas 赞助、交易批处理),但也造成了一个碎片化的安全边界。一个表示“授权 X”的签名可以悄无声息地变成“授权在链 A 上为账户 B,在支付方策略 C 下的 X”。
严峻的现实是:账户抽象 (AA) 中最昂贵的 Bug 几乎从来都不是奇特的密码学问题。它们是无聊的、系统性的故障:
要保护 AA 实现,你必须将以下组件视为一个单一的安全边界。
validateUserOp,验证授权,强制执行重放保护,并处理预付款。在不匹配时,必须返回“签名失败”代码而不回滚。handleOps 将它们提交到链上。initCode 抢跑)。在传统的 EOA 模型中,区块链强制执行有效性。在 ERC-4337 下,“有效性函数”是在验证期间执行的 EVM 代码,这极大地改变了威胁模型:
validateUserOp 签名、Paymaster 授权签名,并且通常还有 ERC-1271 合约签名 (isValidSignature)。每个都是潜在的重放向量。userOpHash 加上一个 Nonce。initCode 并抢跑部署。原始的 UserOp 失败,迫使用户重新签名。postOp 回滚,从而导致 Bundlers 限制你的 Paymaster。将签名验证视为一个库决策,而不是应用层面的巧妙设计。
validateUserOp:只有你选择的 EntryPoint 才能调用它。userOpHash。ecrecover:使用经过广泛审查的库(如 OpenZeppelin 的 SignatureChecker)来防止签名可塑性。Paymaster 是一个带有严格欺诈引擎的链上信用卡。如果它失败,网络会惩罚你的可用性。
userOpHash:除非正式证明安全,否则不要手动选择字段进行签名。maxCost 假设并强制执行每用户预算。postOp 复杂性:设计代币流程,使得 postOp 传输回滚实际上不可能发生,或者导致严格受限、受监控的损失。Bundlers 不能伪造操作,但它们可以审查、延迟或将你的 calldata 泄露给 MEV 管道。
eth_sendUserOperation 错误激增时自动故障转移。确保你的测试套件(例如 Foundry)明确涵盖这些场景:
SenderCreator 路径成功。下表有意侧重于生产中最可能首先出现故障的部分。

保护你的账户抽象基础设施
账户抽象引入了智能合约管理授权和风险方式的巨大转变。无论你是构建自定义 Paymaster、集成 Bundler 回退逻辑,还是为你的智能账户主网部署做准备,你都需要高保真度的安全情报。
- 原文链接: x.com/spearbit/status/20...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!