ZK + OpenID4VP for EU Compliance: Privacy-First Age Verification
How zero-knowledge proofs and OpenID4VP enable GDPR-compliant age verification without collecting personal data
States and countries are mandating age checks for websites, apps, and services. Most solutions ask you to upload a photo of your driver's license or passport โ trading one privacy problem for a worse one. zk-id is the escape hatch: prove you're 18+ without revealing your name, birthday, or ID number. Only a cryptographic proof leaves your device.
Your data stays on your device. Only the proof leaves.
Age‑verification laws are accelerating. The UK's Online Safety Act, state laws in Louisiana and Texas (plus many more), and incoming EU rules all push platforms to confirm users are adults. Compliance isn't optional, and the deadline pressure is real.
The default solutionโuploading a government ID for a third‑party scanโcreates a permanent record that links identity to browsing. The cure is worse than the disease. Centralized ID checks become honeypots: they're breached, subpoenaed, and sold.
zk‑id uses zero‑knowledge proofs so users can prove a fact ("I'm over 18," "I'm a US resident") without exposing the underlying data. Verifiers learn only what they asked forโnothing else. No name, no birthday, no ID scan, no persistent identifier. It's the least invasive way we know to comply with these laws.
TestFlight beta and Android support coming soon.
Screenshots coming soon
Demo video coming soon
Try the live playground instead
// 1. Import the SDK
import { ZkIdClient } from '@zk-id/sdk';
// 2. Initialize and verify
const client = new ZkIdClient({
verificationEndpoint: 'https://your-verifier.com/verify'
});
await client.verifyAge(18);
// 3. That's it! ๐ View Integration Guide Prove you're 18+ without revealing your exact birth year. Verify citizenship without exposing other attributes.
Generate ZK proofs entirely in the browser using snarkjs. No server round-trips for proof generation.
Groth16 ZK-SNARKs with trusted setup from Powers of Tau. Poseidon hash-based credentials.
Simple integration with TypeScript SDK. RESTful API for verification from any language.
Kill any credential from the wallet at any time. You issued it; you can revoke it. Verifiers see the credential as invalid immediately.
Interactive 4-step guide to issue credentials and generate proofs in under 5 minutes
Live sandbox for generating ZK proofs in your browser
Complete API documentation with TypeScript, Python, and Go examples
Architecture, protocol details, compliance, and deployment guides
Zero-knowledge identity verification for your stack
Standards-compliant verifiable presentations with W3C and DIF
Native iOS wallet (SwiftUI) โ built and shipping. Cross-platform SDK planned.
Language-agnostic HTTP API for verification servers
Prove US or EU residency without revealing your specific country. The nationality-set-verify circuit supports up to 32 allowed nationality codes including all 27 EU member states.
EU Digital Identity Wallet integration (Coming Q2 2026)
Browser-native credential storage (Coming Q3 2026)