翠花和小玲的秘密
最近我在搞 “零知识证明”,没听过这个词的朋友可以去搜一下。本来我想说我在 “研究” 零知识证明,但感觉不妥,学者们才配得上“研究”一词,我这种草莽,连门朝北朝南都没摸到,研究个毛呢。说我“搞”零知识证明,其实也不很恰当,就我的深刻体会,明明是 “零知识证明” 在搞我。
一开始,我想用稳妥的方式,稳扎稳打,一点点的,悄悄的,象鬼子进村一样摸到零知识证明的身边,然后一把拥抱住就不撒手,嘻嘻,掌握了。然而,事与愿违,零知识证明并非不设防的小村庄里的小姑娘。它倒更像一个莫测的水塘,我想一步步由浅到深的下去游个泳,可每次都是从岸上一入水便噗通一声没了顶,直接沉底了。
1989 年 Shafi Goldwasser,Silvio Micali,Charles Rackoff 三位提出了零知识证明的概念,但当时大家对这玩意儿并不感冒,这三位的论文也就耽误了三四年才得以发表。
先说说零知识证明这个小姑娘。这么说吧,翠花有一个小秘密,她希望铁柱相信她知道这个秘密,翠花却又不愿意告诉铁柱这个小秘密的具体内容,翠花该怎么办?
这么说不好理解,但把故事背景讲具体一点就好理解了。
翠花姑娘喜欢小伙铁柱,但铁柱喜欢的是志玲,翠花的爱情本来没有希望的。 但天佑翠花,她突然在村后山里发现了一处宝藏,有这笔财富在,铁柱一定会选择翠花。但翠花却不敢带铁柱去看宝藏,因为铁柱一旦知道了宝藏在那里,肯定就霸占了宝藏,然后甩了翠花,去找志玲。
翠花怎么才能让铁柱相信她知道这宝藏,却又不泄露宝藏的位置?这就是零知识证明!
翠花所面临的问题很好解决,她用头套罩住铁柱,带铁柱去宝藏处,让铁柱看一眼即可,然后依然带上头罩回到村里。为了避免铁柱测出距离,她可以带铁柱绕个几里路。
科学家们为了讲明白零知识证明,杂七杂八讲了很多故事,几乎把读者们当成了睡前的儿童。这些故事包括阿里巴巴洞穴、钥匙与房间、三色、数独等。
但我觉得这些故事都不那么鲜明,我想起了一个故事,那是在上个世纪八十年代杂志上刊登的一片文章,故事非常契合零知识证明。
那故事,也许并非虚构,而是真事,通篇就是在吹捧一位年轻女性,该女性似乎是三八红旗手,或者优秀运动员什么的,我就叫她小玲吧。那文章把小玲吹成了一朵娇花,让我这样一位刚刚进入青春期的中学生心生无限怜惜。
其中有这么一个情节,专为吹捧小玲的纯洁和无瑕。白玉无瑕,你懂的,这个词在上个世纪用在女性身上代表着什么。然而,小玲认识的一位男生,竟然不相信小玲的纯洁,她狂妄的挑战小玲:“你这么开放的女孩,肯定不是处女,我不会追你的。”
如果放在今天,小玲直接抽那个男生就完了。然而,那是八十年代,这位优秀的八十年代的女孩,处处都要做到最好,细节都要做到极致,跟乔布斯一个脾气。
这位纯洁的小玲大怒,为了证明自己的纯洁和白璧无瑕,拉着那男生就上了床,证明了一把。
这个故事按照今天的观点来看,是无比沙雕的。不过,从零知识证明的角度分析,我们可以看到,小玲的证明,完全悖逆了“零知识”,她的证明,是无限的知识泄露,甚至,在证明之后,自己也就不再拥有知识了。
小玲完全就是零知识证明的反面嘛。但我针对这个场景,构思了很久,都没有办法解决小玲的问题,除非她去医院找医生开证明,然而那又是对可信第三方的依赖,我们零知识证明还是要尽量避免引入第三方。而且,男生完全可以指责她是买通了医生。
真的搞不定!有些秘密是没法“零知识”证明的。更不用提,如果男生要证明自己是处男,别说 “零知识”,就是“全知识”,也无可证明。
有些秘密,你就永远留在心底吧,别去证明了。
零知识证明有很多协议,比如 Fiege-Fiat-Shamir,比如 GQ,比如 Schnorr。这些协议最直接的用处是做身份证明,非常好用,看起来明明白白好理解。
然而问题是,身份证明用非对称加密的私钥签名不就够了吗? 为何还要搞零知识呢? 盖因非对称加密的签名,给了验证者模仿的机会。翠花用私钥签名了 “翠花” 俩字,证明自己身份,铁柱用翠花公钥解密,对得上“翠花”二字,那就证明了翠花身份。然而,铁柱转过头就把 “翠花” 签名的密文发给村里吴老二,说自己就是翠花,想跟吴老二好,另外要跟吴老二借100块钱。这就是模仿。
而零知识证明协议执行后,铁柱没机会模仿的。
零知识证明与地球文明
我时常从技术细节脱身而出,跳到半空从很高的层面审视零知识证明。(主要也是因为技术细节太难了,不走神不大可能)
人类对于地球上最有价值的秘密,并不怎么保护,反而慷慨大方的很。比如牛顿的力学理论、爱因斯坦的相对论,他们都急忙的公布出来,唯恐天下人不知道。实际上,这样的秘密使用零知识证明特别方便,爱因斯坦把相对论藏起来不公开,但对全世界宣称自己可以预测引力场引起光线偏移,他只要指出光线在太阳附近的偏移,爱丁顿在日全食期间测量后符合,就完成了一次零知识证明。
但科学家们总是急急忙忙的公布出自己的秘密。可惜麻烦的是,即便他们公布出来,也常遭冷遇,人们总是不理解他们。
小说三体里的三体文明特变态,三体人与三体人之间通过脑电波进行交互,每个人的大脑都是透明的,人与人之间没有秘密而言。这种文明中,当然就不会存在偷情,甚至偶尔在晨勃时思念一下前任都会引起家庭纠纷。难以想象,三体人的感情到底怎么搞,太难了。
但是,三体人的科技那就太牛逼了。 大部分的人都不需要学习了,只要从别人脑中复制一份即可。
比方说,三体人中的爱因斯坦冥思苦想了1年,想通了相对论,瞬间,70亿三体人就都懂了相对论,这他妈的太牛逼了。
反思地球人类,真是很悲哀。一个加减乘除这样的基本运算法则,每个人都要学一遍,语言更是如此,人人都得重复去学。若是三体人凌空观看地球人,70亿人一个个可怜巴巴的重复地学着同样的东西,肯定会惊讶的想,这样低效的智慧,还存在着干鸟?
我在看零知识证明的资料时,就掩卷叹息,全球得有几万人在读零知识证明的资料吧?智商如我一般低下的人,一个个绞尽脑汁的思考这同样的玩意,在同一个难点上一卡就是一周,悲夫!地球文明啊,在传递模式上,就输在了起跑线上。
就这样悲惨的种群,居然还要用零知识证明去隐藏一些秘密,悲哀更增一百倍。
未来三体人真的降临地球,他们出于星际主义精神,立刻用脑波给人类传递知识。然而,他们马上发现遇到了一堵墙,人类的榆木脑袋压根不接受这些知识。甚至还有地球主义小粉蓝跳起来要抽三体人,骂三体人是境外势力不怀好意,他们一边骂 CNMB,一边抄起石头砸三体人飞船,也砸身边的地球球奸。
三体人 A 叹口气,对三体人 B 说,要不,用零知识证明证实一下我们科技的先进吧? B 长叹口气说,算了,零知识证明对傻逼们没用,我们还是去帮助火星上的厌氧菌吧,它们的发展希望还更大一些。
数学
如果拿零知识证明做一点身份认证,那还真是不难,原理简单,随便套个协议,找个开源,调试下也就通了。
然而我想搞一点挑战的,试试多方计算,于是就上了 zkSnark 的船。
这下日爹了。
比起 zkSnark 来,之前看起来很难的东西,比如非对称加密啦、区块链账本协议啦、共识算法啦,都成了清澈透明的小可爱,简单易懂随便玩。这 zkSnark 的白皮书读起来,仿佛一堵密不透风的砖墙,我这可怜的鸡蛋怎么碰怎么碎。
为什么当年不读数学系啊? 如今方知平生所学,尽皆垃圾。我颇有点岳不群拿到葵花宝典之感 - 大半辈子苦苦练这紫霞神功干鸟?认真学个劁猪骟羊多好!
葵花宝典之所以牛逼,主要还在法门简单,门槛低,有蛋有刀就人人可练。zkSnark 就有点不一样,下面的文本风格和葵花宝典的那种顺口溜截然不同:
面对以上文本,引刀自宫有用吗?我们与知识之间难道只隔着一套生殖系统?我觉得不大可能。
我痛定思痛,深挖根源,发现除了智商原因之外,很可能跟我大学数学功底太差有关。于是我就去找大学数学成绩单,尤其要看看数论、群论我学的怎么样,要知道零知识证明主要就是靠的群论。结果很令人震惊,我的大学竟然没有数论和群论课程!我压根就没学过! 那么我的大学里学过什么数学吗? 难道我是文科生吗?唉,岁月悠悠,沧桑百年,记不得那么多了! 我的过去,一片朦胧。除了粗壮的系主任调戏校花时脸上的猥琐,我对那几年的事已经彻底忘却了,我觉得校花也应该忘记了,毕竟后来系主任升为主管基建的副校长后,她就是校长夫人了。
zkSnark 将计算问题,先转换为 Circuit 电路,再转换为 R1CS,接着转换为 QAP,QAP 就是多项式问题,于是在这一步证明完成。
感觉像是:倒啊,倒啊,倒出一头驴来。
我再次跳出技术细节,开始从宏观上思索数学的本质。从 zkSnark 这种倒法,我提一个想法供大家参考,那就是:造物主一直在和人类玩一场零知识证明。
而数学就是这场零知识证明的交互协议。
人们以为数学是真理,在探索真理的路上越走越远,自以为渐渐逼近真理。实际上呢,这是一场零知识证明,只是为了让人类相信造物主他真的藏着一个秘密。但这秘密一点都没泄露过,人类忙来忙去的,都是在做交互协议。
信和宇宙
Alice 为什么要证明?她是为了让 Bob 相信自己拥有秘密。
Alice 为什么要做到零知识呢?是因为她不信任 Bob,不想让 Bob 知道秘密。
看,里里外外都是关于 “信” 的,我把“信任”的任字特意去掉,一下子宗教气息爆棚。
爱因斯坦说过:“宇宙最不可思议之处在于,宇宙竟然是可以理解的。”
爱因斯坦是地球上最伟大的科学家啦,他认为人类可以探索出宇宙的秘密。
我提一个问题,供大家参考:宇宙为什么需要探索呢?一定只有经过探索,才能理解?
造物为何不作这样的安排,让类似人类这样的智能,天生就能理解宇宙,压根无需费劲巴拉的去探索!管它什么数学、物理、化学,对这种智慧都是透明的!
这种超级智能在最初出现时,就全然理解了宇宙的一切规律,不需要愚蠢的探索,面对宇宙,这种智能唯一需要做的工作,只有工程。
人类显然不是这种超级智能。几万年来,可怜的人类如同在黑夜中摸索,一点点的总结规律,错了一次再错一次,一遍遍的错,一层层的错。当然,也有一些进步,这些进步仅仅证明了可能存在一个真理,或者叫知识,或者叫秘密。
这若是一场零知识证明,那么最后人类所能验证的,只是宇宙有一个秘密,我们只能相信这个秘密存在,一切都证明了秘密确实存在。但我们永远也无法知晓这个秘密,因为这是零知识证明。
问题
技术都是为了解决问题的。
零知识证明算法除了数学理论难,还有另一个难的地方。我们常常用错了零知识证明,要么为了用而用,要么在无需零知识证明的地方瞎用,其实压根就没解决什么问题。
最头疼的问题是,我们并不理解自己所面对的问题是什么。
何谈正确解决?何谈用什么零知识证明?
能够把自己的问题理解清楚,零知识证明也就不那么难懂了。(当然数学层面还是一样的难)
再跳出去一次,为什么造物要和我们玩零知识证明?大概是因为人类智能还不知道自己的 “问题” 是什么。
造物心想,你们要解决的问题自己都不清楚,把秘密 s 告诉你们有蛋用?再说,告诉你们秘密了,好让你们甩掉我吗?
真把我当翠花和小玲了?
网友评论