区块链零知识证明

admin
admin 2021年05月11日
  • 在其它设备中阅读本文章

零知识证明解决了区块链应用的一个根本问题。区块链的应用价值在于去中性化共识,无论是货币交易还是权益证明,所有成员都是见证人,众目睽睽之下,一旦交易完成便无法抵赖,权益生成便不能否认。但这也意味着,你收了谁多少钱,名下有几套房对于所有人都是透明的,这显然与隐私保护的刚性需求相违背。虽然一些针对隐私保护的混淆技术被提出,例如达世币(Dash)的混币技术,但终究只能在一定程度上缓解而不能根治去中心化引入的这个固有问题。好在世上从来不缺聪明人,没让大家等多久,零知识证明横空出世。零知识证明要解决的问题是:以不透露一个论断的任何信息为前提,向你证明这个论断是对的 。以货币交易为例,就是在不告诉你付款人、收款人是谁,也不告诉你金额多少的前提下,设法证明这笔交易是合法的。

zk-SNARK

zk-SNARK 是“zero knowledge Succinct Non-interactive ARgument of Knowledge”的缩写,这一长串名字的主体是“argument of knowledge”,即“知情证明”,也就是掌握某事内幕的证据。修饰主体名词的定语由三部分组成,分别代表了此技术要解决的三个问题,分别是:

  • zero knowledge:零知识,即在证明的过程中不透露任何内情;
  • succinct:简洁的,主要是指验证过程不涉及大量数据传输以及验证算法简单;
  • non-interactive:无交互。Prover 和 Verifier 之间不需要经过多次交互。
    合起来,zk-SNARK 是一种“证明我知道内情的技术,简单、易操作,最关键的是零知识”。
    ZCash(大零币,货币符号是 ZEC)是最早广泛应用 zk-SNARK 的数字货币。ZCash 采用 zk-SNARK 技术,目的是彻底解决交易被追踪从而暴露用户隐私的问题。
    ZCash 的核心概念与比特币是一脉相承的:
  • 一个比特币交易(Transaction)接受若干输入(Transaction Input, TI),同时产生若干输出(Transaction Output, TO);
  • TI 和 TO 是相对一个特定交易而言的,因为一个交易的 TO 可能成为另一个交易的 TI,这是一个将挣来的钱再花出去的过程;在还没花出去前,这些钱就是“Unspent”的,因此此刻尚未成为下一个交易 TI 的 TO 称为“UXTO(Unspent Transaction Output)”。UXTO 是比特币交易的基本单元;
  • 交易的付款方需证明自己有权使用这些 UTXO,方法是提供私钥进行验证,因为每个交易 TO 会指定收款人的公钥,保证只有收款人才能接着花它。

ZCash 继承了比特币的交易模型,只不过 UTXO 被衍生出的新概念“note”所代替,后者是 ZCash 的基本交易单元。英语中,“note”有“钞票”的意思。不过,翻译成“支票”更贴切,因为每张 note 上都标注了只有谁才能兑现它(即所有者)。一个交易的输入和输出都是若干 note。为描述方便起见,将 note 记为“note=(PK, v, r)”,其中,PK 是所有者的公钥(地址),v 是金额,而 r 是可以唯一区分该 note 的序列号。
所不同的是,ZCash 交易分为两类:透明地址和隐藏地址。透明地址交易的输入、输出直接是可见的 note 信息。而对于隐藏地址交易,输入和 / 或输出的地址和金额是隐藏的。
在隐藏地址的交易中,输入、输出不再是明文的 note,而分别是 note 的废止通知和签发通知:

  • 签发通知(note commitment):作为交易的输出,表示一张新 note 被签发。一个有效的 commitment 是一张 note 存在的证明,然而从它包含的信息中并不知道是哪张 note,也就无法知道所有者是谁,金额多少。为满足这一点,最简单的方法是对 note 的描述信息取哈希,因此 note 对应的 commitment 可以简单描述为“HASH(note)”;
  • 废止通知(note nullifier):作为交易的输入,表示一张老支票将作废(因为马上要被兑现、花掉了)。同比特币一样,一个交易的输入一定是另一个交易的输出,因此 nullifier 对应唯一一个 commitment(结合 commitment 的定义,也就唯一对应一张 note),但从它包含的信息并不能推导出是哪个 commitment(如果可以的话,ZCash 交易便可被追踪,因而丧失隐私性了)。为构造满足要求的 nullifier,取哈希依然是个好办法,因此序号为 r 的 note,对应的 nullifier 可描述为“HASH(r)”。
    通过引入 nullifier 和 commitment,交易之间路人皆知的关联变成了付款人和收款人的心照不宣
    ZCash 区块链共识的所有参与者(节点)各自维护一个 nullifer 和 commitment 的集合,随着新交易的产生,这两个集合的内容会不断变化。通过 zk-SNARK 协议来共识 note,达到隐私交易的效果。