Editor's note (2026): This article was published in 2018, when zero-knowledge proofs were primarily discussed in the context of privacy coins like Zcash and Monero. Since then, the most transformative application of ZK technology has proven to be scalability rather than privacy: zk-rollups (such as zkSync, StarkNet, Polygon zkEVM, and Scroll) now use zero-knowledge proofs to compress and verify thousands of transactions on Ethereum Layer 2. The cryptographic foundations of zk-SNARKs and zk-STARKs explained here remain accurate, and the article provides valuable context for understanding the theoretical underpinnings of what has become a central pillar of blockchain infrastructure. Last reviewed: April 2026

Blockchain and Smart Contracts News/
zk-SNARKS and zk-STARKS: Zero-knowledge Proofs Description and How Do zk-SNARKS Work

ZK-SNARKS and ZK-STARKS

Along with the numerous advantages of the Internet from which we can benefit, privacy is at risk when using it for social media or business purposes.

Around 90 million Facebook clients suffered damage from the data of Cambridge Analytica.The Wall Street Journalstated that this is just the beginning, and the results are expected to grow.

The Equifax data breach revealed private user information on social media channels. Thus, dates of birth for the majority of the population were exposed. The data of more than 55 million customers was also shared because of the Uber hack.

The security issues are obvious.

Confidentiality on Blockchain

Cryptocurrencies are primarily focused on the financial market, and offer execution of monetary and value transactions in the network. Blockchain technology enables money-exchange procedures and does not require a trusted third party.

This type of approach can also lead us to the loss or theft of our digital property. It can reveal our personal data or expose us to hacking, which can cause awful results for all parties.

Bitcoin, as a peer-to-peer network, provides access to all available ledger data. As blockchain is characterized by an open and transparent nature, every node has direct access to all records of all transactions that have ever been conducted on the network. In general, each node has the ability to trace any of the records and find out the total amount of Bitcoins in a particular blockchain wallet.

However, conducting a crypto transaction makes pseudonymity impossible. It reveals some of the data of the wallet owner, which can lead to a loss of financial security.

Blockchain technology lacks confidentiality, which has caused some difficulties with cryptocurrency acceptance. Privacy is a decisive factor that interferes with the implementation of its full potential.

The New Game-Changers: zk-SNARKS and zk-STARKS

Today, two leading technologies are offering their cryptocurrencies —MoneroandZCash— and are striving to solve protection issues. Monero uses the Ring Confidential signature technology. In contrast, Z-Cash takes advantage of zk-SNARK (Zero-knowledge scalable transparent argument of knowledge), a technology that provides the ability to conduct anonymous transactions.

zk-STARKs aim to provide fast, scalable solutions to ensure financial security. In this way, transaction encryption is possible. zk-STARKs were listed as one of the 10 Breakthrough Technologies of 2018. The fact that such widely-known organizations as R3 and Ethereum have already started to implement zk-STARKs in their use cases is proof of the high potential of zk-SNARKS.

Shafi Goldwasser, Silvio Micali, and Charles Rackoff created ZKPs in the 1980s. They’re exploring systems with which users can prove data by stating that they have knowledge of certain data without exposing it.

zk-SNARKs are built on Black2b cryptography that provides the ability to verify knowledge through one of the parties with ring-signature verification. As of today, only Zcash uses this technology.

The features of a Zero-knowledge proof:

zk-SNARK (zero-knowledge Succinct Non-Interactive ARgument of Knowledge) needs to be:

Smart contracts have a self-executing nature. To conduct a transaction, a sender has to transfer money to a receiver. After this, a smart contract can implement the transfer. However, some data is better to keep encrypted, to allow only the sender and receiver to trace it. ZKP helps to conduct a transaction and avoid revealing the participants, currency and sent amount.

It is worth saying that some groups can track the transactions of the largest wallet owners. However, they can only minimize the list of wallet owners for several individuals. There is no possibility of identifying the real wallet owner.

Zero-Knowledge Proofs

Before the appearance of ZKPs, a prover could be malicious and could cheat a verifier. Shafi Goldwasser, Silvio Micali, and Charles Rackoff questioned the true intentions of the verifier. They thought about how to reveal whether or not a verifier is telling the truth, and whether a prover can trust him/her.

To protect ourselves, we must first set a strong password and send it to the server. Then, the server hashes the password and checks to see whether it is correct. If someone tries to log in, the website will ask for a password. In case of attack, the password is compromised, and the results can be dire.

Zero-knowledge proofs provide a tool to help avoid such a scenario.

ZKP consists of two players:a proveranda verifier. The verifier has to convince the prover that he/she knows certain data of a secret item, but he/she doesn’t need to say any information about it.

Let’s imagine that program C possesses two parameters: x and w. The first one is public, and the other contains secret data. The result can be either true or false. The first player has to prove that he/she knows secret witness w, so C(x,w) is true.

If someone just wants to prove that he or she knows a secret piece of information without telling it to anyone, zk-SNARK is the best solution.

zk-SNARK has three inputs: G, P, and V.

G has a secret parameter, and the program creates two public keys: a proving key and a verification key. These inputs are open, and can be created only once.

Proof vs. Proof of Statement

With ZKP, we can prove two types of data:proof of the factandproof of knowledge.

Proofs of fact are the well-known truths that a user wants to prove with ZKP: for example, whether data B belongs to group C.

Proof of knowledge is a way of stating that you have knowledge of a particular item without exposing any detail on it.

Remember that proving facts and proving knowledge are different, so the solutions to them can be completely different, too. The cryptocurrency world is based on “proof of knowledge,” as it gives no proofs to its users, so they must work on the basis of trust.

There is only the possibility to transform a particular fact into the correct parameter, and to prove it only after this step. The commonly-accepted form is “quadratic arithmetic program” (QAP), which is set to transform the code of a function.

Along with this function, users are provided with the ability to convert a fact into a QAP with input to the code and generate a solution, which is also called a “witness”.

The Difference Between zk-STARKs and zk-SNARKs

The more developed version of zk-SNARKS is called zk-STARKs (Zero-Knowledge Succinct Transparent Argument of Knowledge). It was created by Eli-Ben Sasson, a professor at the Technion-Israel Institute of Technology. He issued a special document that describes a faster solution in comparison to zk-SNARKS.

zk-SNARKs use public-key cryptography for safety, which means that they demand a leaner symmetric cryptography and collision-resistant hash functions. It also excludes some procedures of zk-SNARKs that need more money investments and are more vulnerable to attacks. zk-STARKs offer a set of solutions to surpass zk-SNARKs.

For zk-STARKs, we do not need a trusted setup that decreases money and time resources spent. The main differences between zk-SNARKS and zk-STARKs are:

One more thing to consider is that zk-SNARK is difficult to apply at the complexity of the proofs scale.

The Trusted Execution Environment(TEE) allows the offloading of secret computations in blockchain-based networks. TEE technologies — for example, Intel’s Software Guard Extensions (SGX) — isolate code execution, remote attestation, secure provisioning, and safe storage of data. Moreover, applications that use TEE are highly protected from hackers.

Voting

One more case that is definitely taking an advantage of ZKPs isvoting. The voting procedure is well-known to every citizen of any country that has ever participated in a presidential election. A person endowed with voting rights chooses, in his or her opinion, the most suitable candidate from the others.

However, this requires personal verification, so many people are afraid of being judged for their choice. ZKP provides the option to vote faster, cheaper, and anonymously.

ZKP in Cryptocurrency

The Zcash cryptocurrency was developed by Zerocoin Electric Coin Company in September 2016. Zcash is the first cryptocurrency that applied ZKP to blockchain technology. This cryptocurrency provides fast, totally secure transactions without sharing data (for example, addresses or location) with anyone.

Zcash integration in Ethereum is an advantageous way of entering the Metropolis phase for Ethereum. Zooko Wilcox, Chief Developer at Z-Cash, presented at DevCon2 in Shanghai, where he described three methods of zk-SNARK application to Ethereum:

  1. Baby Zoe (Zoe = Zcash on Ethereum). This is about adding a zk-SNARK pre-compiler on Ethereum and creating a Zcash smart contract on the platform. It helps to determine whether Ethereum will allow the creation of a zk-SNARK on top of its network.
  2. Integration of Ethereum computability within Zcash.
  3. The Alchemy project was designed to establish cooperation between two blockchains. It can be implemented by cloning BTC Relay, an Ethereum script that provides a Bitcoin light client.
  4. Zero-knowledge proof offers an open and advantageous space for transaction implementation. The verification algorithm consists of building blocks that are included in Ethereum as precompiled contracts.

The generator runs out of the network to generate a proving key and a verification key. The prover establishes a proof with the proving key. This can also be implemented off-chain.

The verification algorithm is run along with the proof, the verification key, and the public parameters, which are added as the input data.

Let’s find out how zk-SNARKs can solve privacy issues on the network. A token contract has a mapping from addresses to balances:

mapping (address => uint256) balances

Now, let’s keep the same code, replacing the balance with the hash of the balance:

mapping (address => bytes32) balance Hashes

In this way, we cannot hide the addresses of users sending or receiving a transaction; only the balance and amount. This is also called a confidential transaction.

zk-SNARKs are used to transfer tokens from one address to another when one is generated by the sender and the other by the receiver.

As a rule, proving the size value of a transaction requires parameter verification:

balances[fromAddress] >= value
Remember that the hashes have to match the balances. Here is the program with x and w - the public and private inputs:
function senderFunction(x, w) {
return (
w.senderBalanceBefore > w.value &&
sha256(w.value) == x.hashValue &&
sha256(w.senderBalanceBefore) == x.hashSenderBalanceBefore &&
sha256(w.senderBalanceBefore - w.value) == x.hashSenderBalanceAfter
)
}

The program below is the receiver’s:

function receiverFunction(x, w) {
return (
sha256(w.value) == x.hashValue &&
sha256(w.receiverBalanceBefore) == x.hashReceiverBalanceBefore &&
sha256(w.receiverBalanceBefore + w.value) == x.hashReceiverBalanceAfter
)
}

The program checks the match between the balance, the value, and all hashes:

function transfer(address _to, bytes32 hashValue, bytes32 hashSenderBalanceAfter, bytes32 hashReceiverBalanceAfter, bytes zkProofSender, bytes zkProofReceiver) {
bytes32 hashSenderBalanceBefore = balanceHashes[msg.sender];
bytes32 hashReceiverBalanceBefore = balanceHashes[_to];

bool senderProofIsCorrect = zksnarkverify(confTxSenderVk, [hashSenderBalanceBefore, hashSenderBalanceAfter, hashValue], zkProofSender);

bool receiverProofIsCorrect = zksnarkverify(confTxReceiverVk, [hashReceiverBalanceBefore, hashReceiverBalanceAfter, hashValue], zkProofReceiver);

if(senderProofIsCorrect && receiverProofIsCorrect) {
balanceHashes[msg.sender] = hashSenderBalanceAfter;
balanceHashes[_to] = hashReceiverBalanceAfter;
}
}

For appropriate transaction implementation from the confidential side, one has to address a number of issues:

Actually, the biggest challenge facing zk-SNARK technology trust conditions in the setup phase. Users can’t find out whether the setup phase has been ever compromised. So the main appeal is to be fair and build honest relations within the network.

Conclusion

Privacy is not a problem of blockchain anymore with Zero-Knowledge Proof technology. ZKPs allow nodes to prove data without exposing it. The following companies have already applied ZKP into their technologies:

Do you want to benefit from ZKP technology, too? Contact Applicature for information specific to your case!

Need help with a blockchain project?

Applicature has been building blockchain solutions since 2017. Talk to our experts.

Get a Free Consultation