| Internet-Draft | ANS v2 | October 2026 |
| Courtney, et al. | Expires 29 April 2027 | [Page] |
Autonomous AI agents now invoke one another across organizational boundaries over protocols such as the Model Context Protocol (MCP) and Agent2Agent (A2A). A relying party has no interoperable way to bind a discoverable agent endpoint to the holder of its domain (optionally verified as a legal entity), a specific software release, and an auditable issuance history. This document specifies the architecture of Agent Name Service version 2 (ANS v2), an identity layer, anchored in DNS domains, that binds an agent endpoint to its domain holder, its release, and its history. ANS v2 composes systems the Internet already runs (the DNS with DNSSEC; the Web PKI, with DANE where operators publish it; and an append-only transparency log) and introduces no new root of trust.¶
Every ANS v2 agent carries a versioned name rooted in a DNS domain that the registrant controls. When a registrant registers an agent, the Registration Authority (RA) checks the registrant's control of that domain, can issue an Identity Certificate that binds the versioned name to the agent's key, and submits a signed registration record to a Merkle-tree transparency log. Under the current specifications, a new version is a new registration and a new log entry, so a verifier can pin an agent to a specific release. Any third party can detect a rewritten log by computing, from the log's public tiles, a consistency proof between two of its signed checkpoints.¶
For discovery, ANS v2 adopts the SVCB records and SvcParams of DNS for AI Discovery (DNS-AID) as its default format, and keeps an older TXT-based format only as an opt-in profile. Beyond those discovery records, ANS v2 specifies one DNS record, an "_ans-badge" TXT record that points to the agent's transparency-log entry; the log seals the fingerprint of the agent server's certificate, and operators can add DANE records. With these records, a verifier resolves an agent, authenticates its TLS endpoint, and confirms that the presented name, version, and key match a logged registration.¶
This document also states a threat model covering agent impersonation, DNS spoofing, CA and Registration Authority compromise, version rollback, agent card tampering, and log rewriting, and names what each ANS check does and does not prevent. The reference registry, transparency log, verifier, JSON Schemas, SDKs, and CLI are open source.¶
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 April 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.¶
An AI agent that calls another agent over MCP [MCP] or A2A [A2A] learns a hostname and an endpoint URL. Before it sends a payment instruction or a customer record, the calling agent needs to know who answers for this endpoint, which release of the software is running there, and whether anyone can check what happened to that release over time. A TLS server certificate names the hostname, which answers part of the first question. No interoperable record names the release running at the endpoint or its history.¶
An ANS v2 verifier answers all three by checking systems the Internet already runs. The DNS, signed with DNSSEC [RFC4033], anchors each agent's name in a domain its owner controls. X.509 certificates [RFC5280] let a caller authenticate the agent's TLS endpoint, and an operator can pin them in DNS with DANE [RFC6698]. An append-only transparency log records every agent the RA registers or revokes, where any party can read and audit the record. The log uses the Merkle-tree construction of Certificate Transparency [RFC9162] and the model of SCITT [I-D.ietf-scitt-architecture], in which a transparency service signs a receipt for each statement it records.¶
This document describes how the DNS records, certificates, and transparency log fit together and what each one defends against. The ANS specifications [ANS-SPEC], numbered ANS-0 through ANS-6, state what each implementation must do.¶
ANS began as the Agent Name Service specification by Huang, Narajala, Habler, and Sheriff [ANSv1], which Vineeth Narajala brought to the IETF as [I-D.narajala-ans]. [I-D.narajala-courtney-ansv2] then specified ANS v2. ANS has since separated into these parts:¶
This document does not define the wire format of discovery records (DNS-AID does), or the application protocols agents speak (MCP, A2A, and others). ANS tells a verifier who an agent is; whether to trust or transact with that agent is the verifier's own decision, which a separate scoring service that reads ANS records can inform. ANS records registrations and their lifecycle, not the actions an agent takes, and binds the keys in the certificates the TL seals and, through the optional identity service (Section 3), the keys an organization identifier lists. Keys an agent publishes for application protocols, such as keys that sign payment authorizations, stay outside ANS.¶
Five parties take part. The registrant holds the domain, runs the agent, and publishes DNS records. The RA checks domain control and issues or accepts certificates. The TL seals what the RA submits. A DNS operator serves the registrant's zone. A verifier reads the DNS records, certificates, and TL records and decides for itself.¶
Registrant (owner or AHP) Verifier
| 1 register agentHost, ^ ^ ^
| prove domain control | | |
v | | |
+-----------------+ 2 signed event +-----+---+---+---+
| Registration |----------------->| Transparency Log |
| Authority (RA) | | (receipts, tiles,|
+-----------------+ | checkpoints) |
| 3 certificates; +------------------+
| expected DNS record content ^
v | 5 badge, receipt,
Registrant publishes in its zone: | status token
SVCB (DNS-AID), _ans-badge TXT, (TLSA) |
| |
+---- 4 DNS (DNSSEC) -----+--> Verifier
An RA can also offer an optional identity service [ANS-SPEC]. The service verifies an identifier the registrant controls, such as a did:web identifier, which resolves to keys published under a web domain, or a Legal Entity Identifier (LEI) proven with a vLEI credential chain plus a possession signature, and links that identifier to the registrant's agents. The RA submits a TL event each time it verifies, updates, links, unlinks, or revokes the identifier.¶
Many RAs can operate, each integrated with its own systems, such as the CA it obtains Server Certificates from and the DNS zones it hosts. The ANS specifications fix what every registration carries, whichever RA handles it: proof of domain control, the certificate fingerprints the TL seals, and the badge record. A verifier therefore checks a registration from any RA the same way.¶
A verifier can check the DNS, the certificates, and the TL separately; an attacker has to defeat all three to pass a verifier that checks all three.¶
Every registration has an ANSName of the form "ans://v{version}.{agentHost}". The version is a numeric semantic version (major.minor.patch) with no pre-release or build-metadata suffix. The RA keeps each full ANSName unique, so "ans://v1.0.0.travel.example.com" and "ans://v2.0.0.travel.example.com" are two independent registrations with independent statuses.¶
A registrant releases a new version by registering the new ANSName. Both versions can stay ACTIVE until the registrant or the RA retires the old one. The registrant revokes the old version, or an RA may apply a retirement policy that it publishes to registrants, for example deprecating the old version when the new one activates and revoking it after a grace period with the revocation reason SUPERSEDED. The RA records each step in the TL: it submits an AGENT_DEPRECATED event when it deprecates the old version and an AGENT_REVOKED event when it revokes it, and from each event on, the badge and the status token report the new status. Because verifiers on both tiers decide from that status whether the old version is retired (Section 11.6), the registrant keeps the old version's "_ans-badge" record published until the RA revokes the version. When the RA revokes the old version, the RA leaves valid every certificate the new version still holds. If registering the new version fails, the RA leaves the old version untouched.¶
An Identity Certificate, when the registrant requests one, carries the full ANSName as a uniformResourceIdentifier subject alternative name, with the clientAuth extended key usage. The CA/Browser Forum Baseline Requirements [CABF-BR] prohibit URI subject alternative names in publicly trusted server certificates, so a public CA cannot issue an Identity Certificate; the RA's private CA issues the Identity Certificate against a certificate signing request (CSR) the registrant submits. ANS-2 prohibits registrants from bringing their own Identity Certificates, because a rogue CA could otherwise issue one for an ANSName the RA never validated. A registrant can skip the Identity Certificate; the registration then activates and operates on its Server Certificate alone. An agent registered without an Identity Certificate can answer calls but cannot authenticate when it calls another agent, because both ANS-6 caller methods (Section 8) bind the caller to its Identity Certificate. The registrant cannot add an Identity Certificate later without registering a new version. A registrant whose agent calls other agents should therefore request an Identity Certificate.¶
A registrant registers an agent in three steps [ANS-SPEC]:¶
After activation, the RA can move a registration to DEPRECATED or REVOKED. The RA never marks an active registration EXPIRED; each time a verifier reads the registration's badge or status token, the TL reports WARNING as the expiry sealed in the AGENT_REGISTERED event approaches and EXPIRED once that expiry passes. The RA itself marks a registration EXPIRED only when the registration is still pending and its domain-control challenge lapses. When the registrant or the RA revokes a registration, the RA submits an AGENT_REVOKED event. The RA also submits a TL event when it deprecates a version (Section 4) and each time it renews a certificate. The TL lists a renewed certificate's fingerprint only after the RA logs the renewal, so without that event verifiers reject the agent once the agent presents the new certificate. A content delivery network (CDN) or hosting platform that manages the Server Certificate can rotate that certificate without telling the registrant, and the same rejection follows until the registrant submits the new certificate through the RA's renewal.¶
The registrant re-proves domain control at every Server Certificate renewal and every new version, subject to the reuse window ANS-1 allows for a recent ACME authorization. A party that loses control of the domain therefore cannot renew or extend a registration, and the domain's new holder does not silently inherit the reputation its former holder built. Section 11.9 covers what the former holder can still do with its existing registrations.¶
ANS-3 organizes discovery records into named profiles. The registrant chooses the profiles for each registration; ANS_DNSAID is the default.¶
Whatever profiles the registrant chooses, the registrant publishes the badge record and can add DANE records:¶
ANS-3 requires the discovery and trust records to sit in public DNS zones that any third party can query; a private zone or proprietary lookup channel does not conform. DNS-AID, which ANS composes, makes TLSA records optional, recommends that zones be DNSSEC-signed, and requires a zone that publishes TLSA records to be signed; ANS follows the same rules. Following [RFC6698], a verifier treats a TLSA record set as unusable unless DNSSEC validates it as "secure".¶
The TL keeps one Merkle tree. ANS-4 specifies the TL's leaf hashing, which follows [RFC9162], and the TL's signature algorithms.¶
Any reader can fetch the TL's contents without authenticating:¶
A receipt proves that an event was sealed and stays valid forever, including for a registration revoked later. A status token states the registration's current status and expires after a short lifetime (one hour by default). A verifier that needs to know an agent is still live uses the status token or the badge, not the receipt alone.¶
Each RA instance signs the events it submits with a producer key the TL has registered. The TL can also publish periodic checkpoints to an external consensus ledger, following HCS-27 [HCS27], the Hashgraph Online profile for publishing Merkle checkpoints to a Hedera Consensus Service topic.¶
ANS-6 lets each deployment make two independent choices about how one agent authenticates another. In the first choice, the verification tier, the deployment picks where the verifier gets its evidence: on the badge tier, the verifier queries the TL when it connects; on the SCITT tier, the verifier checks a receipt and a status token locally with no network call per request. In the second choice, the possession method, the deployment picks how the caller proves it holds its key: Method A presents the Identity Certificate in the mutual-TLS handshake; Method B sends a DPoP proof [RFC9449] in an HTTP header, which survives proxies and gateways that terminate TLS.¶
Whatever the tier and method, the verifier establishes three facts, all bound to one certificate: identity (a badge or receipt shows the registration exists), liveness (the badge or status token shows the registration is not revoked), and possession (the handshake or DPoP proof shows the peer holds the key). The presented certificate matches when its fingerprint equals one of the fingerprints the TL sealed for that registration.¶
ANS-5 lays out the checks a verifier can run against an agent, each through a different trust channel:¶
ANS-5 defines an integrity monitor that re-checks registered agents on a schedule its operator sets: that the TL entry exists, that the DNS records match the sealed values and validate under DNSSEC, and that the certificate fingerprints match. A monitor reports a mismatch; the monitor cannot change a registration's state. The RA records a warning only for a confirmed finding that carries cryptographic evidence of the discrepancy, and only after the RA re-verifies that evidence. A warning is advisory: the agent stays ACTIVE, and each consumer decides what to do with the warning.¶
The ANS specifications change in the open; these changes are under discussion or under way:¶
An attacker who wants to pose as "travel.example.com" must answer the RA's domain-control challenge for that name, present a certificate whose fingerprint the TL sealed, and prove it holds that certificate's key. Without control of the domain, the attacker cannot register the name; without the key, the attacker cannot pass Method A or Method B. An operator's agents that share a wildcard certificate present the same fingerprint, so a verifier tells them apart by the name it dialed and, for a caller, by the ANSName in the caller's Identity Certificate. An attacker who does gain control of the domain can register new versions, but each one appears in the public TL, where the owner and any monitor can see it.¶
Without DNSSEC, an attacker on the path can forge the "_ans-badge" answer. ANS-6 limits the damage with an allowlist of trusted TLs: the attacker can point the verifier at a trusted TL's badge for a different agent, but every field the verifier compares is anchored either to the validated client certificate or to the name the caller dialed, so the verifier's checks fail. Without DNSSEC, a verifier gets nothing from DANE (Section 6). Operators who want verifiers to check their DNS records sign their zones.¶
A compromised public CA can issue a Server Certificate for any agentHost, and a compromised RA private CA can issue Identity Certificates for any ANSName. Neither certificate has a fingerprint in the TL, so a verifier that matches the presented fingerprint against the TL rejects both. A legitimately renewed certificate does have a fingerprint in the TL, because this document requires the RA to log each renewal (Section 5). Where the operator publishes DANE records in a signed zone, the TLSA check catches the forged Server Certificate a second time.¶
A TLSA record adds an independent check only when the party that publishes the TLSA record differs from the party that obtained the Server Certificate. An RA that both obtains the certificate and operates the zone can defeat DANE alone; a verifier then relies on the TL's public history, where every certificate fingerprint the RA seals stays visible to the owner and to monitors. If an attacker steals a producer key, the operator revokes that key: the TL stops accepting events signed with it, events sealed before the compromise stay verifiable, and the sealed history bounds what the attacker could have injected to the compromise window.¶
When one operator runs both the RA and the TL, that operator holds the keys that sign events and checkpoints and could in principle forge history. The public checkpoints and tiles let any third party compute a consistency proof that the log only appended entries between two checkpoints, and a rewritten log cannot produce consistent proofs against checkpoints it already published. A TL that anchors its checkpoints to an external ledger puts the record of those checkpoints outside the operator's control, and a deployment that runs the RA and the TL under different operators removes the risk that one operator forges both.¶
Verifiers catch a log that shows different checkpoints to different verifiers (a split view) only when they compare the checkpoints they received through an independent channel. The external ledger gives verifiers that channel, provided each verifier checks its checkpoints against the ledger. The ANS specifications do not yet define a witnessing protocol (Section 10).¶
Each version is a separate registration with its own ANSName, certificates, and TL records, so a verifier that requires "ans://v1.4.2.travel.example.com" can reject any other version. Otherwise the verifier learns from the version's TL status whether the version is retired, on either tier: the badge-tier verifier reads the status in the badge, the SCITT-tier verifier reads the status in the status token, and the TL derives both from the same events (Section 4). On the badge tier the verifier first selects the "_ans-badge" record whose version matches the version in the caller's Identity Certificate; selecting the record finds the TL entry to read and does not decide whether the version is retired. A registrant that deleted an old version's badge record before the RA revoked the version would block that version for badge-tier verifiers only, which is why Section 4 has the registrant keep the record until then. ANS-6 currently treats a DEPRECATED version as valid for connections and has the verifier warn, so a deprecated release stays reachable until the RA revokes it (Section 10). A caller that must reach only the latest release checks the version itself, and a registrant that retires a vulnerable release revokes that release's registration.¶
A verifier running the card check in Section 8 catches a host that changes an agent's card after registration, if the registrant declared a digest. The digest is optional, so a registration without one gives a verifier nothing to compare. The registrant computes the digest and the RA never fetches the card (Section 5), so a matching digest shows only that the card has not changed since registration, not that any third party checked the card's content. The ANS specifications define no way to update a sealed digest; a registrant who changes the card registers a new version.¶
After the RA revokes a registration, verifiers stop accepting the agent within a bounded time, not instantly. On the SCITT tier the worst case at default settings is the status token's one-hour lifetime, plus up to ten minutes of allowed clock skew, plus a grace window of up to one more token lifetime: two hours and ten minutes. High-assurance deployments shorten the token lifetime, decline the grace window, or check the live badge for critical transactions.¶
When a domain changes hands, the former holder's registrations stay ACTIVE until the RA revokes them (Section 10) or their certificates expire. Until then, the former holder can still call other agents under an old ANSName, and a verifier on the SCITT tier accepts the call, because that tier never reads the new holder's zone. On the badge tier, the verifier reads the new holder's "_ans-badge" records, finds no badge that matches the former holder's certificate, and rejects the call. A relying party that must notice a change of holder checks the live badge, the same check Section 11.8 suggests for revocation.¶
A malicious monitor might try to get consumers to drop a valid agent. Under the rules in Section 9, a single false report produces no warning.¶
The RA and the TL publish every registration: anyone can read an agent's ANSName, endpoints, certificate fingerprints, and lifecycle history from DNS and the TL. Registrants place nothing in a registration that they would not publish.¶
A verifier's lookups reveal which agents it intends to call. Discovery services can reduce that exposure with privacy-preserving query techniques; the RA does not see these queries. The TLS handshake reveals the agent's hostname to network observers unless both sides use Encrypted Client Hello [RFC9849].¶
This document has no IANA actions at this time.¶
A future revision may ask IANA to register the "ans" URI scheme per [RFC7595] and the underscore labels "_ans" and "_ans-badge" per [RFC8552].¶