https://coinengineer.net/blog/zero-knowledge-proof-technology-explained/