Inspiration
Traditional background checks and credential verifications force users to upload raw PDFs, Social Security numbers, and unencrypted identity documents to third-party databases. This centralized data retention leads to massive data breaches and privacy violations. We wanted to build a self-sovereign identity wallet where users can instantly prove age, professional licenses, or credentials without giving away a single byte of unnecessary Personal Identifiable Information (PII).
What it does
ZK-Shield ID allows users to store digitally signed credentials locally on their mobile device and generate zero-knowledge proofs (ZK-SNARKs) on demand.
- Privacy-First Proofs: Users can prove statements like Age ≥ 21 or License Status = Active without revealing their birthdate, home address, or license number.
- Instant Verification: Verifiers scan a generated QR code or verify a cryptographically signed payload off-chain or via API.
- Monetized via RevenueCat: Free users can store credentials and generate basic proofs. Subscribing to Pro unlocks unlimited proof generations, multi-credential attestation, and PDF export functionality.
How we built it
- Zero-Knowledge Circuits: Written in
Circomto compile arithmetic circuits for relational checks (e.g., verifying x ≥ y). We usedsnarkjsto handle local proof generation. - Mobile Frontend: Built with React Native (Expo) to access secure device storage and handle quick UI renders.
- In-App Subscriptions & Paywalls: Integrated the RevenueCat SDK (
react-native-purchases) to manage entitlement states (Pro Access) and trigger native paywalls dynamically. - Verification Backend: A lightweight Node.js/Express verifier service running Groth16 verification checks against the public signals.
Math & Cryptographic Foundation
The zero-knowledge constraint system verifies that a private claim x (e.g., actual age) satisfies a public boundary k (e.g., minimum required age) using a secret salt s:
/ 1 if x ≥ k
Public Output = <
\ 0 otherwise
The proof proves knowledge of x satisfying the relation C(x, s, k) = 1 without revealing x itself to the verifier's circuit key (pi_v).
Challenges we faced
- Mobile Execution: Running cryptographic proof compilation natively on mobile devices can be resource-intensive. We optimized execution by compiling lightweight circuits and managing state via a background execution process.
- Payload Size: Balancing the size of the generated proof payload so it could be rendered quickly as a scannable QR code for real-time verification.
- RevenueCat Integration: Ensuring real-time synchronization between local sandbox purchases and unlocking ZK circuit execution gates smoothly without UI lag.
What we learned
- How to structure real-world user data into Circom-compatible private inputs.
- The power of combining Zero-Knowledge cryptography with simple mobile monetization strategies using RevenueCat.
- Designing Frictionless UX for complex cryptographic concepts so non-technical users can protect their privacy effortlessly.
What's next for ZK-Shield ID
- Integrating hardware NFC passport chip scanning directly via native mobile APIs.
- Expanding the verification marketplace for enterprise HR platforms and automated onboarding systems.
Built With
- android
- circom
- cryptography
- expo.io
- express.js
- ios
- javascript
- node.js
- privacy
- react-native
- revenuecat
- snarkjs
- zero-knowledge-proofs
- zk-snarks
Log in or sign up for Devpost to join the conversation.