本文介绍了SR1CS(sequential rank 1 constraint system),它是一种R1CS的扩展,支持查找和其他有趣的功能。作者提出了一个类似于Groth16的证明系统来证明SR1CS的知识,并讨论了它与KZG-PlonK相比的优缺点,例如在处理lookup参数和自定义门方面的差异。
非常感谢 Lúcás Meier @cronokirby 提出这个问题。
更新:Weikeng Chen 提出了一个更简单的版本,它与 Pinoccio 和 Groth16 的关系类似。
这在很大程度上取代了 "Pinoccio" 方法。简要解释:不像普通的 Groth16 那样仅仅分离私有输入和公共输入,而是通过使用少量的元素来更精细地分离 witness:
γ1,...,γn, 以及元素
Ci 属于 witness 的一个子集,将被除以
γi。这将实现 witness 承诺分离的预期效果。
所以,更准确地说,被问到的问题是 "R1CS 是否支持 lookups"。实际上,R1CS 语言有一个非常简单和自然的扩展,可以支持 lookups 和各种其他有趣的东西。
在这里,我将描述它,并为这种语言提出可能的 Groth16 风格的证明系统。
SR1CS(顺序秩 1 约束系统)的实例定义如下:
它是一个 R1CS 电路,以及splitting - 线集合
S 被分割
S=S0⊔S1...⊔Sn,以及一组特殊的公共输入,称为 "challenges",索引从 1 到 n,具有以下属性:
≥ 参数索引。
Si 中。
在道义上,它应该被认为是一个顺序过程:创建一些约束系统,然后要求验证者提供一些 challenges。在下一轮中,我们添加额外的约束(和额外的线),也许会使用 challenges,并重复这个过程。
我在这里不会定义 witness(因为它编码了一个交互过程),但了解 SR1CS 意味着我们能够以极大的概率响应这个顺序过程中的随机 challenges。
可能有几种不同的方法可以做到这一点(我可以想象一种直接的方法,将 KZG-commitment 作为公共输入 IC 暴露出来,然后使用 这个 在它们之间建立接口)。
我将提出一种基于 KoE 的简单方法。我想知道是否可以改进它。
UPD:是的,可以改进,正如 Weikeng Chen 建议的那样。
也就是说,让我们假设对于标准 Groth16 CRS 的每个元素
Ci(这里,公共输入也以相同的方式处理,我只是没有写下来),我们也得到了元素
C~i=qjCi,其中
i∈Sj。这里,
q0,...,qn 是有毒垃圾。
现在,产生以下数据:
A,B,C,D0,...,Dn−1,D~0,...,D~n // 并且
Dn 被计算为
=C+IC−D0−...−Dn。
这里,
Di 是我们对 witness 的承诺
C+IC 中对应于子集
Si 的部分,并且
D~i 是它们乘以
qi 的结果。
需要检查以下条件:
⟨Di,Qi⟩=⟨D~i,G⟩,其中
Qi=[qi]2。
Hash(Di)
例如,普通的 lookup argument 将需要 3 个更多的群元素和 1 个额外的 pairing check(因为它只涉及 1 个 challenge 轮)。
我不确定,但我认为是的。
这样做的开销是一些更多的 MSMs,但生成 witness 的关键 O(nlog(n)) 部分完全没有改变。
我将尝试在这里将 R1CS 与 KZG-PlonK 进行比较。
它还可能允许使用 challenges 进行不同种类的有用的参数 - 我想到了 Liam Eagan 的 MSM。
- 原文链接: hackmd.io/@Merlin404/SJm...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!