Internet-Draft Agent Identity Resolution September 2026
Drake Expires 29 March 2027 [Page]
Workgroup:
Network Working Group
Internet-Draft:
draft-drake-agent-identity-resolution-00
Published:
Intended Status:
Experimental
Expires:
Author:
C. Drake
1id.com

Resolution and Verification of Agent Identities using DNS and RDAP

Abstract

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.

Status of This Memo

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.

▲

Table of Contents

1. Introduction

[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].

1.1. Scope and Non-Goals

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.

1.2. Conventions and Terminology

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.

2. Resolution Model

For an aid URN, a Relying Party performs these steps:

  1. validate the URN and bootstrap the authoritative AIRS RDAP service (Section 4);
  2. perform an exact RDAP lookup and pin the canonical identifier from the response (Section 5); and
  3. when authenticating a presenter, establish the identity's authoritative 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.

3. Identifier Forms and the Pin-Canonical Rule

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.

4. Finding the Authoritative RDAP Service

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.

5. RDAP Query and Response

5.1. Exact Lookup Path

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:

NOTE: '\' line wrapping per RFC 8792

GET /rdap/aid_identity/urn:aid:global:id-qkckh-xxtcw-cxbvp-gpskg \
HTTP/1.1
Host: airs.1id.biz
Accept: application/rdap+json

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.

5.2. Agent Identity Object

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.

canonical
REQUIRED. The permanent canonical-form aid URN. It MUST equal the top-level RDAP handle.
displayHandle
OPTIONAL. The currently active handle-form URN, if disclosed.
lifecycleState
REQUIRED. operational or decommissioned, using the lifecycle semantics defined by the registry architecture.
maxActiveTrustTier
OPTIONAL. The strongest currently active, assurance-qualified binding tier. Absence means that no active binding is currently qualified to support an AIRS tier assertion. This is a record summary; the tier used for a particular authentication comes from the verified credential, not from this field.
currentIssuer
OPTIONAL. The unique current AIRS OAuth 2.0 issuer identifier URI derived by the Registry from the identity's current registrar_code and authoritative Registrar metadata. It MUST be absent when the identity has no current authorized Registrar.
hardwareLocked
OPTIONAL Boolean reporting the irreversible single-binding lock state defined by the registry architecture.

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.

5.3. Handle and Historical Resolution

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.

5.4. Redaction and Minimal Public Responses

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.

5.5. Example

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"}
  ]
}

6. Verifying a Registrar-Backed AIRS Credential

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:

  1. validate A as a canonical production aid URN and resolve it through Section 4 and Section 5;
  2. confirm that the response's aid_data.canonical exactly equals A;
  3. confirm that aid_data.lifecycleState is operational; a decommissioned identity cannot be authenticated;
  4. obtain 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;
  5. require the credential's iss claim to exactly equal that currentIssuer URI;
  6. retrieve OAuth 2.0 Authorization Server Metadata for that exact issuer as specified by [RFC8414] and require its issuer value to exactly equal currentIssuer before trusting its jwks_uri or other endpoints;
  7. validate the JWT access token according to [RFC9068], including signature, audience, expiry and other applicable claims, and require sub to exactly equal the resolved canonical identifier;
  8. verify the credential's sender constraint on the actual protected request using the 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
  9. apply local policy, including whether this Relying Party trusts that otherwise-authorized Registrar and whether the credential's per-interaction 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.

7. Caching and Freshness

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.

8. Security Considerations

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.

9. Privacy Considerations

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.

10. IANA Considerations

The aid URN namespace itself is requested by [I-D.drake-agent-identity-registry]. This document requests the following resolution-related registrations.

10.1. RDAP Extensions Registry

IANA is requested to register:

Extension identifier
aid
Registry operator
Any
Published specification
This document
Contact
IESG, iesg@ietf.org
Intended usage
Exact RDAP lookup of AIRS Agent Identity records using the aid_identity path, aid_agentIdentity object class, and aid_data response member.

10.2. URN.ARPA NAPTR Registration

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]:

Key
aid
Authority
The change controller of the aid URN namespace registration.
Record
TBD: a stable DNS name under the control of the 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.

11. Normative References

[RFC2119]
Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, , <https://www.rfc-editor.org/info/rfc2119>.
[RFC8174]
Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, , <https://www.rfc-editor.org/info/rfc8174>.
[RFC3403]
Mealling, M., "Dynamic Delegation Discovery System (DDDS) Part Three: The Domain Name System (DNS) Database", RFC 3403, DOI 10.17487/RFC3403, , <https://www.rfc-editor.org/info/rfc3403>.
[RFC3404]
Mealling, M., "Dynamic Delegation Discovery System (DDDS) Part Four: The Uniform Resource Identifiers (URI)", RFC 3404, DOI 10.17487/RFC3404, , <https://www.rfc-editor.org/info/rfc3404>.
[RFC3405]
Mealling, M., "Dynamic Delegation Discovery System (DDDS) Part Five: URI.ARPA Assignment Procedures", BCP 65, RFC 3405, DOI 10.17487/RFC3405, , <https://www.rfc-editor.org/info/rfc3405>.
[RFC4033]
Arends, R., Austein, R., Larson, M., Massey, D., and S. Rose, "DNS Security Introduction and Requirements", RFC 4033, DOI 10.17487/RFC4033, , <https://www.rfc-editor.org/info/rfc4033>.
[RFC7480]
Newton, A., Ellacott, B., and N. Kong, "HTTP Usage in the Registration Data Access Protocol (RDAP)", STD 95, RFC 7480, DOI 10.17487/RFC7480, , <https://www.rfc-editor.org/info/rfc7480>.
[RFC7481]
Hollenbeck, S. and N. Kong, "Security Services for the Registration Data Access Protocol (RDAP)", STD 95, RFC 7481, DOI 10.17487/RFC7481, , <https://www.rfc-editor.org/info/rfc7481>.
[RFC9082]
Hollenbeck, S. and A. Newton, "Registration Data Access Protocol (RDAP) Query Format", STD 95, RFC 9082, DOI 10.17487/RFC9082, , <https://www.rfc-editor.org/info/rfc9082>.
[RFC9083]
Hollenbeck, S. and A. Newton, "JSON Responses for the Registration Data Access Protocol (RDAP)", STD 95, RFC 9083, DOI 10.17487/RFC9083, , <https://www.rfc-editor.org/info/rfc9083>.
[RFC9537]
Gould, J., Smith, D., Kolker, J., and R. Carney, "Redacted Fields in the Registration Data Access Protocol (RDAP) Response", RFC 9537, DOI 10.17487/RFC9537, , <https://www.rfc-editor.org/info/rfc9537>.
[RFC8414]
Jones, M., Sakimura, N., and J. Bradley, "OAuth 2.0 Authorization Server Metadata", RFC 8414, DOI 10.17487/RFC8414, , <https://www.rfc-editor.org/info/rfc8414>.
[RFC9068]
Bertocci, V., "JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens", RFC 9068, DOI 10.17487/RFC9068, , <https://www.rfc-editor.org/info/rfc9068>.
[I-D.ietf-regext-rdap-extensions]
Newton, A., Singh, J., and T. Harrison, "RDAP Extensions", Work in Progress, Internet-Draft, draft-ietf-regext-rdap-extensions-14, , <https://datatracker.ietf.org/doc/draft-ietf-regext-rdap-extensions/>.
[I-D.drake-agent-identity-registry]
Drake, C., "Agent Identity Registry System: A Federated Architecture for Durable Identity of Autonomous Entities", Work in Progress, Internet-Draft, draft-drake-agent-identity-registry-04, , <https://datatracker.ietf.org/doc/html/draft-drake-agent-identity-registry-04>.

12. Informative References

[RFC8792]
Watsen, K., Auerswald, E., Farrel, A., and Q. Wu, "Handling Long Lines in Content of Internet-Drafts and RFCs", RFC 8792, DOI 10.17487/RFC8792, , <https://www.rfc-editor.org/info/rfc8792>.
[RFC6973]
Cooper, A., Tschofenig, H., Aboba, B., Peterson, J., Morris, J., Hansen, M., and R. Smith, "Privacy Considerations for Internet Protocols", RFC 6973, DOI 10.17487/RFC6973, , <https://www.rfc-editor.org/info/rfc6973>.
[I-D.drake-agent-identity-epp]
Drake, C., "Extensible Provisioning Protocol (EPP) Mapping for Agent Identity and Handle Objects", Work in Progress, Internet-Draft, draft-drake-agent-identity-epp-00, , <https://datatracker.ietf.org/doc/html/draft-drake-agent-identity-epp-00>.
[I-D.drake-agent-identity-problem-statement]
Drake, C., "Identity for Autonomous Agents and Robots: Problem Statement, Threat Model, and Terminology", Work in Progress, Internet-Draft, draft-drake-agent-identity-problem-statement-00, , <https://datatracker.ietf.org/doc/html/draft-drake-agent-identity-problem-statement-00>.

Appendix A. Acknowledgments

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.

Author's Address

Christopher Drake
1id.com
Australia