一、什么是零知识证明呢?
零知识证明(Zero—Knowledge Proof),是指一种密码学工具,允许互不信任的通信双方之间证明某个命题的有效性,同时不泄露任何额外信息。
零知识证明(Zero Knowledge Proof)由S.Goldwasser、S.Micali 及 C.Rackoff于1985年在论文《The Knowledge Complexity of Interactive Proof Systems》(交互式证明系统中的知识复杂性)首次提出,是一种用于证明者在不泄露任何其他信息的情况下证明其掌握知识正确性的密码学协议。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。大量事实证明,零知识证明在密码学中非常有用。如果能够将零知识证明用于验证,将可以有效解决许多问题。
二、零知识证明两种类型:
目前有两种零知识证明:
1.交互式的 (Interactive)
2.非交互式的 (Non Interactive)
(1)交互式零知识证明(Interactive zero-knowledge proofs):
证明者和验证者需要进行多次互动,验证者会不断提出问题来挑战证明者,证明者则要不断回应这些挑战,直到验证者被说服。
可能有些抽象,那我们可以举个例子:
交互式零知识证明---色盲游戏:
Alice是色盲,Bob不是色盲,在Bob手上有两个大小,形状完全一样的球,但这两个球的颜色不一样,一个球是蓝色的,另一个球是红色的,由于Alice是色盲,所以Alice无法分辨这两个球是否是一样的,Bob需要向Alice证明这两个球是不一样的。在这里,Alice被称为验证者,他需要验证Bob的陈述正确与否,Bob被称为证明者,他需要证明自己的陈述(存在两个颜色不一样的球),Bob需要在Alice不能获得两个球的颜色的情况下,向Alice证明这两个球的颜色是不一样的这个事实,这与零知识证明的定义是相符合的。
Alice当Bob的面拿起两个球,左手拿蓝球,右手拿红球,然后将双手放到背后,这样Bob就看不到Alice手上的球了,Alice在背后随机交换左右手上的球,交换完成后Alice将手伸出,并询问Bob两个球是否交换过位置,如果Bob能看到球上的颜色,那么每次Alice换过球的位置后,Bob都能正确回答出Alice的问题。
第一次,Alice偷偷交换了手中球的位置,然后Alice问Bob是否交换了球的位置,如果Bob回答Yes,那么Alice有50%的概率相信Bob是可以区分这两个球的颜色,因为Bob有1/2的概率蒙对,所以Alice可以再进行一次测试。如果Bob回答No,那么Alice可以肯定Bob不能区分两个球的颜色。
第二次,Alice没有交换手中球的位置,然后Alice问Bob是否交换了球的位置。如果Bob回答No,那么Alice有75%的概率相信Bob是可以区分两个球的颜色。
第一次迭代后,Alice可以说Bob陈述的断言为真的概率为50%。如果Bob第二次回答正确,那么Alice可以说Bob陈述为真的概率达75%。在第三次迭代后,它将是87.5%。如果连续n次Bob都通过了检查,则Alice有1-(1/2)^n 的概率可以认为 Bob 说的是真的,这两个球的确是有红蓝两种颜色。
零知识证明是一种基于概率的验证方式,验证者(verifier)基于一定的随机性向证明者(prover)提出问题,如果证明者都能给出正确回答,则说明证明者大概率拥有他所声称的“知识”。零知识证明并不是数学意义上的证明,因为它存在小概率的误差,欺骗的证明者有可能通过虚假的陈述骗过验证者。换句话说,零知识证明是概率证明而不是确定性证明,但是也存在技术能将误差降低到可以忽略的值。
这种交互式方法有一些局限:
1.每次验证都需要进行整个冗长的过程。
2.证明方与验证方都需要同时在场,不管是在线还是面对面。
3.只能够取信于一个验证者,如果要取信于多个验证者,则对每个验证者都需要进行一遍证明过程。
4.只在某个时刻有效。
为了解决交互式零知识证明面临的问题,非交互式零知识证明应运而生。
(2)非交互式零知识证明(Non-interactive zero-kowledge proofs):
证明者只需要在第一次向验证者发送一个证明,验证者可以随时对该证明信息进行验证,并且只需要验证一次就能够判定是否选择相信证明者。这种证明方式比交互式证明需要更多的算力来完成。
①A要向B证明自己拥有某个房间的钥匙,假设该房间只能用钥匙打开锁,而其他任何方法都打不开。B确定该房间内有某一物体,A用自己拥有的钥匙打开该房间的门,然后把物体拿出来出示给B,从而证明自己确实拥有该房间的钥匙。
它的好处在于,在整个证明的过程中,B始终不能看到钥匙的样子,从而避免了钥匙的泄露。
②A拥有B的公钥,A没有见过B,而B见过A的照片,偶然一天两个人见面了,B认出了A,但A不能确定面前的人是否是B,这时B要向A证明自己是B。
A给出一个随机值,并使用B的公钥对其加密,然后将加密后的数据交给B,B用自己的私钥解密并展示给A,如果与A给出的随机值相同,则证明对方是B。这里涉及到加密方式:
对称加密:
同一个密钥加解密。非对称加密:
A给B发消息(密文),A使用B的公钥加密,B接收到密文后,用自己的私钥解密。数字签名:
假如是A给B发消息,A用B的公钥加密,那么B收到之后,要确定这个消息是否真的是A发的,因为公钥是公开的,其他人可能会冒充A来给B发消息。所以需要验证。
那么A给B发消息的时候,用自己的私钥对内容(不是密文,是你想要发送的信息内容)计算出一个签名,然后签名和内容 这两个一起发给B。接收者B,使用A的公钥验证这个签名是否正确,就是验签。B把A发送来的内容 用hash散列函数算出为摘要2
B把A发送来的数字签名用A的公钥解密(非对称) 得出的摘要1
摘要1和摘要2进行比对是否相等。但B还是不能确定,拿到的A的公钥就是A的公钥,因为A给B发送自己的公钥时,可能会被Eve拦截,然后发送自己的公钥给A,导致B用A的公钥验签一直是错的。
所以有了数字证书。数字证书:
在互联网通讯中标志通讯各方身份信息的一个数字认证。证书颁布机构(CA),CA 会将:证书的颁布机构、有效期、公钥、持有者(subject)等信息用 CA 的私钥进行签名。A就可以去 CA 申请一个证书,然后将自己的证书发给 B,B就可以使用 CA 的公钥进行验签。
CA 的公钥也是需要使用证书来分发的,所以 B 的电脑必须安装 CA 的证书,证书里包含了 CA 的公钥。B收到A发来的数字证书之后,B使用CA的公钥进行验证,确实是A的证书,使用证书中包含的A的公钥。引入数字证书的目的是为了保证公钥不被篡改,即使被篡改了也能识别出来。
所以数字签名就是,用发送方的私钥加密,接收方用发送方的公钥解密。对数据的摘要进行签名,而不是直接计算原始数据的数字签名。
详细可参考 一文彻底搞懂加密、数字签名和数字证书,看不懂你打我!-CSDN博客
③有一个缺口环形的长廊,出口和入口距离非常近(在目距之内),但走廊中间某处有一道只能用钥匙打开的门,A要向B证明自己拥有该门的钥匙。采用零知识证明,则B看着A从入口进入走廊,然后又从出口走出走廊,这时B没有得到任何关于这个钥匙的信息,但是完全可以证明A拥有钥匙。
上述案例的成功,必须满足一定的规则:
完备性(Completeness):只要证明者拥有相应的知识,那么就能通过验证者的验证,即证明者有足够大的概率使验证者确信。;
可靠性(Soundness):如果证明者没有相应的知识,则无法通过验证者的验证,即证明者欺骗验证者的概率可以忽略。
零知识性(Zero-Knowledge):证明者在交互过程中仅向验证者透露是否拥有相应知识的陈述,不会泄露任何关于知识的额外信息。
非交互式零知识证明是零知识证明的一种最重要的变体,其特点是通信双方无需多次信息交换。由于其简单易行并且互相通信次数少,非交互式零知识证明广泛应用于数字签名、区块链和身份认证等领域。常用的非交互式零知识证明系统的安全性建立在生成可信的真随机数的假设之上,然而,实际应用中,由于真随机数生成器难以实现,通常会使用确定性的伪随机数算法来替代。此前已有研究指出,这种方法会产生潜在的安全隐患。
三、区块链上的零知识证明
零知识证明定义中有两个关键词:“不提供任何有用信息”、“证明论断是正确的”,基于这两个特点,直接扩展出零知识证明在区块链上的两大应用场景:
隐私:在隐私场景中,我们可以借助零知识证明的“不提供任何有用信息”特性,在不泄露交易细节(接收方、发送方、交易余额)的情况下,证明区块链上的资产转移是有效的。
扩容:在扩容场景中,不太关注零知识证明技术的“不提供任何有用信息”这个特性,更加关注“证明论断是正确的”这个特性。由于链上资源是有限的,所以我们需要把大量的计算迁移到链下进行,因此需要有一种技术能够证明这些在链下发生的动作是可信的,零知识证明正好可以帮助我们做链下可信计算的背书。
(1) 隐私计算
零知识证明可以满足消息的隐私性,可以解决常见的区块链网络中因透明性所带来的地址和资产额度等消息泄露。例如在区块链交易中,如果你需要证明你拥有某种资产,但同时又不想暴露资产的任何信息,那么就需要用到零知识证明。
隐私计算是零知识证明的一个重要的应用领域。若想保护隐私,则可以通过密码学的解决方案对链上数据进行加密,让链上的不同交易之间找不出关联性。零知识证明可以验证计算而不会暴露有关输入和计算本身的任何信息,保证链上数据隐私和安全。
(2) 扩容
若常用的区块链平台中产出新区块的验证时间很长,可直接更改为一人(节点)验证并生成证明,网络中的其他参与者都掌握快速验证该证明的方法,而不需要每个参与者都花费大量的时间来直接进行验证。
这涉及共识的成本问题,从经济学角度来看,以太坊,比特币等区块链网络交易成本高昂的原因在于:共识必须是昂贵的,廉价的共识一定程度上是不可信的。而其中的成本主要来自于区块链需要若干台设备的重复计算才能达成一致的共识。例如POW共识机制中,1000台机器做重复的计算工作,效率不会大于一台计算机的效率,但其所需要的成本是一台计算机的1000倍。这是所有的主流共识协议,无论是POW还是POS,为确保去中心化的共识所必须付出的成本。也就是不可能三角的束缚。
将零知识证明和区块链的一致共识结合起来,就可以达到仅用一台设备即可运行计算完成1000台设备重复计算的工作,从而极大降低了网络成本。零知识证明,通过采用密码学的方法,让其他设备验证一台设备计算的可靠性,而非直接参与重复计算。而且,在成本昂贵的区块链网络上,验证计算的正确性要比重复计算便宜得多。
因此,区块链依旧负责网络的共识和安全,而一些计算的工作则可以交给零知识证明在区块链网络外部完成,提升了区块链的拓展性。
四、零知识证明的挑战
零知识证明已被证实未来有巨大的潜力,但是当前离广泛应用还有很多难题尚未得到解决。
从数学意义上来讲,零知识证明并非真正的证明,因为证明者说谎而不被验证者识别的概率,虽然可以无限趋近于零,但它永远不会到达零。只要不是零,就非逻辑上的零知识证明,因此零知识证明并不能保证100 %有效。
硬件方面,市面上目前还没有专门用作零知识证明相关的硬件和软件。零知识证明需要证明者和验证者之间不断交互,因此需要大量的计算能力,这让零知识证明不适合在速度慢或移动的设备上使用。
本人略懂,可参考安全多方计算之五:零知识证明(从入门到入土。。)-CSDN博客这位大佬的文章~