Skip to content
Evoliv Core
Draft 0.1 · for public review Not a ratified standard

Agent Identity Assurance Framework (AIAF)

A proposed technical framework for establishing who is accountable for an autonomous software agent, how strongly that accountability is evidenced, and what a website can verify about an agent that contacts it.

Trust model

Five parties, one load-bearing relationship

An Operator — a legal entity — runs an Agent that holds its own key. The Registry records the agent and issues it credentials. A Relying Party — a website or API — verifies them. When the agent acts for someone, a Principal grants that authority.

The relationship everything rests on is Operator → Registry: the agent is a credential holder, the registry a record-keeper, and a relying party's recourse runs to the operator — which is why sanctions attach to the operator, not only to one identifier.

AIAF trust model: principal, agent, registry, relying party and operator Principalend user Agentholds key K Relying partywebsite / API Registryrecords, issues Operatorlegal entity delegation grant (DAL) registers credential signed request operates accountable abuse report → sanction
After AIAF §2.1.

Scope

What identity can prove — and what it cannot

A framework that overclaims is worse than none, because it induces reliance it cannot support. AIAF states the boundary precisely, and requires implementations not to present the “no” rows as verified.

ClaimProvableMechanism
This request came from the holder of key KYesRFC 9421 signature over bound components
Key K is bound to identifier AYesRegistry-signed credential, cnf (RFC 7800)
The operator is a real legal entityYes, at OAL ≥ 2Business-registry evidence, human review
Key K is in certified hardwareYes, at KAL ≥ 2Remote attestation to a pinned root
A may act for principal PYes, at DAL ≥ 2Signed, scoped delegation grant
Identifier A is valid right nowWithin the revocation windowSigned revocation feed and short credential lifetime
A is running model MNoSelf-asserted; unverifiable over the wire
A will behave as declaredNoA declaration is a commitment, not a control
A has not been prompt-injectedNoA compromised agent still holds valid credentials
Unregistered traffic is maliciousNoNo credential means unidentified, nothing more

Assurance

Three independent axes, because one number is not enough

A hobbyist with a hardware key has excellent key protection and no recourse; a bank with a key in a plain container has recourse and a stealable key. A single scale puts both in the same bucket. AIAF grades each axis separately.

OAL

Operator assurance

Who is accountable, and how well evidenced?

OAL1 · Domain-verified
Proven control of a DNS domain, re-verified at least every 90 days; a monitored abuse contact.
OAL2 · Verified legal entity
Entity checked against a business registry or LEI, approved by a human reviewer who is not the requester.
OAL3 · Accountable entity
A named, identity-proofed Responsible Officer, a signed operating agreement and a financial instrument.

KAL

Key assurance

How well is the agent's key protected and bound?

KAL1 · Possession proven
Key generated by the operator, proof of possession completed, key never sent to the registry.
KAL2 · Attested non-exportability
Cryptographic evidence, to a pinned root, that the key cannot leave a protected module.
KAL3 · Attested runtime
KAL2 plus a verified measurement of the code able to use the key, refreshed at least daily.

DAL

Delegation assurance

By what authority does it act for someone else?

DAL0 · No delegation
Acts only for its operator.
DAL2 · Evidenced delegation
A grant signed by the principal: scoped, time-bound, independently revocable.
DAL3 · Constrained delegation
Every hop signed, an enforced depth limit, and per-action confirmation for high-value actions.

AgAL — the composite for the common case

A floor on the weaker of the two accountability axes: an agent cannot buy its way up with hardware alone, nor with paperwork alone. Delegation is kept separate, so a high AgAL never implies authority the agent was not given.

AgAL = min(OAL, KAL)   for OAL ≥ 1 and KAL ≥ 1
ScenarioOALKALDALAgAL
Hobbyist crawler, verified domain1101
Crawler at a verified company2202
Support agent for a signed-in customer2222
Payment agent initiating a transfer3333
Verified bank, key in a plain container2101

How it works

From registration to a verified request

  1. 1 · Register

    The operator generates the key pair and submits only the public key. A registry must reject any private key material.

  2. 2 · Prove possession

    The agent signs a single-use, domain-separated challenge. Until it does, it gets no credential and verifies nowhere.

  3. 3 · Present

    Each request carries a credential of at most 15 minutes and an RFC 9421 signature over method, authority and path.

  4. 4 · Verify offline

    The relying party checks both against cached registry keys and a signed revocation feed — no call to the registry per request.

A signed request (AIAF §6.1)
GET /api/products HTTP/1.1
Host: shop.example
Signature-Input: sig1=("@method" "@authority" "@path");
  created=1790243730;keyid="aid:v1:acme-corp:01J8Z…";
  alg="ed25519";nonce="k9Xr…";tag="aiaf"
Signature: sig1=:MEUCIQD…:
Agent-Credential: eyJhbGciOiJFZERTQSIsInR5cCI6…
Inside the credential (AIAF §6.2)
{
  // verified by the registry
  "sub": "aid:v1:acme-corp:01J8Z…",
  "org_domains": ["acme.example"],
  "oal": 2, "kal": 2, "agal": 2,
  "cnf": { "jwk": { … } },  "exp": iat + 900,
  // self-asserted by the operator: never verified
  "declared": { "model_family": "…", "purposes": ["…"] }
}

Verified claims sit at the top level; anything the operator merely asserts is nested under declared, so a relying party can never mistake one for the other. Trust decisions key on the (registry, verified domain) pair — never on a namespace string alone.

For relying parties

What a conforming website must check

Our verifier SDKs for Node.js, Python and Go implement these checks, and are held to the same results by shared cross-language test vectors.

Get the verifier SDKs
  1. 1Verify the credential's signature against a key from a registry on your trust list, and its validity window.
  2. 2Verify the request signature against the key inside the credential, with its keyid equal to the credential's subject.
  3. 3Require the signature to cover method, authority and path.
  4. 4Check revocation from a signed feed, and treat “could not determine” as distinct from “not revoked”.
  5. 5Never treat declared values as verified, or derive delegation authority from AgAL.
  6. 6Treat a request without a verified credential as unidentified (AgAL0) — not as malicious, and not as trusted because of where it came from.

For enterprise architects

Downloads

Policy document · Markdown

AIAF draft 0.1

The full framework: trust model, assurance levels, lifecycle, wire format, accountability and due process, conformance requirements, privacy and security considerations, and governance.

66 KB · SHA-256 78dcfea0ef7d458fa2e07b84032cece7fe4df226bd73dcd9bca0465594dbe772

Download the draft

Open Policy Agent · Rego

Registry authorization policy

The OPA policy the AIDR registry runs for every operator action: roles and capabilities, the actions that need a hardware authenticator, dual control, and read-only limits — a working reference for how a conforming registry enforces separation of duties.

8 KB · SHA-256 5b7a06a0b87f0fa1777f66f5c848de901f02e99d1c52e81936923427fdfbabca

Download the OPA rules