`
wx1569632409
  • 浏览: 111718 次
文章分类
社区版块
存档分类
最新评论

白话零知识证明(一)

阅读更多

hi 欢迎来到小秘课堂第二期,今天我们来讲讲白话零知识证明(一)的那些事儿,欢迎主讲人宁志伟

讲师:宁志伟

编辑:vivi

阿里巴巴与四十大盗

阿里巴巴知道打开藏着财宝的山洞的咒语。强盗抓住他,让他说出咒语。

如果阿里巴巴说出咒语,就会因为没有利用价值而被杀死。如果阿里巴巴坚持不说,强盗不会相信他真的掌握咒语,也会杀死他。但阿里巴巴想了一个好办法,他对强盗说:“你们离我一箭之地,用弓箭指着我,你们举起右手我就念咒语打开石门,举起左手我就念咒语关上石门,如果我做不到或逃跑,你们就用弓箭射死我。”

零知识证明过程有两个参与方,一方叫证明者,一方叫验证者。证明者掌握着某个秘密,他想让验证者相信他掌握着秘密,但是又不想泄漏这个秘密给验证者。双方按照一个协议,通过一系列交互,最终验证者会得出一个明确的结论,证明者是或不掌握这个秘密。整个协议有三个要点,即:

 1. 零知识

故事中的阿里巴巴的遭遇并不鲜见。在文学作品中,还有阿诗玛等众多的主人公,都遇到了类似的情况。抛开文学作品中,说了真相就变石头这类神奇的设定。现实中最主要的原因就是怕信息被盗用。因为现实中大量的秘密被用来鉴别用户的身份,如果披露了某个秘密给对方,通常意味着对方有能力冒充你的身份。因此,虽然直接把秘密提供给对方是最简单的验证方式,但是大部分情况下都不能这样做。

一个更具体的例子是在比特币中实现隐私交易

在比特币网络中,用户需要将交易明文广播给所有矿工,由他们来校验交易的合法性。但是有些情况下,基于隐私的考虑,又不想把交易的具体内容公布出来。这就形成了一对矛盾。

解决这个矛盾的关键思路是:校验一个事件正确与否,并不需要验证者重现整个事件

比如,验收一款软件,通常只要看最终测试结果是否通过即可,并不需要把整个软件开发过程的每一个细节都重放一遍。阿里巴巴给强盗的提议,其实也是类似一个验收测试。对于比特币的例子,一笔转帐交易合法与否,其实只要证明三件事

1. 发送的钱属于发送交易的人
2. 发送者发送的金额等于接收者收到金额
3. 发送者的钱确实被销毁了

整个证明过程中,矿工其实并不关心具体花掉了多少钱,发送者具体是谁,接受者具体是谁。矿工只关心系统的钱是不是守恒的。

zcash 就是用这个思路实现了隐私交易。

 2. 测试方式

上一节讲到证明者面临的困境,然后提出了一个验收测试的解决方案。接下来的问题就是测试的方式。

稍有常识就可以知道,测试不能完全由证明者给出。毕竟不能让一个人既当运动员又当裁判。通常这种情况下会采用 cut and choose 的策略。这个策略最简单的例子就是两人分粥。无论谁来分粥,都会给自己分的多,解决方法就是一个人分,另外一个人先挑。

故事里也是采用了这样的策略,强盗(验证者)以一个挑战者的姿态,每轮提出一个问题,验证者做出回应。

虽然验证者有瞎蒙的可能,但是多轮交互下来,这种可能会越来越小。这样的证明是一种交互的证明方式。双方需要实时交互,交流信息。对于比特币隐私转帐来说,这种证明方式就不太好了。

一个问题是,交互方式是一对一的,发交易的人要向所有矿工证明交易是合法的,一个一个证明效率太低了。另外一个问题是,既然需要交互,就要求证明过程中双方都在线,这个也会给用户代码很大的不便。

最好是有一种非交互式的证明方式,只要证明者给出了证明,后续就不再需要交互,任何人都可以验证这个证明是否正确。但是这明显跟我们一开始说的不能完全由证明者给出矛盾。

一个解决方案就是用公共参考串 Common Reference String

证明者给出的证明里面虽然不像 cut and choose 策略一样,由验证者挑选问题来决定。但是也不是完全由证明者自己来决定,而是根据事先定好的一个种子产生的随机序列决定的。这样就相当于有一个中立的第三方来出题目,同样也能达到效果。当然前提是这个第三方确实是中立的。

就像分粥的例子,一个人先分,但不是另外一个人先挑,而是中立第三方产生一个随机数来决定谁拿哪碗粥。同样可以保证结果尽量公平。zcash 系统也是采用了这样的方案。详细信息可以搜索 zcash trust setup。

 3. 测试内容

上一节其实讲的是验证者的困境。证明者天然具有信息优势,验证者必须要主动出击,才能防止被证明者欺骗。但其实还有一点是验证者自己需要注意的。

那就是测试题目的难度要有区分度

就像一个软件项目的验收测试一样,不能说只是编译通过,跑起来不会 crash 就算验收通过了。一定要让真正掌握秘密的证明者通过的难度不大,而假的证明者无论有多强大的算力也无法蒙混过关。

阿里巴巴故事里的验证方法,其实是有漏洞的。

比如阿里巴巴并不真的掌握咒语,而是跟一个真正掌握咒语的人事先串通好。强盗举手之后,阿里巴巴偷偷把要不要开门的信息传递给暗中真正掌握咒语的人,由他来念咒语开门,就把强盗给骗过去了。所以强盗还应该增加难度,限制阿里巴巴做除了念咒语之外其他多余的动作。

在计算机领域,一般做法是把原始问题映射到NP问题。验证者只要验证证明者给出的NP问题的解即可,这个计算量需求不大。如果某人掌握秘密,能解原始问题,那么转换一下就可以解对应的NP问题。如果不掌握秘密,绕过原始问题,直接暴力求解NP问题,一般可以认为是不可能的。

zcash 使用的 NP 问题是 QAP,更详细的内容可以参考 zcash 的一系列博客 https://z.cash/blog/snark-explain.html

以上三点,其实刚好跟零知识证明的三条性质对应:

(1)完备性。如果证明方和验证方都是诚实的,并遵循证明过程的每一步,进行正确的计算,那么这个证明一定是成功的,验证方一定能够接受证明方。
(2)合理性。没有人能够假冒证明方,使这个证明成功。
(3)零知识性。证明过程执行完之后,验证方只获得了“证明方拥有这个知识”这条信息,而没有获得关于这个知识本身的任何一点信息。

 关于讲师

宁志伟(Rink Ning)

首席架构师宁志伟先后服务于华为,阿里巴巴,有超过10年的系统开发经验,资深区块链专家

Github:https://github.com/rink1969

秘猿科技 repo:https://github.com/cryptape

连接开发者与运营方的合作平台 CITAHub:https://www.citahub.com/

有任何技术问题可以在论坛讨论:https://talk.nervos.org

转载于:https://my.oschina.net/u/3919161/blog/2999283

分享到:
评论

相关推荐

    零信任-各大安全厂商零信任解读集锦-44份PDF文件

    零信任是一种网络安全模型,它基于“永不信任,始终验证”的原则,强调在任何情况下都应对网络内部和外部的访问请求进行严格的验证。这一概念最早由Forrester Research在2010年提出,如今已被全球各大安全厂商广泛...

    零信任资料合集.zip

    4. **培训教材**:这部分资料可能是为培训员工理解和执行零信任策略而设计的,涵盖了理论知识、操作流程和实战技能。通过这些教材,员工可以更好地理解零信任的重要性,学习如何在日常工作中实施零信任原则。 5. **...

    白话C#之第一话 初学C的看看吧

    本篇“白话C#之第一话”将带初学者走进C#的大门,理解其基础概念和语法特性。 1. **变量与数据类型**:在C#中,变量是用来存储数据的容器,我们需要先声明变量的类型,如int(整型)、string(字符串)或bool(布尔...

    白话c++(绝对经典)

    《白话C++》是一本深受读者喜爱的编程著作,由中国的编程大师撰写,旨在以通俗易懂的方式解析复杂的C++编程语言。作者通过简洁幽默的语言,使得这本教程不仅适合初学者,也对有一定经验的程序员有很高的参考价值。在...

    零信任实战白皮书.pdf

    系统介绍零信任产生背景、零信任原则、标准化进展、零信任与传统边界安全理念的比较、零信任参考架构、零信任实现方案、零信任应用场景、零信任落地指引、行业客户案例等内容

    子平真诠白话解释.doc

    子平真诠白话解释 ...子平真诠白话解释对《子平真诠》书中语言的白话形式记录,提供了对十天干十二地支、阴阳五行、木火土金水五行、命理和易经的深入解释和分析,为读者提供了一个系统的学习平台。

    白话C++编程(有用)

    "白话C++编程"这个资源显然旨在以通俗易懂的方式介绍C++编程的基础知识,这对于初学者或者需要巩固基础的开发者来说是非常有价值的。以下是基于这个主题的详细知识点解释: 1. **C++简介**:C++是C语言的一个扩展,...

    白话C++

    白话 C++ 第二学堂 适合入门级C++的学习,比较全的C++细节知识

    MoreWindows白话经典算法之七大排序第2版(高清)

    本书《更多Windows白话经典算法之七大排序第2版》是一部深入浅出讲解七种经典排序算法的著作,旨在帮助读者理解并掌握冒泡排序、直接插入排序、直接选择排序、希尔排序、归并排序、快速排序以及堆排序等基本概念和...

    白话windows编程.rar

    《白话Windows编程》是一本面向初学者和中级程序员的指南,旨在用通俗易懂的语言讲解Windows操作系统下的程序开发技术,主要关注C++语言在Windows平台的应用。这本书深入浅出地介绍了如何使用C++进行Windows API编程...

    白话windows编程

    ### 白话Windows编程知识点详解 #### 一、消息的概念 **消息**是Windows操作系统中一个非常核心且基础的概念,它是程序之间以及程序内部不同组件之间进行通信的主要方式。简单来说,消息是一种软件机制,用来通知...

    白话C++ word版

    ### 白话C++ 关键知识点解析 #### 1. 计算机基本概念:硬件与软件 **硬件**:指的是计算机系统中的物理组件,包括中央处理器(CPU)、内存(RAM)、硬盘驱动器(HDD)、输入输出设备(如键盘、鼠标、显示器)等。...

    《2008版 白话c++》

    《2008版 白话C++》是一本针对初学者编写的C++教程,旨在帮助非软件专业背景的读者快速入门编程世界。作者采用通俗易懂的语言,摒弃了复杂的术语,使得C++这一高级编程语言变得更加平易近人。这本书的特色在于其深入...

    白话c++.rar

    《白话C++》是一本面向C++初学者的通俗易懂的教程,它旨在以简单、生动的方式介绍C++编程语言的基础知识。C++是一种强大的、通用的、面向对象的编程语言,广泛应用于系统软件、应用软件、游戏开发、设备驱动等各个...

    白话C++.,非常好的C++入门级教程

    《白话C++》是一本非常适合初学者的C++教程,其主要目标是用通俗易懂的语言介绍C++编程的基础知识,帮助读者快速进入C++的世界。C++是一种强大而灵活的面向对象编程语言,广泛应用于系统软件、游戏开发、应用软件...

    《白话C++》教程章节完整版

    《白话C++》教程是一本面向初学者和有一定编程基础的人士的C++学习资料。本书以通俗易懂的语言,生动有趣的例子,深入浅出地解析了C++这一强大的编程语言,使得学习者能够更轻松地掌握C++的基础与进阶知识。 C++是...

Global site tag (gtag.js) - Google Analytics