ZTIP — Zero-Trust Identification Protocol

Prove you're a trustworthy actor — without revealing who you are.

Identification here means proving you're a distinct, attestable actor — not disclosing who you are. Nothing is trusted up front; each fact is proven fresh, per task, and then forgotten. The whole idea fits on this page, and the proof fits in a five-minute tap.

The shift

IAM

A database that remembers who you are. Every check is a lookup; the relying party learns and logs your identity.

ZTIP

No store. A short, signed attestation that a fact holds — verified point-of-use, then forgotten.

IAM remembers who you are. ZTIP forgets you the moment it's sure you qualify.

Tap it (5 minutes)

Phone A  →  claim a .aint  →  (optional) bind a DEMO passport  →  role: User (offer)
Phone B  →  role: Terminal (verify)  →  tap A against B

No second phone?  →  type a .aint, hit Verify online — the same validator, in-band.

⬇ Download the APK (latest release) · Android 12+ · NFC optional (online path works without).

What Phone B shows

── VERDICT · who/what: human · vandemeent.aint
   signature   VINK set signed & verified  (Ed25519 against key-matched .aint)
   claim       ✅ 18 or older
   claim       ✅ valid passport
   claim       ✅ Dutch national
   attestation key MATCH · six-rule PASS (6/6) · fresh (54s TTL) · online AINS
   not received name · document number · date of birth · facial image
                — only the tick crossed the wire

Find your name in that output. You can't — it never left the phone. That absence is the whole point.

Verify it yourself (no app — just a terminal)

Name resolution is a real, public endpoint. Resolve any .aint and read the live Ed25519 key the handshake matches against:

curl -s -H "User-Agent: ztip" https://api.ainternet.org/api/ains/resolve/root_idd | jq .record
# → { "public_key": "6aab3fb5…", "status": "active", "entity_type": "idd", … }

Claim your own .aint in the app, then resolve that. The resolve you watch in the app is the resolve you can run yourself — nothing staged.

Interoperate it yourself (no vendor)

Don't read the spec — run it. The conformance kit builds signed VINK test-vectors and checks them with a second, independent implementation. Green means a stranger can re-implement the handshake from the spec alone and interoperate — no shared code, no original team in the loop. (And it answers a fair worry: "is this just AI text?" No — it's runnable, in 30 seconds.)

git clone https://github.com/Jtel-ZTIP-w3c/ztip-conformance
cd ztip-conformance && ./run.sh
# → YES IT PLAYS — all cases interop. Independent impl agrees, no vendor needed.

Reproducible (fixed seed, deterministic Ed25519) and built one primitive at a time — the roadmap tells you what to run next. → ztip-conformance

The seven steps (read along live)

#stepprimitive / cryptotransportside
1offer + VINK setEd25519 signNFC HCEofferer
2readSELECT AIDNFC readerterminal
3resolveAINS /resolveHTTPSname server
4key-matchpubkey ≟ resolvedlocalterminal
5six-ruletibet-iddrop .solocalterminal
6VINK verifyEd25519 verifylocalterminal
7verdictscreenterminal

→ Full cookbook — what each line means, what crosses the tap, and what stays on the device. Honest about proven vs scaffolded.

A rule, applied — not a person

verify  age ≥ 18 · context: online shopping · jurisdiction: NL
→ a 13-year-old's passport answers ❌ NOPE — the gate never sees the birth date, only "no".

Rules live with the verifier (the industry); identity lives with you. The attestation is the thin bridge — verified on basic facts, sharing none of the characteristics that identify you as a person.

One resolver, many actors

The same seven steps carry a human, an AI, or an IoT device — only the proof-of-trust vocabulary differs:

human  → fresh biometric + state credential   (continuity)
AI     → mandate chain + causal step           (not persistence — it's stateless between calls)
IoT    → unbroken substrate / behaviour pattern

This is why ZTIP isn't an age-gate. It's a way for any actor to say "I'm trustworthy for this" — and for an AI, that's the honest model: it re-derives its right to act each time, carrying nothing.

Honest notes

Links

computo et comprobo, ergo fui — attestor, ergo nunc sum.
I compute and verify, therefore I was; I attest, therefore now I am.