Skip to main content

PROTOCOL / ARCHITECTURE

Every layer needs
an explicit trust boundary.

A real Semaphore membership-proof prototype, separating uniqueness research, issuance, revocation/recovery and application scopes.

01

Capture & uniqueness

Capture, liveness and biometric deduplication

Research stage
02

Eligibility issuance

Issuance, revocation and recovery

Prototype / anonymous issuance unresolved
03

Zero-knowledge proof

Semaphore membership proofs

Real ZK verification tested
04

Application isolation

Application, activity and epoch separation

Replay rejection and separation tested
05

Applications & asset layer

Application integration and TIME asset layer

Integration and issuance pending

IMPLEMENTED REFERENCE

Constraints tested in the reference prototype.

Real proof verification

Actual Semaphore/Groth16 generation and verification, without a mock verifier.

Application and epoch scope separation

Structured protocol, application, activity and epoch values define the scope. The mutable membership root is not a replay domain, preventing membership changes from resetting nullifiers.

Atomic duplicate rejection

The Node/SQLite reference protects scope + nullifier with transactions and a unique key. Multiprocess contention was tested to allow exactly one acceptance.

Eligibility state and recovery

Active, suspended and permanently revoked states are distinct. Same-key backup recovery preserves replay continuity; private recovery with a replacement key is unsupported.

Browser reference demo

A local Worker creates synthetic identities and real proofs. Replay records belong only to the session and reset on refresh or clearing.

OPEN RESEARCH

Explicitly open research questions.

Read the complete threat model ↗

Technical references and implementation

Upstream components are technical dependencies and references, not partnerships or endorsements of TIME.

Official Semaphore documentation ↗Download reference implementation ↓Run the synthetic proof demo ↗