虽然不知道为啥,但就是对了·零知识证明

2 6~7 min

注:本篇算是RSA算法的拓展,建议先点击这里阅读RSA算法介绍。

一个可怕的思想实验

想象一下,一天,一个超级厉害的黑客进入了某宝的后台,拿到了一份重要的文件,这个文件里记载了所有用户的支付密码,而你又恰巧把支付宝的支付密码和银行卡密码设成了一样的,是不是很可怕?(🐢:所以,你的两个密码是一样的吗?)

又或者,他拿到了你的登陆密码,是不是也很可怕?

为了避免这种情况的发生,最好的办法就是不存储你的密码,这也是为什么在“找回密码”时,你永远只是设置了一个新密码(🐢:因为我也不知道你原来的密码是什么┭┮﹏┭┮)。

可是,现在我们该如何知道你输入的密码是正确的呢?这需要零知识证明。

在零知识证明中,我们规定出两方,一个叫证明方,另一个叫验证方。在这一过程中,证明者要向验证者证明并使其相信自己知道或拥有某一消息(例如密码),但证明过程不能向验证者泄漏任何关于被证明消息的信息。这似乎不可能,不过我们只需要一个简单的例子来讲解它的流程。

又一个思想实验

假设,🐢有一个密码箱(密码箱不可被破坏,密码只有拥有者知道),🐢(证明方)想向🍄(验证方)证明密码箱是他的,他应该怎么做呢?

很简单,我们在密码箱上开一个单向的小孔,只能放入东西,却绝对拿不出来,现在,🐢把保险箱给了🍄。

然后,🍄在小纸条上写上一句话,例如”我讨厌酒精“,并把它塞进保险箱。做完这一切,🍄把保险箱还给了🐢。

现在,🐢只要在🍄看不到的地方打开这个保险箱,拿出纸条,回到🍄这里,朗读纸条上的这句话。一切都完成了,显然,🐢向🍄证明了密码箱是他的,而🍄也并没有得到密码。这就是零知识证明。

回到开头

如果你阅读了哈希函数的文章,你就知道,我们可以依靠哈希加密实现类似的效果。现在,某宝只需要存储密码的哈希值,因为,通过哈希值,我们无法还原出你的密码,所以,哪怕黑客偷走了所有用户密码的哈希值,也没有太大作用。(🐢:也不一定哦)

因此,只要验证方存储了🐢密码的哈希值,🐢就可以通过向验证方(某宝)提供密码哈希值的方式(生成哈希值的过程可以在本地完成,🐢实际输入的仍是密码)证明自己拥有正确的密码,完成登录。

这能做些什么?

现如今,大部分的搜索引擎都会收集你的偏好,但是,有了零知识证明,我们可以让他变得更有隐私性。

例如,🐢只是想委托搜索引擎收集有多少人进入了龟洞,但搜索引擎的用户并不想让🐢知道他们是谁,我们就可以利用零知识证明。在这个例子中,显然,用户是证明方,🐢是验证方。

例如,🐢可以在网页代码前添加一串特殊的字符,这样,搜索引擎只需要向用户询问他们访问的网站代码前几位是什么,将这些代码传给🐢,乌龟就可以从中挑出特殊的字符,并知道有多少人访问了龟洞,而因为🐢并未直接与用户对话或得到有关他们身份的信息,用户的隐私也得到了保护。

这就是零知识证明和几个简单的应用,实际上,随着加密货币等的发展,零知识证明将有着更加广阔的应用空间,一切才刚刚开始。