Securityintermediatearticle40 min read

ZK-KYC: Prove You're 18 Without Your Birth Date | ZK Identity

ZK-KYC lets you prove age, citizenship, or credit score without revealing your birth date or personal data. The bartender analogy explains how ZK proofs enable selective disclosure for VNeID and ND 13/2023 compliance.

Vietcardano teamTeam

Đội ngũ biên tập VietCardanoCommunity — các chuyên gia blockchain và Cardano, cung cấp nội dung giáo dục và nghiên cứu chuyên sâu cho cộng đồng.

Published August 31, 2026Updated August 30, 2026

A ZK-KYC (Zero-Knowledge Know Your Customer) system lets you prove facts about yourself — "I'm over 18," "I'm a citizen," "I'm not on a sanctions list" — without revealing the underlying personal data. It's the cryptographic equivalent of a bartender who only needs to see a green checkmark "Age ≥ 18 ✓" on your phone, instead of your whole ID card with name, address, and birth date.

One sentence: ZK proofs let you convince a verifier that a statement is true (age ≥ 18) without exposing the secret inputs (your birth date) — the verifier learns only that the statement is true, nothing else.

If you've wondered zk kyc là gì, how kyc không lộ dữ liệu works technically, or why zk proof kyc is the missing piece for Vietnam's VNeID and ND 13/2023 digital identity push — this article breaks it down with the "bartender" analogy that makes it click.

Bartender analogy: Traditional KYC shows full ID, ZK-KYC shows only VERIFIED checkmark

Figure 1: The Bartender Analogy — Traditional KYC reveals everything; ZK-KYC reveals only the verified claim

The Problem: KYC Today Is Oversharing

Every time you sign up for an exchange, open a bank account, or join a regulated platform, you go through KYC:

  1. Upload ID card / passport (name, birth date, address, ID number, photo)
  2. Selfie + liveness check (prove you're the person in the photo)
  3. Wait for manual/auto review (minutes to days)
  4. Your data sits in their database (name, DOB, address, ID number, biometrics)

Problems with this model:

  • Privacy leak: You reveal everything to prove one thing (age, citizenship, not-sanctioned)
  • Honeypot risk: Centralized databases are breach targets (millions of IDs leaked yearly)
  • User friction: Repeated KYC for every platform; no portability
  • Over-collection: Services collect more data than they need "just in case"

What ZK-KYC Actually Is

ZK-KYC = Zero-Knowledge Proof + KYC workflow.

Instead of sending your birth date to the verifier, you send a ZK proof that says:

"I know a birth date such that (current_date - birth_date) ≥ 18 years, and this birth date matches the one signed by the Government Issuer in my Verifiable Credential. Here's the proof."

The verifier checks the proof. Valid = you're 18+. Invalid = you're not (or proof is fake). The verifier never sees your birth date.

The Core Components

ComponentRole
Issuer (Govt / trusted authority)Issues Verifiable Credential (VC) — signed attestation: "This person was born on 1995-06-15"
Holder (User)Stores VC in wallet (phone). Generates ZK proof from VC when needed.
Verifier (Service / Bar / Exchange)Receives ZK proof, checks validity. Learns only the proven claim.
ZK CircuitThe "rules" encoded in arithmetic: current_date - birth_date ≥ 18*365

How It Works: Step by Step

  1. Issuance: Government issues you a Verifiable Credential (VC) — a tamper-proof digital credential (W3C standard) containing your birth date, signed with their private key. Stored in your VNeID wallet.
  1. Proving: You want to buy age-restricted goods. Service requests "Proof of age ≥ 18." Your wallet:
- Reads the VC (birth date = private input) - Feeds birth date + current date into the ZK circuit - Circuit outputs: 1 (true) + ZK proof (cryptographic receipt)
  1. Verification: Service receives (claim: "age ≥ 18", proof). Verifier contract/algorithm checks:
- Proof is mathematically valid - VC signature matches trusted Issuer registry - Nullifier prevents double-use (optional, for sybil resistance)
  1. Result: Service grants access. Your birth date never left your device.
ZK-KYC flow: Issuer → Wallet → ZK Circuit → Verifier — birth date never leaves wallet

Figure 2: ZK-KYC Flow — birth date never leaves wallet, only boolean result + ZK proof travels

Why This Matters for Vietnam

ND 13/2023 & VNeID: The Regulatory Push

Nghị định 13/2023/NĐ-CP (April 2023) mandates:

  • eKYC as standard for remote identity verification
  • Sinh trắc học (khuôn mặt, vân tay) as proof of liveness
  • VNeID as national digital identity platform (Level 3 eID)
  • Goal: Replace physical ID checks with digital verification for public services, banking, telecom, healthcare

Current VNeID eKYC: User scans CCCD + selfie → system verifies match → service gets full identity data.

ZK-KYC upgrade: Same VNeID infrastructure, but user proves specific claims via ZK proof instead of sharing full VC. Aligns with ND 13's "data minimization" principle (Chỉ thu thập dữ liệu cần thiết).

Real-World ZK Identity Deployments

ProjectModelZK PrimitiveStatus
Bhutan NDI (Ethereum)Govt-runZK-SNARK (age, citizenship)Live, 700k+ citizens
World ID (Worldcoin)Private (Orb)Semaphore (group membership)5M+ verified humans
Semaphore (PSE/EF)ProtocolZK-SNARK (Merkle membership)Open source, widely used
VNeID + ZK (Proposed)Govt-runZK-SNARK/STARKR&D / Pilot

Vietnam has 70M+ VNeID users — a ZK-KYC rollout would be the world's largest ZK-native identity system.

The Bartender Analogy: Why It Clicks

Imagine walking into a bar:

  • Traditional KYC: You hand the bartender your CCCD. He sees: Nguyễn Văn A, born 1995-06-15, lives at 123 Nguyễn Trãi, ID 001200001234. He checks birth year, hands it back. He now knows your name, address, ID number — forever.
  • ZK-KYC: You tap phone on NFC reader. Screen shows: "Age ≥ 18: VERIFIED ✓" (with ZK proof). Bartender sees green checkmark. He learns ONLY that you're 18+. Nothing else.

Same result for the bartender (legal compliance). Vastly different outcome for your privacy.

Technical Deep Dive: The ZK Circuit

The "age ≥ 18" circuit in pseudocode:

`circom template AgeCheck(threshold_years) { signal private input birth_timestamp; signal private input current_timestamp; signal output result;

var threshold_seconds = threshold_years 365 24 * 3600; result = (current_timestamp - birth_timestamp >= threshold_seconds) ? 1 : 0; } `

Inputs (private): birth_timestamp (from VC), current_timestamp (from oracle or block timestamp) Output (public): result (1 = pass, 0 = fail) Proof: ZK-SNARK (Groth16) or ZK-STARK proving the circuit executed correctly with valid VC signature.

Verifier only needs: circuit verification key, proof, public inputs (current_timestamp, threshold), VC issuer public key.

Selective Disclosure: Beyond Age

ZK-KYC isn't just for age. The same architecture proves any predicate on your credentials:

ClaimCircuit LogicUse Case
age ≥ 18now - birth ≥ 18yAlcohol, gambling, adult content
age ≥ 65now - birth ≥ 65ySenior discounts, pension
citizen_of == "VN"nationality == "VN"Voting, govt services
not_sanctionedid ∉ sanctions_listDeFi, banking, exchange
credit_score ≥ 700score ≥ 700Lending, BNPL
degree == "Bachelor"credential.type == "degree"Job applications

Each is a separate ZK proof — verifier learns only the boolean result.

Selective disclosure: One VC → four ZK proofs → four verifiers each learn only their claim

Figure 3: Selective Disclosure — one credential, infinite selective proofs, verifier learns ONLY the proven claim

Sybil Resistance: One Human, One Account

ZK-KYC + nullifier = sybil resistance without doxxing.

` nullifier = hash(user_secret, app_id) `

  • User generates nullifier when proving claim
  • App stores nullifier in "used" set
  • Same user can't prove again for same app (nullifier collision)
  • But: nullifier reveals nothing about user identity

This powers: one-human-one-vote (quadratic funding), airdrop fairness, social media authenticity, DAO governance.

ZK-KYC vs Traditional KYC

AspectTraditional KYCZK-KYC
Data sharedFull ID (name, DOB, address, ID#, photo)Only proven claim (e.g., "age ≥ 18")
StorageService DB (breach risk)User wallet (self-custody)
PortabilityRepeat KYC per serviceOne VC, infinite ZK proofs
Verification timeMinutes-hours (manual review)Milliseconds (math verification)
ComplianceGDPR/PDPA burden on serviceData minimization by design
Sybil resistancePhone/email (weak)Nullifier (cryptographic)

Common Questions About ZK-KYC

What is ZK-KYC in simple terms?

A system where you prove something about yourself (age, citizenship, credit score) using a zero-knowledge proof — the verifier learns the fact is true, but not the underlying data (birth date, ID number, etc.).

How is "kyc không lộ dữ liệu" different from normal KYC?

Normal KYC: you give the service your ID card. ZK-KYC: you give them a math proof that your ID satisfies their requirement. They never see the ID.

What is a "zk proof kyc" technically?

A ZK-SNARK or ZK-STARK proof generated by a circuit that takes your Verifiable Credential as private input, checks a predicate (e.g., age ≥ 18), and outputs a proof that the predicate holds. The proof is verified on-chain or off-chain.

Does the verifier need to trust the issuer?

Yes — the ZK proof includes verification of the Issuer's signature on the VC. The verifier must trust the Issuer (e.g., Government) to issue honest credentials. The ZK proof only proves "this credential from Issuer X satisfies condition Y."

Can ZK-KYC work with VNeID today?

Yes. VNeID already issues VCs (W3C format). Adding a ZK circuit layer (age check, citizenship check) is a software upgrade — no new hardware for users. The VNeID wallet app generates proofs locally.

What about biometrics (face scan)?

ND 13 requires liveness check. ZK-KYC handles the credential verification part. Biometric liveness is a separate step (done at issuance or per-session). ZK proof can include "liveness check passed at time T" as a signed claim from the liveness provider.

Is this legally compliant in Vietnam?

ND 13/2023 encourages data minimization (Chỉ thu thập dữ liệu cần thiết). ZK-KYC is more compliant than current eKYC — it mathematically guarantees the service only receives the specific claim they're authorized to verify.

The Honest Tradeoff

What you gain:

  • Privacy by default: Services learn only what they need
  • User sovereignty: Credentials live in your wallet, not their DB
  • Portability: One VNeID VC → infinite ZK proofs for any service
  • Sybil resistance: Nullifiers prevent fake accounts cryptographically

What you give up:

  • Issuer trust: You still trust the Government to issue correct VCs
  • Circuit audit: ZK circuits must be formally verified (bugs = false proofs)
  • Key management: User must protect wallet keys (social recovery helps)
  • Offline verification: Requires app/internet (though offline ZK proofs exist)

The Bottom Line

ZK-KYC is the cryptographic upgrade to identity verification that Vietnam's digital transformation needs. With ND 13/2023 mandating eKYC and 70M+ VNeID users, Vietnam can leapfrog to ZK-native identity — where proving "I'm 18" reveals nothing but "VERIFIED ✓."

The bartender doesn't need your life story. He just needs the green checkmark. ZK-KYC gives him exactly that — and gives you your privacy back.


Quick Reference

PropertyZK-KYC
Core ideaProve attribute (age ≥ 18) via ZK proof without revealing source data
Credential formatW3C Verifiable Credential (VC) signed by Issuer
Proof systemZK-SNARK (Groth16) or ZK-STARK
CircuitArithmetic predicate on VC fields (e.g., now - birth ≥ 18y)
VerificationMilliseconds (on-chain or off-chain)
Sybil resistanceNullifier = hash(secret, app_id)
Vietnam contextND 13/2023, VNeID Level 3, 70M+ users
Global examplesBhutan NDI, World ID, Semaphore, MACI
Main riskIssuer trust, circuit bugs, key loss

Tags:

zk kyc là gìkyc không lộ dữ liệuzk proof kyc