零知识证明
本文约需 2 分钟阅读
零知识证明 (Zero-Knowledge Proof, ZKP) 是一种在完全不透露某项信息本身的前提下,证明自己知晓该信息的密码技术。 1985 年由 Shafi Goldwasser 、 Silvio Micali 、 Charles Rackoff 三人确立了其理论基础。作为既能进行不发送密码的认证、又能在不公开交易内容的情况下验证其正当性,从而兼顾隐私与安全的创新技术,它位于加密技术的最前沿。
理解概念 - 阿里巴巴的洞穴
零知识证明的概念可以通过「阿里巴巴的洞穴」这个比喻直观地理解。环形洞穴的深处有一扇魔法门,只有知道暗语的人才能通过。证明者 (Peggy) 想向验证者 (Victor) 证明自己知道暗语,但又不想透露暗语本身。
在这个过程中,Victor 获得了「Peggy 知道暗语」的确信,却完全无法得知暗语本身。这正是零知识证明的本质。
zk-SNARK 与 zk-STARK
| 特性 | zk-SNARK | zk-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)可作为参考。抗量子密码与密码安全一文中,也对量子时代的密码技术进行了讲解。
这篇文章对您有帮助吗?