Skip to content
Zassport

Zassport

Prove Identity. Protect Privacy. Build Nations.

Created on 4th December 2025

•

Zassport

Zassport

Prove Identity. Protect Privacy. Build Nations.

The problem Zassport solves

The Privacy Paradox in Digital Identity

Today's digital world forces a false choice > prove who you are OR keep your privacy.

Every time you verify your identity for DeFi, prove nationality for services, or access region-locked content, you're forced to expose your entire passport :

  • full name
  • photo
  • date of birth
  • passport number
  • address even when you only need to prove you're over 18 or from country X.

This creates four critical problems :

1. Privacy Violation at Scale

  • Traditional KYC requires uploading full passport scans to centralized databases
  • Your data gets stored, shared, and potentially leaked across dozens of services
  • One breach = your identity exposed forever (passports can't be "reset" like passwords)
  • Example: You want to buy crypto, but now 10 companies have your full passport data

2. Surveillance Infrastructure

  • Centralized identity databases become honeypots for hackers and governments
  • Every verification creates a permanent record of where you've been and what you've done
  • No way to prove attributes without creating a surveillance trail
  • Result: Privacy death by a thousand cuts

3. Network State Measurement Problem

  • How do you count members of a digital community without doxxing them?
  • Traditional census = everyone reveals identity (privacy nightmare)
  • No census = can't measure growth, prove legitimacy, or allocate resources
  • Blocker: Network States can't scale without privacy-preserving population tracking

4. Broken Trust Model

  • You must trust third-party verifiers not to misuse your data
  • Verifiers must trust you're not faking documents
  • No cryptographic guarantees -> just "trust me bro"
  • Problem: Trust doesn't scale in decentralized systems

Zassport's Solution: Zero-Knowledge Identity

What people can use it for :

Age-Gated Access (Privacy-First KYC)

  • DeFi Platforms: Prove you're 18+ to access lending/trading without uploading passport
  • Social Platforms: Age verification for content access (no data harvesting)
  • Gaming: Age restrictions without exposing personal info
  • Why it matters: Current KYC creates massive data liability for platforms + privacy nightmare for users

Geographic Verification (Region-Specific Services)

  • Airdrops: Prove nationality for token eligibility (no fake sign-ups)
  • Localized Services: Access region-locked content/features privately
  • DAO Membership: Country-based participation without doxxing
  • Why it matters: Compliance without surveillance

Network State Census (zk-Census) (we can merge)

  • Population Tracking: Count unique members without revealing identities
  • Sybil Resistance: One passport = one identity (cryptographically enforced)
  • Growth Metrics: Prove community size to investors/partners privately
  • Resource Allocation: Fair distribution based on verified membership
  • Why it matters: First-ever way to measure digital populations with zero doxxing

Reputation Systems (Trust Without Identity)

  • Anonymous Voting: One passport = one vote (no Sybil attacks, no doxxing)
  • Reputation Building: Earn trust based on proofs, not exposed identity
  • Community Governance: Participate in DAOs without revealing who you are
  • Why it matters: Decentralized trust at scale

How It Makes Existing Tasks Easier & Safer

Safer Than Traditional KYC:

  • Old Way: Upload passport → stored in database → hope it doesn't leak
  • Zassport: Generate proof in browser → data never leaves device → nothing to leak
  • Result: Zero-knowledge = zero data breach risk

Faster Than Manual Verification:

  • Old Way: Submit docs → wait 24-48hrs → hope for approval
  • Zassport: Scan passport → generate proof (~3s) → instant verification
  • Result: Real-time verification vs. days of waiting

Cheaper for Platforms:

  • Old Way: Pay KYC providers $1-5 per verification + data storage costs
  • Zassport: ~$0.0002 per on-chain attestation (10,000x cheaper)
  • Result: Makes compliance affordable for small teams/DAOs

Accessible to Everyone:

  • Old Way: Requires uploading docs, trusting centralized services, often geo-restricted
  • Zassport: Works in any browser, no accounts, no geo-blocks, self-sovereign
  • Result: Financial inclusion for the unbanked

Cryptographically Guaranteed:

  • Old Way: Trust verifier not to lie or collude
  • Zassport: Ed25519 signatures + ZK proofs = math-based trust
  • Result: Don't trust, verify

Real-World Impact (Why should we care ?)

For Network States : This solves the #1 blocker for digital nation-building : how to measure population without doxxing citizens.

Zassport enables :

  • Census without surveillance
  • Voting without identity exposure
  • Resource distribution based on verified membership
  • Proof of community size to investors/partners

First practical ZK-passport system on Solana

Challenges I ran into

Challenge 1 : The Groth16 Cost Explosion

The Problem :
Initially, I tried to verify ZK proofs on-chain in the Solana program. Groth16 verification requires pairing operations over BN128 elliptic curves -> this consumed ~200,000 compute units per proof (Solana's limit is 1.4M per transaction).

With multiple proofs per user (age + nationality + passport validity), I'd hit the compute limit immediately. Plus, at ~$0.20 per verification, the system would be economically non-viable.

How I Solved It :
I invented a hybrid architecture that's now Zassport's secret sauce:

  1. Off-chain verification : Verifier service validates ZK proof using snarkjs (instant, free)
  2. Ed25519 attestation : Verifier signs a message: "age_verified:true:user_pubkey:timestamp"
  3. On-chain validation : Solana program only checks Ed25519 signature (~1k compute units)

Result :

  • Cost : $0.20 → $0.0002 (1000x cheaper)
  • Speed : Block time → instant (off-chain)
  • Scalability : Single proof → unlimited proofs
  • Key insight : Not everything needs to be on-chain -> smart use of cryptographic signatures creates trust without on-chain computation

Challenge 2 : The Circuit Constraint Nightmare

The Problem :
My initial age proof circuit had 12,000+ constraints because I was naively implementing date arithmetic with standard comparison operators. Proof generation took 45+ seconds in the browser - completely unusable UX.

Circom doesn't have native date/time primitives, so every operation (division, modulo, comparison) gets compiled to R1CS constraints. My "simple" age check was actually 12,000 multiplication gates!

How I Solved It :
I rewrote the circuit using timestamp-based age calculation and optimized comparison operators:

Key optimizations :

  • Used Poseidon hash instead of SHA-256 (300 constraints vs. 20,000!)
  • Pre-computed date → timestamp conversions off-circuit
  • Leveraged Circom's built-in optimized comparators
  • Removed all unnecessary intermediate signals

Result :

  • Constraints : 12,000+ → 612 (95% reduction)
  • Proof time : 45s → 2.5s (18x faster)
  • Browser compatibility : Unusable → Smooth UX
  • Lesson learned : In ZK circuits, every line of code is expensive -> optimize like your life depends on it

Challenge 3 : The Nullifier Double-Spend Race Condition

The Problem :
Users could spam multiple registration transactions in quick succession, creating multiple identities from one passport before the first transaction's nullifier hit the blockchain. This broke our Sybil resistance guarantee.

How I Solved It :
I implemented atomic nullifier registration using Solana's account rent system:

By making nullifier creation part of the registration instruction itself, Solana's runtime guarantees atomicity:

  • If nullifier account already exists → transaction fails
  • If transaction fails → no state changes
  • Concurrent transactions → only first one succeeds

Result :

  • Race condition eliminated (cryptographically impossible now)
  • Sybil resistance : guaranteed one passport = one identity
  • Key insight : Leverage blockchain primitives (account creation) for security guarantees instead of manual checks

Challenge 4 : Browser ZK Proof Generation Memory Crashes

The Problem :
Initial circuit artifacts were 50MB+ per circuit. Loading 3 circuits (age, nationality, passport) = 150MB downloaded to browser. Mobile devices crashed, desktop browsers froze during proof generation.

How I Solved It :

  1. Optimized trusted setup : Used smaller Powers of Tau ceremony (adequate for circuit size)
  2. Lazy loading : Only download circuits when needed (not all upfront)
  3. Web Workers : Moved proof generation to background thread
  4. Artifact compression : Served .zkey files gzipped

Result :

  • Artifact size : 50MB → 10MB per circuit (5x reduction)
  • Mobile compatibility : Crashes → Smooth operation
  • UX: Frozen browser → Responsive UI with progress bar

Lessons Learned !!

  1. Hybrid architectures can give you the best of both worlds (privacy + efficiency)
  2. Every constraint matters in ZK circuits so optimize ruthlessly
  3. Leverage blockchain primitives for security instead of manual checks
  4. Browser performance is critical for real-world ZK adoption

These challenges taught me that building production-ready ZK systems requires thinking beyond just -- does the proof work?

you need economic viability, UX polish, and security-by-design. That's what separates Zassport from proof-of-concept demos.

Tracks Applied (1)

General Bounty

Zassport is purpose-built to solve both core challenges outlined in the Network School Track --> 1. zk-Passport: Privac...Read More

Network School

Cheer Project

Cheering for a project means supporting a project you like with as little as 0.0025 ETH. Right now, you can Cheer using ETH on Arbitrum, Optimism and Base.

Discussion

Builders also viewed

See more projects on Devfolio