零知识证明的作用
通常,证明一件事意味着出示证据:输入密码,或者交出身份证件。但这样做暴露的信息,往往比对方真正需要知道的更多。
零知识证明是一种改变这一点的密码学方法。一方(证明者)向另一方(验证者)证实一个确切的说法,而不透露使这个说法成立的秘密。验证者只会得到自己需要的答案——比如您是否符合年龄要求——而不会知道您的生日、住址或证件号码。
这不是一句含糊的隐私承诺。证明必须针对某个确切的说法来设计,而好的设计能让作弊的可能性微乎其微。
洞穴示例
设想一个洞穴,两条通道在一扇锁着的门后汇合。这扇门只能用一个暗号打开。您说自己知道这个暗号,但不想大声说出来。
您可以任选一条通道进入洞穴,朋友则在外面等候。接着,朋友会喊出希望您从哪条通道返回。如果您真的知道暗号,就能在洞内打开门,从任意一条通道出来。如果只是在猜,您能猜中朋友所要求那一侧的概率只有一半。
每次都用全新且不可预测的方式重复这个测试。连续十轮都成功的话,蒙混过关的人靠运气蒙对的概率大约只有千分之一。这样一来,朋友就获得了您确实知道暗号的有力证据,却始终没有听到这个暗号。
从洞穴故事到实际软件
真正的证明依靠数学,而不是洞穴,但隐私目标是一致的。它们可以证明一笔交易符合规则,而不必公开全部细节。它们还能让一个很小的证明代替大批量的检查,从而让某些系统的验证速度更快。
数字凭证是另一种实际应用。设计良好的凭证不需要把完整身份证件上传给每个服务,而是只回答被问到的那个问题:“这个人是否年满 18 岁?”或“他们是否具备这项资格?”
细节很重要。证明只能保护它被设计用来隐藏的那部分信息。围绕它的应用程序仍然可以收集数据、识别您的身份,或者在其他方面做出糟糕的安全决策。
零知识证明与零知识加密
“零知识”这个说法在云存储领域也会用到,但那是另一回事。零知识加密是指存储服务商无法读取您的文件,因为它没有解密密钥。
零知识证明是在不暴露答案背后秘密的情况下回答一个问题。零知识加密是让存储的文件对服务商保持不可读。两者都能提升隐私保护,但不能互相替代。
一个实用的隐私启示
零知识证明提醒我们一个有用的道理:只分享完成任务所需的最少信息。它们不会让您匿名,也不会保护应用程序的每一个环节。服务方仍然可能知道您连接过、连接的时间,以及证明之外的其他数据。
Sealby 不需要零知识证明,因为它没有账户或服务器要求您证明什么。文件是在您的 iPhone 上加密的。对于日常隐私来说,实际要问的问题很简单:这项服务到底需要知道什么?它能不能用更少的信息来完成工作?