ZKNARK零知识证明方案的构造

本文详细介绍了ZK-NARK(包括ZK-SNARK和ZK-STARK)零知识证明方案,探讨了它们的构造、流程、电路方案、证明系统以及常见优化技术。ZK-SNARK依赖于信任设置,而ZK-STARK则提供更高透明性。内容涵盖从问题定义、证明生成、验证过程到零知识性,并深入讨论了承诺方案、数据并行电路、二次算术程序以及Fiat-Shamir启发式等关键概念。
摘要由CSDN通过智能技术生成

ZKNARK介绍

ZK-SNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) 是一种非交互式的零知识证明,它具有证明简洁和验证快速的特点,但是它需要一个被称为“信任设置”(trusted setup)的过程。

ZKSTARK介绍

ZK-STARK (Zero-Knowledge Scalable Transparent Arguments of Knowledge) 是另一种零知识证明,与ZK-SNARK相比,它不需要“信任设置”过程,因此具有更高的透明性,但是其证明的生成和验证过程比ZK-SNARK更复杂和更慢。
零知识方案指的是实现零知识证明的具体方法和框架。一个零知识方案通常包括以下几个部分:

问题的定义:定义需要证明的问题或陈述。

证明的生成:证明者根据他们的私有知识生成一份证明。

证明的验证:验证者检查证明者提供的证明,以确定证明者是否知道某个特定的信息。

零知识性:证明过程不泄露证明者的任何私有知识。

在设计零知识方案时,需要考虑许多因素,包括证明的大小、生成和验证的效率、安全性以及是否需要信任设置等。不同的零知识证明技术(如ZK-SNARK和ZK-STARK)提供了不同的优点和缺点,适用于不同的应用场景。

通常的流程

问题转化: 首先,证明者需要把待证明的问题转化为一个标准化的形式,如布尔电路或算术电路或R1CS,即电路可满足性问题(Circuit-SAT)。

生成证明: 证明者使用这个电路生成一个证明。这通常包括把电路变成多项式,转换成多项式可满足性问题(Polynomial-SAT)。

承诺: 证明者将生成的证明(多项式)进行承诺。这是一个加密步骤,旨在确保证明的完整性和防止篡改。

发送承诺: 证明者将这个承诺的证明发送给验证者。

挑战: 在许多零知识证明协议中,验证者会向证明者发送一个随机的挑战。这个挑战的目的是确保证明者真的知道解,而不仅仅是碰巧找到一个满足某些条件的证明。

应答: 证明者根据验证者的挑战构造一个应答。这个应答需要在不泄露任何有关解的信息的情况下,反驳验证者的挑战。

验证: 验证者使用证明者的应答来验证原始的证明。如果应答成功反驳了挑战,那么验证者就可以确认原始声明是真实的,而不需要了解任何其他信息。

算法

keygen(λ, F) -> gp
系统初始化,输出公共参数gp。

commit(gp, f, w) -> com
将多项式f在点w处进行评估承诺,输出承诺com。

eval(gp, f, w) -> y, π
计算f(w)=y并生成证明π。

verify(gp, com, y, π) -> accept/reject
验证π是否证明了com承诺的多项式在某点处的评估结果为y。

通过加入witness w,并只在Prover端使用,可以保证证明的零知识性。

验证者通过com, y, π 判断评估结果而不知晓实际的评估点。

在基于多项式承诺的零知识证明系统中,τ是一个由证明生成者(Prover)随机选择的点,用于生成多项式f的随机承诺。

τ的来源

具体来说,τ的产生过程是:

Prover决定需要证明的多项式f和评估点x。

Prover随机选择一个值τ,作为生成随机承诺的评估点。

Prover计算f(τ)得到结果u,然后对u进行承诺,生成随机承诺com_f。

在构造证明π时,Prover会使用这个τ来定义证明多项式q。

Prover计算q(τ)并进行承诺作为证明π。

验证者通过检查com_f和π在点τ上的承诺关系来验证。

所以τ是一个Prover随机选择的用于承诺的点,和真正需要证明的评估点x不同,仅用于增加安全性防止被恶意验证者攻击。

τ不需要向验证者披露,但要在Prover构造com_f和π时依次使用,以保证二者在τ上的承诺关系。这就是τ的来源和作用。

电路方案

在零知识证明中,经常将待证明的陈述转化为一个算术电路或布尔电路的满足性问题。简单来说,电路是由门(函数)和线(变量)组成的图,其中输出线的值由输入线和门函数计算得出。在零知识证明中,证明者需要证明他们知道一组输入变量的值,使得电路的输出

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值