How to prove you know (or have) something without giving up any information about what it is you know
In open blockchains like Bitcoin, Ethereum and many others, the transaction is public and open to all, showing who is sending it, who is receiving it and how much is changing hands. You can then see into all transactions in an out of those addresses, revealing their whole history. This level of openness makes many uncomfortable. So how can we make things a little more private?
How do you hide how much you are transacting, the data you are sending or your identity?
One simple solution could be hashing the entire transaction with the public key of the recipient, making it only readable by them. This is a great solution but this creates a couple issues. That data in the output is used for validating the transaction, populating the wallet with data and serves as the input to future outputs. Hiding that data behind a hash would therefore make it unavailable. Otherwise this is a great solution. Maybe we can solve these issues one by one. First, we have to prove that the data within the encrypted transaction is valid without giving up our privacy.
This is where zero-knowledge proofs come in…