I am new to block chain and was looking at how block chain work mainly proof of stake based . They check validity by going through all the transactions which is something concerning as everyone can see the transactions. So what are ways to hide all transactions and also make everyone able to check validity of new block. This question is not only for block chain relm but also for cryptography.
So what are ways to hide all transactions
In the blockchain used by Bitcoin it is not ever possible to hide transaction details because the integrity of the whole system depends on those being public.
However the sensitive parts of those details are mostly Bitcoin-addresses and amounts. There is a privacy issue if observers can infer information by comparing use of the same address across multiple transactions.
This is why Bitcoin (for example) is often described as not anonymous but as psedonymous. You can't see people's names in transaction data but you can see the Bitcoin-addresses.
Generally people hide their identity by
- never re-using Bitcoin-addresses and by
- using coin tumblers.
This makes it very very difficult for third-party observers to associate a transaction with a specific person.
Generally, what you want to hide is the correspondence between outputs and inputs. So, for example, say you send me one unit of currency and then I send one unit of currency to someone else. What we don't need to hide:
- You had one unit of currency to send.
- You wanted to send that one unit of currency somewhere.
- You no longer have the one unit of currency you had in step 1.
- I had one unit of currency.
- I want to send that one unit of currency somewhere.
- My transfer of one unit of currency will prevent me from sending one unit of currency that I could previous send.
What we don't want to reveal:
- The one unit of currency that I transferred is the same unit of currency that you transferred.
There are various cryptographic techniques that can be used to reveal the six things we do need to reveal without revealing the one thing we don't want to reveal. Zcash, for example, does this by having a person prove that they rendered unusable one output that they previously could have used without revealing which output they've rendered unusable. So if you send me one unit of zcash and I send one unit of zcash somewhere, it is not possible to connect the unit you send me with the unit I sent. All you know is that I previously had one unit of zcash I could send and now I do not, but it can be any unit of zcash send previously.