Skip to content

Citadel 2

Citadel 2 is an enhanced version of Dusk’s self-sovereign identity protocol. It lets someone prove they hold a valid credential, called a license, without putting their personal details or the exact license they used on-chain.

Think of a Citadel license as a private credential.

  • A User asks a trusted License Provider (LP) for a license.
  • The LP checks the user off-chain, signs the relevant attribute data, publishes an encrypted license, and registers that license in a Citadel contract.
  • Later, the user wants access to a service. They generate a zero-knowledge proof showing that they own a registered LP-signed license, without revealing which license is being used.
  • The Citadel contract verifies the proof and records a public session.
  • The user sends a session cookie to the Service Provider (SP), and the SP decides whether to grant access.

That last point matters: Citadel proves that the session is cryptographically valid, but it does not decide service policy. The SP still decides which LPs it trusts, which attributes are accepted, whether the session is expired or revoked, and whether the cookie can be reused.

Citadel 2 is designed so that personal attributes are not written to the blockchain. The on-chain session does not reveal the user’s wallet key, the license used, the LP key, the SP key, the signed attributes, or the Merkle proof path. If a service needs to learn or verify an attribute, the user discloses or proves only what that service’s policy requires.

Developers can deploy their own Citadel license contract on Dusk. The Citadel repository includes the Rust core library, the license contract, and zk-citadel-wallet, a wallet-backed CLI/TUI for deploying a contract, requesting and issuing licenses, using a license, listing saved session cookies, and verifying sessions.

A complete JavaScript SDK for developers will be available soon.