详细讲解:零知识证明 之 zk-SNARK 开篇
作者:林冠宏 / 指尖下的幽灵
博客:http://www.cnblogs.com/linguanh/
掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8
GitHub : https://github.com/af913337456/
腾讯云专栏: https://cloud.tencent.com/developer/user/1148436/activities
虫洞区块链专栏:https://www.chongdongshequ.com/article/1536563643883.html
目录
- 前序
- 零知识证明
- 零知识证明 与 zk-SNARK 的关系
- ZCash 使用 zk-SNARK 达到了什么目的
前序
zk-SNARK
全称是“Zero-Knowledge Succinct Non-Interactive Argument ofKnowledge”,中文是“零知识简洁的非交互知识论证”。
zk-SNARK
是“零知识证明”理论在区块链
中的一个已经落地的被应用起来了的论证。
早在之前曾学习过 zk-SNARK
,无耐当时能够稍微讲明白的文章都相当少见,我本身也是一个经常写技术文章的人,写作的人最容易陷入的状况就是写着写着,文章中的一些词突然冒了出来,只有自己知道它是怎么被推算出的,却没有说清楚。在读者看来就感到一头雾水的莫名其妙。
zk-SNARK
的知识部分分有几大部分。各个部分,说实话,都离不开数学知识
的应用,非数学专业的读者理解起来,相当地困难。我将会分成5篇文章来逐个全面说清楚它们。开篇,也即是第一篇,是广义术语篇。
零知识证明
既然 zk-SNARK
是基于零知识证明
理论的,那么我们得先理解下零知识证明
。零知识证明
是由S.Goldwasser
、S.Micali
及C.Rackoff
这三个人在20世纪80年代初提出的。但是真正让它火了起来
是区块链的zk-SNARK
。
零知识证明
,它指的是证明者
能够在不向验证者
提供任何有用的信息
的情况下,使验证者相信某个论断是正确的。
有两种角色,证明者
和 验证者
,和一个要点: 有用的信息
。
证明者
,证明自己知道问题的答案验证者
,验证证明者的答案是正确的
下面列举 2个例子来说明下零知识证明
。
例子1 钱包的主人
A 作为验证者,捡到了一个钱包,此时B作为证明者,想要向A证明,这个钱包属于它的,即证明钱包属于B。要符合零知识的证明,那么要满足下面的证明要求:
- A此时不能能让B看到钱包,更不能让他看到钱包里有什么东西。
- B必须提供足够多的准确无误的信息,证明钱包就是自己的。
B 此时可以提供:
- 钱包的颜色、大小、品牌分别是什么,等信息。
- 钱包里有什么东西?比如多少钱?什么证件?证件信息是什么?
A 在B回答完后,进行验证,如果 B 全部说对了,则确认B就是钱包主人。这种信息验证的手段就是零知识证明。B 没有向 A 直接提供钱包的情况下,证明了钱包是自己的,它也无法提供钱包,因为钱包在验证者A手上。实体的钱包就代表者有用的信息
。
例子2 阿里巴巴和40大盗
这是网上一个很普遍的讲述零知识证明
的例子。阿里巴巴是一个人名,下面简称 A,A 是证明者
,大盗是验证者
。
A 知道打开藏着财宝的山洞的咒语。强盗抓住他,让他说出咒语。如果A说出咒语,就会因为没有利用价值而被杀死。如果A坚持不说,强盗不会相信他真的掌握咒语,也会杀死他。A想了一个办法,他对强盗说:“你们离我一箭之地,用弓箭指着我,你们举起右手我就念咒语打开石门,举起左手我就念咒语关上石门,如果我做不到或逃跑,你们就用弓箭射死我。”
这样子,A 就能在距离大盗足够远的位置说出咒语打开石门,而大盗听不到咒语是什么,A。大盗眼见为实,石门的确被打开,验证A的确掌握咒语。这个过程 A 没有直接透露给大盗咒语,咒语就是有用的信息
。
此外还有一个数独
的例子。感兴趣的读者可以自行去浏览器搜索。这种证明方式有点类似于数学中的间接证明
的意味。
零知识证明 与 zk-SNARK 的关系
零知识证明,相信通过上面的两个例子,大家都能理解了。如果依然无法理解,我觉得可以过段时间再来读读我这篇文章,现在不建议继续读下去。
如果直接在生活中,使用语言,动作来完成一次零知识证明
,这是很好操作的。就像钱包的例子一样,大家凑到一块,说说话,就能完成。
然而从计算机的角度去看,如何将问题转化为程序的形式,让计算机去帮我们完成零知识证明
呢?这就需要我们把实际的零知识证明
类问题转化为数学的描述形式,这样就能使用计算机程序去表达。
zk-SNARK
,就是一个为了将实际的零知识证明
类问题转为计算机程序问题的理论。全称“zero knowledge Succinct Non-interactive ARgument of Knowledge” 可以拆分为下面几点去理解:
- zero knowledge,零知识,即不透露任何有用的信息。
- succinct,简洁的,主要是指计算机程序在验证的过程不涉及大量数据传输以及保证验证算法的简单。
- non-interactive,无交互。
交互
是个抽象名词,我这里要解释一下它。比如交互式程序就是你给它一个指令,它反馈给你一个对应的信息,而非交互式程序就是你给它一个指令,正确它就执行,错误它就不执行,而且它也不会将错误信息反馈给你。因此zk-SNARK
的无交互,就是证明者
提交证明后,错误的时候验证者
是不会透露错误的信息是什么的。 - arguments,争议性。
zk-SNARK
是有被攻击的争议的,这种争议仅且仅当证明者拥有足够的算力
来通过伪造证据
来欺骗验证者,才会存在,注意关键词:足够的算力
,它足以打破公钥的加密,所以可以说概率极低。
目前,区块链中的公链 ZCash
就应用了 zk-SNARK
的理论。
ZCash
使用 zk-SNARK
达到了什么目的
目前区块链中一些著名公链,例如BTC
和ETH
的交易,在交易成功后,我们去区块链浏览器
或调用对应的RPC接口
查看对应的交易记录的时候。是可以看出包含但不限于
下面的数据的:
交易发送者地址
交易接收者地址
- 交易的数值
虽然说,单靠一个显示一串数字和字母组成的地址,例如:0xD224cA0c819e8E97ba0136B3b95ceFf503B79f53
也起到了很好的匿名效果,因为作为观察者来看,我们根本不知道拥有该地址的人是谁,是男是女。
追求绝对的极致,那么能否将上面的数据也隐藏掉,达到全部数据匿名的效果呢?使用了zk-SNARK
原理的ZCash
公链就做到了。
ZCash
拥有一个匿名交易系统,它支持多种交易类型,其中一种就是能够隐藏交易双方地址
和交易数值
的交易。这是完全的隐藏,而不是说数据还存放在ZCash
的节点数据库中,而不向外显示出的隐藏。而是连节点都不知道交易的内容。可以说,在某一些对私密性要求跟高的应用上,零知识证明所带来的数据隐藏性是很高的。
关于 ZCash
在隐藏地址之间进行的交易中使用到了zk-SNARK
。第二篇文章,我将重点介绍下:ZCash
在隐藏地址之间进行交易。
转载于:https://www.cnblogs.com/linguanh/p/10892344.html
详细讲解:零知识证明 之 zk-SNARK 开篇相关推荐
- 零知识证明实践教程,第一部分
本文和其他博客文章的区别: 现今存在很多讲解零知识证明的文章,但是它们都是只涉及到很浅层的概念理解和直观感受上面,没有深入到零知识证明的细节,导致读者只知道什么是零知识证明,而不清楚怎么构造一个零知识 ...
- 【区块链】以太坊L2扩容方案与零知识证明
以太坊L2扩容方案与零知识证明 简介 简要概述以太坊L2层现有解决方案 简要概述以太坊L2未来扩容的方向 简要概述零知识证明的基本概念和零知识证明在以太坊的运用 简要概述stark ware的两个产品 ...
- 零知识证明 - zkSNARK入门
网络上讲解零知识证明的文章就不多,这些文章要不太浅显,要不太深入,很少有能给入门者整体框架上的认识. 比如,阿里巴巴零知识证明就是一个非常好的通俗理解零知识证明的例子: 阿里巴巴被强盗抓住,为了保命, ...
- 详细讲解:零知识证明 之 ZCash 完整的匿名交易流程
作者:林冠宏 / 指尖下的幽灵 博客:http://www.cnblogs.com/linguanh/ 掘金:https://juejin.im/user/587f0dfe128fe100570ce2 ...
- 浅谈零知识证明之二:简短无交互证明(SNARK)
本文作者东泽,来自安比技术社区的小伙伴,目前就读于斯坦福大学,研究方向密码学,本系列文章来源于作者在斯坦福著名的课程<CS 251: Cryptocurrencies and blockchai ...
- 什么是零知识证明(ZK Proof)?Web2.0通往Web3.0的入口技术
古老的难题 女:你爱我吗? 男:爱! 女:怎么证明? 男:-- 零知识证明的定义 零知识证明(Zero-Knowledge Proof)也叫做最小泄露证明,能充分证明自己是某种权益的合法拥有者,又不把 ...
- PrivacyIN Week2 | 张宇鹏博导开讲经典零知识证明协议设计原理
前言 隐私研究院[PrivacyIN]第一期ZK训练营课程精讲内容上线,本期课堂邀请到美国德州农工大学(Texas A&M University)计算机科学与工程学院的助理教授张宇鹏,主要介绍 ...
- 零知识证明学习资源汇总
本文将继续会持续进行更新,更新后的版本将在 Github 和知乎上发布,欢迎关注. Github 地址:https://github.com/sec-bit/learning-zkp/blob/mas ...
- zkSNARKs(零知识证明)简述
zkSNARKs 的成功实现让我们印象深刻,因为你可以在不执行,甚至不知道执行的具体内容是什么的情况下确定某个计算的结果是否正确 -- 而你唯一知道的信息就是它正确的完成了.但是不幸的是,大多数关于 ...
最新文章
- BTC引领市场多头情绪爆发 BCH筑底完成望成上涨新风口
- 2015年11月 广州深圳 MVP 线下活动
- Asp.net SignalR 实现服务端消息推送到Web端
- MATLAB怎么查找矩阵中所有0的数据并赋值
- [导入]ASP.NET 2.0中Page事件的执行顺序
- Jstorm+Spring+mybatis整合
- Faiss源码剖析:类结构分析
- linux下tmux
- 【SSM 整合项目】图书管理系统
- 如何在Android Studio中删除模块
- 无人机——磁力计/电子罗盘 学习及校准
- Base64基本原理
- 白帽黑客学习之路-python篇-基础
- 宁波大学计算机非全,宁波大学考研:全日制和非全日制的6大区别,很多人不知道...
- 微信公众平台接口程序语音天气
- 高数_第5章常微分方程_二阶线性微分方程解的结构
- 摩尔纹的原理与产生条件
- C语言程序设计之通讯录
- 分布式数据库TiDB介绍
- 深度学习_深度学习基础知识_Internal Covariate Shift