0xAlpha 投稿 DODO research:让我们一起深入解析了 zk-SNARK 技术,探讨它在加密和区块链中实现隐私保护的原理和应用
作者:0xAlpha Co-founder @DeriProtocol
欢迎关注推特:@0x_Alpha
0xAlpha 投稿 DODO research。这篇文章将用数学解码这项技术,揭示它如何在不透露任何信息的情况下证明知识的真实性。准备好,让我们一起揭开 zk-SNARK 的神秘面纱。
介绍
zk-SNARK,即 “零知识简洁非交互式知识论证”,使得一名验证者 能够确认一名证明者 拥有某些特定知识,这些知识被称为 witness,满足特定的关系,而无需透露关于见证本身的任何信息。
为特定问题生成 zk-SNARK 包括以下四个阶段:
- 将问题(或函数)转换成算术门电路。
- 然后将这个电路翻译成矩阵公式。
- 这个矩阵公式进一步转换成一个多项式,这个多项式应该能被一个特定的最小多项式整除。
- 最后,这种可整除性在有限域的椭圆曲线点中表示出来,证明就在这里进行。
前三个步骤仅仅是转换了原始陈述的表示方式。最后一个步骤使用同态加密将第三步的陈述投影到加密空间中,使得证明者能够证实其中的镜像陈述。鉴于这种投影利用了非对称加密,从第三步的陈述回溯到原始陈述是不可行的,确保了零知识的暴露。
阅读本文所需的数学背景相当于 STEM 专业学生的大一级代数水平。唯一可能具有挑战性的概念可能是椭圆曲线加密。对于不熟悉这一点的人来说,可以将其视为具有特殊基数的指数函数,同时要记住其逆函数仍然未解。
在本文中,我们将继续使用方程式 (1) 作为讨论的基础。
第 1 步:算术门电路
方程式 (1) 可以分解为以下基本算术运算:
这对应于以下算术门电路:
我们还将方程式 (2) 称为一组 4 个 “一级约束”,每个约束描述了电路中一个算术门的关系。通常,一组 n 个一级约束可以概括为一个二次算术程序(QAP),接下来将进行解释。
第 2 步:矩阵
第 3 步:多项式
如果提取出每一行单独观察,不难发现这四行对应于在四个点分别求值的相同表达式。因此,上述矩阵方程等价于:
一种直接但不保密的方式来证明这一点是提供方程式 (4) 的左边并展示因式分解。然而,zk-SNARK 的主要目的是保持隐秘(不透露任何知识)。因此,我们不会直接证明这个方程,而是在椭圆曲线点的空间中证明它的加密版本。
第 4 步:椭圆曲线点
将方程式 (4) 重写为:
接下来,我们将更详细地阐述实际的操作步骤。
椭圆曲线加密
另一方面,两个椭圆曲线点的加法定义如下图所示:
然而,Alice 想要证明的方程式 (5) 是二次形式的,所以线性不够。为了处理二次项,我们需要在加密空间中定义乘法。这被称为配对函数,或双线性映射,接下来将进行解释。
双线性映射
这是我们都熟悉的东西——加法和乘法操作的分配律。
有了这样的双线性映射,我们就可以将方程式 (5) 的两边映射到加密空间。
公共参考字符串
整个过程被称作 “验证钥”,简称 VK。这里只涉及 7 个椭圆曲线点(ECPs),需要提供给验证方。要注意的是,不管问题里面涉及多少输入和一级约束,VK 始终是由 7 个 ECPs 构成的。
另外,值得一提的是,“可信设置” 以及生成 PK 和 VK 的过程,对于一个特定的问题来说,只需操作一次即可。
证明与验证
现在拥有公钥(PK),爱丽丝将计算以下椭圆曲线点(ECPs):
这 9 个椭圆曲线点就是零知识简洁非交互式证明(zk-SNARK)的关键!
注意,爱丽丝其实只是对公钥里的椭圆曲线点做了些线性组合运算。这点特别关键,验证时会重点检查。
现在,爱丽丝交出了 zk-SNARK 证明,咱们终于进入验证环节,分三步走。
参考文献
- “Zk-SNARKs: Under the Hood” (Vitalik Buterin)
- “A Review of Zero Knowledge Proofs” (Thomas Chen, Abby Lu, Jern Kunpittaya, and Alan Luo)
- “Why and How zk-SNARK Works: Definitive Explanation” (Maksym Petkus)
- Website: Zero-Knowledge Proofs
- Wikipedia: Elliptic curve
- Wikipedia: Finite field
- Wikipedia: Pairing-based cryptography
免责声明
本研究报告内的信息均来自公开披露资料,且本文中的观点仅作为研究目的,并不代表任何投资意见。报告中出具的观点和预测仅为出具日的分析和判断,不具备永久有效性。