All About Zero Knowledge Proofs
Zero Knowledge Proofs enable trusted transactions while ensuring data privacy for transacting parties.
Sui natively supports a technology called Zero Knowledge Proofs (ZKP), which lets people securely transact with each other online while keeping their personal information private. An important aspect of ZKPs is how they let a person trust a transaction while knowing little about the other party to that transaction.
ZKPs are often used to verify the identities of transacting parties, but may also verify other data. For example, a ZKP may verify that a purchaser has the funds to buy something, without showing the seller the exact amount of funds in the account.
ZKPs satisfy Sui users' desire for privacy while also allowing trustworthy transactions.
Practical ZKPs
As a ZKP example in the physical world, a person may give their credit card to a cashier to complete a purchase. To verify ownership of the credit card, the cashier asks to see a signed photo ID. Comparing the signatures on credit card and ID, and the photo on the ID with the person presenting the credit card, the cashier verifies the person is the proper owner of the card. Importantly in this case, the cashier only uses the signature and photo to verify ownership, while not needing to delve any further into the person's background.
ZKPs take this real-world verification and translate it to the online world using a computational model. They employ a variety of equations that verify one party in a transaction knows a specific piece of information without revealing that specific information to the other party. Because of the need to keep the sensitive data secret, these equations typically offer a very high degree of probability that the first party knows the data, without giving 100 percent certainty. However, the probability is so high that it can be used for trusted transactions.
On Sui, the Move API can use a version of ZKP called Groth16, part of a family called Zero-Knowledge Succinct Non-interactive Argument of Knowledge proofs (zk-SNARKs). Groth16, named after its inventor Jens Groth, a professor at University College London, is a system for performing ZKPs, and in the Sui implementation can use either the BN254 or BLS12-381 elliptic curve constructions, algorithms needed to compute the proofs.
The computational models required to run ZKPs can be resource intensive, taking time and requiring a lot of processing power. Groth16 notably runs more efficiently than other ZKP systems, making it suitable for Sui's decentralized network.
Privacy and trust
One bedrock of blockchain networks involves trading digital assets of value. Online networks can't offer the kinds of face-to-face interactions used in real-world transactions, where a buyer may receive a physical object to verify the transaction's validity. On the opposite pole, Web2 transactions require a high degree of implicit trust and add-on systems, such as entirely separate banking networks.
The ability to make trusted transactions is baked into Sui. Through its APIs, Sui natively supports the latest technologies to ensure privacy and trust between transacting parties.
The Sui documentation gives code snippets and a great start for implementing ZKPs.