Zero Knowledge Proof (ZKP)
Zero knowledge proof or protocol is a way for a “prover” to convince a “verifier” that a statement about some secret information is true without revealing the secret itself. The proof protocol may be interactive or non-interactive.
Example: a verifier presents a prover with a hash H, and would like the prover to provide proof that she has the secret data that hashes to H. The prover produce a zero knowledge proof that convinces the verifier that she has the data that hashes to H, without revealing the data itself to the verifier.
Zero knowledge proof of work, AKA zero knowledge proof of computation, is when a prover convinces a verifier that he has correctly executed some computation on secret data, without revealing the secrets.
Zero-knowledge authentication is when a prover convinces a verifier that she is in possession of an identifying secret, without revealing the secret itself. One example for zero-knowledge authentication is when a prover has an asymmetric key-pair (e.g. RSA, EC) and using the private key (the identifying secret) to respond to a challenge sent with the public key. The private key is never revealed, but the verifier is convinced that the prover has the key.
Blockchains is a list of records that are managed collectively by multiple distributed parties, where each party can hold a copy of the list. Blockchains allow all parties to see all transactions, which means that they provide no privacy/anonymity. Zero-knowledge proofs allow for privacy-preserving confidential transactions to be posted to the blockchain by providing a means to prove that the transaction was carried out correctly without revealing the secret information that was used in the transaction (i.e. addresses, amounts, etc.). A transaction in a cryptocurrency blockchain is the transfer of funds from one address to another. In an Ethereum blockchain, it can be the execution of an arbitrary smart contract.
SNARK stands for Succinct, Non-interactive, ARguments of Knowledge. zk SNARK provides a way to prove/verify the correctness of computations without having to execute them and without having to reveal any secret information that may have gone into the computations – the verifier just knows the computation was done correctly. The underlying mathematical and cryptographic mechanisms that enable this magic quote are complicated and beyond the scope of this Wiki.
Possible applications of zero knowledge proofs include:
• Confidential transactions on blockchains – transaction data is encrypted and a proof posted to prove it was computed correctly.
• Performance optimizations for distributed applications on blockchains (i.e. Ethereum smart contracts) – application code is executed off-chain, or by a single node on the blockchain network, and only a proof for its correct execution is posted to the blockchain for other parties to verify its correctness.
• Zero knowledge identity – uPort.
• Privacy-preserving verification – a borrower (prover) produces zero knowledge proof to a credit provider (verifier) that he is credit worthy without providing access to private financial records.
When a party can prove to another party that a statement is true, without reviling the actual statement, the verifying party knows that the statement is true without knowing the actual statement.
Zero knowledge proof allows three components of the authentication process:
1) Authentication with untrusted/unknown parties that require remote access
2) Authentication over untrusted channels
3) In some cases – key derivation function (KDF) based on the exchange