Open proposal · v1.3 · Not an accredited standard or certification
Home/Framework/NHID-Auth

Layer 3 · v2 · CC BY 4.0

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)

  • Layer3 · optional extension
  • Versionv2 · June 2026
  • CodeApache-2.0
  • DocumentCC BY 4.0
  • Production issuersNone

Problem

The gap it closes

NPIs are public. Disclosure does not prove authorization.

01 / 06

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.

02 / 06
The NHID-Auth delegation flow, from a provider's key to an audit record Four stations left to right. One: the provider holds an Ed25519 key and signs a Delegation naming the NPI, the agent key, a scope, an expiry, the call SID and a key id. Two: the agent co-signs it, producing a dual-signed AgentPassport. A dashed hop then leads to station three, labeled not built: no adapter or SIP path carries a passport today. Three: the receiver runs verify_passport, six checks against a trust anchor the receiver configured itself: provider signature, agent signature, expiry, call-SID binding, revocation, and scope, at most three hops and narrowing only. Four: a VerificationResult, valid or an ERR code. Below, an optional step: DLG-01 inside evaluate_all returns DLG01_DELEGATION_VERIFIED or DENY_DATA, and a verified scope constrains PDX-01; an audit record is written either way. Side notes say there is no registry, no discovery and no NPPES check, and that revocation is durable within one deployment and does not propagate across organizations. Labeled Reference: an optional reference implementation, not deployed infrastructure. DELEGATION FLOW · OPTIONAL · REFERENCE IMPLEMENTATION, NOT DEPLOYED INFRASTRUCTURE 1 Provider signs a Delegation Ed25519 key held by the provider. NPI · agent key · scope expiry · call_sid · kid 2 Agent co-signs Produces an AgentPassport, dual-signed: provider and agent. AgentPassport NOT BUILT: NO ADAPTER OR SIP PATH CARRIES A PASSPORT TODAY 3 Receiver runs verify_passport Offline. Against a trust anchor the receiver configured itself. no registry · no NPPES check 4 VerificationResult valid, or an error: ERR_INVALID_SIG · ERR_EXPIRED ERR_REVOKED · ERR_SCOPE_VIOLATION STEP 3 · SIX CHECKS, AGAINST A TRUST ANCHOR THE RECEIVER CONFIGURED 1. Provider signature (Ed25519) 2. Agent signature 3. Expiry 4. Call-SID binding (no replay) 5. Revocation 6. Scope: ≤3 hops, narrowing only Optional: DLG-01 inside evaluate_all DLG01_DELEGATION_VERIFIED → the verified scope constrains PDX-01 invalid → DENY_DATA Audit record Written either way, with the credential id. ATR-01 territory: recorded, not gated. No registry, no discovery mechanism, no NPPES check: the NPI is a field the provider signs, not a lookup. Revocation is durable within one deployment and does not propagate across organizations.
  1. Provider signs a Delegation

    The provider organization holds an Ed25519 key pair and signs a Delegation naming its NPI, the agent’s public key, a scope, an expiry, the call SID and a key id.

  2. Agent co-signs

    The agent signs over the delegation, producing an AgentPassport. Both signatures must verify; neither party can forge the other’s.

  3. 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.

  4. Receiver verifies offline

    verify_passport checks 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.

  5. A result, then optionally a gate

    A VerificationResult is valid or carries an ERR_* code. When a deployment opts in, DLG-01 runs inside evaluate_all: DLG01_DELEGATION_VERIFIED lets the verified scope constrain PDX-01; an invalid delegation returns DENY_DATA.

  6. 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.

03 / 06
Property01

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.

Property02

Offline verifiable

Nothing about verification requires reaching an external service in real time. It works when the network does not.

Property03

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.

Property04

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.

Property05

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.

Property06

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.

04 / 06

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

Capabilityv1.3 Implementedv2 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
StandingShadow‑evaluation ready ImplementedWorking 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

05 / 06
Shell · from a clean checkouttests/test_identity.py
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

06 / 06
  • 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.

Read the evaluation guide →

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.