第十六讲零知识证明技术
- 格式:ppt
- 大小:298.50 KB
- 文档页数:52
零知识证明是零信任吗导语虽然零知识证明和零信任这两个词,都带有“零”,都与“信任”有关,但并不是一回事。
两者本质上都要增强「信任」,但在增强「信任」的过程中,零知识证明强调不泄露知识;零信任强调不要过度授权。
简单说,零知识是为了隐藏知识;零信任是为了控制信任。
零知识证明解决了信任与隐私的矛盾:既通过「证明」提升「信任」,又通过「零知识」保护「隐私」。
是两全其美的方案。
探索零知识证明的过程,可以探索到安全的本质。
安全之终极定义,不是启发式的CIA三性,而是采用形式化验证的可证明安全——上帝(“模拟者”)与科学(数学、计算复杂度)完美结合的推演过程。
一、了解零知识证明1、零知识证明的定义零知识证明(ZKP,Zero-Knowledge Proof)的定义为:证明者(prover)能够在不向验证者(verifier)提供任何有用信息的情况下,使验证者(verifier)相信某个论断是正确的。
根据定义,零知识证明具有以下三个重要性质:(1)完备性(Completeness):只要证明者拥有相应的知识,那么就能通过验证者的验证,即证明者有足够大的概率使验证者确信。
(关于这里提到的“概率”,详见后面的“色盲游戏”)(2)可靠性(Soundness):如果证明者没有相应的知识,则无法通过验证者的验证,即证明者欺骗验证者的概率可以忽略。
(3)零知识性(Zero-Knowledge):证明者在交互过程中仅向验证者透露是否拥有相应知识的陈述,不会泄露任何关于知识的额外信息。
从定义中,还可以提取到两个关键词:“不泄露信息”+“证明论断有效”。
再浓缩一下就是:隐藏+证明。
所以,零知识证明的核心目的是:隐藏并证明需要它隐藏的各类秘密。
(感觉很矛盾是吧)2、零知识证明的源头零知识证明是1984年由Goldwasser、Micali、Rackoff三个人提出,论文题目是《The Knowledge Complextiy of Interactive Proof Systems》(《交互式证明系统中的知识复杂性》)。
详解:零知识证明(ZKPs)、类型、及其优劣势零知识证明(Zero—Knowledge Proof,ZKPs)允许用户既不泄露敏感信息,又可向他人证明自己知悉关键数据或拥有其所有权,例如钱包的私钥。
1. 了解 ZK 证明在上篇关于以太坊扩容方案的文章中,我们提到了零知识证明(Zero—Knowledge Proof,ZKPs)是一种证明方法,通过这种方法,一方(证明者, prover )可以在不透露任何实际信息的情况下,向另一方(验证者,verifier )证明它知道一个秘密或一个声明是真实的。
放到加密应用中,ZKPs 这种加密方法可在证明用户拥有钱包私钥的情况下不泄露私钥信息,从而保护了数据隐私。
例如你的交易数据对于系统来说是透明可追踪的,但采用零知识证明可以保护你的信息不会被贸然公开,某某的钱包有多少个比特币,某某买了多少个比特币之类的信息可以变成选择性隐私。
具体关于这类证明过程是怎么实现的?我们要先从受信任初始化阶段这个起点讲起。
许多分布式计算和密码学协议都设计了一个初始化阶段,我们称第一个阶段为初始化阶段(setup phase),第二个阶段为主阶段(main phase)。
主阶段通常会执行许多重复的任务,而初始化阶段只需执行一次,就能开启重复运行许多实例的主阶段。
对于一个多阶段协议(multi-phase protocol)而言,受信任初始化阶段(trusted setup phase)设置有其特殊性。
在受信任初始化阶段,密钥生成器会获取一个秘密参数和一个程序,然后生成两个可用的公钥,一个用于创建证明,另一个用于验证证明。
这两个公钥只需为给定程序生成一次的参数,后续用户则只需使用公共参数并相信秘密参数密钥的创建者会诚实行事并尽力保护他们。
这里就产生了一个辩证性的漏洞,因为知悉秘密参数便可生成假证明,从而欺骗验证者,因此秘密参数在受信任初始化阶段中其实有潜在安全隐患。
2. 零知识证明的类型ZKPs 有交互式和非交互式两种。
我们表示知识的零知识证明是一个证明者通过使一个论述的P 满足于PoK{(a1,a2......an)|P(a1,........an)}使得一个核实者信服。
这个概念是从Camenish和Stadler上汲取过来的(修改他们的理论使得PoK代替PK)。
B、主要的架构我们把知识的零知识证明当做是在构造块以及以单独的模块来描述它们。
知识的零知识证明显示这里的非交互式证明在随机预言模块是安全的。
在这个安全的证明里,我们表示这些协议的交互式模式的使用是不需要依靠随机预言模块并且能够使零知识使用协议的正常执行,这也就意味着零知识证明的顺序执行。
当交互式的知识的零知识证明用Fiat-Shamir 启发式理论在随机预言模式下实例化和协议在同时执行时,我们的证明就因为技术的原因被瓦解了,但是我们任然将我们的证明当做是为了执行的安全儿做的启发式的证明。
构建(spk,ssk,σ)服务器在Zq集合中选择x,y,z以及使得X=g^x,Y=g^y,Z=g^z.这个服务公共秘钥是spk=(q,G,GT,g, X,Y,Z),服务的私有秘钥是ssk=(x,y,z).服务器的状态σ是由一对集合组成。
它们初始化状态下是为NULL。
就像这样σ=({},{})。
我们把第一个组件成为σ.cur以及第二个组件称为σ.next.在所有的组件中,cur=|σ.cur|,next=|σ.next|。
注册:(φ,sk)←<RegS(ssk),RegC(spk)>1、客户端选择从Zq处选择d,r.用它们来构建M=(g^d)*(Z^r)并且将他们送到服务器端。
2、这个客户端以证明着的角色以及服务器端以核实者的角色存在与知识的零知识证明。
PoK{(d,r)|M=(g^d)*(Z^r)}.如果上述证明失败,则注册失败。
3、服务器端从Zq*产生一个a值,并且使得A=g^a.然后它形成了这个注册号s=(A,B=A^y,Zb=Z^ay(=B^z),C=(A^x)*(M^axy)并且将产生的注册号返回给客户端。
DCWTechnology Analysis技术分析79数字通信世界2023.061 零知识证明的概念零知识证明是某种权益的拥有者,即知道问题的解w 的人在不泄露任何有关问题的相关信息的情况下,能证明其确实掌握有w 。
1.1 注解我们有两个角色方,证明者(简称P )和验证者(简称V ),以及对两个角色方来说不是秘密的NP 关系R 、问题x 及答案w 这三个对象满足公式:R (x ,w )=1 (1)证明者知道问题的答案x ,他需要向验证者证明他知道问题x 以及问题的答案w ,但不泄露关于w 的任何信息。
以上描述等价于证明满足以下三个属性:(1)完备性。
此证明完成后能够让验证者确信证明者没有说谎,或者说证明者确实握有问题x 的某个解w 。
(2)合理性。
证明者不拥有x 的某个解w ,则不能令验证者相信他拥有问题x 的某个解。
(3)零知识性。
证明过程不能泄露关于w 的任何信息。
下面给出零知识证明这一概念的较为数学化的定义。
1.2 定义考虑等式R (x ,w )=1,这里x 是一个数学问题,w是该问题的未知的解,也即w 满足x 所定义的若干关系,R 是判断w 是否满足这些关系的判定程序,我们还要求R (x ,w )=1是一个NP 问题,即求解w 很难,但验证w 是该问题的解是容易的。
1.3 注解在这里,容易和困难的界定是由算法的时间复杂度决定的,即能否能在多项式时间内解决问题,即算法的时间复杂度是否低于多项式的维度。
对早期的零知识证明的协议来说,很多是必须要求证明是某种交互输入,例如下节给出的三色问题的一个零知识证明方案。
这种交互式证明是从概率角度零知识证明研究综述张正铨1,胡 森1,莫晓康 1, 2(1.中国科学技术大学,安徽 合肥 230026;2.国科创新研究院(厦门)有限公司,福建 厦门 361021)摘要:文章论述了密码学的新领域——零知识证明的概念、方法、算法、应用,以及其在区块链领域的若干应用。
深⼊浅出区块链——零知识证明引⼦ 隐私保护在区块链领域越来越受到重视,在隐私保护的种种⼿段中,零知识证明脱颖⽽出。
那么零知识证明到底是什么东西呢? ⾸先,我们抛出⼀个问题:如何在不说出秘密的情况下,让对⽅知道你已经知道了这个秘密?例⼦1:⽤户注册 ⽤户在系统注册时,系统不会保存⽤户的密码明⽂,⽽是保存了密码的哈希值;⽤户在登录系统时,只需要输⼊注册时的密码,系统会根据⽤户输⼊密码产⽣的哈希值与系统数据库保存的哈希值进⾏⽐对。
如果⼀致,则系统认为——当前登录⽤户知道该账号的密码。
这样,⽤户不需要告诉⽹站密码,就能证明⾃⼰的⾝份。
这其实就是⼀种零知识证明。
例⼦2:在校⼤学⽣实习 A要去公司实习,公司要求A在校所有功课没有挂科,才有资格加⼊公司。
A虽然所有功课都没有挂科,但都在61、62左右徘徊;A不想让公司看到⾃⼰的成绩单,于是A委托学校开了⼀个证明:证明A在校所有功课全部及格。
并交到了公司,加⼊了公司。
这样,A既没有暴露⾃⼰的确切考试成绩,⼜向公司证明⾃⼰满⾜要求。
这其实就是零知识证明。
如何从字⾯解释“零知识证明”? 零知识证明:零知识,即在证明的过程中不透露任何内情。
通俗的来讲,就是既证明了⾃⼰想证明的事情,同时透露给验证者的信息为“零”。
什么是零知识证明? 零知识证明(Zero—Knowledge Proof),是由S.Goldwasser、S.Micali及C.Rackoff在20世纪80年代初提出的。
它早于区块链诞⽣,但由于区块链,它被⼤家所熟知。
它指的是证明者能够在不向验证者提供任何有⽤的信息的情况下,使验证者相信某个论断是正确的。
零知识证明可以分为交互式和⾮交互式两种。
交互式零知识证明协议的基础是交互式的。
它要求验证者不断对证明者所拥有的“知识”进⾏⼀系列提问。
证明者通过回答⼀系列问题,让验证者相信证明者的确知道这些“知识”。
然⽽,这种简单的⽅法并不能使⼈相信证明者和验证者都是真实的,两者可以提前串通,以便证明者可以在不知道答案的情况下依然通过验证。
零知识证明技术的实际应用与安全性分析零知识证明技术是一种用于验证某个声明的正确性,同时不泄露任何有关该声明的其他信息的密码学工具。
该技术可被广泛应用于许多领域,例如密码学、网络安全、隐私保护和区块链等。
本文将探讨零知识证明技术的实际应用,并分析其安全性。
一、实际应用1.密码学领域:零知识证明技术可用于验证公钥加密方案的安全性。
例如,可以证明一种加密算法的秘钥长度满足安全要求,而不泄露该算法的具体细节。
2.网络安全:在网络通信中,确保通信的安全性非常重要。
零知识证明技术可以用于验证用户的身份,从而防止恶意用户的欺骗行为。
通过使用零知识证明技术,服务器可以证明其拥有某个秘密,而不需要直接揭示该秘密。
3.隐私保护:在很多情况下,用户不希望将其个人信息披露给他人,同时又需要验证某些声明的真实性。
零知识证明技术可以满足这一需求。
例如,在数字身份验证中,用户可以使用零知识证明技术证明自己的年龄在某个范围内,而不需要透露具体的年龄。
4.区块链:区块链是一种去中心化的分布式账本技术,而零知识证明技术可以用于增强其隐私性和安全性。
通过使用零知识证明技术,参与方可以证明自己满足某个条件,而不需要公开其具体数据。
这在一些隐私敏感的应用中尤为重要,例如匿名交易和身份验证。
二、安全性分析1.完备性:零知识证明技术必须保证如果声明是正确的,那么验证者相信该声明的概率非常高。
这意味着证明者必须能够生成一个有效的证明,并将其传递给验证者。
从理论上来说,完备性要求能够通过一个无限容量的计算设备进行检查。
2.可靠性:零知识证明技术应该确保如果甲方是一个诚实的证明者,那么乙方不会被欺骗相信一个错误的声明。
也就是说,诚实的证明者不会能够通过生成错误的证明来欺骗验证者。
3.零知识性:零知识证明技术应该确保验证者不能从证明者提供的信息中获得任何与声明相关的附加信息。
也就是说,验证者在验证声明的真实性时只能得知声明的真实性,而不能获得与其相关的其他信息。
区块链技术中的零知识证明与隐私保护引言区块链技术作为一种新兴的分布式账本技术,已经得到了广泛的应用和关注。
它可以帮助解决许多传统金融系统中存在的问题,如信任和透明度。
然而,随着区块链技术的发展,隐私保护和安全性问题也开始引起越来越多的关注。
在这种情况下,零知识证明技术应运而生,为区块链技术的隐私保护提供了一种全新的解决方案。
本文将从零知识证明的基本概念、技术原理和应用场景,探讨零知识证明在区块链技术中的作用以及对隐私保护的重要性。
一、零知识证明的基本概念零知识证明最早由美国加州大学的计算机科学家Shafi Goldwasser、Silvio Micali和Charles Rackoff在1985年提出,指的是一种可以证明某一事实的正确性,却不需要透露具体证明的内容的证明方式。
简而言之,就是证明者可以证明自己知道某一信息,但并不需要透露具体的信息内容。
这种证明方式可以在不泄漏敏感信息的前提下进行认证和交易。
零知识证明除了具有高度的隐私保护特性,还具有以下几个基本特点:1.完备性:零知识证明要求证明者能够在没有任何失实信息的情况下向验证者证明其所宣称的陈述是正确的。
2.可靠性:零知识证明必须能够在合理的时间内得到验证者的认可,验证者不能拒绝合理的正确证明。
3.零知识:证明者可以证明自己知道某一信息的正确性,但不需要透露具体的信息内容。
4.互操作性:零知识证明必须能够适用于不同的场景和应用,而不需要对其进行修改。
二、零知识证明的技术原理零知识证明的实现涉及到很多密码学算法和技术,其中最为重要的是零知识证明系统的设计。
在一个典型的零知识证明系统中,通常包括三个主要角色:证明者(Prover)、验证者(Verifier)和挑战者(Challenger)。
1.证明者(Prover):证明者是一个想要向验证者证明某一信息的正确性的实体。
证明者通常会使用密码学算法和协议,来产生一组信息,向验证者证明自己知道某一信息,但并不需要将具体信息内容透露给验证者。