Selective disclosure is the digital answer to a question every Vietnamese citizen has felt at a bank counter, a bar door, or a government window: why does proving one fact mean showing everything? Your CCCD or passport contains your name, date of birth, address, ID number, and photo — but the bouncer only needs to know you're over 18, and the loan officer only needs your income range. Selective disclosure lets you prove exactly the required fact — nothing more.
In one sentence: selective disclosure is the ability to reveal a precise subset of the claims in a credential — or a property of them — while the rest stays cryptographically sealed, and the verifier can still check that the whole credential is authentic.
If you've been wondering what tiết lộ có chọn lọc zk actually means, how it protects your zk privacy identity, or why tech giants and national governments are standardizing it right now — this article flips through the mechanics, one page at a time.
Figure 1: The disclosure ladder — privacy climbs from full disclosure to predicate/ZK selective disclosure
The Problem: Physical Documents Are All-or-Nothing
Hand a physical ID to someone and you've handed them everything on it.
- Over-disclosure: showing your birth date, address, and ID number to prove you're an adult
- Copy risk: once a photo or photocopy exists, it can be stored, sold, or forged
- No control: you can't revoke what you've already shown
- Re-verification: every service re-collects the same data (re-KYC), multiplying breach risk
This is the "copy-and-collect" model that every Vietnamese person knows from opening a bank account or buying a SIM card. The document does the proving, and the document is all or nothing.
What Is Selective Disclosure?
Selective disclosure (sometimes written selective data disclosure) is a cryptographic technique that lets a holder (the person with the credential) reveal only the claims a verifier actually needs, while proving the credential is still genuine and untouched.
Think of your digital passport as a book with many pages:
- Page 1: name and photo
- Page 2: date of birth
- Page 3: address
- Page 4: ID number
- Page 5: nationality
Without selective disclosure, showing any fact means showing the whole book. With selective disclosure, you flip open only the page the verifier asked for — the age page for the bar, the nationality page for the bank — and the other pages stay closed, unreadable, and cryptographically bound to the whole.
The magic is that the verifier doesn't have to trust you to flip the page yourself. The math guarantees that the page you showed really does belong to a credential signed by the issuer — not a photocopy you pasted together.
The Three Levels of Disclosure Control
To understand how selective disclosure works, it helps to see it as a ladder:
| Level | What happens | What verifier learns | Example tech |
|---|---|---|---|
| 0 — Full disclosure | Show the entire credential | Everything (name, DOB, address, ID) | Current KYC, plain VC presentation |
| 1 — Field-level selective disclosure | Reveal exact values of a chosen subset | Only the chosen fields | SD-JWT (RFC 9901), mDL ISO/IEC 18013-5 |
| 2 — Predicate / ZK selective disclosure | Prove a property about a value | Only that the property holds | BBS+ ZK, Semaphore, World ID, zk-creds |
Level 1 answers "show me your age." Level 2 answers "are you at least 18?" — without ever stating what the age actually is. That second question is where tiết lộ có chọn lọc zk (zero-knowledge selective disclosure) comes in.
Figure 2: SD-JWT mechanics — salted hashes let the holder reveal a chosen subset while the rest stays sealed
Level 1: SD-JWT — The Salted-Hash Trick
The simplest and most widely deployed form of selective disclosure is SD-JWT (RFC 9901), the standard now baked into the EU's EUDI Wallet and W3C verifiable credentials.
Here's how it works, in plain terms:
- Issuer (e.g., the government) creates the credential and, for each field that may be disclosed later, computes a salted hash:
digest = hash(salt + claim_value). - The issuer signs a JWT that contains only the digests — not the actual values.
- The holder receives the signed JWT plus all the original claims and their salts.
- When a verifier asks for, say, the date of birth, the holder sends: the signed JWT, the date of birth in cleartext, and that field's salt.
- The verifier recomputes
hash(salt + value)and confirms it matches the digest inside the signed JWT.
Because the issuer signed the digest, the verifier knows the revealed value is authentic — it was committed to by the issuer. Because a random salt was mixed in, nobody can guess the hidden values by brute-forcing hashes. And because each disclosure is a separate digest, the holder can reveal any subset without touching the others.
Optional key binding (SD-JWT+KB): to stop someone from presenting a stolen SD-JWT, the holder signs a small "key binding" JWT over a nonce + the SD-JWT hash. The verifier checks it against a public key inside the credential — proof of possession, not just knowledge.
The Tradeoff
SD-JWT is cheap, offline-friendly, and already standardized. But it has two limits:
- Issuer decides the boundaries: the issuer pre-marks which fields are selectively disclosable. You can only hide what the issuer marked hideable.
- Linkability: if you present the same SD-JWT to a bar today and a bank tomorrow, careful observers can tell it's the same credential — presentations are not anonymous.
That's the gap Level 2 exists to fill.
Level 2: ZK Selective Disclosure — Proving Without Revealing
Zero-knowledge selective disclosure goes one step further: instead of revealing the value of a chosen field, you prove a predicate about it — and nothing else.
- Range proof: "my age ≥ 18" (without revealing the age)
- Set-membership proof: "my nationality is in the allowed list" (without revealing which)
- Proof of non-membership: "my ID is not on a blacklist"
The machinery is the BBS+ signature family and its relatives (CL, PS), which are "selective disclosure signatures": the issuer signs a whole set of attributes with one signature, and the holder can derive a fresh, randomized proof that certifies only a chosen subset — while proving in zero-knowledge that the hidden attributes were also signed.
Because every presentation proof is fresh and randomized, two presentations of the same credential are unlinkable — the bar can't connect your visit to the bank's check, and neither can tie it back to your birthdate or name.
How Proving "Over 18" Works Without Your Birth Date
Let's walk the exact flow a Vietnamese citizen would experience with VNeID or a World ID-style wallet:
- Bar requests: "Prove you are ≥ 18"
- Wallet reads the credential (private: birth_date = 2005-03-14)
- ZK circuit computes: current_date - birth_date ≥ 18 years → TRUE
- Wallet builds a zero-knowledge proof of that predicate
(proof binds to the issuer's signature, hides the birthdate)
- Bar verifies the proof in milliseconds
→ learns: "adult = TRUE" (never learns the birthdate)
The verifier receives a compact proof — not the birthdate, not the name, not a link to any other presentation. This is the essence of zk privacy identity: an identity that can authenticate itself to the exact degree required, and not one bit more.
The "Two Signatures" Mental Model
A credential is only as useful as two cryptographic layers:
- Issuer signature — guarantees authenticity ("this document really is from the government").
- Holder proof — controls privacy ("I present only what this verifier needs").
Selective disclosure never weakens layer 1. It changes how layer 2 is built: instead of replaying the issuer's signature, the holder derives a fresh proof over the chosen subset. The verifier can check authenticity with full confidence while learning strictly less about the holder. Security and privacy move in the same direction — a rare and powerful combination.
Figure 3: ZK selective disclosure — the birthdate never leaves the wallet, and proofs are unlinkable
Who Is Building This Today
Selective disclosure is no longer theoretical. Three lanes are converging:
1. Global Standards
- IETF RFC 9901 (SD-JWT) — the baseline for selective disclosure in JWTs
- W3C VC 2.0 —
ecdsa-sd-2023andbbs-2023cryptosuites for subset disclosure; crypto-modular to accommodate ZKP - mDL ISO/IEC 18013-5 — the mobile driving licence, using hiding commitments
2. Consumer Privacy Infrastructure
- World ID — "an ID card that only proves the holder is 18+, without revealing name or birthdate"; Semaphore-based anonymous membership
- Microsoft Crescent — adds selective disclosure + unlinkability to existing JWTs and mDLs with ZKP, no new issuers
- zk-creds (UMD) — zkSNARK-based credentials over Merkle trees; prove "over 18" with zero identity leakage
3. National Digital Identity Programs
- EU (eIDAS 2 / EUDI Wallet) — selective disclosure mandated across 27 member states
- Vietnam — VNeID (70M+ users) issues Level 2 eID and verifiable credentials; NDAKey proposes VC + selective disclosure + ZKP for 100M+ citizens; Nghị định 69/2024/NĐ-CP gives the legal foundation
Selective Disclosure in Vietnam: What It Means for You
Vietnam is ahead of most countries in infrastructure — but selective disclosure is the missing privacy layer.
- VNeID already gives every citizen a Level 2 eID with integrated documents (CCCD, driver's licence, social insurance).
- Nghị định 69/2024/NĐ-CP makes the electronic ID card legally equivalent to the physical CCCD.
- ND 13/2023 (from article 23 in this series) sets the data minimization principle — only collect what's necessary.
Selective disclosure turns that legal principle into a mathematical guarantee:
| Scenario today | With selective disclosure |
|---|---|
| Prove age to a bar → show whole CCCD | Prove age ≥ 18 → bar never sees DOB |
| Rent a motorbike → photocopy your ID | Show only name + driver status, page by page |
| Open a bank account → full KYC every time | Reuse one credential, share only needed claims |
| Log into a social app → share phone, email, location | Prove "I'm a human, 18+, not banned" — nothing else |
The "sổ đỏ" (red book) analogy from earlier in this series applies again: you don't hand over your entire land title to prove the land is yours — you prove ownership of that specific parcel. Selective disclosure is the same instinct, applied to all your digital documents at once.
Figure 4: Vietnam adoption roadmap — infrastructure, standards, and law are ready for the privacy layer
The Honest Tradeoffs
Selective disclosure is powerful, but it isn't free:
What you gain
- Minimal disclosure: prove exactly what's needed, nothing more
- Data minimization by construction: no more "collect everything, ask later"
- Unlinkable identity (ZK level): verifiers can't track you across services
- Fraud resistance: forged or altered credentials fail the math check
- Less breach surface: services stop hoarding data they don't need
What you give up
- Verifier-side friction: services must implement new verification flows
- Issuer-side design: SD-JWT requires issuers to pre-define disclosure boundaries
- Compute cost: ZK proofs are heavier than a plain signature check (proving time > verification time)
- User complexity: wallets must help users understand what they're consenting to
- Trust the issuer: you still trust the issuer to sign correct claims — selective disclosure doesn't fix lying issuers
Common Questions About Selective Disclosure
What is "selective disclosure" in simple terms?
It's the ability to reveal only part of your information when proving something. Like showing only the "age" page of your passport instead of handing over the whole book — while the verifier can still trust the page is authentic.How is "tiết lộ có chọn lọc zk" different from just hiding data in a PDF?
A PDF can be edited or forged; the reader has to trust you. ZK selective disclosure is cryptographic: the proof binds to the issuer's signature, so the verifier knows the revealed fact is genuine and that nothing else was tampered with — without seeing the hidden data.Does selective disclosure mean "verifiable credentials" are anonymous?
Not automatically. Revealing chosen fields (Level 1, SD-JWT) still lets verifiers link presentations. True anonymity needs Level 2 (ZK), where fresh randomized proofs make each presentation unlinkable. A credential is only as private as the proof layer on top.Can Vietnam's VNeID support selective disclosure today?
VNeID already issues verifiable credentials and operates at 70M+ users. Selective disclosure is a software upgrade on the wallet and verifier side — the credential format (W3C VC, SD-JWT) already supports it. NDAKey-style wallets show the local blueprint for adding the ZK layer.Why does "zk privacy identity" matter for everyday users?
Because the alternative is that every service you touch — bars, banks, rentals, apps — collects a full copy of your identity and becomes a breach target. A zk privacy identity means services can verify you without ever holding your sensitive data.Is selective disclosure legally recognized?
Yes. The EU's eIDAS 2 mandates it for the EUDI Wallet; W3C standardizes the cryptosuites; Vietnam's ND 13/2023 data-minimization principle and Nghị định 69/2024/NĐ-CP provide the legal hooks for the same behavior in Vietnam.The Bottom Line
Selective disclosure answers the oldest question in identity: how do I prove I am who I say I am — without showing the world who I am?
The physical answer was "show everything." The digital answer is tiết lộ có chọn lọc zk: flip open exactly the page the verifier needs, prove the page is genuine, and keep the rest of the book sealed — for life.
Vietnam's VNeID has the identity infrastructure. The standards (SD-JWT, W3C, ZK) are ready. The legal foundation (ND 13, Nghị định 69/2024) is in place. What's left is deploying the privacy layer — and every citizen who reclaims control of their zk privacy identity makes the case for why it must happen now.
Your passport is a book. You don't have to hand over the whole thing to prove one page.
Quick Reference
| Property | Selective Disclosure |
|---|---|
| Definition | Reveal a precise subset of credential claims — or a property of them — with authenticity proof |
| Level 0 | Full disclosure (current KYC) |
| Level 1 | Field-level disclosure — SD-JWT (RFC 9901), mDL ISO/IEC 18013-5 |
| Level 2 | Predicate/ZK disclosure — BBS+/CL/PS, Semaphore, World ID, zk-creds |
| Core trick (SD-JWT) | Salted hashes: sign digests, reveal chosen values + salts |
| Core trick (ZK) | Fresh randomized proof over the chosen subset — unlinkable |
| Example predicate | now - birth ≥ 18 years, nationality ∈ allowed, id ∉ blacklist |
| Verifier learns | Only the disclosed claims / only the proven predicate |
| Standards | RFC 9901, W3C VC 2.0 (ecdsa-sd-2023, bbs-2023), ISO/IEC 18013-5 |
| Vietnam context | VNeID 70M+, NDAKey, Nghị định 69/2024/NĐ-CP, ND 13/2023 data minimization |
| Main risks | Issuer trust, verifier-side integration cost, ZK compute overhead |
