# What are zk-Proofs?

Zero Knowledge Proof (zk-Proof) is a method by which one party can prove a certain claim, statement, or information to another party without revealing any confidential details.

One might ask what would be the need for something like this when data can be easily verified through official documentation etc.? Well, in some cases, when data is sensitive and could be easily misused for fraudulent or criminal purposes; a method which allows us to reach the same conclusive result, without having to delineate the exact information, as we would reach if we had to reveal all details is not just preferred but could save us from several security threats.

For example, giving out personal information like name, social security number, address, phone number etc. to prove one’s nationality or for any other purpose, could allow someone else to impersonate us and thus commit identity theft. Of course, in reality, information like this is usually secured as best as it can be, but the truth of the matter remains that the information by nature of being shared is out in the world, and hackers or people with malicious intent could by some effort gain access to it.

The same logic can be applied to high profile documents which may contain secrets regarding a government’s strategy, country’s weaponry etc. or even the financial records of important people. With zk-Proofs it is possible to get the same results for analysis without breach of privacy.

# How do zk-Proofs make this possible?

Before we know how zk-Proofs work, it is important to understand the different elements in a proof. There are three main elements, namely;** witness**,** challenge** and **response**.

These terms can be described very briefly as follows:

**Witness:**The statement that the user wants to prove without revealing any details.**Challenge:**The queries that the user solves for verification purposes.**Response:**The solved answer from the prover to the verifier which confirms that the witness is in fact in the user’s possession.

Now onto the working, which involves three unique roles in the zk-Proof. Each of these roles is responsible for a specific task and they work together to give the end result i.e., final verification of a claim.

The first role is **the creator** whose task is to use a specific program and a certain randomness as input to the **key generator algorithm** and produce the proving key (pk) and verification key (vk) as output.

The proving key is sent to the **prover**, which is the second role. The prover uses this key, the witness and a public parameter to generate a proof (as defined by the creator) and then sends this proof to the **verifier**, which is the last role in this entire scheme.

Using the verification key, the proof from the prover and the public parameter, the verifier validates the proof and returns either true or false.

# Types of zk-Proofs

Broadly speaking, zk-Proofs can be divided into two main categories — **interactive** and **non-interactive** proofs. The first type required several rounds of back and forth communication between the two parties (i.e. the prover and verifier) for validation, which meant that the proof was not available for independent verification. This was both a time consuming and more energy consuming process, therefore it found limited application.

However, these issues were resolved in the second type, which required only one round of communication and both parties would agree with the verdict of a trusted setup rather than continuously interacting with each other.

Among non-interactive types, zk-SNARKs and zk-STARKs are probably the most important. **zk-SNARKs** (zero knowledge succinct non-interactive arguments of knowledge) are faster to generate and are being used by Zcash. A major concern with them is the security of the randomness factor which is used to generate Common Reference Strings (CRS) or public parameters. If this randomness factor gets into the wrong hands, they could use it to construct false proofs.

**zk-STARKs** (zero knowledge scalable transparent arguments of knowledge) are similar to zk-SNARKs with the difference that they are more scalable and transparent which makes them smaller and cheaper to verify on ethereum.

For more information on the working of zk-Proofs you can head over the article by GenesisLab.com

Understanding zk-Proofs is important as they are used in developing zk-rollups which are layer 2 blockchain solutions for scalability and are quickly gaining popularity due to their usefulness.