# On ZKPs, STARKS, SNARKS

*General information on the topic of ZKPs, not necessarily structured but should be ongoing article as I continue to learn about this technology. These are just notes specifically from meetup on ZKPs.*

Honest computation through Zero Knowledge Proofs is a set of steps. It is this complex math and application of the cryptographic primitives that are ultimately provide proofs. Forms of Zero-Knowledge proofs provide post-quantum secure, scalablity and privacy improvements to blockchain based, game theory driven software applications that can provide an honest deduction of the steps taken to reach a provable outcome.

There are three sets of zero knowledge proofs and their application are becoming more implemented for scaling and batching transactions sets:

- SNARKS
- STARKS
- BULLETPROOFS

**SNARKS**

f(x) = y

Suppose that you have a (public) function f, a (private) input x and a (public) output y. You want to prove that you know an x such that f(x) = y, without revealing what x is. Furthermore, for the proof to be *succinct*, you want it to be verifiable much more quickly than computing f itself.

Snarkjs – Snark JavaScript

Circom – DML Language for creating circuits

Bellman – Rust Implementation

ZoKrates

**ZKP Steps**

- Trusted Setup
- Challenge
- Proof
- Verify

**STARKS – **STARKs (“Scalable Transparent ARgument of Knowledge” are a technique for creating a proof that f(x)=y where f may potentially take a very long time to calculate, but where the proof can be verified very quickly. With the T standing for “transparent”, ZK-STARKs resolve one of the primary weaknesses of ZK-SNARKs, its reliance on a “trusted setup”.

F(X, Y) = Z

F **Any Function**

X Public Input

Y Private Input

Y Public Outputs

**BULLETPROOFS**

BulletProofs(Range Proofs)

any number can be represented as inner product of two vectors

need at least 3 bits to represent 5 n has to be at least 3

That assignment of a is correct.

I am going to create a simple Zero Knowledge Proof Generator that can be spun up as a docker container and run as a serverless container.

honest multiparty computation across stakeholders

merkle path to the cover transactions entire blockchain

SNARK 288 bytes STARKS

ZKPs uses SNARKs

compress the blockchain using

Bulletproofs are used for proofs in monero

batching transactions using ZeroKnowledgeProofs

SNARKs

STARKs

Bulletpoorf

Bellman Rust Implementation

Circom (Iden3s)

Modular Math

diffie hellman

p=23(modulus)g=5(base)

RSA Choose 2 primes p-3 q -5

n=p*q=15

g is a number generator

wants to prove that she knows x, such that u y = g of x

and sends t that t = g of v

bob pics random c send to

ECDHE for https://

Abelian Group Properties for a set G

ECC – Multiplication

Logarithm Problem

ECC – Finate Fields & Discrete Logs

P+P = ? in a finite field

ECDSA signature

multiple private key by generator point and get the point

Pedersen Commitment basis for Grin

you could user Q = vG to “hash” or hide amounts per tx

Com(v) = vG+bH

Com(v1) = v1G+b1H

Com(v2)=v2G+b2H

STARKS

SNARKS – QAP

The are many variants of SNARKs

QAP variant(quadratic arithmetic program):

Computation -> Arithmetic Circuit -> R1CS

x + y + 4 = 10

without telling x or y

x*y

x*y=4

left input, right input and output.

Lagrade

L*R

L(x)*R(x) = O(x) for x in {1,2}

The prover would send evaluations of x for L,R,), and H polynomials

But how would we ensure that

1) This “x” is hidden

2) Prover actually uses its polynomials

doing operations on the encrypted number

challenger to send a challenge encrypted

use a polynomial to answer back.

Who knows what s was in plaintext

setup for this challenge that is encrypted and hardcoded in the entire system

How can we evaluate a value that is encrypted

Adding zero-knowledge:

blinding factors

Setup

Prover has L, R O and H polynomials

Prover sends E(L(s)), E(R(s)), E(O(s)),E(H(s))

Anyone in the network can verify it

Pairing of Elliptic Curves for the Verified

This went over the Pinnochio

SNARKs –

- Research in pairings
- Research in optionality of elliptic curves
- Lattice-based SNARKs
- Tokenized World Scenario
- How do we scale this.

**Scaling Blockchains**

Layer 1

- Polkadot
- DFinity
- Cosmos
- Sharding
- Pruning
- PoS
- Casper
- State Rent
- WASM WASM as core for scaling.
- ZKPs

Layer 2

- DApps
- Plasma Cash
- Ignis
- RollUp

Layer 2 Scaling

- Data on Chain
- compression
- Data Off cain
- merkletrees
- accumulators
- vector commitments
- ZKPs
- Honest Proofs
- signature aggregation
- Fraud Proofs

Off-chain ZKPs

Honest ZKPs

STARK Batching

F(X, Y) = Z

F Any Function

X Public Input

More information:

circom DSL