跳到正文

会话密钥钱包

了解智能账户会话密钥如何委派有限权限、必须强制执行哪些约束,以及如何验证、撤销并应对密钥泄露。

更新于

仅供教育参考,不构成投资建议。泄露或权限过大的会话密钥可能造成不可逆的数字资产损失。

直接答案

钱包会话密钥通常是辅助签名密钥,或与该密钥绑定的委派凭证;智能账户只会在预设规则内接受它。规则可限制时间、目标合约、函数选择器、代币金额、交易次数或其他条件。其目的是让应用能够重复执行操作,而无需账户所有者每次都用主签名者确认。

“会话密钥”是一种设计模式,并非以太坊上的统一标准。ERC-4337 提供可编程账户验证和有时间边界的 UserOperation 验证;ERC-7579 等模块化账户系统则可以承载验证器、执行器和钩子。密钥能做什么,最终取决于钱包已部署的账户与模块代码。仅设置到期时间并不能保证会话安全;删除浏览器里的密钥副本,也不一定会撤销已登记上链或仍包含在未到期委派中的权限。

运作方式

典型流程有 5 个阶段:

  1. 所有者在设备上创建全新的密钥对,或授权用于识别会话签名者的凭证。除非设计明确把应用服务器作为受信托管方,否则绝不应把会话私钥发送给服务器。
  2. 所有者使用主钱包授权一项策略。有些系统在链上安装密钥与策略;另一些系统使用签名委派,在操作到达时由账户验证。
  3. 应用构建操作并用会话密钥签名。在 ERC-4337 流程中,账户的 validateUserOp 逻辑检查签名和策略;打包器模拟只是准入检查,并非执行成功或安全性的证明。
  4. 账户必须在执行前强制实施所有限制。有效权限可概括为 A_effective = K ∩ P ∩ S:持有密钥(K)、已配置策略(P)以及当前账户或链状态(S)都必须允许该操作。
  5. 会话可通过到期、nonce 或配额耗尽、显式撤销、移除模块或其他实现特定的失效路径结束。应在正确的链上确认最终账户状态。

授权会话前,应核对:

  • 链 ID、智能账户地址、账户实现,以及验证器或模块地址;
  • 会话公钥或凭证标识符,以及私钥材料将存储在哪里;
  • 每个允许的目标、函数选择器、代币、收款人规则、原生资产数额上限,以及单次或累计支出上限;
  • validAftervalidUntil、nonce 规则、使用次数,以及时间采用区块时间戳还是其他来源;
  • 除非确有需要,批量交易、嵌套调用、delegatecall、代币授权、安装模块、升级账户和 ERC-1271 消息签名是否均被阻止;
  • 谁能撤销会话、所有者是否保留独立恢复路径,以及撤销是否需要 Gas 或正常工作的打包器或 paymaster。

策略必须检查实际将被执行的操作。只检查外层批量交易的目标,可能让内层调用不受限制;只检查收款人而忽略函数和数额,也会产生同类问题。只有执行代码覆盖每一条执行路径时,限制才真正有效。

示例

某游戏钱包创建一个持续 24 小时的会话。它只允许调用经验证的游戏合约,阻止 delegatecall 和代币授权,把每次调用的原生资产数额上限设为 0.02 ETH,累计支出上限设为 20 USDC。游戏可以无需所有者反复确认就提交获准操作,但转移无关 NFT 的请求必须验证失败。

使用前,所有者记录账户、链、模块、会话公钥、到期时间、限额和撤销方法。所有者先测试一笔低价值操作,核对解码后的调用与账户事件,再单独测试撤销。这能确认配置的路径有效,但不能证明模块不存在漏洞,也不能证明受感染设备无法花完剩余额度。

风险与控制

  • 策略过宽: 通配目标、不受限的选择器、无限代币授权、批量交易或 delegatecall,都可能让“有限”密钥获得接近所有者的权限。应使用明确白名单并禁止管理操作。
  • 密钥被盗: 浏览器存储、日志、备份、扩展程序、恶意软件和共用设备都可能暴露会话密钥。在支持时优先使用硬件保护或隔离存储,并设置较短期限和较低累计上限。
  • 执行约束有缺陷: 账户、验证器、执行器或钩子可能错误解码调用,或未覆盖另一条执行路径。应采用已验证部署、经过审查的代码、审计和绕过场景测试。
  • 重放与上下文混淆: nonce 处理薄弱,或未绑定到预期链、账户、模块或策略,都可能使授权在其他上下文中被重用。核对确切的签名域和链上重放保护。
  • 对到期机制的误判: validUntil 可能只约束一笔 ERC-4337 操作,并不会自动移除已登记密钥、代币额度或另一项委派。到期后应检查每项权限的实际状态。
  • 撤销失败: 删除本地数据只会移除秘密的一份副本。应通过账户文档规定的路径撤销并核对链上结果,同时保留足够 Gas 和由所有者控制的备用路径。
  • 可升级或恶意模块: 模块可能拥有强大的执行权限,升级也可能改变策略行为。应检查所有者、升级延迟、暂停权限、实现地址和模块移除流程。
  • Gas 与赞助滥用: 会话可能消耗账户资金支付 Gas,或在 paymaster 拒绝时无法使用。尽可能限制费用行为,并保留独立提交路径。

如果会话密钥可能已经泄露,应停止使用受影响应用,保留会话标识符和相关交易哈希,并从干净、由所有者控制的设备撤销或禁用密钥。随后检查所有受支持链上的待处理与近期操作、代币授权、已安装模块、账户升级和余额。只有当账户或模块设计使撤销不可靠时才转移剩余资产;仓促进入未经验证的“恢复”网站可能扩大损失。

常见误区

  • “会话密钥不能移动资产。” 它可以执行策略实际允许的任何操作,其中可能包括转账、兑换、授权或签名。
  • “ERC-4337 定义了会话密钥权限。” ERC-4337 提供账户验证和执行框架;会话策略仍由钱包或模块具体决定。
  • “较短到期时间可以限制最大损失。” 损失还取决于单次限额、累计限额、调用频率、Gas、授权、价格以及每条可达执行路径。
  • “退出登录就是撤销密钥。” 退出登录可能删除本地副本,但不能证明链上登记或签名委派已失效。
  • “模拟成功说明操作安全。” 模拟可以表明当前验证会接受操作;它不能证明用户意图、未来收录、执行成功、最终确定性,也不能证明模块没有漏洞。

相关主题

来源

导航

搜索知识库...