免责声明:本公众号发布的文章均转载自互联网或经作者投稿授权的原创,文末已注明出处,其内容和图片版权归原网站或作者本人所有,并不代表安全+的观点,若有无意侵权或转载不当之处请联系我们处理,谢谢合作!
欢迎各位添加微信号:qinchang_198231
加入安全+ 交流群 和大佬们一起交流安全技术
全文约6000字 阅读约15分钟
一、了解零知识证明
二、领悟信任与安全
三、零知识证明的应用
-
完备性(Completeness):
只要证明者拥有相应的知识,那么就能通过验证者的验证,即证明者有足够大的概率使验证者确信。
(关于这里提到的“概率”,详见后面的“色盲游戏”)
-
可靠性(Soundness):
如果证明者没有相应的知识,则无法通过验证者的验证,即证明者欺骗验证者的概率可以忽略。
-
零知识性(Zero-Knowledge):
证明者在交互过程中仅向验证者透露是否拥有相应知识的陈述,不会泄露任何关于知识的额外信息。
零知识证明是1984年由Goldwasser、Micali、Rackoff三个人提出,论文题目是《The Knowledge Complextiy of Interactive Proof Systems》(《交互式证明系统中的知识复杂性》)。
从上图的左上角可以看到,这篇论文其实发表在1989年。原因在于这篇论文的思想太过超前,以至于从1984年写出初稿到1989年正式被采纳发表,经历了整整五年时间。正是由于零知识证明这项开创性工作,Goldwasser和Micali两人在2012年分享了图灵奖——计算机领域最高奖项,也有“计算机界的诺贝尔奖”之称。
-
参与者:Alice是色盲,Bob不是色盲。
-
Bob手上有两个大小、形状完全一样的球,但颜色不同:一个蓝色,另一个红色。
-
由于Alice是色盲,所以Alice无法分辨这两个球是否是一样的。
-
而Bob需要向Alice证明这两个球是不一样的。
-
Alice被称为验证者:他需要验证Bob的陈述正确与否;
-
Bob被称为证明者:他需要证明自己的陈述(存在两个颜色不一样的球)。
-
采取零知识证明方式:Bob需要在Alice不能获知两个球的颜色的情况下,向Alice证明这两个球的颜色是不一样的这个事实,这与零知识证明的定义是相符合的。
-
Alice当着Bob的面拿起两个球,左手拿蓝球,右手拿红球(当然,Alice并不知道拿的是篮球还是红球,因为她是色盲);
-
Alice然后将双手放到背后,这样Bob就看不到Alice手上的球了;
-
Alice在背后随机交换左右手上的球,并在心里默默记住自己的交换方式;
-
交换完成后,Alice将手伸出,并询问Bob“两个球是否交换过位置?”;
-
如果Bob能看到球上的颜色,那么每次Alice换过球的位置后,Bob都能正确回答出Alice的问题。
-
如果Bob回答对了,Alice仍然不会完全相信Bob可以区分这两个球的颜色,因为Bob有50%的概率蒙对;
所以,即使Bob回答对了,Alice还要进行第二次测试;
-
如果Bob回答错了,那么Alice可以肯定Bob不能区分两个球的颜色。此项测试就可以终止了。
-
如果Bob回答对了,那么Alice有75%的概率相信Bob可以区分两个球的颜色;
当然,Alice还可以进行第三次测试;
-
如果Bob回答错了,那么Alice可以肯定Bob不能区分两个球的颜色。
此项测试就此终止。
-
第一次Bob回答正确时,Alice可以说Bob陈述的断言为真的概率为50%;
-
如果Bob第二次又回答正确,那么Alice可以说Bob陈述为真的概率达75%;
-
如果第三次又正确,概率将达到87.5%;……
-
如果连续n次Bob都通过了测试,则Alice以1-(1/2)^n 的概率认为 Bob 说的是真的,这两个球的确是有红蓝两种颜色。
-
完备性:
如果Bob拥有分辨球颜色的知识,则Bob每次都会正确回答。
-
可靠性:
如果Bob不具备分辨球颜色的知识,则Bob无法总是回答正确。
-
零知识性:
直到最后,Alice也无法得知两球的具体颜色,因为Bob从未透露这个信息。
零知识证明是怎么「凭空产生了信任」?
-
一类是基础理论:
如「数论与代数」、「数理逻辑」、「计算理论」等;
-
另一类是安全假设:
如「离散对数难题」等。
-
区块链:解决的是「分布式计算的信任」;
-
零知识证明:解决的是「数据的信任」;
-
形式化验证:解决的是「逻辑的信任」。
总之,任何「信任」都需要基于某些信任基础(如可信计算基(Trusted Computing Base)),任何「安全」都有安全性假设。
-
比特币实现了⼀种分布式协议,它以去中心化的方式,「模拟」出了一个「虚拟」的「可信第三方」。
-
零知识证明实现了一类密码学理论技术,它基于一些安全假设,「模拟」出了⼀个虚拟的可信第三方。
零知识证明的实现可以通过三段旅程来描述:(详见参考资料[3])
-
隐藏秘密之旅:单向功能;
-
证明秘密之旅:同态映射;
-
构建通用零知识证明之旅:证明NPC问题的多项式。
-
证明:可能是一个非常耗费算力,或者脑力的活动,无论是耗时几百年的「费马大定理」,还是比特币中的 POW 证明,这些证明都凝结了在寻找证明过程中所消耗的能量。
证明过程可能是超乎寻常的复杂,偶尔需要天才横空出世。
-
验证:一定(或者应该)是一个非常简单的、机械的、在有效时间内(多项式复杂度)且能终止的活动。
从根本上讲,信任是个好东西。我们创建了信用体系,可以向我们信任的人和组织提供信贷;依靠名声、信誉记录等,也能够与我们不信任的人开展业务。
但是,信任通常是建立在牺牲隐私的基础之上的。为了互相信任,通常必须放弃一些隐私。而且信任通常与你的身份信息密切相关。
而零知识证明恰恰是一种「两全其美」的方案:既通过「证明」提升「信任」,又通过「零知识」保护「隐私」。
对于隐私的理解,其实分两种:
-
第一种是匿名(Anonymous),意思是用户不用透露任何和自己相关的信息,好比是学校的表白墙,你永远无法知道到底是谁写了上去,反正字就是写在了上面。
-
第二种是假名(Pseudonymous),意思是用户通过自己创造的假名来发表信息,好比是贴吧,如果你不了解这个用户,你无法建立网名到实名的联系,你也就不知道发帖的人是谁。
目前,大多数当前的区块链技术只是假名。如比特币中每个用户都会随机生成自己的公钥(假名)地址来收款。这种公钥地址其实是一种假名,一旦在哪里实名制认证过,就可以把网名和实名关联起来,毫无隐私可言。
如果黑客或政府可以将真实姓名与网络地址相关联,那么可以通过链接区块链交易追溯到用户交易时的身份。尽管区块链被赞誉为完美安全方案,但知情人士都知道这种弱点。事实上,世界各地的执法机构一直在利用这一漏洞来抓住犯罪分子。
这就好比有人用网名在贴吧上发帖子喷人,然后被人用密保找到了手机号,再用手机号找到了注册的实名,从而被人肉是一个道理。
零知识证明定义中有两个关键词:“不泄露信息”、“证明论断有效”。基于这两个特点,直接扩展出零知识证明在区块链上的两大应用场景:(详见参考资料[1])
-
隐私:在隐私场景中,我们可以借助零知识证明的“不泄露信息”特性,在不泄漏交易细节(接收方、发送方、交易余额)的情况下,证明区块链上的资产转移是有效的。
-
扩容:在扩容场景中,不太关注零知识证明技术的“不泄露信息”这个特性,更加关注“证明论断有效”这个特性。由于链上资源是有限的,所以我们需要把大量的计算迁移到链下进行,因此需要有一种技术能够证明这些在链下发生的动作是可信的,零知识证明正好可以帮助我们做链下可信计算的背书。
-
端到端的通讯加密:用户之间可以互相发消息,但是不用担心服务器拿到所有的消息记录,同时消息也可以按照服务器的要求,出示相应的零知识证明,比如消息的来源、发送的目的地。
-
身份认证:用户可以向网站证明,他拥有私钥,或者知道某个只要用户自己才知道的秘密答案,而网站并不需要知道这个私钥和秘密,但是网站可以通过验证这个零知识证明, 从而确认用户的身份。
-
去中心化存储:服务器可以向用户证明他们的数据被妥善保存,并且不泄露数据的任何内容。
-
信用记录:信用记录是另一个可以充分发挥零知识证明优势的领域,用户可以有选择性的向另一方出示自己的信用记录,同时证明信用记录的真实性。
-
更多的例子,可以是任何形式的数据共享、数据处理、数据传输。
(本篇完)
报名参加EISS2020北京站
本文始发于微信公众号(安世加):技术干货 | 零知识证明是零信任吗?
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论