Cardano Foundation 展示如何在 Cardano 上验证零知识证明

这套五篇开发者系列的第一篇展示如何构建一个 192 字节的 Groth16 证明,并在 Aiken 中使用 Plutus V3 已有的密码学操作进行验证。

By SongMarketCap

Updated:

Cardano News - Cardano Foundation 展示如何在 Cardano 上验证零知识证明

一个 Cardano 智能合约可以在不接收具体数字的情况下,检查某人是否知道满足某个方程的八个数字。Cardano Foundation 用这个示例来引入其新的零知识证明系列。第一篇教程从将方程写成一组约束开始,随后在链下生成证明,并在 Aiken 测试中进行验证。

八个私有数字,一个公开结果

该示例将八个数字分成四对。证明者将每对中的两个数字相乘,再把四个乘积相加。其和必须等于 100。这个结果是公开的,而八个数字本身保持私有。

教程将该计算表示为五个数学约束。四个用于检查各自的乘积,第五个用于检查它们相加是否得到公开结果。一个有效的证明能够表明证明者确实知道一组满足这些约束的数字,同时不泄露他们使用的是哪一组。

Aiken 如何检查一个 192 字节的 Groth16 证明

教程在链下生成该证明。该 Groth16 证明由三个椭圆曲线点组成,在示例所用的压缩 BLS12-381 格式中占用 192 字节。验证者会将证明与公开输入及与电路绑定的验证密钥进行核对。

该演示以一个 Aiken 测试收尾,该测试使用与 Cardano 主网上 Plutus V3 脚本可用的相同 BLS12-381 运算。为使示例可复现,教程对通常属于保密的设置部分采用了固定且公开可知的数值。在生产级的 Groth16 设置中,任何保留了这些保密设置数值的人都可能伪造证明。

为何链上验证对 Cardano 很重要

Cardano 开发者可以利用现有的 Plutus V3 运算,将 Groth16 验证器构建到 Aiken 智能合约中。应用可以在链下生成证明,然后将其传递给合约,由验证器判断某笔交易是否满足条件。证明及任何所需的公开输入对验证器可见,而底层的私有数据可以继续保留在链下。

对于凭证类应用,这种分工决定了用户需要披露哪些信息。只要电路与凭证的设计能够约束所要证明的声明,合约就可以在不接收出生日期的情况下,检查凭证持有者是否满足年龄要求。

[NEWSBREAK]

接下来的四篇将涵盖什么

第二篇将展示如何加速证明生成,以及生产级设置仪式如何运作。它还会将 Groth16 与其他证明系统进行比较,并探讨零知识虚拟机如何在无需开发者手工设计电路的情况下,证明程序被正确执行。

第三篇将展示如何将密钥所有权的证明与 Cardano 地址绑定。第四篇将转向选择性披露。在一个计划中的示例中,凭证持有者将在不透露其出生日期或区块链地址的情况下,证明其年龄至少为 21 岁。

最后一篇将探讨抗量子证明系统,重点关注可能替代 Groth16 所用椭圆曲线假设的基于格的方案。