8、隐私计算--零知识证明

零知识证明(zkSNARK

释义:zero-knowledge Succint Non-interactive ARguments of Knowledge

  • Succinct:证明的数据量比较小;
  • Non-interactive:没有或者只有很少交互;
  • ARguments:验证者只对计算能力有限的证明者有效。拥有足够计算能力的证明者可以伪造证明。这也叫“计算可靠性"(相对的还有”完美可靠性");
  • of Knowledge:对于证明者来说在不知道证据(Witness,比如一个哈希函数的输入或者一个确定 Merkle-tree 节点的路径)的情况下,构造出一组参数和证明是不可能的。

 零知识证明:证明方以及验证方同时包含某个函数,这个函数是相同的,或一系列的数值。零知识证明的一般过程如下:

  1. 证明者必须向验证者发送随机值,这个随机值必须满足一定条件,因此,这个随机值也称为“承诺”。
  2. 验证者向证明者发送必须满足指定条件的随机值,因此,这个随机值也被称为“挑战”。
  3. 证明者在执行这个秘密的计算,并将这个信息传达给验证者,这个信息也被称为“响应”。
  4. 验证者并对响应进行判断,一旦验证不成功,就表明证明者不具备他所知道的“知识”,返回这个过程。相反,继续从第一步开始,连续进行这个过程多次。

如果每次验证成功,就可以方便地相信当事人有一定的知识。在这个过程中,验证者自始至终,都没有得到任何关于知识的信息。

换句话说,零知识证明解决的问题就是:我如何在你不知道我是否知道这个事情的情况下,知道我确实知道这样的事情。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。

1、零知识证明的提出

“零知识证明”是S.Goldwasser、S.Micali以及C.Rackoff早在20世纪80年代初提出,针对隐私安全问题。证明者能在不向验证者提供任何自己信息的前提下,使验证者相信某个结论是正确的,这就是零知识证明的本质。零知识证明本质上是一种涉及两个或两个以上当事人的协议,即一个由两个或两个以上的当事人完成的一系列步骤。向验证者证明他或她相信他知道或有消息,但过程不泄露任何有关证明的资料给验证者。

例如:有一个环形走廊,出口与入口在一个位置,中间被一道上了锁的门隔断, B声称他有钥匙,那么A如何在不拿到钥匙的情况下知道B真的有钥匙。这时,A只需要看到B从入口进入,并从出口走出,这样A便可以相信B持有门的钥匙这一事实。

设P知道咒语,可以打开C和D之间的机关门,不知道者将走向死胡同中。

  • 1)V站在A点;
  • 2)P进入洞中任意一点C或D;
  • 3)当P进洞之后,V走到B点;
  • 4)V叫P:(a)从左边出来,或(b)从右边出来;
  • 5)P按要求实现(以咒语,即解数学难题);
  • 6)P和V重复执行(1)~(5)共n次。

若P不知道咒语,则只有50%的概率猜中V的要求,协议执行n次,则只有2^n/1的机会完全猜中。

2、阿里巴巴零知识证明

零知识证明提供了一种能够向别人证明拥有某个信息,但不需要透露该信息具体内容的一种方法,在密码学中具有广泛的应用。比如,阿里巴巴零知识证明就是一个非常好的通俗理解零知识证明的例子:阿里巴巴被强盗抓住,为了保命,他需要向强盗证明自己拥有打开石门的密码,同时又不能把密码告诉强盗。他想出一个解决办法,先让强盗离开自己一箭之地,距离足够远让强盗无法听到口令,足够近让阿里巴巴无法在强盗的弓箭下逃生。阿里巴巴就在这个距离下向强盗展示了石门的打开和关闭。

这个整个过程就是零知识证明,证明者能够在不向验证者提供任何有用信息(石门的口令)的情况下,使验证者相信某个论断(阿里巴巴知道打开石门的方法)是正确的。

3、传统的零知识证明系统

在一个零知识证明系统中,一定包含两部分:宣称某一命题为真的示证者(prover)和确认该命题确实为真的验证者(verifier)。证明是通过这两部分之间的交互来执行的。在零知识协议的结尾,验证者只有当命题为真时才会确认。但是,如果示证者宣称一个错误的命题,那么验证者完全可能发现这个错误。这种思想源自交互式证明系统。交互式系统在计算复杂度理论方面已经获得异常独立的地位。

传统的零知识证明分为交互的零知识证明系统非交互式零知识证明系统。但是它们的本质都是一种协议,就是指多个参与者,使用的一系列特定步骤,目的是为了实现指定的任务。它们大体包括以下三个特征:

  • 该协议是一个有序的过程从开始到结束,每个步骤必须按顺序执行,并不能执行下列步骤之前的前一步完成。
  • 该过程需要多个参与者,可以执行一个任务,虽然通过执行一系列的步骤,但是它门不构成某项协定。
  • 必须通过进行该协议能实现一些指令的执行。

4、零知识证明的逻辑框架

零知识证明组成

零知识证明大体由四部分组成:

1、多项式问题的转化 - 需要证明的问题转化为多项式问题 t(x)h(x) = w(x)v(x),证明者提交证明让验证者确认多项式成立。

2、随机挑选验证 - 随机选择验证的数值s,验证t(s)h(s) = w(s)v(s)。相对于验证多项式相等t(x)h(x) = w(x)v(x),随机挑选验证,简单,验证数据少。随机挑选验证,安全性肯定不及多项式等式验证,但如果确实足够随机,安全性还是相当高的。

3、同态隐藏 - 同态隐藏指的是函数的一种特性。输入的计算和输出的计算保持“同态”。以加法同态为例,满足如下的三个条件的函数E(x),称为加法同态:1. 给定 E(x),很难推导出x. 2. 不同的输入,对应不同输出 3. E(x+y) 可以由 E(x),E(y)计算出来。乘法同态类似。

4、零知识 - 证明者和验证者之间除了“问题证明与否”知识外,不知道其他任何知识(不知道随机挑选值,不知道挑选值的多项式计算结果等等)。

零知识证明协议

零知识证明起源于最小泄露证明。假设P表示掌握某些信息,并希望证实这一事实的实体,假设V是证明这一事实的实体。假如某个协议向V证明P的确掌握某些信息,但V无法推断出这些信息是什么,则称P实现了最小泄露证明。不仅如此,如果V除了知道P能够证明某一事实外,不能够得到其他任何知识,则称P实现了零知识证明,相应的协议称作零知识协议

1、基本的零知识证明协议

零知识的数学分析,需要使用分割技术来实现,假设证明了信息的一部分,而这个信息是一个非常困难的问题,解决基本零知识协议包括以下步骤 :

  • 一个新的解决方案是证明者利用位承诺方案来提交。
  • 验证者不能由新难题得到关于旧难题的所有信息,并且证明者向验证者透漏这个新的难题。
  • 验证者问者要向他证明,新老问题是同构的,即上一步的解决必须解决的新问题。
  • 证明者同意。
  • 验证者和证明者重复执行上面几步。

这种证明的操作背景极其复杂,应慎重选择问题和随机变化,使问题在多次迭代后无法得到原始问题的任何信息。

2、并行的零知识证明协议

基层的零知识系统证明包含A和B之间的多次交换信息,可以把它们合并完成:

  • A利用其信息和多个随机数将问题转化为多个不同的同构问题,然后利用其信息和随机数求解多个问题。 A提交这多个新难题的解法。
  • A向B透露这n个新难题。B无法在这些新问题中得到任何关于原问题或其解法的所有信息。
  • 对每一个问题,B要求A向他证明新旧问题是同构的,并且他在第2步中使用的解法,并判定这就是新难题的方案。
  • A对多个新问题中的任何一个都表示通过。

因此,这个协议似乎在实践中是安全的,因为没有人知道如何证明它。在某些环境中,某些协议的某些问题可以并行运行,同时,必须保持其零知识属性 [3]。

3、非交互式的零知识证明协议

二十世纪八十年代,那时候人们已经发明了非交互类型的零知识的证明系统。非交互式零知识证明协议不需要任何相互作用,并证明可以发布协议,证明该协议是有效的任何人谁需要时间来验证它。此基本协议类似于并行零知识证明,但只使用单向散列函数代替B :

  • A只是利用他的信息和多个随机数,并把这个问题转化成多个不同的同构问题,然后根据他的信息以及随机数处理多个新难题。
  • A呈交多个新问题的解决方案。
  • A作为一个特定的单向散列函数的输入,把所有这些提交的解决方法,保存到这个单向散列函数。
  • A提出在第3步中生成的多个位,针对某个新难题依次取出多个位中的第i个位,假设它是0,我们就能断定新旧问题是同构的,假设它是1,则断定他在第2步中提交的解决方案,并证明它就是这个新问题的解决方法。
  • A必须将第2步中的任何协议及第4步中的解决方案都公开。
  • B以及其他人,都可以判断从第1步到第5步,是否都能被顺利进行。

该协议工作的原因是单向散列函数作为一个公正随机位发生器。如果一个是欺骗,他必须能够预测单向散列函数的输出。但是,它是不可能强制散列函数或猜测它会有什么位置 [4]。这种单向散列函数实际上是B在协议中的替代品--在第四步中随机选取了两个证明之一。
 

零知识证明的特点

完备性:在证明者与验证者都是诚实的情况下,证明过程符合规则并且正确,那么这个证明一定是成功的,验证者就能够接受证明者。P无法欺骗V。换言之,若P不知道一个定理的证明方法,则P使V相信他会证明定理的概率很低。

合理性:没有人能够冒充证明者,即只有证明者能够做出证明。V无法欺骗P。若P知道一个定理的证明方法,则P使V以绝对优势的概率相信他能证明。

零知识性:证明过程执行完之后,验证者只获得了“证明者拥有这个知识”这条信息,而没有获得关于这个知识本身的信息。V无法获取任何额外的知识。

零知识证明的零知识性保证了安全性,对于任意的甚至是恶意的验证者,在与证明者的整个交互过程中所看到的消息都仅仅只能用来验证证明者的信息真假,而无法获得其真正内容。但是,零知识证明会引入较大的计算复杂度,导致效率会有一定程度的降低。

零知识证明的优点:

根据一系列的零知识证明协议,其具备的优点主要有以下几点:

  • 使用零知识证明,安全性不会退化,因为它具有零知识属性;
  • 具备高效性,整个过程中计算量比较小,双方交换的信息同样少;
  • 目前,大部分零知识证明相关技术,通常避免直接应用于有政府限制的加密系统,同时这也给相关产品的出口带来了很大的机遇。

零知识证明攻击

1、象棋大师问题

一个有预谋的用户A想使其他人相信她是一个象棋高手,她可以通过这样的方法来实现:她找到两位世界顶尖级象棋界高手B和C,向他们提出挑战,并定于同一时间,在同一地点的不同房间和他们进行比赛。在比赛的过程中,每当B或C下一步棋,A就跑到隔壁的房间如法炮制,走同一步棋。也就是说,尽管B和C以为他们都在和A对弈,但实际的情况是B和C在彼此对弈。无论最后是B和C哪个赢,A总会是某一局棋的得胜者,从而向其他人证明她的确是一名象棋高手。该过程是对身份的零知识证明的一种攻击。

2、黑手党骗局

A正在B(黑手党)的餐厅吃饭。此时C(黑手党)按照计划来到一家D开的高档珠宝店买东西。B和C随时可以通过一条秘密的无线电线路保持联系,而A和D都对即将到来的骗局一无所知。
当A准备结账并对B证明其身份时,B立刻发信号给C让他准备行动,此时的C早已挑好了许多名贵珠宝,于是他向D证明他的身份。当D开始提问时,C用无线电把问题传给B,B则向A询问同样的问题,得到了答复后B再把答案通过无线电传给C。

零知识证明与区块链

简单介绍几种采用了零知识证明的区块链系统:

1、ZCash

ZCash作为匿名加密货币项目,一开始只是作为比特币的加密匿名层存在,后来因为其优秀的隐私性成为独立的加密货币。与比特币一样,ZCash的总量也是2100万,不同的是它可以实现真正意义上的匿名——各位甚至都不用知道对方有多少钱就能完成交易。

在使用ZCash数字货币进行交易时,它会自动加密交易的原数据;同时交易个体并不需要ZCash节点来保存数据,只需要zk-SNARK来证明其“消费能力”。这主要体现在交易过程中的两点,一可以让别人在不知道具体交易内容的情况下验证交易(或者是智能合约函数调用)的有效性,二交易的详情也可以在公共区块链上消除掉。

这样交易双方似乎从来没出现,而实际交易已经完成了。作为吃瓜群众只知道有交易发生了,但也无法对货币流向进行跟踪。这样便实现了真正的“匿名交易”。

为什么ZCash如何实现真正的匿名和保护隐私?

  • 利用了zk-SNARK技术,也即零知识证明的技术:即使货币的来源与流向信息完全保密,零知识证明技术仍然可以验证花钱的用户确实拥有货币。
  • 公共区块链:ZCash使用公共区块链用于交易的展示,但是它会自动屏蔽掉交易的金额,货币的持有者可以通过查看密钥来观察相关联的信息。

zk-SNARK中的技术实现: 

  1. 同态隐藏
  2. 多项式盲验证
  3. KCA(Knowledge of Coefficient Test and Assumption)以及完整的多项式盲验证
  4. 任意计算转换到多项式证明
  5. 匹诺曹协议

2、门罗币

门罗币(Monero)作为目前加密数字货币中代表性的一种,在保证交易的隐私性方面应用着极其巧妙的密码学技术。

门罗币的两个属性:

  1. 不可链接性(Unlinkability):无法证明两个交易是发送给同一个人的,也就是无法知道交易的接收者是谁。
  2. 不可追踪性(Untraceability):无法知道交易的发送者是谁。

门罗币的技术实现: 

  1. Stealth Addresses (隐蔽地址)
  2. One-time Ring Signature (一次性环签名)

注:仅作资料整理!

如有错误、侵权,请联系笔者更改删除!!! 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三九笔墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值