Existing identity verification systems require users to disclose entire credential documents (student IDs, driver's licenses) to prove a single attribute, creating unnecessary privacy exposure and centralized data liability for verifiers. ZeroVerify allows circuit-defined attributes ("I am an enrolled student," "I am over 21") to be cryptographically proven without revealing any underlying personal data.
ZeroVerify is a library and issuance service, not a verification intermediary. The system provides: (1) an issuance API that issues BBS+ signed credentials, (2) a client-SDK that handles credential storage and proof generation, and (3) a verification library that verifiers embed. Verifiers interact directly with users and only call ZeroVerify to get a W3C revocation bitstring.
Serverless issuance function behind API Gateway. Lambda provides per-invocation billing and automatic scaling for unpredictable traffic spikes. Rust chosen for fast cold starts (100-300ms vs Java's 1-3s), memory safety guarantees, and mature BBS+ signature library ecosystem. Target: <800ms total execution time.
Credential metadata stored with key-value access pattern. Supports fast lookups for duplicate credential prevention and revocation status.
W3C Bitstring Status List stored as static object and replicated globally using S3 Cross Region Replication. Bitstring is small (1 bit per credential).
Proof generation library running entirely in browser. Fetches keys from ZeroVerify and executes Groth-16 zk-SNARK prover compiled to WebAssembly.
Infrastructure defined as code for reproducible deployments and CI/CD.
{
"subject_id": "did:key:z6MkF5rGMoatr...",
"credential_id": "https://api.zeroverify.com/credentials/a3f8b2c1-...",
"credential_type": "Student_Credential",
"issued_at": "2025-02-10T20:41:27Z",
"expiresAt": "2026-02-10T20:41:27Z",
"revocation_index": 94567,
"revoked": false
}We implement W3C Bitstring Status Lists rather than PKI mechanisms (CRL/OCSP) because bitstrings preserve verification privacy. Bitstrings encode revocation as bit positions in a compressed list; merchants fetch the bitstring and check locally without revealing which credential they're verifying.
Generating ZK Proofs takes 2-5 seconds on modern devices. This is more compute-intensive than submitting a form but faster than uploading documents and waiting for manual approval. The computational cost shifts from servers to user's device.
Browser-based credential storage is less secure than hardware wallets. However, our architecture never transmits credentials after issuance. Credentials always stay on the device, and only ZK proofs are sent. We trade hardware-level security for zero data disclosure.
Merchants trust our mechanism through cryptographic verification, not reputation. The ZK proof is mathematically verifiable using our public key. We issue credentials only after OAuth confirmation from the authoritative source. Merchants can audit our public key and verification code for transparency.