零知识证明,您不一定读得懂这简单的5个字_比特币:数字人民币与区块链

本文来自:WeeklyBlockChain,作者:币圈的敬事房太监,星球日报经授权转发。

▋▊▉语言的博大精深语言的奥妙莫过如此,一些很浅显的词语经过组合,立马就变得高深莫测,在哲学和物理学领域尤其比较多。比如,形而上学。字面的理解,形,形状;而,介词;上学,去读书。归纳起来就是,根据形状去读书。这是要看图说话吗?再比如,时空扭曲。时空和扭曲分开都好理解,但合并起来,就爱莫能助了。社会上也不少见。比如,失足妇女、待业青年、公共知识分子、民族脊梁、全民所有制、人均GDP、负增长,诸如此类大抵也体现了汉语的博大精深。“零知识证明”也是这样,照字面理解,不用知识或者说没有知识即可证明,这怎么证明?谁的中学时代没有做过几道证明题呢?老师都是按照知识点给分的,论证的知识点越充分,你的得分就越高。那么。零知识怎么解释?零知识能证明什么?到底什么是零知识证明?区块链是个大杂烩,就这一口锅,硬生生的就把计算机、金融学、博弈论、密码学都一勺给烩了。其中,零知识证明就是密码学领域的一道菜。▋▊▉阿里巴巴的咒语强盗抓住了阿里巴巴,向他拷问进入山洞的咒语。阿里巴巴心里想:如果我把咒语告诉了他们,他们会认为我没有价值了,就会杀了我还可以节省粮食;但如果我死活不说,他们会认为我没有价值而杀了我。怎样才能做到既让他们相信我确实知道咒语,但又一丁点咒语也不泄露给他们呢?这的确是一个令人头疼的问题,但阿里巴巴想了一个好办法。他对强盗说:“你们在离开我十米远的地方,用弓箭指着我,你们举起右手我就念咒语打开石门,举起左手我就念咒语关上石门,如果我做不到或逃跑,你们就用弓箭射死我。”强盗们当然会同意,这个方案不仅对他们没有任何损失,而且还能搞清楚阿里巴巴到底是不是真的知道咒语。阿里巴巴也没有损失,因为处于一箭之地的强盗们听不到他念的咒语,不必担心泄露了秘密,同时又让强盗确信自己有咒语,自己不会被射死。强盗举起了右手,阿里巴巴的嘴唇动了几下,石门果真打开了,强盗举起了左手,阿里巴巴的嘴唇又动了几下后石门关上了。强盗还是有点不信,说不准这是巧合呢,他们不断地换着节奏举右手举左手,石门跟着他们的节奏开开关关,最后强盗们确信阿里巴巴确实掌握了通关的咒语。

如此这般,阿里巴巴既没有告诉强盗打开山洞石门的咒语,同时又向强盗们证明了,他是知道这个咒语的。这就是阿里巴巴的零知识证明。▋▊▉零知识证明的前世今生零知识证明并不是个什么特别创新的发明。早在16世纪文艺复兴时期,意大利有两位数学家为竞争一元三次方程求根公式发现者的桂冠,就采用了这个方法。数学家塔尔塔里雅和菲奥都宣称自己掌握了这个求根公式,为了证明自己没有说谎,又不把公式的具体内容公布出来,他们摆开了擂台:双方各出30个一元三次方程给对方解,谁能全部解出,就说明谁掌握了这个公式。比赛结果显示,塔尔塔里雅解出了菲奥出的全部30个方程,而菲奥一个也解不出。于是人们相信塔尔塔里雅是一元三次方程求根公式的真正发现者,虽然当时除了塔尔塔里雅外,谁也不知道这个公式到底是个什么鬼。我们举一个生活中的例子。A要向B证明自己拥有某个房间的钥匙,假定该房间的锁只能用这把钥匙打开,而其他任何方法都不可以。有2个方法:A把钥匙出示给B,B用这把钥匙打开该房间的锁,从而证明A拥有打开这个房间的钥匙。A告诉B该房间内有某一特定的物体,A用自己的钥匙打开该房间的门,然后把物体拿出来出示给B,从而间接地证明自己确实拥有打开这个房间的钥匙。有一个前提,在一个密闭的系统内,没有第二个地方存在这个相同的物体。第二种方法就属于零知识证明。好处在于,整个证明的过程中,B始终不能看到钥匙的样子,从而避免了A的私钥被泄露。我们再举一个复杂一点的例子。假如A拥有B的公钥,但A没有见过B,而B见过A的照片,偶然一天两个人见面了,B认出了A,但A不能确定面前的人是否就是B,这时B要向A证明自己就是B,也有两种方法。B把自己的私钥给A,A用手上的公钥对某个数据加密,然后用B的私钥解密,如果正确,则证明对方确实是B。A给出一个随机值,并使用B的公钥对其加密,然后将加密后的数据交给B,B用自己的私钥解密并展示给A,如果与A给出的随机值相同,则可以证明B就是B。很明显,第二种方法,B并没有向A透露他的私钥,但也证明了A手上的公钥正是B的,眼前的这个人就是B。这就是零知识证明。但,你并没有搞清楚什么是公钥,什么是私钥,对吗?▋▊▉零知识证明和不对称加密又是一个新概念,不对称加密。事实证明,不学习是干不好区块链的。通常来说,另外一个人打开保险箱最简单的办法就是,从主人那里拿到钥匙或者是偷过来复制一把相同的钥匙,这就是对称加密,加密和解密的是同一把钥匙,或者说是两把相同的要是。所谓解铃还须系铃人。比如两个人,其中债务人给债权人快递了一个上锁的保险柜,里面有一定数额的钱财,债权人收到之后用手上那把相同的钥匙即可开锁。但有一个很麻烦的问题,如果有第三个人复制了这把钥匙,出现了财产丢失,钥匙算谁丢的?或者,你根本就不想任何其他人有您手上一模一样的一把钥匙,怎么办?非对称加密就可以解决这个问题。用一把钥匙加密,用另一把不同的钥匙解密。方法是,债权人先快递了一个保险柜和一把公钥同时给到债务人,债务人在保险柜里装上了要快递的财物然后用这把公钥锁上保险柜再快递给债权人,债权人用手上的私钥即可打开保险柜。加密的钥匙只负责加密,解密的钥匙只负责解密。并且成对出现。钥匙在加密的时候就变成了锁。这就解决了一个问题。除了债权人以外没有任何第二个人可以打开这个保险柜,他对这笔财产拥有完整的、无争议的所有权。债权人也无需向债务人出示私钥来证明这个保险柜就是我的,如果保险柜即公钥不是债权人的,债权人手上的私钥也无权打开保险柜,这恰恰是债权人最不愿意见到的。不对称加密就是基于零知识证明的概念而来,即不需要泄露私钥,一样也可以证明我就是这个私钥的主人,并且是唯一的主人。网银转账时使用的U盾就是一个典型的非对称的加密系统,一般采用1024位RSA不对称加密算法。以现在的计算机运算速度,至少要10年以上才有可能被破解。数学界有一个公认的难题,当p和q是一个大素数的时候,从它们的积pq去分解因子p和q,近乎等于IMPOSSIBILE。这就是RSA加密的原理。黑客破解密码的过程就是为一个大素数分解质因数的过程。您U盾里的私钥和银行的公钥都是基于p、q经过复杂的公式运算而来。由于黑客无法破解p和q,所以您可以尽管放心地使用您的私钥向银行提供加密信息,银行通过公钥解压,信息一致,则验证通过。▋▊▉回到区块链的世界里区块链是一个匿名的系统,没有中心化的监管,也没有中心化数据储存你的私钥,比如像银行那样储存您的银行卡密码。但区块链又是一个完全透明公开的系统,任何一个地址,均可以通过区块链浏览器查阅到该地址名下的资产数目。在这里,私钥就相当于您数字钱包的密码,也可以叫助记词,这是用户在区块链世界唯一的身份。而公钥或者说地址都是由私钥通过复杂的加密运算生成的。私钥可以推算出公钥,但无法由公钥反推出私钥。并且一个私钥,可以推导出多个公钥,一个公钥则对应唯一地址。详情见下图。

插播一下,提出几个问题,请持续关注《链周刊》,后续推文给各位解释。为什么私钥就一个,公钥需要多个?公钥一定无法反推出私钥吗?既然公钥和地址是等价的,为什么从地址不能反推回公钥?同样基于二者是等价的,有了公钥,为什么还要再生成一个地址?你掌握了私钥,就等于你拥有了公钥,也就是对地址的控制权。由于公钥不能反推出私钥的,所以公钥是明文的,可以公开的,私钥只能被你个人所有,绝对不能公开。继续。区块链或者说比特币本质上是一个喊话+共同记账的系统。比如,A向B转账1个比特币,首先是A向全网喊话要从某一个地址中减少1个比特币,而另一个地址则相应的增加1个比特币。网络上的矿工收到指令后,会检查您账户中的资产是否超过1个比特币,如果满足条件,获得打包权的矿工将记录下这一笔交易,然后向全网公布并达成共识,A地址中减少了1个比特币,B地址中相应的增加1个比特币。转账完成。比特币系统还设置了一个找零地址,为什么?后续再介绍。那么问题来了。如何向网络证明这个地址是我的,而不是别人的,也就是我有权用这个地址付款给其他人。我的喊话并不是瞎喊。

中本聪的做法,用通俗的语言可以这么描述。对交易信息先进行hash加密,得到一个摘要信息,即hash值;用您的私钥对交易摘要进行签名,即加密,并与交易信息一起在全网广播;节点在收到您的加密信息后,用您公开的公钥对信息解密,如果解密出来的hash值和您提供的一致;则证明您对该地址拥有控制权。简言之,如何向网络证明我就是我。用私钥加密,用您提供的公钥解密,信息一致即通过。这和上一个部分中,B向A证明B就是B的方法有异曲同工之妙。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金宝趣谈

[0:15ms0-4:306ms