零知识API使用信用:大型语言模型及其他应用

本文提出了一种基于零知识证明(ZKPs)的API使用信用系统,旨在解决Web2身份验证和链上支付在隐私、安全和效率方面的不足。该系统允许用户匿名、安全且高效地进行大量API调用,特别是针对LLM推理和RPC服务,通过结合速率限制零知识匿名器(RLN)和服务器签名同态退款机制实现。

markdown

ZK API 使用积分:LLMs 及其他

Davide Crapis 和 Vitalik Buterin

这是 v2 版——与 v1 版 相比,它将客户端的退款票据列表替换为服务器签名的同态退款运行总额,因此用户不再需要存储(或证明)不断增长的退款历史。

API 计量中的一个核心挑战是同时实现隐私安全效率。这对于使用 LLMs 进行 AI 推理尤其关键,因为用户会提交高度敏感的个人数据,但它也普遍适用于任何高频数字服务。目前,API 提供商被迫在两条次优路径中进行选择:

  1. Web2 身份验证:需要身份验证(电子邮件/信用卡),这将每个请求与真实世界的身份关联起来,造成巨大的隐私泄露和画像风险。
  2. 链上支付:每个请求都需要一笔交易,这会极其缓慢、昂贵,并且难以模糊用户的完整交易图谱。

我们需要一个系统,用户可以一次性存入资金,然后匿名、安全、高效地进行数千次 API 调用。提供商必须获得付款保证并防止垃圾邮件,而用户则必须获得保证,其请求不会与其身份或彼此关联。我们将 LLM 推理作为主要的用例,但该方法是通用的,也适用于 RPC 调用或任何其他固定成本 API、图像生成、云计算服务、VPN、公共数据 API 等。

示例:

  1. LLM 推理:用户将 $100$ USDC 存入智能合约,并对托管的 LLM 进行 $500$ 次查询。提供商收到 $500$ 个有效且已付费的请求,但无法将它们与同一存款人(或彼此)关联起来,同时用户的提示仍然无法与用户身份关联。
  2. 以太坊 RPC:用户存入 $10$ USDC,并向以太坊 RPC 节点(例如,eth_call / eth_getLogs)发出 $10,000$ 个请求,以支持钱包、索引器或机器人。RPC 提供商受到垃圾邮件防护并保证获得付款,但无法将请求关联成持久的用户档案。

提案概述: 我们利用 Rate-Limit Nullifiers (RLN) 将匿名性与经济权益绑定:遵守协议限制的诚实用户保持不可关联,而双重花费(或以其他方式超出其允许容量)的用户则会通过密码学方式披露其密钥,从而实现罚没。我们将协议设计为在 API 使用产生可变成本时也能工作,但它也直接支持更简单的固定成本每次调用作为特例。

我们采用一种灵活的记账协议,其中每个请求预先设置了每次调用的最大成本,一旦在调用结束时确定了实际成本,服务器就会发出退款。服务器会更新(并签名)一个同态加密的退款运行总额,用户可以在请求之间携带该总额。双重质押机制让服务器可以在执行合规策略的同时保持公开问责。

ZK API 使用积分协议

该协议利用服务器退款,并结合服务器签名的同态退款运行总额,用户可以在请求之间私下携带该总额。该模型通过要求用户证明其累计支出(由其当前的票据索引表示)严格在其初始存款和已验证的退款历史范围内来强制执行偿付能力。

反垃圾邮件保护是通过经济方式强制执行的:用户的吞吐量自然受到其可用存款缓冲的限制,同时任何尝试重复使用特定票据索引(双重花费)的行为都通过 Rate-Limit Nullifier 阻止。

原语

  • $k$:用户密钥。
  • $D$:初始存款。
  • $C_{max}$:每个请求的最大成本(预先扣除)。
  • $i$:票据索引(一个严格递增的计数器:$0, 1, 2, \dots$)。
  • $E(R)$:用户迄今收到的总退款的同态加密(例如,Pedersen commitment 或基于格的 HE)。
  • $\sigma_{srv}$:服务器对当前加密总额 $E(R)$ 发出的签名。

协议流程

注册

用户生成密钥 $k$,推导出身份承诺 $ID = Hash(k)$,并将 $D$ 存入智能合约。合约将 $ID$ 插入链上 Merkle Tree。

重新随机化状态

用户选择一个新的随机致盲因子 $\eta'$ 并推导出一个新的匿名承诺:$E(R)_{anon} = E(R) \oplus E(0; \eta')$。

请求生成

用户选择下一个可用的票据索引 $i$。用户生成一个 ZK-STARK $\pi_{req}$ 来证明:

  1. 成员资格:$ID \in MerkleRoot$。
  2. 状态一致性:匿名 $E(R){anon}$ 是先前由服务器使用 $\sigma{srv}$ 签名的承诺 $E(R)$ 的有效重新随机化。
  3. 偿付能力(信用检查): $$ (i + 1) \cdot C_{max} \le D + R $$ (在索引 $i$ 处的总潜在支出由存款加上所有已验证退款的总和覆盖。)
  4. RLN Share 和 Nullifier:
    • 斜率:$a = Hash(k, i)$
      • 注意: 与索引 $i$ 关联而不是与之前的哈希关联,以允许并行生成。
    • Signal:$y = k + a \cdot Hash(M)$
    • Nullifier:$Nullifier = Hash(a)$

提交

用户发送:Payload ($M$) + Nullifier + Signal ($x, y$) + Proof + 当前 $E(R)_{anon}$。

验证与罚没

服务器在其“已用票据”数据库中检查 Nullifier:

  • 分叉/双重花费检查: 如果 Nullifier 存在但具有不同的 $x$(消息),则用户尝试在两个不同的请求上花费相同的票据。解出 $k$ 并罚没。
  • 偿付能力检查: 验证 $\pi_{req}$ 以确保票据索引 $i$ 得到了用户当前资金水平的授权。

结算与退款更新

  • 服务器执行请求并确定实际退款 $r = (C{max} - C{actual})$。
  • 同态更新: 服务器将 $r$ 同态添加到当前加密中:$E(R^{new}) = E(R)_{anon} \oplus E(r)$。
  • 签名: 服务器签署新的总额 $E(R^{new})$ 并将其(连同新签名 $\sigma^{new}$)发送回用户。

服务器端问责(双重质押)

为了阻止超出简单限速的 API 滥用(例如,违反服务条款、生成非法内容或越狱尝试),我们引入了一个辅助质押层。例如,用户可能会提交一个提示,要求模型生成制造武器的说明,或者帮助他们绕过安全控制——这些请求将违反许多提供商的使用政策,并且提供商可能希望阻止。

用户存入总金额 $Total = D + S$。

  • $D$ (RLN 质押):受协议数学原理管辖。可以由任何提供双重信号数学证明(已揭示密钥 $k$)的人(包括服务器)认领。
  • $S$ (策略质押):受服务器策略管辖。如果用户违反使用政策,服务器可以罚没(销毁),但不能认领

这样做,而不是简单地提高 $D$,是为了消除服务器欺诈性地没收用户存款的动机,因为存款金额可能很高,具体取决于其大小。

S 的罚没机制

如果用户提交了一个违反策略的有效 RLN 请求(但没有触发数学上的双重花费陷阱):

  1. 违规:服务器在请求 payload 中检测到策略违规(例如,禁止内容)。
  2. 销毁交易:服务器在智能合约上调用 slashPolicyStake() 函数。
    • 输入:违规请求的 NullifierViolationEvidence(可选哈希/原因)。
    • 操作:合约从用户的存款中销毁金额 $S$。
    • 约束:服务器不能为自己认领 $S$,它被发送到一个销毁地址。这可以防止服务器为了利润而虚假地封禁用户。
  3. 公开问责:罚没事件与相关的 Nullifier 一起记录在链上。虽然用户的身份仍然隐藏,但社区可以审计服务器销毁质押的频率以及这些销毁所发布的证据。
  • 原文链接: hackmd.io/3da7PaYmTqmNTT...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

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