By: Kong'@SlowMist
⚓️目录
zkSNARK:zero-knowledge Succint Non-interactive ARguments of Knowledge (零知识简洁非交互式知识论证) 的简称:
zk:零知识,证明者隐藏所知道的输入。
Succinct:简洁性,生成可以快速验证的简短证明。
Non-interactive:非交互式,不需要来回交互。
ARguments:论证,验证者论证证明者所知道的输入。(验证者只对计算能力有限的证明者有效,拥有足够计算能力的证明者可以伪造证明,这也叫“计算可靠性”。)
Knowledge:知识,证明者所知道的输入。
简单来说,其就是使用算术化的方法,将计算类问题简化成涉及有限域上的多项式的代数问题。
交互式零知识证明:证明方 𝒫 发送承诺给验证方 𝒱;验证方 𝒱 发送挑战给证明方 𝒫;证明方 𝒫 发送响应。(与TCP/IP协议的交互式类似)
非交互式证明:证明方 𝒫 生成证明,发送给验证方 𝒱;验证方 𝒱 验证一致性即可。其中,挑战是由证明方基于当前数据计算哈希获得,操控挑战的难度与 POW 相同,因此非交互式证明是安全。该过程没有其他额外的数据交互。例如:用户将ECDSA签名发送出去,共识节点进行一致性验证过程一样,整个过程只有一次数据发送。
- 将欲证明的问题(满足加法/乘法等任意运算关系)归约为 QAP/QSP 多项式,构成 NP 问题
- 假设 P 问题 != NP 问题
- 使用生成算法进行可信设置(CRS),并公开 CRS
- CRS 分成两部分 pk 与 vk
- 可信安全多方计算
- 证明方选择随机数
$(r,s \leftarrow Z_p)$ 与秘密$w$ 以及$pk$ 构造离散对数困难(多项式承诺),生成$proof$ 发给验证者- 随机数用于保护秘密
- 通过将组合关系的组合多项式的系数放到椭圆曲线离散对数点上形成离散对数困难问题(多项式承诺),对外暴漏 3 个离散对数点(
$proof$ )
- 验证者使用
$proof/vk$ 重构整除关系证明验证其是否正确- 使用双线性映射进行重构,快速验证
$w$ 的正确性,却不知道$w$
- 使用双线性映射进行重构,快速验证
多项式时间算法:能够快速计算出结果的算法。
-
已知私钥
$sk$ 和椭圆曲线生成元$G$ ,求满足以下离散对数关系的公钥$PK$ $$PK := sk \cdot G$$ -
已知原象
$x$ 和哈希函 SHA256,求哈希数值$y$ $$y:=SHA256(x)$$
非多项式时间算法:无法快速计算出结果的算法,包括指数时间、亚指数时间算法。
-
离散对数,已知公钥
$PK$ 和椭圆曲线生成元$G$ ,不能够在多项式时间内计算出私钥$sk$ ,而需要指数时间才能计算私钥$sk$ $$PK = sk \cdot G$$ -
哈希求逆,已知函数值
$y$ 和哈希函数 SHA256,不能够在多项式时间内计算出原象$x$ ,而需要指数时间才能计算原象$x$ $$y=SHA256(x)$$
一般认为 P 问题 != NP 问题
P 问题:在多项式时间内可解的问题。
NP 问题:多项式时间内不可计算的问题,需要指数时间或亚指数时间。但是一旦已知解,则能够在多项式时间内验证解是否正确。
NP 问题的本质是单向性,不可快速逆向求解,但是能够快速正向验证。
已知 3 组的阶小于 n 的多项式
求向量
为什么是 NP 问题:
向量
其中,向量
目标多项式
如果不知道向量
任意多项式时间算法(包括 SHA256 和 ECDSA)均有对应的阶为 1 的等式(R1CS 约束),以
其等式可以做如下拆分:
这 6 个阶为 1 的等式限定了方程的运算规则,即能够用电路约束表达同样的运算规则。因此
关键术语:阶为 1 的等式(Rank 1 Constraint System, R1CS)
有以下规则:
阶为 1 的等式 = 电路约束「电路门」
阶为 1 的乘法等式 = 乘法约束「乘法门」
阶为 1 的加法等式 = 加法约束「加法门」
算式 10 为 6 个阶为 1 的等式,其包含 3 个乘法门和 3 个加法门,可使用 3 个乘法门和 3 个加法门实现对应的运算原理:
多个约束条件可以进行优化,如算式 10 的 6 个约束可以做以下优化:
算式 11 是将算式 10 中的加法约束优化到乘法约束中,其电路图如下:
为什么要优化耦合成乘法门?最终 R1CS 以乘法门为标准门。
如果加法门不能够耦合到乘法门中,则将加法门乘 1 即可变为乘法门。如:
因此多项式时间算法可以等价于 R1CS 约束,那么非多项式时间算法呢?
以哈希函数 SHA256 为例,其通过与、或、非、异或、循环移位等基础运算的耦合,进行线性变换与非线性变换(扩张与有损压缩),输出256bits的随机数。以下是循环 64 次后输出函数值。其中,𝑥, 𝑦, 𝑧 位宽均为 32bits,
可对布尔值和异或运算进行转换,例如:
布尔值
位异或运算
因此布尔值
推论 1:满足任意运算关系
上述算式 11 的解
为什么使用算式 11 而不使用算式 10?因为算式 10 的包含了更多的变量,这会使得后续从向量到矩阵的维度变得更大,使得最后会产生更高阶的多项式。因此使用优化后的算式 11 作为约束。
对于
令
对于第二与第三个等式,同理可得:
令
令
因此我们可以做出推论 2:
将算式 15、17、18 中的多维向量,按照顺序排列,可以组成三个矩阵
因此存在以下等价关系:
我们可以做出推论 3:向量
多项式值表达等价于多项式系数表达
设
将方程
对于多项式的值,每一列有 3 个函数值,所以取任意 3 个横坐标
展开计算,则多项式系数表达:
以此类推
因此存在以下等价关系:
等式 QAP 多项式
。
我们可以得到推论 4:向量
根据步骤 5 中使用拉格朗日插值法引入的横坐标
此
根据步骤 5 我们可以知道当
根据我们前置知识中的多项式整除问题,我们可以得出推论:向量
至此,我们通过严格的数学关系推导了从任意运算关系到 QAP/QSP 多项式并构成 NP 问题的证明。
通过上述步骤我们知道向量
因此证明方 𝓟 不公开该 NP 问题的向量
随后将商多项式、目标多项式、QAP 多项式的系数放到椭圆曲线离散对数上(多项式承诺)生成离散对数点(证明),并对外暴露点
那么,何谓双线性映射呢?就是在 ECDSA 中熟知的配对!
配对 Pairing:
配对(Pairing): 将输入的两个群成员映射为第三个群的成员,将配对记为
上式左边的群由椭圆曲线上的点构成;右边的群被称为目标群,通常是一些大型有限群。
(我们不深入了解更多的群论知识,直接给出特性并距离来说明双线性映射)
配对必须具备一些代数特征,下面是最重要的一个,被称为双线性:
配对的另一个重要特征是非退化性(non-degeneracy):
右边的 1 表示目标群中的乘法单位元。非退化性保证了只要我们选择椭圆曲线上的非单位成员 G,就能得到目标群中的非单位元。
具有以上性质的配对可以用于验证一个数学过程是否正确,这也是配对在zk-SNARK中的用途。例如,假设我声称自己知道一个满足以下二次方程的数值:
为了说服你我的确知道上述方程的一个解,一个办法就是告诉你我知道的这个解,然后你自己带入上述方程去验证。另一个办法就是我不告诉你这个具体的解是多少,但是使用椭圆曲线上的配对进行验证。
首先如果
利用双线性,我们可以将其重写为:
现在,不需要验证原始的二次方程成立,只需要验证上面这个配对方程成立即可。因此我不需要提供
利用配对的特性,验证方 𝓥 就可以在不知道向量
由于证明者知道向量
在通过 CRS 随机生成
通过上述关系,可以得到新的整除关系:
所以证明方在计算
题外: 具体协议具体分析,Groth16 的 CRS 包含 R1CS 约束等价转化的电路多项式
但此时,我们的方案还是完全具备零知识性,当我们的秘密来自于猜测范围较小的输入时,攻击者还是能够猜测我们的数据。为此,我们引入了一个随机移位
不管
初始化CRS:选择有毒废料随机数
有毒废料两种计算方法:
(1) 硬件计算,但每次计算后都需要破坏硬件。
(2) 安全多方计算,只要有一个参与方删除有毒废料,则 CRS 安全。
缺点:算法更新,则电路更新,则 CRS 更新,但是 CRS 计算复杂度比较高。(Plonk 的 CRS 是通用的,算法更新,则电路更新,仅更新 vk,而不需要更新基于有毒废料计算出的那部分 CRS,因为其不包含电路多项式
证明方 𝒫 选择随机数
验证方 𝒱 对椭圆曲线离散对数点重构整除关系,如果等式成立,则验证成功,否则拒绝。
基于上述等式展开:
等式左边
等式右边
最终仍然是证明此等式的整除关系,与未添加其他参数的等式保持一致。
上述计算过程来自于 lynndell 博士
验证方 𝒱 验证上述等式成立,则可以知道证明方知道该 NP 问题的解,体现了完备性。
验证等式的右边包含了
- Groth16 的 CRS 包含 R1CS 约束等价转化的电路多项式,非常具体。
- Groth16 证明只包含三个离散对数点,数据量小,证明小。
- Groth16 验证方式极为简洁,验证复杂度低,速度快。
- Groth16 CRS 包含的电路多项式是由 R1CS 约束转换而来,已经固化,只能表达唯一运算电路,不能表达其他运算电路,表达能力极差。
- Groth16 是非通用的,它依赖于一次性不可升级的设置,灵活性低。
- Groth16 需要可信设置,存在中心化作恶风险。
[1] Jens Groth, On the Size of Pairing-based Non-interactive Arguments.
[2] Dr. Lynndell, zkSnark—Groth16 证明系统.
[3] Joshua Fitzgerald, What are zk-SNARKs? Pairings (Part 1)
[4] Succinct non-interactive arguments via linear interactive Proofs, Nir Bitansky, Alessandro Chiesa, Yuval Ishai, Rafail Ostrovsky, Omer Paneth, Theory of Cryptography Conference 2013
[5] Scalable Zero Knowledge via Cycles of Elliptic Curves, Eli Ben-Sasson, Alessandro Chiesa, Eran Tromer, Madars Virza, CRYPTO 2014
[6] snarkjs