零知识证明技术概述

零知识证明

[Zero-Knowledge Proofs: How it Works & Use Cases in 2023]

什么是零知识证明?

零知识证明又被称为零知识协议,利用数学知识在双方不需要直接传递信息本身的前提下来验证信息的正确性。这个思想首先被发表在1985年出版的MIT的论文里。

零知识证明如何工作?

接下来介绍一个被用来介绍零知识证明思想的实例:

假定你(证明人 the prover)有一个患有色盲的朋友(验证者 the verifier),这个朋友没办法区分球的颜色是绿色还是红色(没有任何信息能区分球的颜色),你被要求去证明两个球的颜色的差异,而你的朋友不只是因为你的言论而被取信。

针对这个问题的零知识证明的方法过程如下所示:

1、你的朋友将两个球分别拿到左右手,然后让你看看手上的球的颜色分别是啥

2、你的朋友背对着你,交换左右手球或者不交换。

3、然后你的朋友将手里的球展示给你,问你他交换了球还是没有交换球?因为你能够通过颜色来区分球,所以你能很轻松的给出正确的答案。

4、但是你的朋友并没有信任你,如果左右手的球的颜色没有发生变化,你有50%的机率来猜中你的朋友是否更换了球。

5、然而,如果你的朋友重复整个实验过程,那么你每次都猜中他是否更换了左右球的概率会很低,如果你一直猜中他的动作,那么你的朋友在没有知晓这两个球颜色的情况下(他是色盲)能够确认这两个球的颜色是不同的。

现实中有一系列的密码学算法来验证整个数学计算过程,例如,利用零知识证明的概念,交易的接受方能够在不知晓支付的发起方账户余额的情况下,确认支付的发起方是否有足够的余额来支付发起这笔交易。

另一个用来阐述零知识证明的例子,是阿里巴巴洞穴的故事

零知识证明有哪些特性?

零知识证明必须满足如下的特性:

1、完整性:如果证明人提供的信息都是正确的,那么一个零知识证明的方法将会让验证者能够验证证明人所说的信息是正确的。

2、健全性(soundness):如果证明人提供的信息是错误的,那么一个零知识证明的方法能够让验证者去反驳证明人所陈述的信息。

3、零知识:证明人提供的信息除了让验证者能够知道正确还是错误之外,不会提供任何其他的信息。

不同类型的零知识证明

目前有两类零知识证明:

交互式零知识证明 :在这种类型的零知识证明中,证明者和验证者将会交互多次,验证者将会对证明者发起挑战,证明者将会回应验证者的的多次挑战直到验证者信服。

非交互式的零知识证明:在这种类型的零知识证明中,验证者可以在任意时间执行证明者所发起的证明过程,这种类型的零知识证明需要更多的算力。

零知识证明运用于哪些场景中?

零知识证明将会被运用在保护数据隐私的各种密码学实例中,例如:

1、区块链:公开区块链(比特币和以太坊)的透明性可以进行公开的交易认证。然后,这也意味着仅仅保护比较少的隐私性并且可能会导致用户的去匿名化,零知识证明可以让公开区块链引入更多的隐私保护。例如,密码学货币Zcash就是基于非交互式的参数零知识证明方法(zk-SNARK)–一种零知识证明的方法。另一个例子是Zero-Knowledge Scalable Transparent Argument of Knowledge (zk-STARK),被用于以太坊的区块链中,以提供隐私性和可扩展性。

2、金融领域:ING使用零知识证明技术允许顾客证明他们的秘密数字在已知的范围内,例如,资产抵押贷款人能够证明他们的收入在可接受的范围内,而不需要披露出他们具体的收入。

3、在线投票:零知识证明的技术能够在匿名投票中展现出投票的结果,并且验证他们的投票是否在结果中。

4、鉴权:零知识证明技术能够在不交换秘密信息(例如密钥)的前提下验证用户的信息。

5、机器学习:零知识证明技术能够允许机器学习模型的所有者让其他人能够相信模型的结果,而不需要泄露模型相关的信息。

零知识证明所面临的挑战

  • 并没有100%的保证:尽管证明者在撒谎的情况下验证者验证成功的概率很低,零知识证明技术并不能保证声明是100%合法的。正如之前所展示的,在验证的轮次越来越多的情况下,证明者撒谎的概率越来越低,但是概率并不会等于0,因此,从数学意义上,零知识证明并不是真正的数学证明。

  • 计算复杂度:在交互式的零知识证明过程中,算法的复杂度会比较高,因为验证者和证明者之间会进行多次交互。在非交互式的零知识证明中,需要很多的计算资源,这使得零知识证明不怎么适合慢的计算设备或者移动设备。

鉴权过程中,零知识证明方式和JWT之间的区别?

一个经典的零知识证明用于鉴权的方案:

Shnorr身份认证方案中,证明实体A的公钥为v,私钥为s,其中v=a^s mod p,a为q阶元。证明实体A向验证实体B证明其身份的具体过程如下:

(1)证明实体A任选一随机数r∈[1,q-1],计算x=a^r mod p,然后将计算结果发送给验证实体B;

(2)验证实体B任选一整数e∈[1,2^1]发送给证明实体A;

(3)证明实体A发送给验证实体B:y=(r+se)mod q;

(4)验证实体B验证x=(ay)*(ve) mod p是否成立。

根据方案可以发现,该零知识证明存在大量的模运算过程,计算量很大,占用了大量计算资源。

JWT身份认证,包含了身份验证所有的信息,服务器不需要存储报文信息,增加了系统可用性和伸缩性,减缓了服务器的压力,缺陷:因为token是无状态的,所以在有效期内,无法让一个token失效,如果用户选择从登陆状态退出,后端需要其他的逻辑来解决。

猜你喜欢

转载自blog.csdn.net/sinat_28199083/article/details/132133251