Free 30-min Web3 Consultation
Book Now
Smart Contract Security Audits
Learn More
Custom DeFi Protocol Development
Explore
Full-Stack Web3 dApp Development
View Services
Free 30-min Web3 Consultation
Book Now
Smart Contract Security Audits
Learn More
Custom DeFi Protocol Development
Explore
Full-Stack Web3 dApp Development
View Services
Free 30-min Web3 Consultation
Book Now
Smart Contract Security Audits
Learn More
Custom DeFi Protocol Development
Explore
Full-Stack Web3 dApp Development
View Services
Free 30-min Web3 Consultation
Book Now
Smart Contract Security Audits
Learn More
Custom DeFi Protocol Development
Explore
Full-Stack Web3 dApp Development
View Services
LABS
Guides

How to Design Trusted Setup Processes

A technical guide for developers implementing secure multi-party computation (MPC) ceremonies for ZK-SNARK proving systems like Groth16 and Plonk.
Chainscore © 2026
introduction
CRYPTOGRAPHIC FOUNDATIONS

How to Design Trusted Setup Processes

A practical guide to designing secure and verifiable trusted setup ceremonies for cryptographic systems like zk-SNARKs, covering threat models, participant selection, and protocol design.

A trusted setup ceremony is a cryptographic ritual that generates the public parameters, or common reference string (CRS), for a proving system like a zk-SNARK. The core security assumption is that at least one participant in the ceremony must destroy their secret randomness, or toxic waste. If all participants collude, they could forge fraudulent proofs. The goal of the design is to make this collusion practically impossible by structuring the ceremony to maximize decentralization, verifiability, and participant integrity. This process is foundational for systems like Zcash's original Sprout ceremony, Tornado Cash, and many Layer 2 rollups.

Design begins with a clear threat model. You must define what constitutes a failure: is it a single malicious participant, a coordinated group, or coercion of participants? For most applications, the 1-of-N trust assumption is targeted, where security holds if at least one participant is honest. The ceremony protocol must then be structured to ensure this. Key design choices include the multi-party computation (MPC) protocol used (e.g., continuous or parallel), the number of participants, their selection process, and the mechanisms for public verifiability of each participant's contribution.

Participant selection is critical. A diverse, credible, and technically capable set of contributors reduces collusion risk. Common strategies include involving independent researchers (like the Zcash Powers of Tau), well-known entities in the crypto space, and potentially using a public contribution phase. Each participant runs a client software that performs a computation on the previous CRS, embedding their secret. The output must include a zero-knowledge proof of correct computation (a PoTau proof) and a verification key, allowing anyone to cryptographically verify that the step was performed correctly without learning the secret.

The ceremony protocol itself must be robust and asynchronous. In a sequential ceremony, participants act one after another, which is simpler but has higher latency and a single point of failure if a participant drops out. A parallel ceremony, where participants compute on a shared initial state and then combine results, is more complex but faster and more resilient. Tools like the Perpetual Powers of Tau ceremony provide a reusable setup that many projects can leverage, but application-specific trusted setups are still required for the final circuit-specific phase.

Transparency and verifiability are non-negotiable. All ceremony artifacts—source code, contributor identities, timestamps, transaction IDs for on-chain commitments, and verification keys—must be permanently and publicly recorded. A successful design produces a publicly auditable transcript. Final steps involve a verification ritual by the community and independent auditors to check all proofs. The designed process must be documented in a clear specification, and the resulting CRS should be integrated into the application's proving system with checks to ensure it matches the verified final output.

prerequisites
PREREQUISITES FOR SETUP DESIGN

How to Design Trusted Setup Processes

A trusted setup is a foundational cryptographic ceremony that generates the initial parameters for a zero-knowledge proof system. This guide outlines the core principles and prerequisites for designing a secure and verifiable process.

A trusted setup is a one-time, multi-party computation (MPC) ceremony that produces a common reference string (CRS) or structured reference string (SRS). This string is the public parameter needed to generate and verify zero-knowledge proofs, such as zk-SNARKs (e.g., Groth16) or zk-STARKs. The core security assumption is that at least one participant in the ceremony was honest and destroyed their secret toxic waste—randomness that, if compromised, could allow forgery of proofs. The design goal is to minimize and distribute this trust.

The primary threat is a single point of failure. If one party generates all parameters in secret, the system's security rests entirely on that entity's honesty. To mitigate this, modern designs use multi-party ceremonies like Perpetual Powers of Tau. Here, many participants sequentially contribute randomness, each removing the previous contributor's toxic waste. The final parameters are secure as long as at least one participant was honest. This is quantified as a 1-of-N trust assumption, a significant improvement over a 1-of-1 model.

Designing the process requires defining the ceremony workflow. This includes the participant selection mechanism (public, permissioned, or hybrid), the contribution software (often a CLI tool or web client), and the verification method. Each contribution must generate a public transcript and a receipt (like a digital signature on the new SRS) to prove participation. The ceremony must be publicly verifiable, allowing anyone to cryptographically check that each contribution was valid and that the final output derives from the sequence of contributions.

Key technical prerequisites include selecting the underlying proof system (e.g., Groth16, Plonk) and its required circuit constraints. This determines the size and structure of the SRS. You must also choose a cryptographic library (like libsnark, arkworks, or bellman) and a contribution protocol (e.g., the Powers of Tau protocol). The ceremony coordinator must host secure infrastructure for receiving contributions and publishing transcripts, often using a publicly accessible data store like IPFS or a dedicated website for transparency.

Finally, process integrity depends on auditability and incentives. The design should facilitate independent audits of the software and the final output. To encourage broad participation, consider participant incentives, which can range from reputational recognition to token-based rewards. The entire process, from software audits to final parameter generation, should be documented transparently, as seen in ceremonies for Zcash's original Sprout setup or Semaphore's trusted setup. A well-designed process turns a critical weakness into a verifiably distributed trust anchor.

key-concepts-text
CORE CRYPTOGRAPHIC CONCEPTS

How to Design Trusted Setup Processes

A trusted setup is a foundational ceremony where a secret parameter is generated, used to create a public proving key, and then destroyed. Its security is critical for systems like zk-SNARKs and MPC.

A trusted setup is a cryptographic ceremony where a group of participants collaboratively generates a secret parameter, often called a toxic waste or structured reference string (SRS). This parameter is used to create the public proving and verification keys for a zero-knowledge proof system, such as Groth16. The core security assumption is that all participants must delete their secret shares after the ceremony; if even one participant is honest, the secret remains hidden. This process is trusted because security depends on the participants' actions, not just mathematical assumptions. Prominent examples include the original Zcash Sprout ceremony ("The Ceremony") and the Perpetual Powers of Tau used by projects like Tornado Cash and Semaphore.

Designing a secure ceremony requires mitigating single points of failure. The primary method is a multi-party computation (MPC) protocol where multiple participants sequentially contribute randomness. Each participant receives the current SRS, mixes in their secret randomness, and outputs an updated SRS. The final public parameters are safe as long as at least one participant was honest and destroyed their contribution. Key design considerations include: - Participant selection: A diverse, credible, and potentially adversarial set of participants increases security. - Verifiability: Each contribution must be publicly verifiable, allowing anyone to check its correctness without learning secrets. - Transcript publication: All intermediate states and proofs must be permanently recorded for public audit.

The technical workflow for a sequential MPC ceremony involves specific cryptographic operations. For a pairing-based zk-SNARK setup, each participant performs operations on elliptic curve groups G1 and G2. They take the current SRS, which contains elements like (g1, g1^τ, g1^{τ^2}, ..., g1^{τ^n}) and (g2, g2^τ), multiply each element by a secret scalar s, and output the updated SRS. A zero-knowledge proof of knowledge (e.g., a PoKE - Proof of Knowledge of Exponent) is generated to prove the participant knows s and performed the computation correctly, without revealing s. This proof is attached to the public transcript. Libraries like snarkjs and arkworks provide tools for implementing and verifying these contributions.

Beyond the basic MPC, advanced designs enhance security and usability. Universality means the SRS can be used for any circuit up to a fixed size, enabling reuse across applications (e.g., Perpetual Powers of Tau). Updatability allows new participants to contribute randomness at any time, weakening trust assumptions over the long term. For critical applications, ceremony engineering is vital: using air-gapped hardware, secure enclaves (like Intel SGX), and live-streamed procedures to maximize transparency and minimize attack vectors. The goal is to make malicious collusion or coercion logistically infeasible, transforming a 'trusted' setup into a 'trust-minimized' one through procedural rigor.

ceremony-phases
ZK-SNARK IMPLEMENTATION

Phases of a Trusted Setup Ceremony

A trusted setup ceremony is a multi-party computation (MPC) process to generate the public parameters (CRS) for a zk-SNARK circuit. This guide details the critical phases for designing a secure, verifiable, and decentralized ceremony.

01

1. Parameter Generation & Circuit Setup

This initial phase defines the cryptographic foundation. Developers must:

  • Fix the circuit and its constraints using a framework like Circom or Halo2.
  • Generate the Structured Reference String (SRS) or Common Reference String (CRS) seed. This is the initial toxic waste (secret parameters) that must be destroyed.
  • Publish the ceremony software, including the contribution client and verification tools, as open-source code for public audit.

Example: The Tornado Cash ceremony used a custom circuit and the snarkjs library to define its initial parameters.

02

2. Contribution Phase & MPC Protocol

Participants sequentially apply their secret randomness to the parameters. A well-designed protocol ensures:

  • Sequential contributions where each participant's output becomes the next's input.
  • Verifiable contributions using a Beacon (e.g., a future Bitcoin block hash) to guarantee the final contributor is unknown and unbiased.
  • Public attestations where each contributor publishes a receipt (ZK proof of correct computation) and, optionally, a public identity for social trust.

Key tools include snarkjs for Groth16 or the powersoftau library for universal setups.

03

3. Verification & Transcript Auditing

Every contribution must be publicly verifiable to ensure integrity.

  • Real-time verification: The ceremony software should allow anyone to verify each contribution's proof before the next one begins.
  • Final transcript: The complete sequence of contributions and proofs is published, often on IPFS or a public blockchain (e.g., Ethereum mainnet).
  • Independent audits: Third parties re-run the verification using the published transcript and open-source tools to confirm the final parameters were computed correctly and the toxic waste is erased.

Failure here renders the entire ceremony insecure.

04

4. Finalization & Parameter Distribution

The ceremony concludes with secure packaging and distribution of the final, trusted parameters.

  • Hash the final parameters to create a unique fingerprint (e.g., using SHA256). This hash is the canonical reference for the setup.
  • Create verifiable packages of the final .zkey (Groth16) or .params files for different proving systems.
  • Publish on decentralized storage like IPFS or Arweave with persistent URLs. The parameters are now ready for integration into applications (dApps, rollups).

Example: zkSync Era's Phase 2 ceremony published its final parameters to IPFS with a permanent CID.

05

Security Models & Threat Analysis

Design choices must align with a defined security model.

  • 1-of-N Trust: The ceremony is secure if at least one participant is honest and destroys their secret. This is the standard model for sequential MPC.
  • Adversarial models: Consider rational adversaries (lazy participants) and malicious adversaries (actively trying to sabotage). The protocol must be robust against both.
  • Implementation risks: Key risks include side-channel attacks during contribution, weak randomness sources, and software bugs in the client. Use audited libraries and consider trusted execution environments (TEEs) for high-value ceremonies.
CEREMONY DESIGN

Comparison of Trusted Setup Protocols

Key technical and operational differences between major trusted setup ceremony implementations.

Feature / MetricPerpetual Powers of Tau (PPoT)Zcash Sprout MPCFilecoin's Phase 2

Ceremony Type

Continuous, universal

Discrete, application-specific

Discrete, application-specific

Participant Count

100 contributors

6 participants

~50 participants

Setup Freshness

Continuous updates

Fixed at launch (2016)

Fixed at deployment

Cryptographic Assumption

1-of-N honest participant

t-of-N threshold (t=1)

1-of-N honest participant

Universal Parameter Support

Verification Time (for 2^28 constraints)

~4 hours

~8 hours

~6 hours

Ceremony Coordinator

Community-maintained sequencer

Zcash Foundation

Protocol Labs

Live Ceremony Status

implementation-steps
IMPLEMENTATION GUIDE

How to Design Trusted Setup Processes

A trusted setup is a foundational cryptographic ceremony required by many zero-knowledge proof systems. This guide details the practical steps for designing and executing a secure multi-party computation (MPC) ceremony.

A trusted setup, or MPC ceremony, generates a common reference string (CRS) or structured reference string (SRS) for zk-SNARKs like Groth16 or PLONK. The core principle is secure multi-party computation: if at least one participant is honest and destroys their secret, the final parameters are secure. The goal is to decentralize trust, moving from a single trusted party to a group where a single honest actor suffices. This process is critical for applications like private transactions (Zcash's original Sapling ceremony) and scalable Layer 2 rollups (e.g., zkSync, Scroll).

The design phase begins with selecting the circuit and proof system. You must know the maximum number of constraints your application's circuits will require, as this defines the size of the SRS. For Groth16, you need a powers-of-tau ceremony, where participants contribute randomness to a structured reference string. Tools like the Perpetual Powers of Tau ceremony provide a universal, updatable base. For newer systems like PLONK, you may need a universal SRS that supports any circuit up to a defined size.

Next, architect the ceremony workflow. A robust design includes: a coordinator (manages the queue and aggregates contributions), participants (generate and submit secrets), and verifiers (independently check each step). The coordinator should be a simple, open-source server that does not see participant secrets; it only handles encrypted data. Use a phase 2 ceremony if needed, which tailors the universal SRS to your specific circuit's verification key. Each contribution must generate a public transcript and a receipt (like a digital signature) for verifiability.

For implementation, leverage established libraries. Use snarkjs for Groth16/PLONK ceremonies or arkworks for Rust-based implementations. The core participant action is computing: (tau_new, G1_new, G2_new) = contribute(tau_old, G1_old, G2_old). Participants must generate entropy securely, often via a secure random beacon or local entropy. Here is a simplified code snippet for a contribution using snarkjs:

javascript
const zkey = await snarkjs.zKey.newZKey(circuit.r1cs, ptau, 'circuit_0000.zkey');
const contributionHash = await snarkjs.zKey.contribute('circuit_0000.zkey', 'circuit_0001.zkey', 'Participant Name', 'Entropy Source');

The output contributionHash is the public receipt.

Security hinges on verification and transparency. Every contribution must be publicly verifiable. Publish all transcripts and receipts on a durable data store like IPFS or a blockchain. Implement multiple verification clients to ensure no single software bug compromises the ceremony. Critical checks include: verifying the elliptic curve pairing, checking the contribution's validity, and ensuring the previous contributor's hash matches. The final output should be accompanied by a verification script that anyone can run to confirm the entire chain of contributions from genesis.

Finally, plan for long-term integrity. After the ceremony, the toxic waste (secret randomness) must be securely discarded by all participants. Use a final beacon round where a verifiable random function (VRF) or a blockchain block hash provides the last contribution, limiting the last participant's power. Document the entire process, list all participants and verifiers, and publish the final parameters with their hashes on-chain for dApps to reference. This creates a transparent, audit trail that upholds the system's trust assumptions indefinitely.

tools-and-libraries
TRUSTED SETUPS

Tools and Libraries for Development

Secure multi-party computation (MPC) and cryptographic libraries for implementing and verifying trusted setup ceremonies.

security-considerations
CRITICAL SECURITY CONSIDERATIONS

How to Design Trusted Setup Processes

A trusted setup is a foundational cryptographic ceremony where a secret parameter is generated. If compromised, it can undermine the security of the entire system it supports. This guide outlines the principles for designing a secure and verifiable process.

A trusted setup ceremony is a one-time event that generates a common reference string (CRS) or structured reference string (SRS) for cryptographic systems like zk-SNARKs (e.g., Groth16) or Plonk. The security of all subsequent proofs depends on the toxic waste—the secret random values used during setup—being permanently deleted. If any participant retains these secrets, they can create fraudulent proofs. The primary goal is to design a process that minimizes and distributes trust, moving from a single trusted party to a multi-party computation (MPC) where security relies on at least one honest participant.

The core security model is the 1-of-N trust assumption. In a well-designed N-party ceremony, the protocol is secure as long as at least one participant is honest and successfully destroys their secret contribution. This is achieved through sequential MPC protocols. Each participant receives the public output from the previous party, adds their own secret randomness, performs a computation, and publishes the updated public parameters. Crucially, they must then securely erase their secret contribution. The final public parameters contain a mixture of all secrets, but extracting any single secret from them should be computationally infeasible.

Designing the ceremony requires meticulous planning for participant selection, execution, and verification. Participant diversity is critical; choose credible, independent entities with technical expertise and aligned incentives, such as researchers, non-profits, and competing organizations. The ceremony software must be open-source, audited, and reproducible, allowing anyone to verify that the public output was computed correctly. Execution should occur in a controlled, auditable environment, often using air-gapped hardware and live-streaming the process to ensure transparency and detect any potential cheating.

Verifiability is what transforms a "trusted" setup into a "trust-minimized" one. There are two key types: Transcript Verification and Contribution Verification. Anyone can download the public transcripts from the ceremony and run verification software to ensure each step follows the protocol mathematically. More robustly, participants can create zero-knowledge proofs of correct computation (ZKP) for their contribution, proving they performed the operation correctly without revealing their secret. Projects like the Perpetual Powers of Tau and Zcash's original Sapling ceremony set early standards for public verifiability.

Beyond the core protocol, operational security is paramount. This includes secure entropy generation using hardware random number generators, defending against side-channel attacks during computation, and ensuring the secure deletion of secrets from memory and storage. A delay period between the ceremony's completion and the deployment of the final parameters allows the community time for exhaustive verification. Documenting every step—software versions, hardware specs, and environmental checks—creates an immutable audit trail. Ultimately, a well-designed trusted setup balances cryptographic rigor with practical, transparent execution to bootstrap trust in systems that require it.

COMPARISON

Risk Mitigation and Best Practices

Evaluating different approaches to securing the trusted setup ceremony.

Mitigation StrategyCentralized CoordinatorMulti-Party Computation (MPC)ZK-SNARK Ceremony (e.g., Perpetual Powers of Tau)

Single Point of Failure

Requires Trust in Participants

Ceremony Size (Min. Participants)

1

3-7

100

Post-Ceremony Verifiability

Toxic Waste Destruction

Trust-based

Protocol-enforced

Protocol-enforced

Setup Reusability

Single use

Single use

Universal & perpetual

Cryptographic Assumption

Discrete Log

Threshold Secret Sharing

Knowledge of Exponent (KEA)

Implementation Complexity

Low

High

Very High

TRUSTED SETUP DESIGN

Frequently Asked Questions

Common questions and troubleshooting guidance for developers implementing secure multi-party computation (MPC) and cryptographic ceremonies.

A trusted setup ceremony is a cryptographic protocol where multiple participants collaboratively generate the structured reference string (SRS) or common reference string (CRS) required for zk-SNARKs, zk-STARKs, or other proving systems. It's necessary to establish the initial public parameters for a circuit without any single party knowing the secret toxic waste (e.g., the tau value in a Groth16 setup).

If a single entity generates these parameters, they could create fraudulent proofs. The ceremony uses multi-party computation (MPC) to distribute the secret, ensuring security as long as at least one participant is honest and destroys their secret material. Major protocols like Zcash (Sapling), Tornado Cash, and Polygon zkEVM have conducted public ceremonies to bootstrap trust in their zero-knowledge systems.

conclusion
TRUSTED SETUP DESIGN

Conclusion and Future Directions

This guide has outlined the core principles for designing secure and transparent trusted setup ceremonies. The next steps involve implementing these principles and exploring future advancements.

Designing a robust trusted setup is a critical engineering challenge that balances cryptographic security with practical execution. The key principles remain constant: maximizing participant diversity to decentralize trust, ensuring public verifiability of all contributions, and maintaining a permanent, immutable transcript. Successful ceremonies, like those for Zcash's Sapling or Ethereum's KZG setup, demonstrate that with careful planning—using secure multi-party computation (MPC), auditable code, and a clear participant onboarding process—these events can establish a foundation of trust for privacy and scaling protocols.

Looking forward, the field is moving towards reducing or eliminating the need for one-time ceremonies altogether. Research into transparent (trustless) setups, such as those based on STARKs or other IOPs (Interactive Oracle Proofs), aims to remove the trusted setup requirement entirely. For protocols still requiring a setup, future directions include designing continuous or updatable ceremonies. In this model, new participants can join over time to refresh the secret, creating a dynamic "living" setup that becomes more secure and decentralized with each contribution, mitigating long-term risks.

For developers implementing a setup today, the actionable path is clear. First, select a proven MPC protocol and implement it using audited libraries. Second, design a participant client that is user-friendly yet secure by default, with local entropy generation and clear failure states. Third, establish a transparent coordination framework, publishing all code, ceremony parameters, and the final transcript to a permanent data store like IPFS or Arweave. By adhering to these practices, you contribute to a more secure and verifiable cryptographic infrastructure for the entire ecosystem.