原文来源:慢雾
ZKP 应用领域在区块链中,每个节点的计算能力有限,但借助 ZKP 技术,节点可以将大量的计算外包给链下节点,这时只需要验证外包提交的计算结果和计算证明就可以知道计算是否正确。
zksync 1.0 就是一个很好的例子,它在链下进行以太坊代币转账和交易,然后将结果提交给节点,节点通过验证 ZKP 证明就可以知道它是否按照它声明的方法进行计算。
证明系统是 ZKP 的底层算法实现,可分为交互式和非交互式两种:3. 性能对比
电路是 ZKP 系统的业务逻辑实现,开发 ZKP 应用需要进行电路编程,为什么 ZKP 逻辑代码被称为“电路”?主要有以下几个原因:
ZKP 证明的代码会被转换成一系列简单约束条件的表达式 R 1 CS,然后使用拉格朗日插值法,转换为一个巨大的多项式 QAP,最终以门电路的形式被约束。
与硬件电路类似,所有分支的代码将被一起执行。
与硬件电路类似,ZKP 证明电路中没有递归和复杂的循环,循环的数量只能是恒定的。
我们不需要从头去用密码学实现 ZKP 应用,有很多开发库已经实现了这些底层证明系统,我们只需要关注业务逻辑的实现。当然每一种库都有不同的抽象程度,有的需要去学习描述电路的表达式,有的只需要按流程定义好代码就可以轻松实现。
2. 开发流程
以 gnark 为例,一个典型的工作流程如下图:
1 )用代码描述需要解决的问题。
2 )编译成 R 1 CS 约束系统。
3 )对 R 1 CS 进行可信设置,得到 Proving key 和 Verify key。
4 )证明者使用 R 1 CS 和 Proving key 计算私密数据,生成证明 Proof。
5 )验证者使用 Verify key 验证 Proof。
2. 基于公链平台
zkApp (Mina)
zkApps 是 Mina Protocol 的智能合约,由零知识证明提供支持。zkApps 可以在链下执行任意复杂的计算,同时只收取固定费用以将生成的零知识证明发送到链以验证此计算,这与其他在链上运行计算并使用基于可变 gas 费用的区块链相反模型。zkApps 使用 Typescript 编写。
证明系统:PlonK。
链接:https://docs.minaprotocol.com/zkapps。
LEO (Aleo)
Leo 是一种函数式静态类型编程语言,专为编写私有应用程序而构建。它专为开发人员设计,可以直观地在 Aleo 区块链上构建,为私有的、去中心化的生态系统提供基础。
证明系统:Marlin。
链接:https://leo-lang.org/。
零知识证明是解决区块链隐私性、计算扩展和数据压缩问题的有效方法,目前有很多的实现方案,这些实现方案具有不同的性能参数指标和安全基准。开发者在开发零知识证明电路时需要注意根据需求选择合适的框架,并确保在项目上线前对应用的安全性进行过全面安全审计。
最后,感谢领先的一站式数字资产自托管服务商 Safeheron 提供的专业技术建议。
参考链接:
[ 1 ]. https://en.wikipedia.org/wiki/Zero-knowledge_proof
[ 2 ]. https://github.com/matter-labs/awesome-zero-knowledge-proofs
[ 3 ].https://docs.google.com/presentation/d/1gfB6WZMvM9mmDKofFibIgsyYShdf0RV_Y8TLz3k1Ls0/edit