chain-zeroKnowledge

79 阅读3分钟

ZeroKnowledgeProof

零知识证明: 起源于最小泄漏信息证明;零知识证明是指一方(证明者:p)向另一方(验证者:v)证 明一个陈述是正确的,而无需透露除该陈述是正确的外的任何信息。

1.性质

  1. 正确性。P无法欺骗V。换言之,若P不知道一个定理的证明方法,则P使V相信他会证明定理的概率很低。
  2. 完备性。V无法欺骗P。若P知道一个定理的证明方法,则P使V以绝对优势的概率相信他能证明。
  3. 零知识性。V无法获取任何额外的知识

我们把性质(1)和(2)称为零知识证明的正确性和完备性,而性质(3)称为零知识性

2.证明场景

同台隐藏

如果𝑥, 𝑦不同,那么它们的加密函数值𝐸(𝑥)和𝐸(𝑦) 也不相同。

  • 给定𝐸(𝑥)的值,很难反推出𝑥的值。
  • 给定𝐸(𝑥)和𝐸(𝑦)的值,我们可以很容易地计算出某些关于𝑥, 𝑦的加密函数值。
    • 同态加法:通过𝐸(𝑥)和𝐸(𝑦)计算出𝐸(𝑥 + 𝑦)的值
    • 同态乘法:通过𝐸(𝑥)和𝐸(𝑦)计算出𝐸(𝑥𝑦)的值
    • 扩展到多项式

Alice想要向Bob证明她知道一组数𝑥和𝑦使得𝑥 + 𝑦 = 7,同时不让Bob知道𝑥和𝑦的具体数值

Alice把𝐸(𝑥)和𝐸(𝑦)的数值发给Bob

  • Bob通过收到的𝐸(𝑥)和𝐸(𝑦)计算出𝐸(𝑥 + 𝑦)的值(利用了性质3)
  • Bob同时计算𝐸(7)的值,如果𝐸(𝑥 + 𝑦) = 𝐸(7),那么验证通过,否则验证失败。

支票盲签

用户A提供SerialNum,银行在不知道SerialNum的情况下返回签名Token,减少A的存款

  1. 用户A把SerialNum和Token交给B完成交易
  2. 用户B拿SerialNum和Token给银行验证,银行验证通过,增加B的存款
  3. 银行无法把A和B联系起来。
  4. 中心化 => 支票使用场景

公私钥

A拥有B的公钥,A没有见过B,而B见过A的照片,偶然一天两个人见面了,B认出了A,但A不能确定面前的人是否是B,这时B要向A证明自己是B,也有2个方法。

  1. B把自己的公钥给A,A用公钥对某个数据加密,然后用B的私钥解密,如果正确,则证明对方确实是B。
  2. A给出一个随机值,并使用B的公钥对其加密,然后将加密后的数据交给B,B用自己的私钥解密并展示给A,如果与A给出的随机值相同,则证明对方是B。

是区块链的应用场景(公钥加密,私钥签名)

证明你就是你

  1. 产品层: 第三方联系
  2. 哲学层: 过程及结果
  3. 数学层: 公私钥

零币和零钞

  • 零币和零钞在协议层就融合了匿名化处理,其匿名属性来自密码学保证。
  • 零币(zerocoin )系统中存在基础币和零币,通过基础币和零币的来回转换,消除旧地址和新地址的关联性,其原理类似于混币服务。
  • 零钞(zerocash)系统使用zk-SNARKs协议,不依赖一种基础币,区块链中只记录交易的存在性和矿工用来验证系统正常运行所需要关键属性的证明。区块链上既不显示交易地址也不显示交易金额,所有交易通过零知识验证的方式进行。