# Semaphore: a zero-knowledge protocol to cast a signal without revealing identity Source: https://semaphore.appliedzkp.org ## Summary Semaphore is a zero-knowledge protocol that lets a user cast a message, such as a vote or endorsement, as a provable group member without revealing their identity. It also includes a mechanism to prevent double-signaling, so the protocol can confirm a user has joined the group and has not already cast a message with their nullifier. Semaphore pairs on-chain Solidity contracts with off-chain JavaScript libraries, and it is described as a privacy layer for Ethereum dApps. The secure parameters were generated in a Trusted Setup Ceremony completed with over 400 participants on 13 July 2024, and the project lists audits of versions 2.0.0 through 4.0.0 by PSE and Veridise. ## Article Overview​ Semaphore is a zero-knowledge protocol that allows you to cast a message (for example, a vote or endorsement) as a provable group member without revealing your identity. Additionally, it provides a simple mechanism to prevent double-signaling. Use cases include private voting, whistleblowing, anonymous DAOs and mixers. For in-depth technical details about Semaphore, refer to the Semaphore V4 Specification. Features​ With Semaphore, you can allow your users to do the following: Create a Semaphore identity. Add their Semaphore identity to a group (i.e. Merkle tree). Send a verifiable, anonymous message (e.g a vote or endorsement). When a user broadcasts a message, Semaphore zero-knowledge proofs can ensure that the user has joined the group and hasn't already cast a message with their nullifier. Semaphore uses on-chain Solidity contracts and off-chain JavaScript libraries that work in tandem. Off chain, JavaScript libraries can be used to create identities, manage groups and generate proofs. On chain, Solidity contracts can be used to manage groups and verify proofs. Developer benefits​ Semaphore is designed to be a simple and generic privacy layer for decentralized applications (dApps) on Ethereum. It encourages modular application design, allowing dApp developers to choose and customize the on-chain and off-chain components they need. About the code​ The core of the protocol is the circuit logic. In addition to circuits, Semaphore provides Solidity contracts and JavaScript libraries that allow developers to generate zero-knowledge proofs and verify them with minimal effort. Trusted Setup Ceremony​ The secure parameters for generating valid proofs with Semaphore circuits were generated in a Trusted Setup Ceremony that was completed with over 400 participants on 13 July 2024. Audits​ VersionAuditorsReportScope v2.0.0PSESemaphore_2.0.0_Audit.pdfcircuits, contracts v2.5.0PSESemaphore_2.5.0_Audit.pdfcontracts, libraries v3.0.0VeridiseSemaphore_3.0.0_Audit.pdfcircuits, contracts v4.0.0PSESemaphore_4.0.0_Audit.pdfcircuits, contracts, libraries