| Internet-Draft | Agent Identity Resolution | September 2026 |
| Drake | Expires 29 March 2027 | [Page] |
The Agent Identity Registry System (AIRS)
([I-D.drake-agent-identity-registry]) assigns a
permanent canonical aid URN to the identity0 of an
autonomous entity and maintains an authoritative record associated
with that identifier. This document defines the read side of AIRS:
how a Relying Party finds the authoritative resolution service,
retrieves the public record, resolves a handle to the canonical
identifier, and verifies a Registrar-issued credential presented for
that identity.¶
Discovery uses the DNS-based URN Dynamic Delegation Discovery System (DDDS) and lookup uses the Registration Data Access Protocol (RDAP). Credential verification reuses the OAuth 2.0 JWT access-token and sender-constraint profiles defined by the AIRS registry architecture; this document defines no new credential format and no generic direct device-proof protocol.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 29 March 2027.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
[I-D.drake-agent-identity-problem-statement] defines
identity0 and the distinction between an entity, its identifier,
credentials, keys, and anchors. The AIRS registry architecture
([I-D.drake-agent-identity-registry]) defines the
canonical aid identifier, Agent Identity Record, Registrar
trust boundary, lifecycle invariants, and credential profile. This
document defines only how those records are read and how a Relying
Party uses authoritative resolution when verifying a Registrar-backed
credential.¶
The companion EPP mapping ([I-D.drake-agent-identity-epp]) is the Registrar-to- Registry write interface. The read path deliberately reuses existing infrastructure: the URN DDDS framework ([RFC3404]) locates AIRS resolution; RDAP query and response semantics are defined by [RFC9082] and [RFC9083], with HTTP usage defined by [RFC7480].¶
This document specifies: bootstrap for the AIRS resolution service; one exact-match RDAP lookup; the public Agent Identity response; handle-to-canonical resolution; and the detailed Relying Party algorithm for establishing the current authorized Registrar issuer and verifying its sender-constrained AIRS credential.¶
Provisioning, identity0 semantics, trust-tier semantics, anchor enrollment, Registrar accreditation, and governance are defined by the companion documents and are not restated here. This revision also defines no generic protocol by which an arbitrary Relying Party directly proves control against Registry-held operational proof keys. A future specification may define such a protocol.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
Long lines in some examples are wrapped using the single-backslash strategy of [RFC8792].¶
AIRS terms including "canonical identifier", "handle", "Agent
Identity Record", "Registrar", "Registry Operator", and "trust
tier" are used as defined in
[I-D.drake-agent-identity-registry]. This document
uses currentIssuer for the unique OAuth 2.0 issuer
identifier URI that authoritative AIRS Registrar metadata currently
maps from an identity's sponsoring Registrar code.¶
For an aid URN, a Relying Party performs these steps:¶
currentIssuer from that resolution result
before validating the presented credential and its sender constraint
(Section 6).¶
Lookup is not authentication. Anyone who knows an identifier can ask for its public record. Authentication additionally requires the credential and sender-constraint checks in Section 6.¶
AIRS defines a permanent canonical-form URN, for example
urn:aid:global:id-qkckh-xxtcw-cxbvp-gpskg, and an OPTIONAL
handle-form alias such as urn:aid:global:crusty. An active
handle resolves to the same Agent Identity Record. A retired handle
never resolves again and is never reassigned; the canonical identifier
remains resolvable permanently.¶
A Relying Party resolving a handle-form URN MUST obtain the canonical
identifier from the response and MUST use that canonical value for
stored references, comparisons, audit records, reputation keys, and
credential sub matching. A remembered handle MUST be
re-resolved before use because the actor may have retired it or moved
to another handle. The handle is an alias, not the durable join key.¶
AIRS uses the URN Resolution DDDS Application of
[RFC3404] and the DNS NAPTR database of
[RFC3403]. For an aid URN the first DNS key
is therefore aid.urn.arpa. Registration of that NAPTR entry
follows [RFC3405] and is requested by
Section 10.2.¶
The aid.urn.arpa entry delegates to a stable AIRS-controlled
DDDS key with an empty Flags, Services, and Regexp field. The delegated
key publishes terminal NAPTR records with the U flag and the
standard +I2L resolution service. The current interim
reference implementation uses resolver.airs.1id.biz as the
delegated key in the example below. That 1id.biz name is
temporary and is not the intended long-lived URN.ARPA delegation
target; production registration will use a stable name controlled by
the aid namespace change controller:¶
NOTE: '\' line wrapping per RFC 8792 aid.urn.arpa. IN NAPTR 100 10 "" "" "" resolver.airs.1id.biz. resolver.airs.1id.biz. IN NAPTR 100 10 "U" "+I2L" \ "!^urn:aid:(global|test):([-a-z0-9]+)$!https://airs.1id.biz/rdap/aid\ _identity/urn:aid:\\1:\\2!" .¶
The terminal rule produces the exact HTTPS RDAP lookup URI. The
replacement expression is evaluated against the original URN as
required by DDDS. The rule is case-sensitive and maps only lowercase
AIRS namespace-specific strings. It does not replace validation of
the complete identifier grammar: the RDAP service MUST reject a
mapped value that is not a valid canonical identifier or Handle under
the Registry specification. global is the sole production
uniqueness domain; test carries no production AIRS
assurance.¶
AIRS resolution depends on the integrity of the DDDS delegation. A
production Relying Party MUST obtain a DNSSEC-validated NAPTR chain
([RFC4033]) from aid.urn.arpa through the
terminal rule and MUST treat a
bogus or insecure chain as an inability to establish authoritative
AIRS resolution. The resulting RDAP URI MUST use HTTPS and the RDAP
server MUST be authenticated as required by [RFC7481].¶
Until the aid.urn.arpa entry is registered, no
DNSSEC-validated chain from it exists. In that interim a
deployment MAY configure the delegated key or the RDAP base URI
(currently https://airs.1id.biz) directly, as an
explicit local trust decision recorded in its configuration.
Such a configured bootstrap is experimental and carries only the
assurance its operator assigns to it. Once the
aid.urn.arpa entry exists, a Relying Party MUST use the
DNSSEC-validated chain and MUST NOT fall back to a configured
bootstrap when that chain fails validation.¶
This specification defines RDAP extension identifier aid.
Following the extension namespacing rules of
[I-D.ietf-regext-rdap-extensions], the lookup path
is aid_identity, not a bare aid path. The next
path segment is the complete aid URN, percent-encoded if
required by URI path-segment syntax:¶
A response using this extension MUST include aid in
rdapConformance. This document defines exact lookup only.
It defines no partial-match, wildcard, bulk, or search query for
Agent Identity objects.¶
A successful lookup returns an object whose
objectClassName is aid_agentIdentity. The standard
RDAP handle member carries the canonical aid URN.
AIRS-specific data is contained in the namespaced
aid_data object; child names need no additional prefix
because they are scoped by that namespaced object.¶
aid URN. It
MUST equal the top-level RDAP handle.¶
operational or decommissioned, using
the lifecycle semantics defined by the registry architecture.¶
registrar_code and authoritative Registrar metadata. It
MUST be absent when the identity has no current authorized
Registrar.¶
Operational records SHOULD also use the registered RDAP
active status; decommissioned records SHOULD use the
registered inactive status. This specification does not
register AIRS-specific RDAP status values. Anchor fingerprints,
operational proof public keys, raw attestation evidence, and
operator contact data MUST NOT appear in this public profile.¶
An exact lookup of an active handle-form URN returns the same object as the canonical-form URN and therefore supplies the canonical value required by Section 3. A Handle that is not active returns RDAP error 404. A disabled but non-retired Handle remains reserved to the same canonical identity and may be reactivated only under the Registry/EPP Handle policy; a retired Handle is terminal and is never reassigned. A never-assigned Handle likewise returns 404. The error response MUST NOT distinguish whether a Handle is disabled, retired, or has never been assigned.¶
A canonical identifier MUST continue to resolve after voluntary
decommissioning and while no current Registrar is authorized. In
the no-Registrar state the response remains otherwise valid but
omits currentIssuer. De-accreditation or failure of a
Registrar therefore cannot erase the durable record or silently
substitute another issuer.¶
The Registry architecture permits an identity to reduce public
discovery to a minimal response. The canonical identifier and
lifecycle state remain available because they are required to
resolve the durable record. currentIssuer, when one is
authorized, remains available because it is required for the
verification algorithm in Section 6.
displayHandle, maxActiveTrustTier, event data, and
other optional public members MAY be withheld by policy.¶
When a server signals that a defined RDAP field has been withheld
or altered, it MUST use the redacted extension of
[RFC9537], including the redacted
rdapConformance value and member required there. RFC 9537
also permits a server to omit a redaction signal when revealing the
existence of the withheld field would itself create a privacy
problem.¶
NOTE: '\' line wrapping per RFC 8792
{
"rdapConformance": ["rdap_level_0", "aid"],
"objectClassName": "aid_agentIdentity",
"handle": "urn:aid:global:id-qkckh-xxtcw-cxbvp-gpskg",
"status": ["active"],
"aid_data": {
"canonical": "urn:aid:global:id-qkckh-xxtcw-cxbvp-gpskg",
"displayHandle": "urn:aid:global:crusty",
"lifecycleState": "operational",
"maxActiveTrustTier": "sovereign",
"currentIssuer": "https://registrar.example.com/realms/agents",
"hardwareLocked": false
},
"events": [
{"eventAction": "registration",
"eventDate": "2026-03-23T10:30:00Z"}
],
"links": [
{"rel": "self",
"type": "application/rdap+json",
"href": "https://airs.1id.biz/rdap/aid_identity/urn:aid:global:\
id-qkckh-xxtcw-cxbvp-gpskg"}
]
}
¶
The AIRS registry architecture defines Registrar-issued OAuth 2.0 JWT
access tokens conforming to [RFC9068] and requires
them to be sender constrained. Resolution owns the ordering that
makes the issuer assertion authoritative. In particular, a
credential's presented iss value MUST NOT bootstrap its own
authority.¶
Given a credential claiming canonical subject A, the Relying Party MUST:¶
A as a canonical production aid URN and
resolve it through Section 4 and
Section 5;¶
aid_data.canonical exactly
equals A;¶
aid_data.lifecycleState is
operational; a decommissioned identity cannot be
authenticated;¶
aid_data.currentIssuer. If it is absent, reject
Registrar-backed AIRS authentication for that identity; a credential
from a former Registrar is not currently authoritative;¶
iss claim to exactly equal that
currentIssuer URI;¶
issuer value to exactly equal currentIssuer before
trusting its jwks_uri or other endpoints;¶
sub to exactly equal
the resolved canonical identifier;¶
cnf binding and the mTLS or HTTP Message
Signatures proof profile defined by
[I-D.drake-agent-identity-registry]. A valid JWT
without its corresponding sender proof does not establish AIRS
proof-of-control; and¶
aid.trust_tier is sufficient for the
intended action.¶
The public maxActiveTrustTier is not substituted for the
credential's aid.trust_tier. The former summarizes the
strongest currently active assurance-qualified binding; the latter
identifies the binding tier actually used for that authentication.
Trust-tier semantics and the Registrar's responsibility for validating
hardware evidence are defined only in the registry architecture.¶
RDAP responses use normal HTTP caching semantics. The canonical
identifier is permanent, but lifecycle state,
currentIssuer, maxActiveTrustTier, active handle, and
hardware-lock state can change. Servers SHOULD therefore give those
records short freshness lifetimes suitable for authentication use.
A Relying Party making a consequential decision SHOULD revalidate the
authoritative record rather than rely on stale cached values,
especially before accepting a Registrar-backed credential.¶
Cached OAuth metadata and JWK sets are governed by their own HTTP
freshness semantics. A Relying Party MUST still perform the
authoritative currentIssuer comparison; possession of a
formerly valid issuer key does not preserve issuer authority after the
identity becomes unsponsored or transfers to another Registrar.¶
The DDDS bootstrap and RDAP response determine security-critical values, particularly the canonical identifier and current authorized issuer. Production use therefore requires DNSSEC validation of the DDDS chain, HTTPS, and RDAP server authentication as specified in Section 4. A substituted resolution service could otherwise direct a Relying Party to an attacker's issuer.¶
Resolving an identifier is not proof that the counterparty controls it. Conversely, validating a token signature is not sufficient if the issuer learned only from that same token. The ordered algorithm in Section 6 binds three independent facts: authoritative identity state, authority of the current Registrar issuer, and possession of the sender-constrained proof key.¶
Registrar suspension, de-accreditation, or actor-authorized transfer
can invalidate issuer authority before an otherwise well-formed
credential expires. Consequential Relying Parties SHOULD use fresh
resolution. When currentIssuer is absent, no Registrar-
backed credential is currently authoritative for that identity.¶
This extension defines exact lookup only. Randomized canonical identifiers make population enumeration impractical, but an exact identifier or handle can still be tested for existence. Operators SHOULD rate-limit abusive lookup patterns. This document defines no wildcard, partial-match, bulk, or search endpoint.¶
Public AIRS resolution intentionally excludes anchor fingerprints, operational proof public keys, raw attestation evidence, and operator contact information. Publishing those values is unnecessary for the Registrar-backed verification path and would create avoidable correlation and disclosure risks. The registry architecture defines the separation between identity0 and mutable operator or higher-layer attributes; this profile does not recreate those attributes in RDAP.¶
An active handle, trust-tier summary, event data, and
currentIssuer can themselves reveal information about the
identified actor or its service relationship. Minimal responses and
RFC 9537 redaction are described in
Section 5.4. The general privacy considerations
of [RFC6973] also apply.¶
The aid URN namespace itself is requested by
[I-D.drake-agent-identity-registry]. This document
requests the following resolution-related registrations.¶
IANA is requested to register:¶
In conjunction with registration of the aid URN NID, IANA
is requested to add the following record to the URN.ARPA
zone under the procedures of [RFC3405]:¶
aid URN namespace
registration.¶
aid
namespace change controller. The interim
resolver.airs.1id.biz name used in examples is not the
intended long-lived URN.ARPA delegation target.¶
The delegated replacement domain carries the shorter-lived AIRS terminal rules defined in Section 4. This keeps Registry Operator succession out of the long-lived URN.ARPA record; a future change of namespace authority can update the delegation using the RFC 3405 procedure.¶
This profile reuses the URN DDDS and RDAP frameworks so that AIRS resolution adds only the identifier-specific mapping and response semantics needed by the registry architecture.¶