什么是零知识证明?

一、什么是零知识证明?

零知识证明是能够在不披露声明本身的情况下,验证声明有效性的一种方法。 “证明者”是试图证明声明的一方,而“验证者”则负责验证声明。

零知识证明在 1985 年的一篇论文“交互式证明系统的知识复杂度(opens in a new tab)”中被首次提出,它给出了至今仍被广泛使用的零知识证明的定义:

零知识协议是一种方法,通过这种方法,一方(证明者)可以向另一方(验证者)证明某事是真实的,除了证实特定声明之外,不会透露任何信息。

多年来,零知识证明一直在发展,目前已经在现实世界中得到应用。

二、我们为什么需要零知识证明?

零知识证明是一项应用密码学的突破,它提高了个人信息的安全性。 想一想你如何向另一方(例如,一个服务提供商)证明一项声明(例如,“我是X国的公民”)。 你需要提供“证据”来支持你的声明,例如国家护照或驾驶证。

但这种方法存在问题,主要是缺乏隐私。 与第三方服务商共享的个人身份信息 (PII) 储存在中心化数据库,这些数据库很容易受到黑客攻击。 随着身份信息窃取成为一个越来越严峻的问题,人们呼吁采用更能保护隐私的方式来分享敏感信息。

通过在验证声明过程中不披露信息,零知识证明解决了这个问题。 零知识协议使用声明(称为“证人”)作为输入,然后生成一个其有效性的简要证明。 这种证明有力地保证了一项声明是真实的,且不暴露创建声明时所使用的信息。

回到我们刚刚的例子,你只需要提供零知识证明来证明你的公民身份。 验证者只需要检查证明中的一些属性是否属实,从而确认背后声明的真实性。

三、零知识证明是如何发挥作用的?

零知识证明允许你证实一个声明是否真实,无需分享声明的内容以及你是如何发现其真实性的。 为了做到这点,零知识证明依靠算法获取一些数据作为输入,然后输出“真”或“假”。

零证明协议需要满足以下标准:

完备性:如果输入是有效的,那么零知识协议应该始终返回"真"。 因此,如果所依据的声明是真的,同时证明者和验证者都诚实,那么证明就能被接受。

可靠性:如果输入是无效的,那么理论上不可能欺骗零知识协议输出“真”。 因此,一个说谎的证明者无法忽悠一个诚实的验证者相信一个无效的声明是有效的(小概率事件除外)。

零知识:验证者除了知道声明的有效性或虚假性之外,其余一概不知(他们对声明内容“一无所知”)。 这项要求也阻止了验证者从证明中推导出原始输入(声明的内容)。

零知识证明的基本形式由三个要素组成:证人、挑战和回复。

证人:通过零知识证明,证明者想要证明对一些隐藏信息的了解。 这些秘密信息就是证明的“证人”,证明者基于对证人的了解设立了一组问题,这些问题只有了解信息的一方才能回答出来。 因此,证明者随机选择一个问题来发起证明,计算问题答案,然后发送给验证者。

挑战:验证者从问题集里随机挑选另外一个问题,然后让证明者来回答。

回复:证明者接收问题,计算答案,然后把答案发送给验证者。 证明者的回复让验证者可以检验证明者是否真的可以接触到证人。 为了确保证明者并不是偶然盲目猜对答案的,验证者会再选择一个问题来提问。 通过多次重复这个过程,证明者造假的可能性会极大的降低,直到最终验证者满意。

以上描述了“交互式零知识证明”的结构。 早期的零知识协议使用交互式证明,验证一个声明的有效性需要证明者和验证者之间来回多次沟通。

一个比较好的展示交互式证明是如何运转的例子是 Jean-Jacques Quisquater 非常有名的阿里巴巴山洞故事(opens in a new tab)。 在故事里,Peggy(证明者)想要向Victor(验证者)证明她知道打开魔法之门的暗号,但她又没有透露暗号是什么。

四、非交互式零知识证明

零知识简洁非交互式知识论证 (ZK-SNARK)

零知识简洁非交互式知识论证是零知识简洁非交互式知识论证的缩写。 零知识简洁非交互式知识论证协议具有以下特点:

零知识:验证者可以验证声明的完整性,而不需要知道关于该声明的任何其他信息。 验证者对声明的唯一了解就是它是真还是假。

简洁:零知识证明比证人小,可以快速验证。

非交互式:该证明是非交互式的,因为证明者和验证者之间只需要交互一次,不像交互式证明需要多轮的沟通。

论证:该证明满足“可靠性”要求,因此基本不可能作弊。

(的)知识:如果不能获取秘密信息(证人),就无法构建零知识证明。 证明者在没有证人的情况下计算一个有效的零知识证明是非常困难的,即便不是不可能。

前面提到的“共享密钥”是指证明者和验证者同意在生成和验证证明时使用的公共参数。 生成公共参数(统称为通用参考编码 (CRS))是一个敏感的操作,因为它在协议安全性方面非常重要。 如果用于生成通用参考编码的熵(随机数)落入到不诚实的证明者手上,他们就能计算虚假证明。

多方计算 (MPC)(opens in a new tab) 是一种在生成公共参数时降低风险的方法。 多个参与方参与到信任设置仪式(opens in a new tab),每个人提供一些随机数值来生成通用参考编码。 只要有一个诚实的参与方销毁了他们那部分的熵,零知识简洁非交互式知识论证协议就能保持计算的可靠性。

信任设置要求用户信任参数生成的参与者。 然而,ZK-STARK 的发展使其能在非信任的设置下证明协议。

零知识可扩容透明知识论证 (ZK-STARK)

ZK-STARK 是零知识可扩容透明知识论证的缩写。 ZK-STARK 类似于ZK-SNARK,除了它是:

可扩容:当证人的规模比较大时,ZK-STARK 生成和验证证明比零知识简洁非交互式知识论证要快。 随着证人规模的增加,简洁的非交互式知识论证证明的证明和验证时间只会略微增加(简洁的非交互式知识论证证明和验证时间与证人规模呈线性增长)。

透明:ZK-STARK 依赖于可公开验证的随机数来生成用于证明和验证的公共参数,而不是信任设置。 因此,它比零知识简洁非交互式知识论证更加透明。

ZK-STARK 会产生比零知识简洁非交互式知识论证更大的证明,这意味着它通常具有更高的验证开销。 然而,在有些情况下(如证明大型数据集),ZK-STARK 可能比零知识简洁非交互式知识论证更具成本效益。
#零知识证明的应用场景
匿名支付
信用卡支付通常对多方可见,包括支付服务提供商、银行和其他相关方(比如政府部门)。 金融监管有助于识别非法活动,但同时也会损害普通民众的隐私。

加密货币旨在为用户提供一种私密的、点对点的交易手段。 但是大部分加密货币的交易在区块链上是公开可见的。 用户身份通常是匿名的,但也可以主动跟现实世界的身份相关联(例如在 Twitter 或 GitHub 的个人资料上包含以太坊地址),又或者能够利用一些基本的链上或脱链数据分析来与现实世界的身份进行关联。

有一些专门为完全匿名交易设计的“隐私币”。 注重隐私的区块链,例如 Zcash 和 Monero,它们会屏蔽交易细节,包括发送人和接收人的地址、资产类型、数量和交易时间线。

通过在协议中加入零知识技术,注重隐私的区块链网络允许节点无需获取交易数据就能验证交易。

零知识证明也被应用在公开区块链的交易匿名化上。 其中一个例子是 Tornado Cash,它是一个去中心化的非托管服务,允许用户在以太坊上进行私密交易。 Tornado Cash 使用零知识证明来模糊化交易细节和保证金融隐私。 不幸的是,由于这些是“主动选择加入”的隐私工具,它们与非法活动有关。 为了克服这个问题,隐私最终也必须要成为公开区块链的默认项。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值