“一流VC”搞开发:a16z crypto的两个SNARK工具

最近在看一些海外加密基金对Crypto生态的拓展和创新。今天就来看看本月A16Z Crypto新推出的两个SNARK工具。尽量只聊什么东西可以解决什么问题。 

谈到SNARK那就先聊一聊zkSNARKs吧,实际上今天聊的话题中这是两个不同的方面。 

既然从zkSNARKs开始聊起,零知识的基本原理证明就不再赘述,这项技术具有完备性,正确性和零知识性三个特点,可以实现即证明了结论又不需要透露任何细节。同时,在同态加密的背景下,验证难度要远远低于生成证明难度。 

我们之前在聊Layer2的时候其实提到过ZK,比如Zk-Rollup,作为一种有效证明机制为以太坊的扩容提出了新的方案。之前大家忙着撸空投做交互的zkSync,其核心即使用ZK将多个操作包到一个证明里,在链下完成大多数计算工作。

zkSNARKs——零知识证明应用最广泛的技术

zk-SNARK,即“Zero-Knowledge Succinct Non-Interactive Argument of Knowledge”,即零知识简明非交互式知识证明。 

特性是①证明某个陈述为真但不揭露任何其他信息;②证明大小很小且易于验证;③无交互。 

实际上,这两种ZKP的主要类型:交互式ZKP和非交互式ZKP都是证明者(prover)和验证者(verifier)之间进行的过程,只是证明的交互流程不同。 

以Schnorr协议为例,交互式需要verifier生成一个随机数,而非交互式中则不需要这样的角色,prover可以自行生成证明给所有人验证。

zkSNARKs的大概原理是:

zkSNARKs是基于NP问题的,而NP问题属于在多项式时间内不可解,但给定一个解,可以在多项式时间内进行验证是否正确。zkSNARKs就依托于某种NP问题,难以求解但可以快速验证。 把这个问题换个形式,进行QAP二次算术程序转化,同时会构建一个对应于代码输入的解“QAP的Witness”,再基于此解构建一个实际的零知识证明系统。

“一流VC”搞开发:a16z crypto的两个SNARK工具

终于来到我们今天的话题了,也就是8月10号a16z crypto推出的两个SNARK工具——Lasso 和 Jolt。

SNARK(简洁的非交互式知识证明)作为一种加密协议:允许任何人向不信任的验证者,进行证明其知道满足某些属性的见证。 

 尤其是现在的应用是Layer2进行汇总,并向Layer1证明Layer2知道授权一系列交易的数字签名。这样就可以实现签名本身并不需要由Layer1进行存储和验证,也就更有利于扩容。

SNARK背景

由于许多区块链节点验证并记录每笔交易,因此在区块链上运行计算非常昂贵。为了避免更高的交易成本,开发人员通常会执行最低限度的链上计算来启用他们的应用程序。

SNARK在扩展区块链方面就发挥着核心作用:使应用程序能够在链下创建昂贵的计算收据,并且只承担在链上验证收据的成本。 

其中的“简洁”意味着这些收据很短。与重新计算每笔交易相比,可以用更少的工作量进行验证。

问题

但实际上,SNARK的计算成本也很高,而且难以审计。验证者需要被迫承担高度并行化的额外工作。 

性能更高的SNARK可以加速Layer2,也可以允许构建者解锁尚未设想的应用程序。

所以A16Z Crypto引入了两种新的技术:

①Lasso,一种新的查找参数,可以显着降低证明者成本; 

②Jolt,使用Lasso技术,为zkVM和更普遍的前端设计提供了一个设计SNARK的新框架。

这两个工具共同提高了SNARK设计的性能、开发人员体验和可审计性,加快促近了Web3中的生态构建。

目前对Lasso的初始实现,已经证明:其比流行的SNARK工具链 halo2中的查找参数加速了超过10倍。根据A16Z Crypto预计,当Lasso代码库完全优化时,速度会提高约40倍,同时Jolt在Lasso之上也会包含额外的创新。

查找参数(lookup argument)

查找参数(lookup argument)是SNARK 设计中的一个关键工具,该协议允许不受信任的证明者以加密方式提交到大型向量,然后证明向量的每个条目都包含在某个预定表中。 

查找参数可以通过有效地处理不是通过少量加法和乘法自然计算的运算来帮助保持电路较小。 而电路,实际上是一种极其有限的计算模型。SNARK前端就是将计算机程序转换为可由SNARK后端摄取的电路的编译器。 

SNARK后端让验证者对电路中每个门的值进行加密承诺。然后,证明者要证明:其所提交的值,确实可以对应于验证者检查程序的正确执行。 

目前,开发人员部署SNARK还是通过:用特殊的领域特定语言(将程序编译为多项式约束)编写程序或直接手动编码约束。 

但这样耗费人力物力,还经常有安全漏洞。Lasso 和 Jolt 就是来解决这三个问题的:性能、开发人员体验和可审计性。

Lasso作为一种新的“查找参数”方法,具有更快的证明器。与之前的方法相比,证明者承诺的值更少、更小,并且可以应用于相当巨大的表格。 而Jolt(Just One Lookup Table),是一种基于Lasso的zkVM(零知识虚拟机)设计的新方法。作为一个新的前端,可以实现基于Lasso使用巨型查找表的功能。 

这就是二者所能实现的功能。

简而言之:Lasso 引入了一种简化的 zkVM 方法,通过对大量结构化表执行查找来避免繁琐的手动优化电路,浪费更少; 

基于 Jolt 的虚拟机简单、快速且易于审核。 

并且共同允许SNARK用于现有的流行编程语言,而不仅仅是那些为任务而设计的语言。