零知识API使用信用:大型语言模型及其他应用
markdown
ZK API 使用积分:LLMs 及其他
Davide Crapis 和 Vitalik Buterin
这是 v2 版——与 v1 版 相比,它将客户端的退款票据列表替换为服务器签名的同态退款运行总额,因此用户不再需要存储(或证明)不断增长的退款历史。
API 计量中的一个核心挑战是同时实现隐私、安全和效率。这对于使用 LLMs 进行 AI 推理尤其关键,因为用户会提交高度敏感的个人数据,但它也普遍适用于任何高频数字服务。目前,API 提供商被迫在两条次优路径中进行选择:
- Web2 身份验证:需要身份验证(电子邮件/信用卡),这将每个请求与真实世界的身份关联起来,造成巨大的隐私泄露和画像风险。
- 链上支付:每个请求都需要一笔交易,这会极其缓慢、昂贵,并且难以模糊用户的完整交易图谱。
我们需要一个系统,用户可以一次性存入资金,然后匿名、安全、高效地进行数千次 API 调用。提供商必须获得付款保证并防止垃圾邮件,而用户则必须获得保证,其请求不会与其身份或彼此关联。我们将 LLM 推理作为主要的用例,但该方法是通用的,也适用于 RPC 调用或任何其他固定成本 API、图像生成、云计算服务、VPN、公共数据 API 等。
示例:
- LLM 推理:用户将 $100$ USDC 存入智能合约,并对托管的 LLM 进行 $500$ 次查询。提供商收到 $500$ 个有效且已付费的请求,但无法将它们与同一存款人(或彼此)关联起来,同时用户的提示仍然无法与用户身份关联。
- 以太坊 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}$ 来证明:
- 成员资格:$ID \in MerkleRoot$。
- 状态一致性:匿名 $E(R){anon}$ 是先前由服务器使用 $\sigma{srv}$ 签名的承诺 $E(R)$ 的有效重新随机化。
- 偿付能力(信用检查): $$ (i + 1) \cdot C_{max} \le D + R $$ (在索引 $i$ 处的总潜在支出由存款加上所有已验证退款的总和覆盖。)
- RLN Share 和 Nullifier:
- 斜率:$a = Hash(k, i)$
- 注意: 与索引 $i$ 关联而不是与之前的哈希关联,以允许并行生成。
- Signal:$y = k + a \cdot Hash(M)$
- Nullifier:$Nullifier = Hash(a)$
- 斜率:$a = Hash(k, i)$
提交
用户发送: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 请求(但没有触发数学上的双重花费陷阱):
- 违规:服务器在请求 payload 中检测到策略违规(例如,禁止内容)。
- 销毁交易:服务器在智能合约上调用
slashPolicyStake()函数。- 输入:违规请求的
Nullifier和ViolationEvidence(可选哈希/原因)。 - 操作:合约从用户的存款中销毁金额 $S$。
- 约束:服务器不能为自己认领 $S$,它被发送到一个销毁地址。这可以防止服务器为了利润而虚假地封禁用户。
- 输入:违规请求的
- 公开问责:罚没事件与相关的
Nullifier一起记录在链上。虽然用户的身份仍然隐藏,但社区可以审计服务器销毁质押的频率以及这些销毁所发布的证据。
- 原文链接: hackmd.io/3da7PaYmTqmNTT...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
版权声明
本文仅代表作者观点,不代表区块链技术网立场。
本文系作者授权本站发表,未经许可,不得转载。
区块链技术网
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。