密码学系列 - 零知识证明 - ZK-SNARKs

零知识证明 - ZKP

零知识证明的理论基础:椭圆曲线,大数计算,群论,同态加密,配对函数

零知识证明的各种算法: zkSNARK,zkSTARK,BulletProof

算法属性可表示为: zk-SNARKs (简洁的非交互式零知识证明)

  • Zero-Knowledge
  • Succinct
  • Non-interactive
  • ARgument of Knowledge

关键词

  • 见证人: 执行电路时产生的中间信号 - witness
  • 零知识证明证明您知道一组匹配所有约束的信号(见证),而不会泄露除公共输入和输出之外的任何信号。
  • 生成 proving_key(私有证明密钥-保密) 和 verification_key(验证密钥-可公示)
  • 创建证明: 使用proving_key和witness(见证人),生成proof数据(证据)和可公布的数据
  • 验证证明: 使用verification_key, proof数据和可公布的数据, 验证是否有效

目前最主流的证明协议 - Groth16

证明系统更快,并且可以实现更短的证明


Groth 大牛,在2016年提出了 Groth16 算法。该算法大大缩小了证明的数据量,并且也大大提高了验证证明的速度。从 PPT 中,我们可以看出验证过程只需要验证一个等式就可以了,所以验证特别快。

原理 – 为什么零知识证明可以做到零交互(Non-interactive)呢?

其实原理就是利用 CRS(Common Reference String)。CRS 其实就把挑战过程中所要生成的随机数和挑战数,都预先生成好,然后基于这些随机数和挑战数生成他们对应的在证明和验证过程中所需用到的各种同态隐藏。

之后,就把这些随机数和挑战数销毁。这些随机数和挑战数 被称为 toxic waste。之所以把他们称为 toxic waste,是因为如果他们没有被销毁的话,就可以伪造证明了。

在 Zcash 项目中,大家为了安全的生成这些随机数和挑战数,使用了 MPC(multi-party computation 多方计算仪式) 技术。这样多方一起来生成 这些 toxic waste,只要不是所有人合谋,那么没有人能恢复出 toxic waste。从而保证了安全性。

到目前为止,Zcash已经创建了两组不同的公共参数。第一个仪式发生在2016年10月,就在Zcash Sprout推出之前。第二个产生于2018年,预计当年晚些时候将进行Sapling网络升级。

发布了58 篇原创文章 · 获赞 66 · 访问量 8168

猜你喜欢

转载自blog.csdn.net/wcc19840827/article/details/99711524