Live workshop · 5 Aug · Max 10 seats

Stop trusting ZK code you cannot read

Build one age proof live, then catch the part AI will not check for you: whether the proof proves the right thing.

Build the proof live →

Selective disclosure, Google Wallet, and a halo2 model

Selective disclosure is already part of the digital identity language in Europe, and Google Wallet now has an age-check example of it.

Listen to this post (~2 min)

Selective disclosure is already part of the digital identity language in Europe.

Regulation already has the shape

The EU Digital Identity Wallet docs use a simple example: send only the information needed for a service, like age or nationality, while keeping the rest of the personal data private. Regulation (EU) 2024/1183 requires wallets to make selective disclosure possible, and Annex VI includes age in the minimum list of attributes.

For a verifier, the useful version is narrow: ask for the attribute or statement needed for the transaction, not the full credential or the full set of personal data.

ZK also appears in the regulation, but not as “use zk-SNARKs”. Recital 14 mentions privacy-preserving technologies, including zero-knowledge proof, so a relying party can validate a statement without seeing the data behind it. It does not mandate a specific proof system.

Google Wallet has the age-check example

Google Wallet now has an age-check example.

Google says Sparkasse customers in Europe will be able to prove in Google Wallet that they meet an age requirement without revealing personal information such as name, address, or date of birth. Sparkasse is the German savings-bank network, and the useful part is that the example puts selective disclosure inside a bank-wallet age-check flow.

  • Proves: the user meets an age requirement.
  • Does not reveal: name, address, or date of birth.
  • Context: Sparkasse, the German savings-bank network, inside Google Wallet.

The same flow in halo2

You can also handle this flow with halo2.

In halo2, the date of birth can stay in the private witness, while the verifier only sees the public age threshold and the resulting claim.

The circuit checks that the private date satisfies the threshold, so the proof says “age condition passed” without publishing the date itself.

That is why the Google Wallet / Sparkasse example is worth noting: selective disclosure is showing up in normal identity products.

Sources

Build the age proof in halo2

On 5 August I run a live workshop where we build the halo2 version of this flow: private date of birth in the witness, public age claim out, and failing cases checked.

See the workshop