NHID-Auth
v1.3 tells you the caller was automated. NHID-Auth tells you the caller was authorized.
Reference Optional · reference implementation (not deployed infrastructure)
Problem
The gap it closes
NPIs are public. Disclosure does not prove authorization.
NPIs are public. A caller can state one truthfully and still have no relationship to the organization it names. Behavioral controls establish that a caller disclosed itself as automated; they cannot establish that it was ever delegated authority to act for the provider it claims.
NHID-Auth addresses that with signed delegation rather than a registry or a gatekeeper. A provider signs a statement binding an agent’s public key to an NPI and a bounded scope. The receiving side verifies that signature offline — no lookup, no central authority, no service to call.
Mechanism
How it works
The provider signs, the agent co-signs, the receiver verifies offline. Nothing passes through NHID-Clinical.
Provider signs a Delegation
The provider organization holds an Ed25519 key pair and signs a
Delegationnaming its NPI, the agent’s public key, a scope, an expiry, the call SID and a key id.Agent co-signs
The agent signs over the delegation, producing an
AgentPassport. Both signatures must verify; neither party can forge the other’s.Presented to the receiver
Drawn dashed above because it is not built: no adapter or SIP path carries a passport today. Credential delivery during a live call is an open design question.
Receiver verifies offline
verify_passportchecks the provider signature, the agent signature, expiry, call-SID binding, revocation and scope (at most three hops, narrowing only) against a trust anchor the receiver configured itself. No network call to NHID-Clinical, no registry, no NPPES lookup.A result, then optionally a gate
A
VerificationResultis valid or carries anERR_*code. When a deployment opts in, DLG-01 runs insideevaluate_all:DLG01_DELEGATION_VERIFIEDlets the verified scope constrain PDX-01; an invalid delegation returnsDENY_DATA.An audit record
Written either way, with the credential id, so the decision can be replayed. Revocation is durable within one deployment and does not propagate across organizations.
Reference An optional reference implementation, not deployed infrastructure. There are no production issuers.
Properties
Design properties
Six properties, each a field in the signed payload or a check in the verifier, not a policy.
No registry, no gatekeeper
Verification is a signature check against an anchor the receiver configured. NHID-Clinical is not in the trust path and cannot become a chokepoint.
Offline verifiable
Nothing about verification requires reaching an external service in real time. It works when the network does not.
Provider-issued
A valid credential requires the provider’s private key, with the provider’s 10-digit NPI bound into it. Public NPI data cannot produce one.
Bounded by construction
Scope and expiry are fields in the signed payload. Delegation can narrow across at most three hops and never widen; an over-broad or stale passport fails verification.
Revocable, within a deployment
A provider revokes per agent or per delegation and the next verification fails. Durable within one deployment; revocation does not propagate across organizations.
Call-bound
A passport is bound to one call SID and cannot be replayed into another. Checks run via API, not in the voice channel; the v1.3 disclosure controls run unchanged alongside.
Open reference code: the implementation is public under Apache-2.0 and the format it implements is CC BY 4.0. It is not deployed identity infrastructure and there are no production issuers. It documents a workable approach to delegated agent authority and invites implementers to break it.
Release
NHID-Auth v2: cryptographic agent identity
v1.3 establishes behavioral disclosure. v2 addresses what v1.3 cannot.
v2 verifies that an AI agent is actually authorized by the provider it claims to represent. NPIs are public via NPPES — any caller can present a real one. v2 makes that insufficient.
Released June 2026 (code Apache-2.0, document CC BY 4.0). Reference implementation in src/agent_identity.py, exercised by tests/test_identity.py, tests/test_dlg01_delegated_authority.py and tests/test_trust_anchor.py. The license permits any use; the maturity does not. This is a reference implementation for technical exploration and review — not independently security audited, with no production issuers, and not a substitute for an organization’s own identity and access controls. As of v1.3 final, this is also wired into the hosted conformance API — not just a standalone library — via POST /v1/identity/verify-passport and POST /v1/identity/revoke-passport, with durable revocation that survives across stateless invocations.
AWhere v1.3 ends and v2 begins
| Capability | v1.3 Implemented | v2 Reference |
|---|---|---|
| Identity disclosure | ✅ Behavioral (spoken) | ✅ + Cryptographic (signed) |
| Provider authorization | ❌ Not verifiable | ✅ Cryptographically verifiable |
| Revocation | ❌ Not supported | ✅ Durable within a deployment; does not propagate across organizations |
| Audit trail | ✅ Structured event logs | ✅ + Credential ID in every log |
| Revocation durability | — | Durable within a deployment; not shared across organizations Reference |
| Key custody, rotation, tenant isolation | — | Documented, not built Conceptual |
| Registry (NPI → public key) | — | Does not exist Future |
| Standing | Shadow‑evaluation ready Implemented | Working primitive, not deployed infrastructure Reference |
Where this sits: v2 is the authorization layer of the trust stack, above the carrier layer (STIR/SHAKEN, which attests that a number is legitimate) and the v1.3 disclosure controls, and below the audit trail. The stack is drawn once, on the Evidence pack.
A tick in the v2 column means the reference implementation does this and the suite covers it. It does not mean the capability is deployed, operated, or available as a service. The last four rows are the ones that decide whether v2 could be run in production today, and three of them are Conceptual or Future. Standings follow claim-boundaries.md.
Run
Run it
git clone https://github.com/NHID-Clinical/NHID-Clinical.git cd NHID-Clinical pip install -r requirements.txt python -m pytest tests/test_identity.py -v # v2 identity layer (43 tests) python examples/issue_and_verify.py # end-to-end credential walkthrough
Open
Open design questions
- No registry or discovery mechanism for provider keys — open design question
- Credential delivery during live calls is not yet standardized
- Shadow pilot data will inform the formal v2 specification document
The reference implementation is live. If you want to test it against your own threat model or contribute to the formal specification, contact us.
Get involved
Read the specification and share your reaction.
Whether you think it is right, wrong, incomplete, or misses the real problem — that feedback is what shapes the next version.
Work with NHID-Auth
The reference code, the integration notes, and the layer it sits in.
NHID-Clinical is a voluntary open framework — not an accredited standard, certification, or regulatory requirement. Everything on this page is published under CC BY 4.0.