# ZKP’s — for dummies

Zero knowledge proofs are extremely powerful security primitives that are likely going to be integrated in many of our computer systems (especially the newer tech like Blockchain and other distributed systems)

In attempts to understand, utilize and build programs around ZKP’s I took a deep dive into the scary world of knowledglessness.

This article contains some of my words and many links and excepts from various places on line.

The content ranges from technical reads to simplified videos. I hope these are helpful for building an intuitive understanding of ZKP’s their uses and current progress.

# My Takeaways

Zero Knowledge **and** Proof should not be confused. They are separate topics and caused me much confusion when looking into ZKPs. This is an important distinction. Zero Knowledge simply means that no information was leaked, while proving — allows a verifier to reason that the information they received did is actually true.

ZKP’s are awesome tools and are difficult to develop in a production setting at the current time. The math is sound and libraries are available — but mostly in systems languages `C++`

,`rust`

and `haskell`

which may be most sustainable (but are not languages that promote shared understanding — and easy prototyping). It is currently hard for a developer to leverage the full potential of ZKPs due to their complex math and low level implementations. I imagine that this will get much easier over time as higher level packages get written on top of the early implementations.

Zero Knowledge Proofs require a strong mathematical background — being that a lot of the programming work is translating problems into arithmetic circuits which can be used to create quadratic arithmetic programs, a fundamental part of ZKP’s. It is important that a developer understands how to reduce the question they are trying to prove to a series of `a*b=c`

form (see the article STARKs, Part I: Proofs with Polynomials below)

# Differing Methods

In the wild there are a few flavors of ZKP’s in production. Monero (Bulletproof) — ZCash (SNARKS) and Ethereum with a focus on STARKS.

These three systems have time, space and initial setup tradeoffs. For instance SNARKS requires a Trusted Setup while STARKS and Bulletproof do not.

The reference implementations of STARKS are written in C++ while Bulletproof is in Haskell and some of the research work from the ZCash community is in Rust (Bellman).

# Business Value?

Math is always fun, but what are the practical implications of ZKP’s — and more specifically non-interactive ZKP’s?

**If the theory is 20+ years old, why am I hearing about it now?**

Well, thats the story with a lot of abstract mathematical concepts. The underpinnings of our modern day devices, protocols and software work because of theories someone first realized hundreds of years ago. Math is a way to describe systems in the world we experience (and some crazier math explores worlds we cant experience)

**From a lower level, what does it actually prove? Hows that applicable for my business?**

Well, the current implementations can prove (theoretically anything) but practically the tools available allow you to build arbitrary proofs of arithmetic circuits.

**Here is more insight into the value ZKPs can provide.**