article

ZKPassport goes live on the TACEO Network

4 min read

Privacy-preserving identity continues to grow on the TACEO Network. The step that turns a passport into an app-specific ID runs obliviously, so no one, not even the issuer, can reverse it or link a person across apps.

Proving who you are shouldn’t mean handing over who you are. ZKPassport lets people prove facts about themselves — their age, their nationality, their humanity — straight from the NFC chip in a government-issued passport or identity card, without uploading a single personal detail. The proof is generated on the user’s own phone. Nothing sensitive leaves the device in the clear.

But we need the apps using ZKPassport to identify whether a user is unique, or has been here before, without being able to track them.

ZKPassport does this with a nullifier (a value derived from a user’s passport signature together with the app’s domain and scope), so the same person is unique within an app but can’t be linked across apps or create multiple identities within one. It computes that nullifier through the TACEO Network, using a secret the network holds.

The integration: TACEO:OPRF

That’s what TACEO:OPRF, our oblivious pseudo-random function service, provides. The nullifier is computed under a key that’s secret-shared across independent nodes and never reassembled, so no single operator holds it. And because the request is blinded, the nodes never see the input or the output. Deriving a nullifier runs through the network, and only after ZKPassport’s local face-match confirms the real person is present. So it stays reproducible for the legitimate user and out of reach for anyone else, the passport’s issuer included. Knowing the passport data isn’t enough; you have to be the person.

And it’s verifiable, not just trusted: the network’s public key is registered onchain, and every result can be checked against it, or proven correct in zero-knowledge without revealing the input. The user gets what they need; the infrastructure stays blind by design.

How it works, end to end:

ZKPassport nullifier derivation, end to end: blinding on the device, threshold computation across TACEO Network nodes, and unblinding back on the device


This is the second production deployment of TACEO:OPRF, after World’s proof-of-human verification for 18M+ users. And it went live faster than the first: after World, we made the OPRF library composable, so standing up a second high-integrity deployment was drop-in rather than bespoke.

Also a node operator

ZKPassport doesn’t only consume the network; they help run it. The OPRF service operates across an independent set of node operators, spanning multiple clouds. That’s what makes the “oblivious” guarantee hold: no single operator, including us, can reconstruct what a user proved. It’s a very common thing partners ask us for. ZKPassport is the first to do it, and we expect others to follow.


Why it matters

ZKPassport is one of the most privacy-serious teams in the space, and the key identity system of Aztec labs. When a team whose entire product is privacy runs its highest-stakes step on a network no single operator controls, including them, that points to where private computation is heading: shared, neutral networks any application can build on, on whatever chain it already uses.

For the person holding the passport, that’s the payoff: they prove something real about themselves and get recognized in an app, while the identifier behind that proof stays unlinkable, something no single operator, and not even the passport’s issuer, can reverse.

Identity today; the same guarantees make private payments and confidential finance possible tomorrow.

Building privacy-preserving identity? TACEO’s Identity Solutions

See how to integrate: TACEO:OPRF