ZK API 使用鸣谢:LLM 及其他

本文为机器翻译
展示原文

戴维德·克拉皮斯和维塔利克·布特林

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

  1. Web2 身份:需要身份验证(电子邮件/信用卡),这会将每个请求与现实世界的身份关联起来,从而造成大规模的隐私泄露和用户画像风险。
  2. 链上支付:每次请求都需要进行交易,速度非常慢,成本很高,而且难以混淆用户的完整交易图。

我们需要一个系统,用户只需一次性充值,即可匿名、安全、高效地发起数千次 API 调用。服务提供商必须获得支付保障和反垃圾邮件保护,而用户则必须确保其请求不会与其身份或其他用户关联。我们以 LLM 推理为例进行演示,但该方法具有通用性,也适用于 RPC 调用或任何其他固定成本 API、图像生成、云计算服务、VPN、数据 APIETC。

例如:

  1. LLM 推断:用户向智能合约存入 100 USDC ,并向托管的 LLM 发出 500 次查询。提供商收到 500 个有效的已支付请求,但无法将这些请求与同一存款人(或彼此)关联起来,同时用户的请求也无法与用户身份关联。
  2. 以太坊 RPC:用户存入 10 USDC ,并向以太坊 RPC 节点(例如eth_call / eth_getLogs )发出 10,000 个请求,以支持钱包、索引器或机器人。RPC 提供商受到反垃圾邮件保护并保证支付,但无法将这些请求关联到持久的用户配置文件中。

提案概述:我们利用速率限制无效器(RLN) 将匿名性与经济利益挂钩:遵守协议限制的诚实用户保持匿名,而双重支付(或超出其允许的容量)的用户则会以加密方式泄露其私钥,从而触发惩罚。我们设计的协议适用于 API 使用成本可变的情况,但同时也直接支持更简单的固定每次调用成本模式。

我们采用灵活的计费协议,其中每个请求都会预先设定每次调用的最高费用,并在调用结束后确定实际费用后,服务器会进行退款。用户可以私下累积已签名的退款凭证,以便在实际每次调用费用仅在执行后才可知晓的情况下,回收未使用的额度并解锁未来的容量。双重质押机制使服务器能够在执行合规策略的同时,保持公开透明。

ZK API 使用信用协议

该协议采用服务器端退款机制,结合退款累积和客户端偿付能力证明。该模型通过要求用户证明其累计支出(以其当前票券指数表示)严格控制在其初始存款和已验证的退款记录范围内来强制执行偿付能力。

反垃圾邮件保护措施以经济的方式实施:用户的吞吐量自然受到其可用存款缓冲区的限制,而任何试图重复使用特定票据索引(双重支付)的行为都会被速率限制无效器阻止。

基本元素

  • k k :用户的私钥。
  • D D :初始存款。
  • C_{max} C m a x : 每次请求的最大成本(预先扣除)。
  • i i : 票号索引(严格递增的计数器: 0, 1, 2, \dots 0 , 1 , 2 , )。
  • \{r_1, r_2, \dots, r_n\} { r 1 , r 2 , , r n } : 从服务器收到的已签名退款凭证的私有集合。

协议流程

登记
用户生成秘密值k 导出身份承诺ID = Hash(k) 并将ID存入智能合约合约ID插入默克尔

退款收取(异步)
请求处理完毕后,服务器会提供一个已签名的退款单r = \{v, \text{sig}\} r = { v , sig } 其中v是退款金额, sig是服务器对v签名(可能还包含一个唯一的请求 ID)。用户将这些退款单存储在本地。

请求生成(可并行化)
用户选择下一个可用的票证索引i 他们可以同时生成多个请求(例如,票证i、i+1、i+2 i + 1 i + 2

用户生成一个 ZK-STARK 证明\pi_{REQ} π r e q

  1. 成员资格: ID \in I D MerkleRoot。

  2. 退款总额:
    该电路将退款单列表\{r_1, \dots, r_n\} { r 1 , , r n }作为私有输入。

    • 每张门票对应的赛道:
      • 验证服务器签名。
      • 提取值v_j v j
    • 该电路计算总和: R = \sum_{j=1}^{n} v_j R = n j = 1 v j
  3. 偿付能力(信用检查):索引i的潜在总支出由存款加上所有已核实退款的总和来覆盖:

    (i + 1) \cdot C_{max} \le D + R ( i + 1 ) C max D + R

  4. RLN 份额和无效化器:

    • 斜率: a = Hash(k, i) a = H a s h ( k , i )
    • 信号:
      • x= Hash(M) x = H a s h ( M ) ,
      • y = k + a \cdot x y = k + a x
    • = Hash ( a ) Nullifier = Hash ( a )

提交

用户发送:有效载荷(M)+ 无效器 + 信号(x,y)+ 证明。

验证与惩罚
服务器会检查其“已用票据”数据库中的无效化器:

  • 分叉/双花检查:如果无效符存在且x x (消息)不同,则表示用户试图在两个不同的请求中使用同一张票。求解k k和 SLASH。
  • 偿付能力检查:验证\pi_{REQ} π r e q以确保票号i i已获得用户当前资金水平的授权。

沉降

  • 服务器执行请求。
  • 退款:服务器签发已签名的退款票r = (C_{max} - C_{ actual } ) r = ( C max C act u a l )
  • 用户将r r添加到其累加器中,以“解锁”更高的票券指数以供将来使用。

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

为了防止除简单限速之外的 API 滥用(例如,违反服务条款、生成非法内容或尝试越狱),我们引入了二级质押层。例如,用户可能会提交请求,要求模型生成制造武器的指令或帮助他们绕过安全控制——这些请求会违反许多服务提供商的使用政策。我们希望找到一种方法来强制执行这些政策,同时避免让服务提供商轻易地从误报中获利。

具体而言:

用户存入的总金额Total = D + S To t a l = D + S

  • D D (RLN 权益):由协议的数学原理决定。任何提供双重信号(已揭示的秘密k k )数学证明的人(包括服务器)都可以申领。
  • S S (策略权益):受服务器策略约束。如果用户违反使用策略,服务器可以扣除(销毁)该权益,但不能收回

这样做的目的,而不是简单地提高D D值,是为了消除服务器以欺诈手段夺走用户存款的动机,而这种动机可能很高,具体取决于存款金额的大小。

S型切割机制

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

  1. 违规:服务器检测到请求负载中存在策略违规(例如,违禁内容)。
  2. 销毁交易:服务器在智能合约上调用slashPolicyStake()函数。
    • 输入:违规请求的NullifierViolationEvidence (可选哈希值/原因)。
    • 操作:合约从用户的存款中销毁金额S S。
    • 限制:服务器不能S S归自己所有,它会被发送到销毁地址。这可以防止服务器为了牟利而恶意封禁用户。
  3. 公开问责:罚没事件会记录在链上,并附带相应的Nullifier 。虽然用户身份仍然隐藏,但社区可以审核服务器销毁权益的频率以及这些销毁事件的公开证据。

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