General Background on ZK

Before digging into ZK-ML resources specifically, it is helpful to build a mental of model for what kinds of problems ZK allows us to solve broadly.

ZK technology is useful and interesting. Practically, modern ZK crypto gives us primitives that enable new classes of applications. Technically, designing useful ZK systems involves fun math problems that math and CS generalists are well-suited for!

This section contains a sampler of (mostly recent) articles and videos which explore ZK from a few different angles. We assume that you already know what zero-knowledge proofs and zkSNARKs are.

Useful: Where and why is ZK useful?

Group Signatures with zkSNARKs. An explanation and demonstration of how zkSNARKs can “turn math problems into programming tasks,” enabling us to easily compose cryptographic primitives.

**ZK Identity: Why and How (Part 1).** Part of a two-part series breaking down how primitives like zkSNARKs expand the design space for robust digital identity systems. The second part of this series goes into the various technical sub-components that may be needed to build ZK-enabled digital identity primitives.

(video, 12m) Zero-Knowledge Machine Learning. How putting machine learning models in ZK circuits may open up new categories of applications, and the current state of the art (this intersection is relatively new and underexplored!).

(video, 25m) Zero-Knowledge Lets Us Play Richer Characters Online. How ZK primitives are enabling new digital interactions.

(video, [0:00-11:32]) **Elliptic Curves, Pairings, and RSA in Circom - Why Bother?** A high-level mental model for how ZK enables new levels of programmability and composability in cryptosystems.

Privacy in Cryptocurrencies. A breakdown of how different tools (including but not limited to ZK) enable financial privacy on digital currency systems.

**Announcing Dark Forest.** An explanation for how ZK allows us to introduce limited forms of information asymmetry into “complete-information” systems, and how this can be used to build an incomplete information game on a blockchain.

Interesting: What kind of thinking goes into ZK systems?

Showcasing some of the kinds of thinking and problem-solving that goes into designing or working with ZK systems. These links are meant to be (relatively) accessible, even for newcomers with limited experience with ZK.

Some ways to use zkSNARKs for privacy. A few constructions and common “design patterns” for applications using zkSNARKs.

(video) Ecne: A verifier for zk-arithmetizations. A tool for verifying the soundness of ZK circuits. Ecne uses elementary but clever tools to analyze ZK circuits efficiently, which are (under the hood) just systems of polynomial equations.

zkECDSA (Part 1, Part 2). Implementation of ZK circuits for the ECDSA signature scheme, and a suite of clever but elementary optimizations for performing elliptic curve operations inside of ZK.

A Succinct Story of Zero-Knowledge. Tracing the roots of ZK proofs back to complexity theory and the PCP theorem.

General ZK Circuit Exercises

If this is your first time working with SNARKs and you’re looking to get onboarded as quickly as possible, we recommend using the circom/snarkjs toolstack and trying the following starter exercises. Circom and snarkjs use a proving system that is particularly easy to understand and get up-to-speed in.