跳转到主要内容

零知识证明

本文约需 2 分钟阅读

零知识证明 (Zero-Knowledge Proof, ZKP) 是一种在完全不透露某项信息本身的前提下,证明自己知晓该信息的密码技术。 1985 年由 Shafi Goldwasser 、 Silvio Micali 、 Charles Rackoff 三人确立了其理论基础。作为既能进行不发送密码的认证、又能在不公开交易内容的情况下验证其正当性,从而兼顾隐私与安全的创新技术,它位于加密技术的最前沿。

理解概念 - 阿里巴巴的洞穴

零知识证明的概念可以通过「阿里巴巴的洞穴」这个比喻直观地理解。环形洞穴的深处有一扇魔法门,只有知道暗语的人才能通过。证明者 (Peggy) 想向验证者 (Victor) 证明自己知道暗语,但又不想透露暗语本身。

1.Peggy 进入洞穴,随机选择左侧或右侧的道路走向深处
2.Victor 在洞穴入口指示「从左边出来」或「从右边出来」
3.如果 Peggy 知道暗语,无论被指示从哪一侧出来,她都能通过门从正确的一侧出来
4.若重复 20 次,仅凭偶然每次都猜对的概率将低于一百万分之一

在这个过程中,Victor 获得了「Peggy 知道暗语」的确信,却完全无法得知暗语本身。这正是零知识证明的本质。

zk-SNARK 与 zk-STARK

特性zk-SNARKzk-STARK
可信设置需要不需要
证明大小较小 (数百字节)较大 (数十 KB)
验证速度快速稍慢
抗量子性无 (依赖椭圆曲线)有 (依赖哈希函数)

zk-SNARK (Succinct Non-interactive Argument of Knowledge) 证明大小较小、验证快速,但初始设置需要信任。 zk-STARK (Scalable Transparent Argument of Knowledge) 无需设置且具备抗量子性,但证明大小会变大。根据用途加以区分使用十分重要。

在密码认证中的应用

在传统的密码认证中,用户将密码发送给服务器,由服务器端进行比对。这种方式存在密码在通信路径或服务器端泄露的风险。应用零知识证明后,可以在不发送密码本身的情况下,仅证明自己「知道正确的密码」。 SRP (Secure Remote Password) 协议正是基于这一思路,被 1Password 等密码管理器所采用。加密基础一文中,对相关密码技术的整体面貌进行了讲解。

零知识加密服务

标榜「零知识」的云服务,意味着其设计使得服务提供者自身也无法解密用户的数据。 Proton Mail 为邮件提供端到端加密,即便是 Proton 公司的服务器也无法读取邮件内容。 Tresorit 在文件存储方面采用了类似的设计。在这些服务中,使用由主密码派生出的密钥在客户端进行加密,服务器上仅保存密文。也请参考隐私与便利的平衡一文。

现场使用案例

“在金融机构的身份核实中,我们正在研究一种无需公开出生年月即可证明年龄在 18 岁以上的机制。借助零知识证明,有可能仅用最低限度的必要信息就满足合规要求。”

常见误解

存在「零知识 = 数据不存在」的误解,但数据确实是存在的。零知识的含义是「验证者在证明过程中不会获得新的知识」。此外,即便是零知识加密服务,也存在一旦忘记主密码就无法恢复数据这一取舍。在理解便利性与安全性之间平衡的基础上再决定是否采用,这一点很重要。对密码技术的最新动向感兴趣的人,密码技术专著 (Amazon)可作为参考。抗量子密码与密码安全一文中,也对量子时代的密码技术进行了讲解。

相关术语

这篇文章对您有帮助吗?

XHatena