本文深入探讨了零知识证明(ZKP)的两种类型:交互式和非交互式。文章详细描述了多个相关算法,包括Schnorr协议、Zcash协议、Fiat-Shamir变换等,阐述了它们的原理、实现方法与应用场景,尤其在数字身份验证、电子投票和加密货币中的作用。最后总结了选择ZKP的重要性,强调了安全性与性能之间的平衡。
零知识证明(Zero Knowledge Proofs,ZKP)是加密协议,允许一方(证明者)向另一方(验证者)证明一个陈述的真实性,而不透露与陈述有效性无关的任何额外信息。ZKPs 在机密性至关重要的场景中非常有用,例如数字身份验证、电子投票系统和安全通信协议。
零知识证明有两种类型:互动和非互动。在本文中,我们将深入探讨这两种类型,包括它们的差异、优点和应用。
互动零知识证明需要证明者和验证者之间的通信。证明者和验证者进行反复的互动,证明者向验证者发送一系列消息。验证者基于之前的消息做出挑战消息,证明者然后回复相应的消息。这个过程持续进行,直到验证者确信陈述的真实性。
ZKP 的互动特性使它们比非互动的更安全,因为验证者可以根据证明者的行为来调整其挑战,从而减少成功攻击的可能性。缺点是它们可能更耗时,并且需要更多的计算资源。
以下是几个互动零知识证明算法的示例:
Schnorr 协议是一种互动零知识证明,允许证明者证明与公钥相关联的私钥知识,而不透露私钥本身。这个协议在数字签名中使用,证明者必须证明他们拥有私钥,而不向验证者透露该密钥。
该协议的工作过程如下:
证明者随机选择一个秘密值 r,计算承诺 $ C = g^r$,其中 $g$ 是该群的生成元。证明者将 $C$ 发送给验证者。
验证者从有限域中选择一个随机挑战值 e,并发送给证明者。
证明者计算响应值 $s = r + ex$,其中 $x$ 是与公钥 $y = xg$ 对应的私钥。证明者将 $s$ 发送给验证者。
验证者通过计算 $C' = g^s * y^{(-e)}$ 来检查证明的有效性,其中 $y$ 是与秘密密钥 $x$ 对应的公钥。如果 $C' = C$,则证明被视为有效。
Schnorr 协议是一个非互动零知识证明,意味着它只需要证明者和验证者之间进行一次消息交换。该证明表明证明者知道与公钥 $y$ 对应的秘密密钥 $x$,而不透露关于 $x$ 的任何信息。该协议在多个应用中使用,例如数字签名和认证方案。
总之,Schnorr 零知识证明协议通过证明者对秘密值的承诺,验证者选择随机挑战,证明者以包含挑战和秘密的值进行响应,验证者使用承诺、响应和公钥检查证明的有效性。
Zcash 协议是一种互动零知识证明,允许用户证明一笔交易已发生,而不透露发送者、接收者或交易金额。Zcash 加密货币使用该协议来保持交易的隐私和匿名性。
该协议的工作过程如下:
证明者和验证者同意一个公共布尔电路,表示证明者想要证明的计算。电路被转换为有限域上的算术电路,使用诸如通用电路构造等技术。
证明者将电路的输入和输出值编码为有限域的元素,使用如二进制编码或表示为椭圆曲线点的方法。编码确保输入和输出值可以被算术电路处理。
证明者生成一个约束系统,通过使用如 Rank 1 约束系统(R1CS)等技术,强加电路在输入和输出值上的约束。约束系统由一组方程组成,这组方程将输入和输出值与电路计算的中间值相关联。
证明者生成一组公共参数,使验证者能够检查证明的有效性,而不透露关于输入和输出值的任何信息。公共参数包括一组群体元素和辅助数据,表示约束系统的约束。
证明者生成一个证明密钥,使他们能够为满足约束系统的任何输入和输出值构建一个正确性的证明。证明密钥由一组群体元素组成,这些元素编码约束系统的见证值,这些见证值是满足约束的值。
证明者为输入输出值构建正确性的证明,使用证明密钥和公共参数。该证明由一组群体元素组成,这些元素编码约束系统的中间值,以及一组辅助数据,允许验证者检查证明的一致性。
验证者使用公共参数和证明检查证明的有效性。验证过程包括检查中间值的一致性、约束的可满足性,以及见证值的知识。
如果证明有效,验证者就会相信证明者知道约束系统的见证值,并正确地执行了计算,而不透露任何关于见证值或输入输出值的信息。Zcash 通过使用 R1CS 约束系统和公共密钥加密来编码约束和见证值,并使用高效的密码学原语,例如 Groth16 证明系统来构建和验证证明。该协议被广泛应用于 Zcash 加密货币系统,以实现隐藏发送者、接收者和交易金额的私密交易。
非互动零知识证明不需要证明者和验证者之间的互动。证明者基于一项陈述创建一个证明,并将其发送给验证者,后者验证其有效性。证明是通过对陈述进行哈希处理,并使用加密算法生成可以用公钥验证的证明来创建的。
非互动 ZKP 比互动的更快,并且所需的计算资源更少,但由于验证者无法根据证明者的行为调整其挑战,因此安全性较低。
以下是几个非互动零知识证明算法的示例:
Fiat-Shamir 转换是一种非互动零知识证明,使证明者能够证明对一项陈述的见证知识,而无需与验证者互动。该证明在电子投票系统中被广泛使用,在这些系统中,选民希望证明他们的投票已正确记录,而不透露其身份。
该协议的工作过程如下:
如果这个方程成立,验证者就会确信证明者知道见证值 $s$ 而不透露它。
Bulletproofs 是用于验证加密货币交易中范围证明有效性的非互动零知识证明。范围证明是一种证明秘密值在特定范围内的证明。
Bulletproofs 在计算资源有限的场景中尤其实用,因为它们可以生成比其他非互动协议更小的证明。
该协议的工作过程如下:
证明者和验证者同意证明者想要证明的一系列值范围,例如秘密值的范围或加密货币系统中交易金额的范围。他们还同意一个安全参数,以确定证明的健壮性和效率。
证明者使用 Pedersen 承诺方案,结合随机选择的盲因子,承诺一个在范围内的值。承诺由两个群体元素组成,$C = aG + bH$,其中 $G$ 和 $H$ 是素数阶群的生成元,$a$ 是要承诺的值,$b$ 是盲因子。
证明者构建一个表示承诺值的多项式,使用如拉格朗日插值或多项式除法等技术。多项式的次数在范围大小上是对数级别的。
证明者构建一个内积论证,证明两个向量的知识,这两个向量分别由多项式的系数和盲因子组成。论证由一组常数数量的群体元素构成,而不依赖向量的大小。
验证者检查承诺值是否在约定范围内,使用范围测试和依赖于内积论证的线性方程的组合。范围测试确保承诺值为非负且在指定范围内,而线性方程确保承诺值的构建正确。
为了证明多个范围证明的有效性,证明者和验证者可以通过对证明及其相关承诺构建メ尔克尔树,递归地组合内积论证和范围测试,使用一对单一证明和承诺作为下一个回合的输入。
如果所有检查通过,验证者将相信证明者知道在约定范围内的一个值,而不会透露关于该值或盲因子的任何信息。Bulletproofs 通过使用多项式构建和内积论证来隐藏承诺值和盲因子,并通过使用递归证明组合来减少证明和承诺的大小,达成零知识属性。该协议在隐私保护应用中广泛使用,例如加密货币系统中的环签名和机密交易。
Sonic 是一种非互动零知识证明协议,旨在验证对私有数据的计算的正确性,例如在区块链系统中智能合约执行的计算。它以其效率和可扩展性而闻名,使其适合大规模应用。
该协议的工作过程如下:
证明者和验证者同意一个公共布尔电路,该电路表示证明者想要证明的计算。电路被转换为有限域上的算术电路,使用诸如通用电路构造等技术。
证明者承诺一组对应于电路输入和输出线的多项式,使用多项式承诺方案,例如 KZG 或基于 FFT 的方案。承诺由一组群体元素组成,这些元素编码多项式的系数。
证明者在随机字段元素上评估承诺的多项式,并生成一组证明值,编码电路每个门的计算结果。证明值由通过在随机字段元素上评估承诺值的线性组合生成的群体元素组成。
证明者对证明值进行快速傅里叶变换,以便将其转换为一种形式,使得使用低次多项式评估时能够高效验证。
验证者随机抽样一部分证明值,并将样本点作为挑战发送给证明者。
证明者插值一个低次多项式,使其与样本点和承诺多项式匹配,使用如拉格朗日插值或多项式除法等技术。
验证者检查多项式插值是否与所有其他点的证明值匹配,使用如里德-所罗门解码或在多个字段扩展中进行多项式评估等技术。
验证者检查计算的输出值是否与电路的期望输出值匹配,使用如二元决策图或直线程序等技术。
如果所有检查通过,验证者会相信证明者知道电路的输入值,并正确执行了计算,而不透露关于输入值的任何信息。Sonic 通过使用多项式承诺来隐藏输入值,并通过快速傅里叶变换以实现高效验证,达成零知识属性。该协议尤其适合验证对私有数据的计算,例如在区块链系统中智能合约执行的计算。
Groth16 是一种非互动零知识证明协议,常用于隐私保护应用,如匿名凭证系统和加密货币系统中的私密交易。它以其高效性和安全性而闻名,是大规模应用的热门选择。
该协议的工作过程如下:
证明者和验证者同意一组椭圆曲线参数,包括素数阶群 $G$ 和将 $G$ 中的元素映射到有限域乘法群的配对函数 $e$。他们还同意证明者想要证明的公共陈述,例如交易的有效性或私钥的拥有。
证明者生成一个私钥和相应的公钥。公钥由两个群体元素组成,$P$ 和 $Q$,使得 $Q = kP$ 其中 $k$ 是某个秘密标量。
证明者承诺一个满足公共陈述的见证值,例如一笔交易的输入和输出或一个私钥值。承诺由两个群体元素组成,$C$ 和 $D$,使得 $C = rP + W$,$D = rQ$,其中 $r$ 是随机选择的标量,$W$ 是见证值。
验证者通过将公开参数和承诺值应用于安全哈希函数生成随机挑战值 $c$,$c = H(G, e, P, Q, C, D)$。
证明者根据挑战值和私钥计算响应值,$s = r + kc$,其中 $k$ 是私钥标量。
验证者通过验证以下方程来检查承诺和响应值是否满足公共陈述:
$e(C, P) = e(D, Q) + e(sP + cW, P)$
该方程确保承诺值是有效的,并且响应值与私钥标量和见证值相对应。如果此方程成立,验证者将确信证明者知道私钥和见证值,而不透露关于它们的任何信息。
Groth16 通过使用配对函数隐藏承诺值中的见证值,并通过使用随机挑战值防止证明者重复之前的响应值,以实现零知识属性。该协议在隐私保护应用中被广泛使用,例如匿名凭证系统和加密货币系统中的私密交易。
Aurora 是一种非互动零知识证明协议,旨在验证对加密数据进行计算的有效性。它在多个方参与对敏感数据进行计算而不透露数据给对方的场景中非常有用。
该协议的工作过程如下:
Aurora 通过同态加密、零知识证明及其他先进的密码学技术的组合实现零知识属性。
总之,零知识证明是现代密码学中的一个重要工具,在多个领域中提供安全和保密的通信协议,包括数字身份验证、电子投票系统和加密货币交易。互动零知识证明更安全,但需要更多的计算资源,而非互动证明更快,但安全性较低。选择适合的 ZKP 类型与具体使用案例相匹配至关重要,需要在安全性与性能之间取得平衡。
- 原文链接: github.com/thogiti/thogi...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!