Early blockchains served as decentralized ledgers: creating trust by guaranteeing that each new entry securely built on previous entries. Smart contracting systems like Ethereum added intelligence to on-chain operations, making it possible to run simple computer scripts.
These second-generation systems are still plagued by speed bottlenecks and permissioning issues. Secured “on-chain” operations must be duplicated by all nodes on the network, capping the size of data and computation, or limiting the size of the network. Because all nodes have access to on-chain operations and data, sensitive data and operations can’t be handled by the blockchain. As a work-around, many applications use blockchains as a transparent and secure permission management system, but keep the bulk of computation and data storage off-chain. This implicitly requires that the nodes be trusted for accurately conducting all computations, and not tampering or mis-managing data (e.g. by making a copy of a permissioned dataset).
To overcome these challenges, the Ethereum Foundation (and other blockchain researchers like the ZCash team) are actively researching the use of zero-knowledge proofs for adding security to off-chain computations. These zk-Snarks allow a node to provide a secure certificate that it has accurately performed a prescribed computation, without revealing the underlying data or requiring that the computation be duplicated.
To this stack, I would add Secure Multi-Party Computation as another technique that will unlock a slew of new applications, creating a new generation of blockchains and distributed apps. In SMPC protocols, participants cooperate to trustlessly perform a shared computation, without revealing anything about the inputs.
This solves two key issues with current blockchains: Currently, all messages are visible throughout the network, making it impossible to anonymize message content while preserving the transparency of the system. Also, current blockchains are plagued by an “all-or-nothing” approach to trust: either a node is completely trusted to run off-chain computations securely, or it serves simply as a data originator, and computations are run on-chain.
Blending zk-snarks and SMPC means that a node can prove that local computations were run effectively, then combine those updates with other nodes anonymously, without revealing anything about its private data or constraints.
The potential applications for this are enormous, including:
- Privacy-preserving machine learning where the estimate can be separated from the underlying data
- Trustless “dark pools” which allow for distributed markets to securely clear bids and offers, without yielding the bid stack or identity of any participants
- Automated, conditional payment-for-service without revealing the nature of the service or the identity of either party
- Trustless scheduling and dispatch where constraints can be kept private (similar to a privacy-preserving version of our microgrid research)
- Fully anonymized polling and decision-making (or any consensus operation)
I’m immensely excited about this prospect, and plan to post more on the details of this in the future!