零知识 QAP 问题的转化

简介:本文是 Vitalik 写于 2016 年 12 月,用于介绍零知识证明的数学实现方式的论文。文章思路清晰,通俗易懂,也因此,该文成为区块链行业技术人员学习这方面知识的首选文章之一。

术语介绍

解决一个问题需要花费时间。如果解决问题需要的时间与问题的规模之间是多项式关系,则可以称该问题具有多项式复杂度。

P 问题*:指的是在多项式时间内可解的问题。*

NP 问题*(Non-Deterministic Polynomial Problem,非确定性多项式问题):指不能在多项式内可解,但是可以在多项式时间内验证的问题。*

QSP 问题*(QSP - Quadratic Span Program):实现基于布尔电路的 NP 问题的证明和验证。*

QAP 问题 (Quadratic Arithmetic Program):实现基于算术电路的 NP 问题的证明和验证,相对于 QSP,QAP 有更好的普适性。

正文翻译

最近人们对 zk-SNARKs(零知识证明)背后的技术有很多兴趣,人们越来越多地试图去揭开一些被许多人称为“月球数学”的东西的神秘面纱,因为人们认为它的复杂性非常难以理解。zk-SNARKs 的理解确实相当具有挑战性,尤其是由于整个系统需要组装起来才能工作的移动部件太多,但如果我们把这项技术一件一件地分解,那么理解起来就会变得更简单。

这篇文章的目的不是用于完整的介绍 zk-SNARKs,它假定您具有以下背景知识:

1- 你知道 zk-SNARKs 和他的大致原理;(译者注:如果不知道 zk-SNARK,建议您可以参考《一个数独引发的惨案:零知识证明》

2- 你有足够的数学知识,能理解一些基本的多项式知识。(如 if P(x)+ Q(x)=(P + Q)(x)PQ代表多项式,如果你对这类多项式表述方式已经非常熟悉,说明你符合继续阅读的要求)。

zk-SNARK知识管道图,Eran Tromer绘制 

如上图,可以将以上零知识证明分为由上至下的两个阶段。首先,zk-SNARK 不能直接应用于任何计算问题;相反,您必须将问题转换为操作的正确“形式”。这种形式被称为“二次算术程序”(QAP),将函数的代码转换成这些代码本身就非常重要。与将函数代码转换为 QAP 的过程一起运行的还有另一个过程,这样,如果对代码有输入,就可以创建相应的解决方案(有时称为 QAP 的“见证”)。这就是本文需要讲述的内容。

在此之后,还有另一个相当复杂的过程来为这个 QAP 创建实际的“零知识证明”,还有一个单独的过程来验证别人传给你的证据,但是这些细节超出了本文的范围。

在下面示例中,我们将选择一个非常简单的问题:

求一个三次方程的解:x**3 + x + 5 == 35(提示:答案是 3 )。

这个问题很简单,由此产生的 QAP 不会大到令人生畏,但也是很重要的,你可以由此案例看到所有的功能是如何发挥作用的。

用编程语言描述以上方程如下:

我们在这里使用的简单编程语言支持基本的算术(+、-、*、/)、恒等幂指数**(x**7,但不是x**y)***和变量赋值,这足够强大到理论上可以在其中进行任何计算(只要计算步骤的数量是有界的;不允许循环)。注意模(%)和比较运算符(<、>、≤≥)不支持,因为没有有效的方法做模或直接比较有限循环群算法(感谢;如果有任何一种方法可以做到这一点,那么椭圆曲线密码破环的速度将超过“二分查找”和“中国剩余定理”)。

 您可以通过位分解来将语言扩展到模和比较,(例如:13 = 2**3 + 2**2 + 1 = 8 + 4 + 1)作为辅助输入,证明这些分解的正确性,并在二进制电路中进行数学运算;在有限域算法中,执行等式(==)检查也是可行的,实际上更容易一些,但这两个细节我们现在都不讨论。我们可以扩展语言来支持条件句(例如将语句:if x < 5: y = 7; else: y = 9; 转换为算术形式:y = 7 * (x < 5) + 9 * (x >= 5);)不过请注意,条

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值