Qtum研究院:隐私元年,金融巨头们关注的零知识证明是什么?

2023-10-30 19:30

本文主要是介绍Qtum研究院:隐私元年,金融巨头们关注的零知识证明是什么?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


前言

据Coindesk 2018年10月21日报道,荷兰国际银行(ING Bank)在Sibos银行业会议上宣布推出“零知识集会员”(Zero-Knowledge Set Membership,ZKSM)解决方案,促进区块链隐私向更高层次发展。

 

区块链技术一直处于金融巨头们的灼热目光之下,类似联盟链的共享账簿帮助银行之间节省了大量的成本,但他们依然想要保护隐私数据,因此零知识证明是金融机构的一个可能帮助实现这一愿景的工具。Zcash首先提出一种零知识证明的实现方式,通过这种方式银行可以在不泄露他们的信息或损害客户机密的情况下将资产转移到这些网络上。

 

如何实现交易过程完全匿名?匿名交易的实现依赖于一种叫做“零知识证明”的密码学手段,本文为你清晰讲述ZCash的交易原理,以及零知识证明是交易过程中的运用。

 

1

什么是零知识证明?

20世纪80年代MIT首次提出零知识证明——证明方A向验证方B证明某事的真实性的方法,除了特定具体陈述的事实以外,不透露任何额外的信息。例如登录网站时,现如今通用做法是web服务器储存了原有密码哈希值,用户在登录时进行哈希计算结果比对,但是这种方式会使得服务器遭受攻击时,用户的密码也就暴露无疑。如果能够实现零知识证明,就可以在不知道用户密码的前提下,只进行随机验证即可登录,即使服务器被攻击,由于并未存储用户明文密码,有效的保证用户安全。

 

基本的零知识证明是交互的,需要验证方B向证明方A不断询问一系列有关其所掌握的数据的相关问题,如果均能够给出正确回答,大概率证明方A的确拥有相关数据。例如某人声称知道一个数独难题的答案,一种零知识证明的方式是验证方随机指定这一次按列、按行还是按九宫格来检测,每次检测不需要看到数字摆的具体位置,只需要检测出来是否包含了1-9个数字即可,只要验证的次数足够多,那么可以大概率相信证明方是知道数独题目的解的。但是这样简单的方式还不能让人相信证明方A和验证方B均没有作假,在数独的案例中,两者有可能事先串通好,从而使得证明方A在不知道答案的前提下通过验证。如果他们想让第三方信服,验证方B必须也要证明自己每次的检测方案是随机的且自己没有和证明方A串通。

 

非交互式的零知识证明顾名思义,不需要互动过程,避免了串通的可能性,但是可能会额外需要一些机器和程序来决定试验的序列:例如在数独的例子中,通过程序的方式来决定哪一次按行、哪一次按列来检测,但是这个试验序列必须保密,否则验证方预先知道了试验的序列就有可能利用这个信息,提前准备,在并不知情下通过验证。

 

零知识证明的随机验证可以概括为两类:

  • 事实类陈述:例如“证明一个数N是合数”

  • 数据呈现陈述:例如“知道N的因式分解”

 

但并不是所有的问题都有零知识证明的加密方案,Goldreich, Micali 和 Wigderson 给出了理论上存在零知识证明解的有效范围。他们发现对于在多项式时间内可以验证解的决策问题(问题的答案仅为是/否),存在已知的零知识证明方案。只需要在这样问题中找到想要证明的论述,并转化为图的3-着色问题的一个实例,那么就可以利用已有的协议实现零知识证明。

 

 

2

区块链中的零知识证明应用

实际零知识证明的技术涉及非常深入的数学与密码学基础知识,因此为了更加形象的讲述零知识证明的交易过程,我们请到了数字货币界最著名CP:Alice和Bob,以Qtum的交易为例演示零知识证明如何运用在区块链中。

 

交易场景:Alice转1个QTUM给Bob

 

转账前,Alice要事先准备1个QTUM。为了方便理解,我们把Alice准备转出的这1个QTUM看成一张面额为1个QTUM的权益票据。

从这张票据已知:

1. Alice确实有1个QTUM

2. Alice使用私钥证明Alice拥有对这笔资产转账的权力。

票据的面额和转账权都已经明确,Alice就可以给Bob转账了。转账的原理很简单,就是给Bob新建一张一样的票据,证明Bob拥有了1个QTUM。同时撕掉Alice手中那张的票据,通过这样的方式,实现资产所有权的转移。

 

 

以上逻辑其实不难理解,与日常生活中的银行转账是一个道理。通过银行转账,我们在交易时不必对实物货币进行转移,而是以银行记账的方式,实现“资产所有权”的转移。

 

ZCash的转账原理与QTUM一样,ZCash的交易过程也是 “资产所有权”的转移。继续沿用票据的比方。

 

交易场景:Alice转1个ZEC给Bob。

 

转账前,Alice创建一张面额为1个ZEC的票据。

 

能从该凭证中已知:

1. Alice确实拥有1个ZEC,Alice使用私钥证明Alice拥有对这笔资产转账的权力。

2. 这张“凭证”上多了一串随机数,用符号 r 表示。这串随机数的作用好比发票据代号,用来唯一识别该票据。Alice的票据代号为r1。明确以上信息,Alice就可以进行ZEC转账了。

 

1、QTUM一样,要先为Bob新建一张“票据”。Bob的票据代号(r2)与Alice的票据代号(r1)不相同。

 

 

2、新的“资产所有权”生成的同时,必须要想办法销毁原来的“资产所有权”。即必须想办法让Alice手中的“票据”失效。与QTUM的“直接撕毁”不同,而是采用“备注作废”的手段,达到同样的效果。怎么理解呢就是在不对原先票据作任何处理的前提下,新建一个作废文件列表,录入需要作废的“发票据代号”。

 

 

从上图可以看出,原先的Alice持有的票据仍旧存在,并没有消失,只是这张票据已经被记入“作废列表”。在确定资产所有权时要同时读取两个列表的信息,能确定Bob拥有资产所有权的判断方法是:作废列表中不存在Bob所持“票据”的代号。

 

可是为什么要这样设计呢?其实这样设计的目的是为了在交易过程中运用 “零知识证明”。

 

我们再回顾QTUM和ZCash的例子。

 

Alice要向Bob转一个单位的数字货币(QTUM/ZEC),即Alice要向Bob转移一个单位的资产所有权。这时有以下两个方法:

 

(一)QTUM:Alice拥有一张1QTUM的票据,要转账给Bob时,先给Bob新建一张1QTUM的票据,同时当着Bob的面将自己原先的票据撕毁。

 

(二)ZCash:Alice拥有一张1ZEC的票据,要转账给Bob时,先给Bob新建一张1ZEC的票据,然后在一张约定有效的作废列表中,记录下Alice的发票据的代号,证明Alice的票据已经失效。

 

ZCash的方法属于零知识证明。整个交易过程中,Bob并没有见过Alice的票据,但是还是实现了资产所有权的转移。在ZCash的整个交易系统中,Alice和Bob的交易还有其他见证者,即负责记录交易信息的矿工。同样道理,矿工也不必看到Alice的票据,只要能确定代号为r1的票据已经作废了就行。

 

进一步解释ZCash的匿名交易过程了。还是那个例子:Alice转1 个ZEC给Bob。这个例子中有涉及到的角色有转账双方Alice和Bob,以及记账者(矿工)。

首先是Alice和Bob都有了一张票据。

这两张“票据”都是有效的。Alice的票据开始就存在于整个ZCash网络,Bob的票据在生成后也会被广播到全网。为了隐藏交易者信息,要对两张票据进行加密处理,信息都是被加密的,可以通过拥有者的私钥解密。

 

同时,因为资产只能有一份,所有矿工手里还有一个作废列表。Alice要同时广播自己的“发票代号”,录入作废列表中。发票代号也是加密的。所以矿工们能看到的信息其实是这样的。其中Alice的票据是原先存在的,Alice的票据代号r1和Bob的票据是在交易过程中被Alice广播的。

矿工们能获取的信息相当有限,但是这并不影响对矿工对交易有效性的判断。

 

判断的逻辑相当简单:矿工拿到Alice给的票据代号r1,去作废列表中检索,假如作废列表中已经存在r1,则证明r1所对应的的票据早已失效;若作废列表中并不存在r1,则证明r1对应的票据仍旧有效,此时矿工把r1录入作废列表中,把新生成的票据录入票据列表中。所以记账的过程就是对原有票据登记失效,并存入现有票据票据的过程。

 

在这个过程中,我们不难发现,每笔交易矿工能接收到的东西只有一个发票据代号,和一张新的发票据,而且这两样东西都是被加密的。所以矿工并不知道转账双方是谁,也不知道转账金额是多少。

 

现有区块链上的交易中,除了使用地址来替换交易双方的真实身份,使得交易具有部分匿名性以外,发送、接收地址和金额都是已知的,别人有可能通过网络上的各种信息、和现实世界发生的交互记录等将地址和真实身份对应起来,也因此具有隐私暴露的隐患。

 

零知识证明可以在不透露花费了具体哪个货币的基础上,验证出你的确花了这笔钱。为了将这笔钱转给他人,逻辑上需要我们使得这枚隐私币不能再被别人花费,隐私币的办法是大家共同维护一个作废列表,存着所有已经花费的隐私币的序列号。

 

矿工在验证这笔花费交易时运用零知识证明的方法,不需要知道具体花掉哪一个隐私币,也可以验证隐私币的序列号是否在作废列表里。由于花费交易并没有输入地址和签名的信息,整个交易过程中,矿工也并不知道这个隐私币的来源,因此也就难以对交易历史进行分析而获取用户身份。

 

 

参考资料

  1. Ian Allison ,https://www.coindesk.com/ing-bank-launches-simplified-zero-knowledge-proofs-for-blockchain-privacy/

  2. https://blog.cryptographyengineering.com/2014/11/27/zero-knowledge-proofs-illustrated-primer/

  3.  老钱,《一个数独引发的惨案:零知识证明(Zero-Knowledge Proof)》

  4. http://www.sohu.com/a/224915382_117959

  5.  Zcoin中文社区,《Zcoin和Zcash: 相似性和不同处》.

  6. http://www.zcoinchina.org/zcoin-and-zcash

  7. 零币技术白皮书《一种通过使用零币协议(zerocoin protocol)来保障账务隐私的加密货币》

  8. Christian Reitwiessner,《zkSNARKs in a nutshell》

  9. https://blog.ethereum.org/2016/12/05/zksnarks-in-a-nutshell/

  10. Matthew Green,《Zero Knowledge Proofs: An illustrated primer》

     

这篇关于Qtum研究院:隐私元年,金融巨头们关注的零知识证明是什么?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/310080

相关文章

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【Python知识宝库】上下文管理器与with语句:资源管理的优雅方式

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、什么是上下文管理器?二、上下文管理器的实现三、使用内置上下文管理器四、使用`contextlib`模块五、总结 前言 在Python编程中,资源管理是一个重要的主题,尤其是在处理文件、网络连接和数据库

dr 航迹推算 知识介绍

DR(Dead Reckoning)航迹推算是一种在航海、航空、车辆导航等领域中广泛使用的技术,用于估算物体的位置。DR航迹推算主要通过已知的初始位置和运动参数(如速度、方向)来预测物体的当前位置。以下是 DR 航迹推算的详细知识介绍: 1. 基本概念 Dead Reckoning(DR): 定义:通过利用已知的当前位置、速度、方向和时间间隔,计算物体在下一时刻的位置。应用:用于导航和定位,

【H2O2|全栈】Markdown | Md 笔记到底如何使用?【前端 · HTML前置知识】

Markdown的一些杂谈 目录 Markdown的一些杂谈 前言 准备工作 认识.Md文件 为什么使用Md? 怎么使用Md? ​编辑 怎么看别人给我的Md文件? Md文件命令 切换模式 粗体、倾斜、下划线、删除线和荧光标记 分级标题 水平线 引用 无序和有序列表 ​编辑 任务清单 插入链接和图片 内嵌代码和代码块 表格 公式 其他 源代码 预

图神经网络(2)预备知识

1. 图的基本概念         对于接触过数据结构和算法的读者来说,图并不是一个陌生的概念。一个图由一些顶点也称为节点和连接这些顶点的边组成。给定一个图G=(V,E),  其 中V={V1,V2,…,Vn}  是一个具有 n 个顶点的集合。 1.1邻接矩阵         我们用邻接矩阵A∈Rn×n表示顶点之间的连接关系。 如果顶点 vi和vj之间有连接,就表示(vi,vj)  组成了

JAVA初级掌握的J2SE知识(二)和Java核心的API

/** 这篇文章送给所有学习java的同学,请大家检验一下自己,不要自满,你们正在学习java的路上,你们要加油,蜕变是个痛苦的过程,忍受过后,才会蜕变! */ Java的核心API是非常庞大的,这给开发者来说带来了很大的方便,经常人有评论,java让程序员变傻。 但是一些内容我认为是必须掌握的,否则不可以熟练运用java,也不会使用就很难办了。 1、java.lang包下的80%以上的类

JAVA初级掌握的J2SE知识(一)

时常看到一些人说掌握了Java,但是让他们用Java做一个实际的项目可能又困难重重,在这里,笔者根据自己的一点理解斗胆提出自己的一些对掌握Java这个说法的标准,当然对于新手,也可以提供一个需要学习哪些内容的参考。另外这个标准仅限于J2SE部分,J2EE部分的内容有时间再另说。 1、语法:必须比较熟悉,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息知道是什么样的语法错误并且知道

Java预备知识 - day2

1.IDEA的简单使用与介绍 1.1 IDEA的项目工程介绍 Day2_0904:项目名称 E:\0_code\Day2_0904:表示当前项目所在路径 .idea:idea软件自动生成的文件夹,最好不要动 src:src==sourse→源,我们的源代码就放在这个文件夹之内 Day2_0904.iml:也是自动生成的文件,不要动 External Libraries:外部库 我这