Plinko PIR 是 Vitalik Buterin 于 2025 年 11 月 25 日发布的私有信息检索(Private Information Retrieval, PIR)方案,专为私有读取场景设计,如隐私维基百科、RAG 检索或区块链 RPC 查询。该方案通过客户端预处理生成 O(√N) 大小的 hints,实现查询通信与服务器计算均为 O(√N),远优于传统 O(N) 开销。
核心观点在于:传统 PIR 依赖单一服务器或多服务器非串谋假设,易受中心化或信任问题制约。Plinko 通过伪随机子集 XOR hints 实现高效遮罩,但为工程落地于分布式环境(如多 RPC 节点),需扩展为“携带证明的随机份额”(proof-carrying randomness shares):服务器生成行种子派生的随机列份额,并附 ZK 证明验证计算正确性。同时引入 Slashing 机制,服务器质押 stake,若证明无效或份额不一致,即触发罚没,经济惩罚误行为,确保低带宽私有查找下最小化作恶激励。
证据源于 Plinko 协议机制。将数据库视为 √N × √N 网格,客户端用主种子 S 生成每行种子 S_i,hints 为选 √N/2 +1 行的随机列 XOR 值。查询时,客户端发送除目标点外的子集 + 其他行随机列,服务器 XOR 返回,客户端本地还原。为分布式化,每服务器负责部分行份额,用 invertible PRF(如 Plonky3)生成列索引,ZK 证明电路验证:(1) PRF 输出匹配输入种子与 j;(2) XOR 聚合正确;(3) 无篡改输入数据。Vitalik 原文中 hints 更新支持流式处理,扩展 Slashing 后,客户端聚合 t/n 份额重建,阈值签名防重放。
可落地参数与清单如下:
1. 分布式服务器配置
- 服务器数 n=128,重建阈值 t=67(容忍 47% 故障/作恶)。
- 每服务器 stake=0.1 ETH 等值(总质押 12.8 ETH),slash 比例 10%(误行为罚 0.01 ETH)。
- 行分配:均匀分片,每服务器管 √N / n 行(10B 条目下,√N≈100k,每服≈780 行)。
2. ZK 证明参数
- 证明系统:Plonky3 或 Binius(二进制域高效),证明大小 <5KB,验证时间 <10ms。
- 电路输入:行种子 S_i(32B)、hint 索引 j(log √N bits)、数据份额(多达 √N/2 * 32B)。
- 递归聚合:多服务器证明用 KZG 承诺聚合至单证明,Gas 成本 <200k。
3. 查询流程清单
- 客户端预处理:下载全 DB(一次性),生成 128√N hints(390MB 存本地),备份 hints 池。
- 选 hint j 含目标 (x,y),逆 PRF 找 j(<√N/16=6k 哈希)。
- 广播查询:目标行 x 到所有服,其他行分片;附 nonce 防重放。
- 服务器响应:计算份额 XOR + ZK 证明(gen 时间 <50ms/GPU)。
- 客户端验证:聚合 t 份额,验证证明一致性;阈值重建 D[i]。
- 更新:用备份 hint 替换耗尽 hint,XOR 数据变更。
4. Slashing 触发与监控
- 无效证明:聚合失败 >33%,任一客户端提交 proof-of-invalid(ZK 挑战),slash 作恶服 50%。
- 不一致份额:t+1 份额中,任意两两 XOR 不符,罚 20%。
- 延迟响应:>500ms,声誉扣分,累计 3 次 slash 10%。
- 监控指标:(1) 证明验证延迟(Prometheus <20ms P99);(2) slash 事件率 <0.1%/query;(3) 可用率 >99.9%;(4) 带宽/query 200kB。
- 回滚策略:slash 争议期 7 天,仲裁用链上多签;异常时 fallback 至单服务器 PIR 或本地 hints。
风险控制:防串谋用随机子集(entropy >128bit),ZK 电路审计防音叉攻击。实际部署于 Ethereum RPC 网络,10B 状态树下,query 成本≈0.001 ETH(含 Gas),server read 3MB,远低于全扫描。
来源:Vitalik "Plinko PIR tutorial" (https://vitalik.eth.limo/general/2025/11/25/plinko.html);Plinko 论文 (https://eprint.iacr.org/2024/318)。