2021.07.04 技術シェア
【技术浅谈】如何让色盲相信两个小球的颜色不同—零知识证明

前言


今天想介绍的是密码学中非常具有魅力的一个概念“零知识证明”,英文是“Zero Knowledge Proof”,简称“ZKP”。


所谓的零知识证明,即当A想要向B证明自己知道某个秘密,却又不告诉B这个秘密的具体内容的一种证明方式。


为了解释上面这段拗口的概念,我需要你扮演一个固执的色盲。(假如完全分辨不清红色和蓝色)


我现在有一红一蓝两个除颜色外完全相同的小球,但你是色盲,所以没有办法分辨哪个是哪个。我声称这两个小球颜色不一样,但你并不相信我。OK,这些是大前提,现在我需要向你证明我知道这两个小球的颜色不一样。


图片


首先我将蓝色小球放在你的左手里,将红色小球放在你的右手里,并要求你两只手拿着小球放在后面让我看不到,你可以选择交换两只手的小球,或者不交换,然后再将两只手摆在我面前问我你是否进行了交换。


因为我能分辨出红色蓝色,所以我当然知道你是否交换并且会答对你的问题。但是你可能会认为我只是运气好,毕竟如果我会有50%的几率猜对。于是你再放到背后进行操作,拿到我面前问我你是否又进行了交换,我再次回答正确,25%的猜对几率仍然让你认为我只是运气好。


于是我们重复这样的操作10次,每次我都回答正确,因为10次全部答对的概率将近千分之一,所以你便会相信我的确是知道这两个小球的颜色是不一样的了。


在这个故事中,我利用概率论反映出来的道理向你证明了我知道小球颜色不同,但是我并没有向你透露小球具体是什么颜色的相关信息,这就属于一种零知识证明。


零知识证明也有很多实际生活中的例子,比如你丢失的银行卡被另一个人捡到,你要向这个人证明你知道该银行卡的密码来让他相信这是你的银行卡,但是你不并想透露你的密码具体是多少。那么你可以和他一起去ATM机取钱,让他站在离你十米远的地方以看不见你输入的密码,然后你只需要将取完钱得到的明细给他看一眼,就足以证明你知道这张银行卡的密码。


 

零知识证明有什么用处呢?


在这个充满了隐私风险的时代,保护个人隐私至关重要。而传统的身份认证需要识别证件,如驾驶证和护照,这些证件都是静态的。它们不会允许你将其中的某个信息片段抽取出来单独使用。


当你向酒吧服务员拿出驾驶证,证明你已经达到了允许喝酒的年龄时,你最终透露出来的远不止“年龄”这点信息;你还会让别人知道你的全名、性别、驾驶证号码、地址、生日、甚至是身高。


这种为了使用某种服务,就不得不公开所有身份信息的模式应当被淘汰掉,并采用仅需证明一些必要的属性就能满足要求的模式。


这些必要的属性,可能是证明我们的存款真的达到了某个特定的門槛,或是我们真的是拥有某一个学历,或是我们真的是21年前出生的。


而零知识证明,则可以帮助我们在不需要透露具体存款金额、毕业于哪一所学校以及具体的年龄的基础上就可以让别人相信我们已经达到了要求。


目前零知识证明已被区块链领域广泛使用,为达成在即使在匿名环境下也可以安全地、不需要信任地实现一些涉及到交易的行为。


 


图片


Zcash是第一个使用零知识非交互式简洁证明(zk-SNARKs)来实现匿名化交易的一种加密货币平台。以太坊创始人Vitalik也认为零知识证明是保护去中心化网络的隐私性和安全性的“最为强大”的解决方案。


相比之下,比特币非常缺乏用户隐私保护,甚至有机构专門调查比特币上的用户的真实身份。


我相信在不久的将来,零知识证明将会由一个非常识变成常识,改变这个世界对隐私保护的认知。


 


图片