本文由云+社区发表

当区块链遇到零知识证明

什么是零知识证明

零知识证明的官方定义是能够在不向验证者任何有用的信息的情况下,使验证者相信某个论断是正确的。这个定义有点抽象,下面笔者举几个例子,来帮助读者理解这个概念

例子一:小明有钥匙

地主有一个漂亮的女儿,一直没有嫁出去,有一天地主捡到一把锁,他灵光闪现,何不让老天爷来决定我闺女嫁给谁,于是乎他就发布告示,如果有谁拥有这把锁的钥匙,他就把女儿嫁给他。

小明看到那把锁,心想这不是我前两天扔的那把锁吗?我有钥匙啊,但是他又不想把钥匙拿出来让大家看到,因为钥匙上有不可告人的秘密。于是他找到地主,说出了自己的苦衷,地主略微思考了一下,想到了一个好办法。

他让人搬了一个密封的大木箱,把自己的贴身玉佩放到了箱子里,然后用锁锁起来,说如果小明第二天把玉佩交给他,那小明就可以娶到他的女儿。

小明晚上偷偷用钥匙打开了箱子,然后把玉佩取出来,第二天交到了地主手中。然后和美女幸福的生活在了一起。

这个故事中小明并没有把钥匙给地主看,也没有当着地主把锁打开,但是却证明了自己确实有钥匙。

例子二:哥德巴赫猜想的证明

众所周知,哥德巴赫猜想是一个世界级别的数学难题,有一天一个中国大学生小明找到了证明哥德巴赫猜想的方法。但是他说我能证明出来,没人相信他,甚至没人愿意看他的证明过程,因为名气太小了。这时候他就想到可以让导师出面证明他已经找出了证明方法,但是他遇到了一个两难的问题:

如果他把证明方法给导师看,导师可能直接说这个证明方法是他发现的。

如果他不把证明方法给导师看,导师也不相信他能找到哥德巴赫猜想的证明方法。

实在是难坏了小明!!!!!!!!

零知识证明可以帮助小明解决他的难题,零知识证明的世界里,小明可以不把实际的证明过程给导师看,只需要提供给导师另外一段数据,导师拿到这段数据经过验证可以知道小明真的有哥德巴赫猜想的证明方法,但是导师并没有看到真正的证明过程。

比特币的困境

假如你对比特币有了解的话应该知道,比特币就是一个共有的账本,A转给B一笔钱就是在区块链上写一条记录“A转给B 10块钱”,A的10块钱从哪儿来呢?要求必须是以前某人C在区块链上写一条记录“C转给A 10块钱”。于是比特币的区块链上就是存放了一条一条的账本条目:

C转给A 10块钱

A转给B 10块钱

B转给D 5块钱

B转给E 5块钱

E转给D 5块钱

D转给A 10块钱

……

但是这样会带来一个问题,号称匿名的比特币系统却做不到真的匿名,因为账本是公开的,所以大家都能看到A,B,C,D,E都有多少钱,并且是在什么时间得到的这笔钱的。而所谓的匿名性其实是不存在的。

PS:比特币的匿名性其实是指一般无法把A对应到真正的交易人实体,A只是一个账户标号,而不是类似“小明”这样的实际个人。但是假如小明是A账户的拥有者,而小明最终有可能因为操作账户A兑换了人民币或者购买什么东西,而被发现其实A就是小明。所以这个匿名性并不是真正的匿名性。

ZCASH怎么结合零知识证明到区块链

为了解决比特币的非匿名问题,零知识证明被ZCASH引入到比特币系统中。那么它是怎么实现匿名性的呢?且看娓娓道来。

假设有一个大池子,里面有一大堆的箱子,每一个箱子都被锁住并且只有一把钥匙可以打开,而且箱子中都有一张纸条,内容格式如下:

“这个箱子值x块钱”

我们暂且叫这个大池子为“大池子账本”。

ZCASH整个交易系统就是这样一个大池子,当A要转给B 10块钱的时候,A会填写一张字条:“这个箱子值10块钱”,然后把这个字条放到一个箱子里,锁上,把箱子和箱子对应的钥匙一起给了B,B拿到箱子和钥匙,用钥匙打开了箱子一看字条的内容是,“这个箱子值10块钱”B就知道他确实得到了10块钱,然后把箱子扔到大池子里,而钥匙他保留了下来,这样B就相当于在“大池子账本”里记录了他拥有了10块钱这个事实。

因为B有钥匙,所以他能知道自己有多少钱,并且在适当的时候花掉这笔钱,但是别人(除了A)只能看到箱子,看不到纸条的内容,并不知道箱子值多少钱,并且也不知道箱子到底属于谁(B有钥匙这件事儿他们不知道)。也就是ZCASH这个“大池子账本”系统,做到了隐藏两个比特币系统不能隐藏的事实:

1、 交易的参与者是谁

2、 交易的金额是多少

如果你想从系统中找出B有多少钱的信息,因为你打不开箱子,甚至都不知道哪些箱子是B的,所以你会一无所获

聪明的读者可能会发现这个系统有一个关键的问题没有解决,A凭啥就可以做一个箱子并且说这个箱子值10块钱?B和别的参与者凭啥相信B这个箱子真的值10块钱,这里就要靠零知识证明的强大力量了。

其实大池子中有一个箱子a是属于A的,A拥有这个箱子的钥匙akey,并且箱子里面的纸条上写着:“这个箱子值10块钱”。当A创建箱子b和对应的钥匙bkey的时候也会创建一个零知识证明的凭条akill,这个凭条的作用就是作废掉箱子a。

这个零知识凭条akill的神器功能就是:

1、所有参与者看到这个akill凭条就知道它对应到大池子里的一个箱子

2、所有参与者看到akill就知道它又生成了一个箱子b,并且箱子的纸条是合法的

3、除了A之外的所有参与者并不知道akill对应的就是a这个箱子

4、akey和akill是一一对应的关系

有点绕,简单来说,就是A在不提供钥匙akey只提供零知识证明凭条akill的情况下证明两件事

1、 自己拥有一把可以打开大池子中某个箱子的钥匙

2、 证明箱子b是合法的

这样就简单了,A把箱子b给B的时候,先把akill扔到了大池子里,让大家看,B看到了akill被放到了大池子里,他就相信b箱子是合法的,他确实值10块钱。

余下最后一个问题?如果A每次都说自己拥有打开某个箱子的钥匙,一笔钱被花了很多次怎么办?

akill和akey是一一对应的,并且akill被放到大池子里了,所有参与者都能看见,如果下次他又想给C一个箱子c并且用akill来证明,因为C看到akill已经在大池子里了,所以C就不相信A了。

PS:这里可能部分人会疑惑另外一个问题,当A扔akill到大池子里,或者B扔箱子到大池子里的时候他们的身份不就暴漏了吗?

这里可以认为他们是偷偷扔的,具体对应到网络上的实现就是B随便找了一台网络设备把箱子b对应的数据上传到区块链上。而想通过这台设备找到B很难,并且B也可以托C上传箱子b的数据。

此文已由作者授权腾讯云+社区发布

搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!

当区块链遇到零知识证明 1相关推荐

  1. 当区块链遇到零知识证明

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 什么是零知识证明 零知识证明的官方定义是能够在不向验证者任何有用的信息的情况下,使验证者相信某个论断是正确的.这个定义有 ...

  2. ING银行推出区块链隐私零知识技术

    点击上方"蓝色字"可关注我们! 暴走时评:ING银行本周在Sibos银行业会议上宣布推出了零知识集成员资格(Zero-Knowledge Set Membership, ZKSM) ...

  3. 区块链基础--工作量证明

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 区块链基础(6)–工作量证明1 我认为技术和共识构建了区块链,那么就由几个问题需要去解决,第一:如果由多个打包节点,那会 ...

  4. 区块链版权登记_利用区块链版权证书证明著作权

    目前,我国版权登记的费用比较高,原创作者需要去版权局申请认证.著作权认证过程不仅烦琐,而且费用很高,给原创作者带来了很多不便.利用区块链技术可以对任何文件,无论是文档.图片还是视频,都成生成特殊的符号 ...

  5. 动手学区块链学习笔记(二):区块链以及工作量证明算法

    引言 紧接上文,在介绍完区块链中的加密解密以及公钥私钥等算法后,本篇开始正式进入区块链概念与一个简单区块链系统的实现过程介绍. 区块链技术介绍 什么是区块链? 区块链,就是一个又一个区块组成的链条.每 ...

  6. Go学习之编码实现区块链 - 【权益证明PoS】

    在上一篇讲到如何快速实现一个简单的区块链,相信朋友们已经对其有了一个基础的认识.接下来,我们在此基础上进行重构,加入当下热议的一项技术,就是权益证明(Proof of Stake)的代码实现.在实现之 ...

  7. 区块链技术——工作量证明

    什么是工作量证明 Proof Of Work,简称POW,即对工作量的证明. 为什么要做工作量证明 **挖矿(计算or工作)**的结果会作为数据加入区块链成为一个区块,完成这个**工作**的人也会获得 ...

  8. 区块链:权益证明与错误的工程思维

    近期,许多权益证明(Proof-of-Stake, PoS)项目涌现出来.以太坊 Casper,卡尔达诺(Cardano)的 Ouroboros,等等.对权益证明协议日益高涨的兴趣可能源于无限扩展区块 ...

  9. 区块链:权益证明设计哲学

    像以太坊(和比特币.NXT.Bitshares等)这样的系统本质上是新型的加密经济组织(cryptoeconomic organisms ) - 完全建立在网络空间里的去中心化.无管辖的机构,由密码学 ...

最新文章

  1. 使用JNDI操作LDAP(5)(转载)
  2. springboot情操陶冶-web配置(四)
  3. 复合主键 复合外键_复合双重错误
  4. html页面滚动导致阴影出现,三种处理滚动穿透问题方案的对比
  5. quartus仿真15:全加器和半加器及如何生成符号文件
  6. 结对编程-四则运算生成
  7. 设计师和程序员-拓展知识关系网
  8. sql server 2016新特性 查询存储(Query Store)的性能影响
  9. poj 3190(贪心)
  10. 2022世界机器人大会开幕,有屋智能主动终止IPO,《2022人工智能发展白皮书》发布,2022可穿戴设备出货量将达3.44亿台
  11. java excel 2007兼容包_office2007兼容包
  12. VTK学习笔记(十九)vtk polydata
  13. win10系统服务器管理器,win10服务管理器,详细教您Win10服务管理器怎样打开
  14. noip 2013 积木游戏
  15. HTML语言源代码实例
  16. Python学习_案例for循环嵌套
  17. 能给客户带来什么价值_您给公司带来什么价值?
  18. CodeForces 19E 仙女fairy
  19. 【敏捷开发每日一贴】用户故事Userstory
  20. IDEA如何自动/手动导入包

热门文章

  1. 一线大厂架构师都推荐的Java零基础大全,附面试答案
  2. 第 2 章 索引优化分析
  3. java获取inputstream_Java:我怎样才能从inputStream获取编码?
  4. java 路由器_一篇文章,了解清楚路由器的各种组网
  5. mysql 5.7.13 log_有关binlog的那点事(二)(mysql5.7.13)
  6. 250分b区计算机专硕,2021兰州大学研究生复试分数线
  7. java与sql心得体会_学习心得
  8. udp怎么保证不丢包_MQ不丢消息,究竟是怎么实现的?
  9. python复杂代码示例_6 个例子教你重构 Python 代码
  10. React函数组件和类组件的区别