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 Circom to compile arithmetic circuits for relational checks (e.g., verifying x ≥ y). We used snarkjs to 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

Share this project:

Updates

Submission history