零知识技术是密码学的一个分支,零知识证明可以让用户在不透露信息的前提下证明自己知道或拥有信息。
零知识证明(ZKP)是一种重要的密码学概念,允许证明者向验证者证明某一声明的真实性,而不泄露任何具体信息。ZKP 被广泛应用于隐私保护和安全性要求高的领域,如身份验证和区块链技术。尽管存在实施复杂性和性能挑战,ZKP 在金融和投票系统等领域的潜在应用使其成为现代隐私和安全解决方案的重要组成部分。
玩过zkSNARK的小伙伴都知道,R1CS是目前描述电路的一种语言。目前实现zkSNARK电路的框架有libsnark(C++),bellman (Rust),ZoKrates(DSL),Circom(js)等等。有的时候,需要将一个框架中生成的电路,导入其他框架。网络上研究了一下,发现两个有意思的项目。
zkSync采用PlonK零知识证明系统。在电路设计上,非常巧妙的将交易分割成一个个小的通用处理单元(Operation)。一个Operation对应的证明电路逻辑支持所有可能交易的Operation逻辑。多个有关联的Operation电路组成交易电路。多个交易的电路再组合成区块电路。从而,在固定大小的区块中也能包含不同组合的交易。
这篇文章记录一下团队解题的思路以及学习STARK的过程。方便更多的小伙伴学习零知识证明相关技术。
文章详细介绍了Lasso和Jolt这两种新型零知识虚拟机(zkVM)的核心原理和实现,特别强调了sum-check协议在Jolt中的重要性,以及与Binius承诺方案的结合。作者探讨了Jolt在性能与简化方面的优势,讨论了椭圆曲线与哈希之间的比较,并解构了EVM中的预编译和zkVM基准测试的概念。
本文介绍了a16z加密团队发布的Jolt zkVM的初始实现及其性能和可用性的改进,包括验证成本的显著降低,集成折叠技术以提升多项式承诺方案和简单性。此外,文章详细描述了Jolt的各项新特性和未来的发展方向,包括对RISC-V的支持、开源贡献者所做的改进与正式验证的进展。
Hermez团队负责人Jordi Baylina比较清晰地给出了zkEVM大体的设计思路。本文梳理一下对zkEVM设计的理解。抛砖引玉,有理解偏差,小伙伴们可以留言讨论。
Groth16算法是zkSNARK的典型算法,目前在ZCash,Filecoin,Coda等项目中使用。本文从计算量的角度详细分析Groth16计算。Groth16计算分成三个部分:Setup针对电路生成Pk/Vk(证明/验证密钥),Prove在给定witness/statement的情况下生成证明,Verify通过Vk验证证明是否正确。
ZK技术的历史发展脉络梳理
Binius是个新颖的零知识证明系统,目的是降低证明者的计算开销。Binius能降低证明开销的原因是使用了$F_2$以及扩展域。
本文介绍了如何使用JavaScript中的zk-SNARK技术,特别是通过Circom和SnarkJS库来生成和验证零知识证明。首先解释了零知识证明的基本概念及其在区块链中的应用,接着介绍了如何安装Circom和SnarkJS,并详细说明了如何编写电路代码以生成证明,最后展示了验证证明的步骤。读者在完成后应该对如何在JavaScript项目中实现zk-SNARK有初步的理解和实践能力。
零知识证明 - KZG多项式承诺
Schwartz-Zippel 引理是关于有限域中的多变量多项式零点个数的紧致上界,具体表述如下:
Dark Forest是一款实时策略游戏。星球的移动和攻占是整个游戏的策略重点。为了在不公开星球坐标的情况,还能证明星球的移动正确,引入了零知识证明技术。