所谓零知识证明,指的是示证者在证明自己身份时不泄露任何信息,验证者得不到示证者的任何私有信息,但又能有效证明对方身份的一种方法。

从本质上讲,零知识证明是一种协议。所谓协议(Protocol),就是两个或两个以上的参与者为完成某项特定的任务而采取的一系列步骤,包括以下三个特征:
  
  1. 协议自始至终是有序的过程,每一步骤必须依次执行,在前一步骤没有执行完之前,后面的步骤不可能执行。
  2. 协议至少需要两个参与者,一个人可以通过执行一系列的步骤来完成某项任务,但它不构成协议。
  3. 通过执行协议必须能够完成某项任务。
  
  基于数学的推理虽然非常复杂,但思路却很简单一些方案。
  
  举几个例子:
  
  1)A要向B证明自己拥有某个房间的钥匙,假设该房间只能用钥匙打开锁,而其他任何方法都打不开。这时有2个方法:
   (一)A把钥匙出示给B,B用这把钥匙打开该房间的锁,从而证明A拥有该房间的正确的钥匙。
   (二)B确定该房间内有某一物体,A用自己拥有的钥匙打开该房间的门,然后把物体拿出来出示给B,从而证明自己确实拥有该房间的钥匙
  后面这个方法属于零知识证明。好处在于在整个证明的过程中,B始终不能看到钥匙的样子,从而避免了钥匙的泄露。
  
    2)A拥有B的公钥,A没有见过B,而B见过A的照片,偶然一天2人见面了,B认出了A,但A不能确定面前的人是否是B,这时B要向A证明自己是B,也有2个方法。
  
   (一)B把自己的私钥给A,A用这个私钥对某个数据加密,然后用B的公钥解密,如果正确,则证明对方确实是B。
   (二)A给出一个随机值,B用自己的私钥对其加密,然后把加密后的数据交给A,A用B的公钥解密,如果能够得到原来的随机值,则证明对方是B。
   后面的方法属于零知识证明。
  
    3)有一个缺口环形的长廊,出口和入口距离非常近(在目距之内),但走廊中间某处有一道只能用钥匙打开的门,A要向B证明自己拥有该门的钥匙。采用零知识证明,则B看着A从入口进入走廊,然后又从出口走出走廊,这时B没有得到任何关于这个钥匙的信息,但是完全可以证明A拥有钥匙。
    
说了不少那么零知识证明的优点:
1.在使用零知识证明的时候,不降低安全性。
2.零知识证明工作高效,计算过程量小,双方交换信息少。
简单归纳,既安全、又有良好的隐私、又减少计算量。

那么区块链中,ZCASH数字货币就是使用零知识证明,在整个交易过程中,完全匿名。他不同于比特币的交易,他同样也有UTXO,但是这个是完全封闭, 在ZCASH交易过程中,不同比特币,在A转账给B的时候,他会当B的面UTXO会作废,但是ZCASH中,A转账给B,新建一个UTXO,原先的会发送到一个作废列表,但是这个列表记录的是之前的序号或者代号,证明之前的UTXO失效。在这个过程中B是看不到A之前的信息,但是确实交易还是发生了,同样道理,矿工也看不到之前的A的交易信息,只是能确定之前的交易序号或者代号存在于作废列表了。

一、从比特币说起

  直接讲解ZCash的交易过程可能会比较抽象。为了有助于理解,我们不妨先分析比特币,作为铺垫。

  我们先来打个比方说明比特币的转账原理。

  演示场景:Alice转1个比特币给Bob。

  转账前,Alice要事先准备1个比特币。为了方便理解,我们把Alice准备转出的这1个比特币看成一张面额为1个比特币的“支票”,如图1。


  图1

  从这张“支票”中我们可以获取到如下信息:

  1. Alice确实拥有1个BTC。

  2. Alice使用私钥对这张支票签名,证明Alice拥有对这笔资产转账的权力。

  支票的面额和转账权都已经明确,Alice就可以给Bob转账了。转账的原理很简单,就是给Bob新建一张一样的“支票”,证明Bob拥有了1个比特币。同时撕掉Alice手中的“支票”,通过这“破旧”并“立新”的方式,实现资产所有权的转移。如图2。


  图2

  以上逻辑其实不难理解,因为这和日常生活中的银行转账是一个道理。通过银行转账,我们在交易时不必对实物货币进行转移,而是以银行记账的方式,实现“资产所有权”的转移。比特币交易的过程实质上就是一个“资产所有权”的转移过程,转入比特币的那一方“新建”一份资产所有权,而转出方需要“销毁”原先的资产所有权,被销毁的那张“支票”永远不会再出现。

  二、ZCash的转账原理

  与比特币一样,ZCash的交易过程也是 “资产所有权”的转移。继续沿用前文“支票”的比方。

  演示场景:Alice转1个ZEC给Bob。

  转账前,Alice创建一张面额为1个ZEC的“支票”,如图3。


  图3

  能从该凭证中获取的信息:

  1. Alice确实拥有1个ZEC。

  2. Alice使用私钥对这张支票签名,证明Alice拥有对这笔资产转账的权力。

  3. 这张“凭证”上多了一串随机数,用符号 r 表示。这串随机数的作用好比“支票代号”,用来唯一识别该支票。Alice的“支票代号”为r1。

  明确以上信息,Alice就可以进行ZEC转账了。

  第一步:比特币一样,要先为Bob新建一张“支票”。Bob的支票代号(r2)与Alice的支

  票代号(r1)不相同,如图4。

  图4

  第二步:新的“资产所有权”生成的同时,必须要想办法销毁原来的“资产所有权”。即必须想办法让Alice手中的“支票”失效。与比特币简单粗暴的“直接撕毁”不同,ZCash采用“备注作废”的手段,达到同样的效果。怎么理解呢?就是在不对原先“支票”作任何处理的前提下,新建一个作废文件列表,录入需要作废的“发票代号”。如图5,

  图5

  从上图可以看出,原先的Alice持有的支票仍旧存在,并没有消失,只是这张支票已经被记入“作废列表”。在确定资产所有权时要同时读取两个列表的信息,能确定Bob拥有资产所有权的判断方法是:作废列表中不存在Bob所持“支票”的代号。

  可是为什么要这样设计呢?其实这样设计的目的是为了在交易过程中运用 “零知识证明”。

  三、零知识证明

  什么是零知识证明?

  零知识证明 (被称为“zk-SNARK”)是实现Zcash的匿名特性的核心技术。“零知识证明”的定义是:证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。举个简单的例子:

  A要向B证明自己拥有某个房间的钥匙,假设该房间只能用钥匙打开锁,而其他任何方法都打不开。这时有2个方法:

  (一)A把钥匙出示给B,B用这把钥匙打开该房间的锁,从而证明A拥有该房间的正确的钥匙。

  (二)B确定该房间内有某一物体,A用自己拥有的钥匙打开该房间的门,然后把物体拿出来出示给B,从而证明自己确实拥有该房间的钥匙 。

  后面这个方法属于零知识证明。好处在于在整个证明的过程中,B始终不能看到钥匙的样子,从而避免了钥匙的泄露。

  那么零知识证明怎么运用到ZCash交易过程中呢?

  我们再回顾比特币和ZCash的例子。

  Alice要向Bob转一个单位的数字货币(BTC/ZEC),即Alice要向Bob转移一个单位的资产所有权。这时有以下两个方法:

  (一)比特币中的做法:Alice拥有一张1BTC的支票,要转账给Bob时,先给Bob新建一张1BTC的支票,同时当着Bob的面将自己原先的支票撕毁。

  (二)ZCash中的做法:Alice拥有一张1ZEC的支票,要转账给Bob时,先给Bob新建一张1ZEC的支票,然后在一张约定有效的作废列表中,记录下Alice的发票的代号,证明Alice的支票已经失效。

  ZCash的方法属于零知识证明。整个交易过程中,Bob并没有见过Alice的支票,但是还是实现了资产所有权的转移。在ZCash的整个交易系统中,Alice和Bob的交易还有其他见证者,即负责记录交易信息的矿工。同样道理,矿工也不必看到Alice的支票,只要能确定代号为r1的支票已经作废了就行。

  四、ZCash完整的匿名交易系统

  有了上述铺垫,就可以进一步解释ZCash的匿名交易过程了。

  还是那个例子:Alice转1 个ZEC给Bob。这个例子中有涉及到的角色有转账双方Alice和Bob,以及记账者(矿工)。

  首先是Alice和Bob都有了一张支票,如图6。


  图6

  这两张“支票”都是有效的。Alice的支票开始就存在于整个ZCash网络,Bob的支票在生成后也会被广播到全网。

  为了隐藏交易者信息,要对两张支票进行加密处理。在全网中存在的“支票”其实是这样子的,如图7。

  信息都是被加密的,可以通过拥有者的私钥解密
  

  图7

  同时,因为资产只能有一份,所有矿工手里还有一个作废列表。Alice要同时广播自己的“发票代号”,录入作废列表中。发票代号也是加密的。所以矿工们能看到的信息其实是这样的。其中Alice的支票是原先存在的,Alice的支票代号r1和Bob的支票是在交易过程中被Alice广播的。如图8。


  图8

  矿工们能获取的信息相当有限,但是这并不影响对矿工对交易有效性的判断。

  判断的逻辑相当简单:矿工拿到Alice给的支票代号r1,去作废列表中检索,假如作废列表中已经存在r1,则证明r1所对应的的支票早已失效;若作废列表中并不存在r1,则证明r1对应的支票仍旧有效,此时矿工把r1录入作废列表中,把新生成的支票录入支票列表中。所以记账的过程就是对原有支票登记失效,并存入现有支票的过程。

  在这个过程中,我们不难发现,每笔交易矿工能接收到的东西只有一个发票代号,和一张新的发票,而且这两样东西都是被加密的。所以矿工并不知道转账双方是谁,也不知道转账金额是多少。
  

【区块链基础知识系列】 第8课 区块链之零知识证明相关推荐

  1. 区块链基础知识系列 第三课 区块链中的默克尔树

    "区块链是实现无中心分布式总账的一种技术.除了采用块.链结构的典型区块链以外,还有其他的方式实现分布式总账这个需求.总账技术的基本单元是'交易',整个账本是由一条条的交易构成.'块'类似于账 ...

  2. 【问链财经-区块链基础知识系列】 第四十一课 中外银行跨境业务运用区块链技术创新案例对比

    中国作为贸易大国,国际贸易和内外贸一体化的市场规模庞大.近年来,随着"走出去"和"一带一路"国家战略的深化,企业层面的跨境支付与结算业务将迎来新的市场契机.加之 ...

  3. 区块链基础知识系列第5课 Hyperledger fabric1.0网络中transaction产生以及流转过程

    一.发起transaction 当client想要发起一个transaction时,它会首先发送一个PROPOSE消息到它选择的一组endorser节点,消息模式有以下两种,节点可以自由选择(可能有更 ...

  4. 区块链基础知识系列 第四课Hyperledger fabric 1.0网络组成及构建流程

    一.fabric网络结构(暂时不包括CA) 如上图所示,在fabric网络中,O表示Orderer,P代表Peer,EP代表Endorsing Peer(endorser),CC代表Chaincode ...

  5. 【问链财经-区块链基础知识系列】 第四十七课 蚂蚁区块链的布局和打法

    近日,一年一度的云栖大会在杭州云栖小镇举行,"区块链"再度成为热词. 在9月24日的蚂蚁金服投资者日上,蚂蚁区块链已经成为蚂蚁金服董事长兼CEO井贤栋口中的"后天&quo ...

  6. 【问链财经-区块链基础知识系列】 第三十课 区块链金融面临的四大挑战

    编者按:越来越多的人意识到区块链带来的价值和好处.其中他们最关心的问题是,如何将区块链不可篡改的特性与自己所在企业或行业的应用场景结合起来.就像区块链在金融领域的应用,探索的触角已伸出,效果又如何呢? ...

  7. 【问链财经-区块链基础知识系列】 第二十二课 贸易金融区块链平台的技术机理与现实意义

    简介:贸易金融区块链平台的技术机理.模式.优势与现实意义都有哪些?对湾区贸易金融区块链平台的未来建设有何展望?本文将进行详述. 小微企业贡献了我国60%以上的GDP.50%以上的税收以及80%的城镇就 ...

  8. 【问链-区块链基础知识系列】 第十二课 区块链产业落地现状分析

    摘要:结合鲸准研究院发布的2018区块链商业落地情况分析报告,然后加入了我参与和了解的区块链落地情况进行整理书写. 我们知道"2018年将是区块链真正与实体经济结合并爆发的一年." ...

  9. 【问链-区块链基础知识系列】 第十课 首席架构师谈区块链技术演进

    一.区块链和比特币,都有"币-链-网"三层含义 1.第一层含义是"币".这个"币"并不是刚才王行长所说的真正意义上的"货币&quo ...

  10. 【问链财经-区块链基础知识系列】 第四十四课 邮储银行:U链福费廷业务系统

    一.案例摘要 福费廷业务是银行根据客户或其他金融机构的要求,在开证行.包买行或其他指定银行对信用证项下的款项做出付款承诺后,对应收款进行无追索权的融资.邮储银行以企业级开源区块链平台 Hyperled ...

最新文章

  1. 边缘计算的三种模式:MEC、微云和雾计算
  2. ASCII码对照表(不可见字符)
  3. STM32 电机教程 1 - 用ST Motor Profiler 测量无刷电机参数
  4. 浅谈Java中的Set、List、Map的区别
  5. 用户认证-什么是会话
  6. python正则表达式匹配aabb_Python正则表达式拆分多个匹配项
  7. @Transactional注解导致 多数据源@DS无效 的解决方案
  8. 64位win8系统加64位sql server 2008,性能提高了好多
  9. 2003系统企业版镜像服务器,Windows Server 2003 R2/SP2简体中文企业版原版镜像
  10. 数据结构视频教程 -《小甲鱼全套教程之C C++数据结构系列教程》
  11. JDK动态代理(通俗白话)
  12. 签订房屋买卖居间合同后一方违约购房定金如何处理
  13. 年会抽奖程序,基于 Express + Three.js的 3D 球体抽奖程序
  14. 基于共识算法和区块链模拟实现超级账本
  15. 和风天气 (简易版)
  16. 使用PHP环境一键安装包快速搭建PHP开发环境
  17. JavaScript 美化滑块
  18. 华中科技大学计算机考博真题,2017年华科考博真题汇总贴
  19. java冒泡排序真正最优的优化方案
  20. 明明装了驱动,当前打印机不可用,怎么办?

热门文章

  1. C#3.0语法新特性集合
  2. k均值算法原理详细讲解以及matlab代码实现
  3. 深度学习问题解决:Check failed: stream-parent()-GetConvolveAlgorithms( conv_parameters.ShouldIncludeWinogra
  4. 正则化与L0、L1、L2范数祥解
  5. C++输出变量类型、max报错原因
  6. java lamda循环条件_Java lambda 循环累加求和代码
  7. 科大星云诗社动态20210215
  8. 山西职称计算机考试报名时间 2014,2014山西省6月份职称计算机考试报名入口
  9. 主成分分析(PCA)深入剖析+Matlab模拟
  10. 美研申请,你应该知道的那些事?