zk-SNARK:简洁非交互式论证
理解 Groth16 的设置、证明生成和验证
zk-SNARK:简洁非交互式论证 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。
什么是 zk-SNARK?
zk-SNARK(零知识简洁非交互式知识论证)是一种证明,它:(1) 具备零知识性;(2) 简洁(证明很小,无论计算规模多大,验证都很快);(3) 非交互式(只有一个证明字符串)。
动机
西格玛协议适用于简单陈述(知晓离散对数)。对于复杂计算——“我已在私有输入上正确运行了此函数”——我们需要通用证明系统。SNARK 能够以 O(1) 的验证时间证明任意计算。
算术电路
计算首先表示为算术电路:由有限域上的加法门和乘法门构成的有向无环图。例如,证明您知道满足 x^3 + x + 5 = 35 的 x,而不泄露 x=3。该电路约有 5 个门。
R1CS:秩-1 约束系统
算术电路会被转换为 R1CS:一组约束 (A*z)*(B*z) = C*z,其中 z 是所有线路值组成的向量。每个乘法门都会变成一个约束。证明者必须找到满足所有约束的 z,同时不泄露私有线路值。
QAP:二次算术程序
R1CS 会被转换为 QAP:多项式 A(x)、B(x)、C(x),使得 A(x)*B(x)-C(x) 可被目标多项式 t(x) 整除,当且仅当约束得到满足。证明者证明自己知道多项式商 H(x),但不泄露见证。
Groth16 证明
Groth16(2016)是效率最高的通用 SNARK。在可信设置(CRS 生成)之后,证明者输出一个由 3 个群元素组成的证明(BLS12-381 约 192 字节)。验证需要进行 3 次配对运算。无论电路大小,证明大小都保持不变。
可信设置仪式
Groth16 要求每个电路都进行一次可信设置:采样有毒废料(随机秘密),计算公共参考字符串,然后销毁有毒废料。如果废料留存,攻击者就能伪造证明。多方仪式(Powers of Tau)可以分散信任。
PLONK:通用设置
PLONK(2019)使用通用可信设置:一次仪式适用于所有不超过某个大小上限的电路。无需针对每个电路单独设置。权衡是:证明比 Groth16 略大。用于 zkEVM 实现(Polygon Hermez、zkSync Era)。
STARK 与 SNARK
STARK(可扩展透明知识论证)无需可信设置,并使用哈希函数(具备后量子安全性)。权衡是:证明更大(几十 KB,而非 200 字节)。用于 StarkWare/StarkNet 和 Cairo 语言。SNARK 更小;STARK 抗量子。
基于配对的密码学
Groth16 使用双线性配对:e: G1 × G2 → GT,其中 e(a*P, b*Q) = e(P,Q)^{ab}。这使得无需泄露数值即可在指数中检查多项式恒等式。BLS12-381 曲线针对高效 Groth16 配对进行了优化。
证明生成成本
对于包含 10^6 个门的电路,Groth16 的证明生成时间约为 10 秒(在现代 CPU 上)。验证约需 1 毫秒。这种不对称性是有意设计的:证明者(执行繁重计算的一方)承担工作;验证者(区块链节点)几乎无需工作。
快速检查
与 PLONK 相比,Groth16 的主要缺点是什么?
回顾
zk-SNARK 能够以固定大小的证明证明任意计算。流程:计算 → 算术电路 → R1CS → QAP → SNARK 证明。Groth16 效率最高(每个电路都需可信设置);PLONK 使用通用设置。下一步:区块链中的 ZKP 应用。
常见问题解答
「zk-SNARK:简洁非交互式论证」课时是免费的吗?
是的 — 「zk-SNARK:简洁非交互式论证」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。
「zk-SNARK:简洁非交互式论证」这节课中我会学到什么?
理解 Groth16 的设置、证明生成和验证 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cryptology Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「zk-SNARK:简洁非交互式论证」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cryptology Academy 课中编写并运行代码吗?
能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- ZKP 直觉:阿里巴巴洞穴
- Sigma 协议与 Schnorr 识别
- zk-SNARK:简洁非交互式论证
- ZKP 应用:ZK Rollup 与隐私币