7702 账户的隐身地址 + 子账户

本文为机器翻译
展示原文

您好!我想介绍一下我的想法(研究+概念验证),并希望得到一些反馈或意见。

隐蔽地址 + 子账户 (3)
隐身地址 + 子账户 (3) 1920×1124 90.4 KB

要点:

  1. 根密钥可以是现有的 7702 帐户。

  2. 消费密钥和查看密钥必须存放在安全盒中(例如,KMS/HSM/MPC)。

  3. 隐蔽地址发现需要存储 ERC-5564 元数据: viewTag (1 字节)和ephemeralPublicKey (33 字节)。

  4. 这些元数据可以存储在合约存储、事件日志、本地/客户端存储或后端(取决于用户体验和隐私要求)。

笔记:

  1. 可以从单个元地址导出 N 个隐蔽地址。

  2. 每个派生地址都可以代表一个专用的子账户,用于订阅、私人交易、私人支付或支付渠道。

  3. 创建请求可能来自第三方(通过 API),经用户批准后,通过链上子账户的支出策略强制执行到账户实现。

  4. 可以使用隐私池或市场上其他隐私资金机制,以不可关联的方式为子账户充值。

现有示例:
基于: stealth/contracts/STEALTH_ARCHITECTURE.md openfort-xyz/stealth-addresses Bob 拥有 7702 账户。在实现过程中:

event Announcement ( uint256 indexed schemeId, address indexed caller, bytes1 indexed viewTag, bytes ephemeralPubKey, bytes metadata ) ;bytes public stealthMetaAddress; error InvalidEphemeralPubKeyLength () ; error EmptyMetadata () ; function announce ( uint256 schemeId, bytes calldata ephemeralPubKey, bytes calldata metadata ) external { // Validate ephemeral public key length (66) if (ephemeralPubKey.length != 66 ) { revert InvalidEphemeralPubKeyLength () ;} // Validate metadata contains at least viewTag if (metadata.length == 0 ) { revert EmptyMetadata () ;} // Extract viewTag from first byte of metadata bytes1 viewTag = metadata[ 0 ]; emit Announcement ( schemeId, msg.sender, viewTag, ephemeralPubKey, metadata ) ;}

在这种情况下,Bob 可以基于他的st:eth:0x<spendingPubKey><viewingPubKey>创建一个隐身账户,并调用Stealth.announce()来发布数据。

这将发出一个事件,并将数据以低成本存储到 Bob 的主帐户中。

从外部观察者的角度来看,这些数据看起来就像随机数据。无法从中推断出隐蔽地址或密钥。观察者或许可以推断出 Bob 使用了隐蔽地址,但仍然无法确定 Bob 公布的是自己的隐蔽地址还是其他用户的隐蔽地址。

另一方面,爱丽丝也可以告诉鲍勃,她已经向鲍勃要求的秘密地址发送了付款。

在这两种情况下,我们都保持了隐蔽地址与其所有者之间的不可关联性。

此外,私钥可以委托给可信的监控系统,该系统可以扫描元数据,检测是否为给定的支出公钥创建了隐身地址,并发出信号。然后,为了恢复隐身地址,我们可以离线操作(例如,在安全的环境中),并安全地恢复私钥,从而将隐身地址与前端 7702 账户的所有者关联起来。

这是存储隐蔽地址元数据最便宜、最无需信任的方式,无需在客户端或后端存储隐蔽私钥。

什么是 ERC5564(隐形地址)?: https://github.com/openfort-xyz/-stealth-addresses/tree/0xkoiner/dev/documentation

演员/关键

  • ROOT 7702 帐户:用户的主帐户(资金 + 协调)。

  • KMS :存储ERC-5564 支出/查看密钥(或通过 HSM/MPC 保护它们)。

  • P-256 不可提取密钥:子账户实现的长期签名者。

  • 隐私池:用于以不可关联的方式为子账户提供资金。

第 0 阶段 — 提供“隐形元地址”(ERC-5564)

  1. 生成支出密钥对查看密钥对(ERC-5564 接收器密钥)。

  2. spend_skview_sk存储在KMS中(最好是Threshold/拆分控制;更多内容见下文)。

  3. 隐蔽元地址(= spend_pk + view_pk)发布到您想要的任何地方(用户个人资料、应用程序注册表、二维码)。

这很重要:您可以确定性地导出许多一次性隐蔽地址,而无需存储它们。

你的观点没错:你不会存储派生的隐蔽私钥,只会存储根接收密钥

第一阶段——创建新的子账户地址(ERC-5564 派生)

对于您想要的每个新子账户:

  1. 创建临时密钥对

  2. 根据 ERC-5564,从(epk, metaAddress)计算(stealthAddress, viewTag)

  3. (可选)创建公告记录/事件,以便钱包可以发现它(如果您想要第三方支付用户体验;对于自行管理的子账户来说并非绝对必要)。

此时,您将获得新的 EOA 地址,该地址将成为您的 7702 子账户。

第二阶段——使用派生的EOA 密钥引导 7702 子账户(无需存储)

目标:使用隐蔽地址的ECDSA(secp256k1)功能仅一次来安装代码 + 轮换权限。

  1. 在可信服务边界内,即时派生隐蔽私钥

    • 使用view_sk扫描/识别目标(或者如果您是创建者,您已经知道是哪个目标了),

    • 使用spend_sk + epk (以及 ERC-5564 指定的任何派生方式)来计算该隐蔽地址的一次性私钥

  2. 仅使用该派生的私钥签署设置帐户代码的 EIP-7702 授权(您的自定义实现)。

  3. 相同的设置流程中,调用initialize(...)来:

    • P-256 公钥设置为主签名者(不可提取),

    • 设置您的限制模块/权限,

    • (可选)设置“委托/会话密钥”策略。

  4. 立即将内存中派生的隐蔽私钥清零

重要细节(安全性):

即使你“清除”了派生的隐蔽私钥,如果有人之后攻破了KMS(它可以重新计算支出/查看密钥),他们仍然可以重新派生出该私钥,并签署新的7702授权。因此,你真正的根之根就变成了KMS 。把它当作硬件钱包级别的资产来对待。

第三阶段——通过隐私池为子账户提供私人资金

  1. ROOT 7702 将ETH/ USDC/ETC存入隐私池。

  2. 之后,从 Privacy Pools 提取到stealthAddress(现在是一个 7702 智能账户)

最佳实践:使用 Privacy Pools 的原生中继/费用机制(或中继器)来避免子账户在获得资金之前就需要有ETH来支付 gas 费用。

第四阶段——开始正常使用AA(4337 + 付款人)

现在子账户有资金,长期控制权为 P-256:

  1. 使用由P-256签名的 4337 用户操作。

  2. 如果你想要赞助加油:

    • 要么在子账户中保留一些ETH ,要么

    • 使用支持 ERC-20 计费且与您的执行模式兼容的支付服务商。

支付主管 + “在同一用户操作中提款 + 批准”

注意:付款方验证发生在执行之前。因此,“先提款,再批准,最后偿还付款方”的做法可能会让付款方承担风险,除非其系统设计能够承受这种风险。更安全的做法是:

  • PP提现会先为账户充值,然后用户运营人员才能安全地支付/批准。

使用案例:商家创建的、不可关联的订阅子账户

目标

让可信的服务(Spotify/YouTube/ChatGPT)创建一个专用的子账户用于订阅:

  • 无法在链上链接到用户的 ROOT 账户,

  • 由商家控制(因此他们可以按月收费),

  • 设有严格的消费限额(以防止商家过度消费),

  • 用户可以随时撤销/取消并取回剩余款项。

受信任的服务(Spotify、YouTube、ChatGPT)可以通过 API 向用户请求其专属的订阅子帐户。

用户通过其 ROOT 7702 帐户批准此请求,包括订阅策略(每月上限、允许的代币、允许的接收者)以及将控制支出的服务的 P-256 公钥。

获得批准后,平台会通过密钥管理系统 (KMS) 生成一个新的 ERC-5564 隐蔽地址(因此无需存储派生的私钥,但仍可恢复)。用户的 ROOT 账户随后会将资金存入隐私池,之后这些资金会以一种避免 ROOT 账户和子账户之间链上关联的方式提取到新生成的隐蔽子账户中。

子账户收到资金后,通过 EIP-7702 授权升级为自定义智能账户实现,并进行初始化,使服务的 P-256 密钥成为活动签名者,并在链上强制执行严格的支出限制和执行权限。

从那时起,该服务可以在配置的限制范围内运行循环订阅费用,同时用户保留一个退出机制:Root Key 可以随时撤销该服务,恢复控制权(通过 KMS 支持的派生/恢复路径),并提取任何剩余余额,而不会泄露与主 ROOT 账户的直接链上连接。


来源
免责声明:以上内容仅为作者观点,不代表Followin的任何立场,不构成与Followin相关的任何投资建议。
喜欢
60
收藏
10
评论