Collaborative zk snarks are generalization of zk snarks where instead of a single prover, multiple provers posses parts of the secret data and generate proofs such that no coalition of parties reveal anything about the secret other than its validity. This emerges as potential application for distributed oracle setting where oracles on behalf of the user fetch encrypted TLS data but they do not posses the key to decrypt it , having a the user run zk prover alone could take much of the computational resources. Additionally we also want the oracle not to corrupt the encrypted TLS data. Collaborative zk can distribute the proof generation such that the user does not have to take load of complete proof generation rather the oracle also lend their resources during proof generation reducing the computation time of the prover.

Getting Started

Before connecting Collaborative ZK circuits make sure you have an MPC connection with either D-AUTH FAST WIDGET or D-AUTH SDK.

The following are the components of the TLS with Collaborative snark setting:

  1. TLS Server: The data source.
  2. TLS Client: The user requesting the data. Client will prove the tls data integrity along with oracles.
  3. Oracles: Decentralized group of oracles that request data on behalf of the user.
  4. Verifier: Any external verifier of the proof.
  5. n: number of parties along with the TLS client.

Overview of Proof Generation by TLS Client and Oracles

  • The TLS Server and the Client undergo TLS handshake to generate the TLS session key sessionkey.
  • The Client requests data from the TLS Server.
  • TLS Server sends the encrypted data to the Client: C = Encrypt(T LSdata , sessionkey ).
  • TLS Client commits sessionkey.
  • TLS Client along with the Oracles generates n shares of the sessionkey.
  • The TLS Client commits to his share sskey1.
  • The oracles commits to their shares sskeyn.
  • The TLS Client and the Oracle generate the proof by invoking Collaborative zk snark circuit for the decryption function: P roof = Collaborative−ZK−Decryption−Circuit([ssk1, ssk2...sskn], C).
  • The Oracles send the Proof to the Verifier.


If you encounter any issues or have questions during the integration process, our support team is here to assist you.

Support Contact

Thank you for choosing ZKON. We're excited to be a part of your journey towards a more secure and decentralized world.

Contact us

We have received your submission! Wait for ZKON to contact you at the e-mail address provided.
Thank you very much!
Oops! Something went wrong when you submitted the form. Please try again or fill in any missing fields.