| Internet-Draft | DN-ANR | December 2025 |
| Cui | Expires 25 June 2026 | [Page] |
This document specifies a DNS-native naming and resolution mechanism for AI agents. Building upon the DNS specification (RFC 1035) and leveraging Service Binding (SVCB) records (RFC 9460, RFC 9461), it defines how AI agents are identified using Fully Qualified Domain Names (FQDNs), how their identity and cryptographic keys are published via DNS TXT records, and how multi-version, multi-protocol service resolution is achieved using DNS SVCB records. The design philosophy emphasizes DNS as the authoritative source, protocol autonomy, and graceful degradation for legacy clients. When version is not explicitly specified, the highest priority (default) version is provided. This approach maximizes reuse of existing Internet infrastructure while enabling the rapid evolution of AI agent ecosystems.¶
This note is to be removed before publishing as an RFC.¶
The latest revision of this draft can be found at https://nobrowning.github.io/dns-native-agent-naming-resolution/draft-cui-dns-native-agent-naming-resolution.html. Status information for this document may be found at https://datatracker.ietf.org/doc/draft-cui-dns-native-agent-naming/.¶
Discussion of this document takes place on the WG Working Group mailing list (mailto:WG@example.com), which is archived at https://example.com/WG.¶
Source for this draft and an issue tracker can be found at https://github.com/nobrowning/dns-native-agent-naming-resolution.¶
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 25 June 2026.¶
Copyright (c) 2025 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.¶
The emergence of AI agents as autonomous software entities capable of communicating with each other and with humans creates new requirements for naming, resolution, and identity verification. Existing approaches often rely on centralized registries or application-layer discovery mechanisms that introduce single points of failure and do not leverage the globally distributed, well-understood DNS infrastructure.¶
This document proposes a DNS-native approach that builds upon the foundational DNS specification [RFC1035] and leverages the Service Binding (SVCB) and HTTPS DNS Resource Records defined in [RFC9460] and [RFC9461] for advanced service resolution. The core design principles are:¶
DNS is the authoritative source: DNS TXT and SVCB records serve as the single source of truth for agent identity and resolution, while HTTP-based mechanisms serve only as fallback mirrors.¶
Protocols are autonomous: Agent interaction protocols (e.g., [A2A], [ANP]) are decoupled from transport, each defining its own interaction semantics.¶
Default availability: Basic A/AAAA records [RFC1035] ensure minimum connectivity, while enhanced resolution capabilities through SVCB [RFC9460] are optional but recommended. When version is not explicitly specified, the highest priority (default) version is provided.¶
The key innovations of this specification include:¶
Use of SVCB records [RFC9460] [RFC9461] for multi-version distribution and protocol negotiation¶
Use of TXT records [RFC1035] as identity trust anchors with public key publication and SVCB integrity protection¶
An HTTPS-based fallback mechanism (agent-dns.json) for clients without SVCB support¶
Flexible security model supporting both DNSSEC and signing¶
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.¶
The following terms are used throughout this document:¶
An autonomous software entity capable of communicating with other agents or humans using defined protocols.¶
A Fully Qualified Domain Name (FQDN) that uniquely identifies an agent.¶
The application-layer protocol used for agent-to-agent communication (e.g., [A2A], [ANP]).¶
This specification follows four core principles:¶
| Principle | Description |
|---|---|
| DNS-First | DNS is the sole authoritative source for agent resolution; HTTP serves only as a readable mirror |
| Path-Independent | Version and endpoint selection are controlled by DNS, not URL paths |
| Protocol Autonomy | Agent interaction protocols are decoupled from transport |
| Default Availability | A/AAAA records guarantee minimum connectivity; enhanced features are optional. Default version is provided when not specified |
Each agent is uniquely identified by a stable Fully Qualified Domain Name (FQDN). Domain ownership combined with TLS certificates forms the foundation of agent identity.¶
# Recommended: dedicated subdomains translator.agents.example.com assistant.ai.company.com agent123.agents.example.com¶
This specification does not use URL paths for version expression. All version and endpoint selection is controlled by DNS records:¶
This specification uses three types of DNS records [RFC1035], each with distinct responsibilities. The SVCB record type is defined in [RFC9460] and [RFC9461]:¶
| Record Type | Responsibility | Requirement |
|---|---|---|
| A / AAAA | Basic connectivity | REQUIRED - ensures minimum availability |
| TXT | Identity declaration, public key publication, SVCB integrity (svcb-digest), signature | REQUIRED - identity trust anchor |
| SVCB | Version distribution, endpoint resolution, protocol negotiation | RECOMMENDED - enhanced resolution |
TXT records [RFC1035] serve as the sole trust anchor for agent identity and integrity. Their responsibilities are strictly limited to four functions:¶
Declare agent identity¶
Publish public key / fingerprint¶
Protect SVCB record integrity via digest (svcb-digest)¶
Sign identity and integrity metadata (tamper-proof)¶
_agent.translator.example.com. IN TXT ( "v=1;" "kid=key-2025-01;" "alg=Ed25519;" "pk=base64-encoded-public-key;" "svcb-digest=base64-encoded-sha256-digest;" "sig=base64-encoded-signature" )¶
| Field | Description |
|---|---|
| v | Version identifier, fixed as 1 |
| kid | Key identifier, used for key rotation |
| alg | Signature algorithm: Ed25519 (RECOMMENDED) or ES256 |
| pk | Base64-encoded public key |
| svcb-digest | Base64-encoded SHA-256 digest of canonicalized SVCB records (OPTIONAL but RECOMMENDED when signing is used) |
| sig | Signature over record content (OPTIONAL but RECOMMENDED) |
SVCB (Service Binding) records [RFC9460] are the core resolution mechanism, serving the following responsibilities:¶
| Level | SVCB Role |
|---|---|
| Service Location | TargetName + port specify the service endpoint |
| Version Distribution | Private SvcParam declares agent version |
| Protocol Negotiation | Private parameters declare supported agent protocols |
# Complete SVCB record example _agent.translator.example.com. IN SVCB 1 agent-v3.example.com. ( alpn=h2 port=443 key65480="v3" ; Agent version key65481="a2a,anp" ; Supported agent protocols ) # v2 version (lower priority) _agent.translator.example.com. IN SVCB 2 agent-v2.example.com. ( alpn=h2 port=443 key65480="v2" key65481="a2a" )¶
This specification introduces two SVCB private parameters (SvcParam) as defined in [RFC9460] to declare version and protocol:¶
| Parameter | Semantics | Example |
|---|---|---|
| key65480 | Agent version | "v3", "v2.1.0" |
| key65481 | Agent protocols | "a2a", "a2a,anp" |
Clients can:¶
ALPN is used for TLS-layer protocol negotiation (e.g., h2, h3). Agent interaction protocols ([A2A], [ANP]) are declared via SVCB private parameters (key65481), not ALPN values. This ensures compatibility with existing TLS ecosystems and reserves space for future IANA registration.¶
This specification clearly distinguishes two layers:¶
| Layer | Declaration Location | Example |
|---|---|---|
| Agent Version | key65480 | v3, v2.1.0 |
| Agent Protocol | key65481 | a2a, anp |
To ensure "works by default" behavior, this specification introduces an optional but strongly recommended fallback mechanism.¶
For clients that do not support SVCB queries, agents can publish a JSON mirror of DNS records at an HTTPS endpoint:¶
https://{agent-id}/.well-known/agent-dns.json
¶
The agent-dns.json file MUST be served with the following HTTP headers:¶
Content-Type: application/json; charset=utf-8 Cache-Control: max-age=300¶
Servers SHOULD set an appropriate Cache-Control header. A value between 300 seconds (5 minutes) and 3600 seconds (1 hour) is RECOMMENDED.¶
The JSON file MUST include a signature for integrity protection. Unlike the TXT record signature which covers only TXT fields, the JSON signature covers the complete service binding information.¶
The signature is computed over the canonical JSON representation of the document (excluding the sig field) as defined in [RFC8785] (JSON Canonicalization Scheme).¶
The agent-dns.json file MUST conform to the following JSON Schema:¶
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/agent-dns.schema.json",
"title": "Agent DNS JSON",
"description": "Mirror of DNS records for agent resolution",
"type": "object",
"required": ["agentId", "txt", "sig"],
"properties": {
"agentId": {
"type": "string",
"description": "The FQDN identifying the agent",
"pattern": "^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?
(\\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)*$"
},
"txt": {
"type": "object",
"description": "Core identity fields from DNS TXT record",
"required": ["v", "kid"],
"properties": {
"v": {
"type": "string",
"const": "1"
},
"kid": {
"type": "string",
"description": "Key identifier"
},
"alg": {
"type": "string",
"enum": ["ES256", "Ed25519"],
"description": "Signature algorithm"
},
"pk": {
"type": "string",
"description": "Base64-encoded TLS certificate public key"
}
}
},
"svcb": {
"type": "array",
"description": "Mirror of DNS SVCB records",
"items": {
"type": "object",
"required": ["priority", "target", "port"],
"properties": {
"priority": {
"type": "integer",
"minimum": 1,
"maximum": 65535
},
"target": {
"type": "string",
"description": "Target hostname"
},
"port": {
"type": "integer",
"minimum": 1,
"maximum": 65535
},
"alpn": {
"type": "array",
"items": {
"type": "string"
}
},
"agentVersion": {
"type": "string",
"description": "Agent version (mirrors key65480)"
},
"agentProtocols": {
"type": "array",
"items": {
"type": "string"
},
"description": "Supported protocols (mirrors key65481)"
}
}
}
},
"sig": {
"type": "string",
"description": "Base64-encoded signature over canonical JSON
(excluding sig field)"
}
}
}
¶
{
"agentId": "translator.example.com",
"txt": {
"v": "1",
"kid": "key-2025-01",
"alg": "ES256",
"pk": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE..."
},
"svcb": [
{
"priority": 1,
"target": "agent-v3.example.com",
"port": 443,
"alpn": ["h2"],
"agentVersion": "v3",
"agentProtocols": ["a2a", "anp"]
},
{
"priority": 2,
"target": "agent-v2.example.com",
"port": 443,
"alpn": ["h2"],
"agentVersion": "v2",
"agentProtocols": ["a2a"]
}
],
"sig": "MEUCIQC7..."
}
¶
The signature over the JSON file is computed as follows:¶
Construct the JSON object without the sig field.¶
Serialize using JSON Canonicalization Scheme (JCS) as defined in [RFC8785].¶
Compute the signature using the TLS private key.¶
Encode the signature using Base64.¶
json_without_sig = { agentId, txt, svcb }
canonical_json = JCS(json_without_sig)
signature = Sign(TLS_private_key, UTF-8(canonical_json))
sig = Base64Encode(signature)
¶
Clients MUST verify the JSON signature:¶
Fetch the JSON file over HTTPS.¶
Extract the sig field and remove it from the object.¶
Serialize the remaining object using JCS.¶
Obtain the public key from the txt.pk field in the JSON.¶
Verify the signature.¶
(RECOMMENDED for TLS-based signing) Verify that txt.pk matches the TLS certificate's public key.¶
If verification fails, the client MUST reject the JSON file.¶
Note: When agent providers use separate key pairs (not TLS-based), the verification in step 6 is not applicable. In such cases, the integrity of the JSON file depends on the authenticity of the public key in txt.pk, which has the same trust anchor limitations as described in the Security Model Overview.¶
Mirror, not addition: JSON only mirrors information already in DNS; it does not introduce content absent from DNS¶
DNS remains authoritative: HTTPS JSON is only a "readable mirror", not a new authoritative source¶
Signature required: JSON files MUST be signed for integrity protection¶
Schema validated: Clients SHOULD validate JSON against the defined schema¶
This section defines the security mechanisms for ensuring the integrity and authenticity of agent resolution data.¶
This specification provides two approaches for ensuring the integrity and authenticity of agent resolution data:¶
DNSSEC (RECOMMENDED): Protocol-level cryptographic authentication of DNS data¶
Signature-based Security (OPTIONAL but RECOMMENDED): Signing of TXT content, SVCB digest, and JSON fallback¶
| Mechanism | Protection Scope | Trust Anchor |
|---|---|---|
| DNSSEC | All DNS records (TXT, SVCB, A/AAAA) | DNS root zone |
| Signature-based Security | TXT content, SVCB digest, JSON fallback | Web PKI (when using TLS keys) or self-declared (when using separate keys) |
DNSSEC [RFC4033] provides cryptographic authentication of DNS data at the protocol level. When enabled:¶
All DNS records are signed by the zone's DNSSEC keys¶
Clients with DNSSEC validation can verify record authenticity¶
No application-layer signatures are required¶
DNSSEC is the RECOMMENDED approach for environments where it is fully deployed.¶
This specification defines an optional but recommended signing mechanism for integrity protection. Agent providers have two options for key management:¶
Using the domain's TLS certificate keys provides a complete trust chain:¶
Uses the domain's TLS certificate private key for signing¶
Public key is published in the TXT record (pk field)¶
Enables verification through the established Web PKI trust chain¶
Clients can verify that pk matches the TLS certificate presented during HTTPS connection¶
When TLS-based signing is used:¶
Agent providers MAY use a separate key pair (not derived from TLS certificates) for signing:¶
Agent provider generates and manages their own key pair¶
Public key is published in the TXT record (pk field)¶
Signature is computed using the corresponding private key¶
Trust Anchor Limitation: When using separate keys, the trust anchor is limited to the TXT record itself. If the TXT record is tampered with (e.g., via DNS spoofing or cache poisoning), an attacker could replace both the public key and signature, rendering the integrity protection ineffective. This is because:¶
The public key in the TXT record is self-declared without external verification¶
Clients have no independent trust anchor to verify the authenticity of the public key¶
SVCB records and agent-dns.json cannot be reliably verified if the TXT record is compromised¶
For this reason, when using separate keys:¶
| Scenario | Recommended Approach | |
|---|---|---|
| DNSSEC fully deployed | DNSSEC alone is sufficient | |
| DNSSEC not available | Use TLS-based signing (Option 1) | |
| High security requirements | Use both DNSSEC and signing (defense-in-depth) | |
| HTTPS fallback required | Signing required for JSON integrity | |
| Using separate keys without DNSSEC | Limited trust; consider additional verification mechanisms |
When signature-based security is used, SVCB records are protected via a digest stored in the TXT record. This section defines the canonicalization and digest computation procedures.¶
To compute the svcb-digest, SVCB records MUST be canonicalized as follows:¶
For each SVCB record, construct a canonical string in the following format:¶
<priority> <target> <params>¶
Where: - priority: Decimal integer with no leading zeros - target: Fully qualified domain name in lowercase, with trailing dot removed - params: SvcParams in sorted order by key number, formatted as key=value¶
SvcParams MUST be normalized as follows:¶
# Original SVCB records: _agent.translator.example.com. IN SVCB 2 agent-v2.example.com. ( alpn=h2 port=443 key65480="v2" key65481="a2a" ) _agent.translator.example.com. IN SVCB 1 agent-v3.example.com. ( alpn=h2 port=443 key65480="v3" key65481="a2a,anp" ) # Canonical representation (sorted by priority): 1 agent-v3.example.com key1=h2 key3=443 key65480="v3" key65481="a2a,anp" 2 agent-v2.example.com key1=h2 key3=443 key65480="v2" key65481="a2a"¶
Note: alpn is SvcParamKey 1, port is SvcParamKey 3 as defined in [RFC9460].¶
canonical_svcb = <line1> + "\n" + <line2> + "\n" + ... digest_bytes = SHA-256(UTF-8(canonical_svcb)) svcb-digest = Base64Encode(digest_bytes)¶
The resulting svcb-digest is approximately 44 characters (32 bytes encoded in Base64).¶
This section defines the signature mechanism when signature-based security is used.¶
The pk field contains the public key used for signature verification. There are two options:¶
The pk field MUST contain the public key from the domain's TLS certificate:¶
The pk field contains the agent provider's self-managed public key:¶
Generate a key pair using a supported algorithm.¶
Extract the public key in SubjectPublicKeyInfo format.¶
Note: When using separate keys, the public key is self-declared and lacks an independent trust anchor. See Security Model Overview for implications.¶
The signature input MUST be constructed by concatenating the following fields in order, separated by semicolons, with no trailing semicolon:¶
signing_input = "v=" + v + ";kid=" + kid + ";alg=" + alg + ";
pk=" + pk + ";svcb-digest=" + svcb-digest
¶
Example: ~~~ v=1;kid=key-2025-01;alg=ES256;pk=MFkwEwYHKoZI...;svcb-digest=K7gNU3sdo+OL... ~~~¶
signature_bytes = Sign(private_key, UTF-8(signing_input)) sig = Base64Encode(signature_bytes)¶
Where private_key is either: - The TLS certificate's private key (Option 1, RECOMMENDED), or - The agent provider's separately managed private key (Option 2)¶
For ES256: signature is 64 bytes (r || s format), resulting in 88 Base64 characters. For Ed25519: signature is 64 bytes, resulting in 88 Base64 characters.¶
Clients MUST perform the following steps:¶
Parse TXT record and extract v, kid, alg, pk, svcb-digest, sig fields.¶
Reconstruct signing_input from v, kid, alg, pk, svcb-digest.¶
Decode pk from Base64 to obtain the public key.¶
Decode sig from Base64 to obtain the signature bytes.¶
Verify the signature using the specified algorithm.¶
(RECOMMENDED for Option 1) Verify that pk matches the TLS certificate presented during connection.¶
If verification fails, the client MUST reject the TXT record.¶
When using Option 2 (separate key pair), clients should be aware that the signature only proves consistency between the TXT record content and the private key holder. Without DNSSEC or TLS binding, there is no external trust anchor to verify the key's authenticity.¶
When TLS certificate keys are used (Option 1), clients SHOULD verify that the pk in the TXT record matches the server's TLS certificate:¶
Establish TLS connection to the agent's domain.¶
Extract the public key from the server's certificate.¶
Compare with the pk field in the TXT record.¶
If mismatch, treat as verification failure.¶
This binding ensures that the entity controlling the TLS private key is the same entity that published the DNS records.¶
Note: This verification is not applicable when separate key pairs are used (Option 2), as the pk in the TXT record will not match the TLS certificate.¶
Prepare domain name, configure HTTPS and TLS certificate¶
Configure DNS A/AAAA records (basic connectivity)¶
Configure DNS TXT record (_agent.xxx), publish public key¶
Configure DNS SVCB records, declare version and protocols¶
(RECOMMENDED) Publish /.well-known/agent-dns.json fallback file¶
(RECOMMENDED) Enable DNSSEC¶
; Basic connectivity
translator.example.com. IN A 203.0.113.50
translator.example.com. IN AAAA 2001:db8::50
; Identity trust anchor (with SVCB integrity protection)
_agent.translator.example.com. IN TXT "v=1;kid=key-2025-01;
alg=Ed25519;pk=...;svcb-digest=...;sig=..."
; Version resolution (SVCB)
_agent.translator.example.com. IN SVCB 1 agent-v3.example.com. (
alpn=h2 port=443 key65480="v3" key65481="a2a,anp"
)
_agent.translator.example.com. IN SVCB 2 agent-v2.example.com. (
alpn=h2 port=443 key65480="v2" key65481="a2a"
)
¶
This specification uses DNS as the authoritative source for agent resolution and identity information. Its security objectives are to ensure the authenticity, integrity, and verifiability of resolution results, rather than evaluating agent service quality or behavioral trustworthiness.¶
This specification primarily considers the following threats:¶
DNS poisoning or cache pollution leading to incorrect endpoint resolution¶
Tampering with resolution results to redirect clients to unintended endpoints¶
Downgrade attacks inducing clients to use older versions or weaker protocols¶
Trust violations caused by expired or replaced identity declarations¶
To address the above threats, this specification mandates:¶
Clients MUST complete TXT verification before using any SVCB resolution results¶
Clients MUST perform TXT-SVCB consistency checks¶
Clients MUST use TLS [RFC8446] and verify server certificates [RFC9525]¶
Clients MUST NOT use endpoints that fail verification¶
Agents MUST synchronously update TXT and SVCB information when versions or endpoints change¶
This specification guarantees the following properties:¶
Verifiability of agent identity¶
Integrity and consistency of resolution results¶
Encryption and tamper-proofing of connections¶
This specification does NOT attempt to address:¶
Agent capability authenticity¶
Service quality (SLA) or behavioral compliance¶
Agent reputation or governance issues¶
These concerns should be handled by upper-layer protocols, operational frameworks, or governance mechanisms.¶
This document requests IANA registration of the following SVCB SvcParamKeys:¶
| Number | Name | Meaning | Reference |
|---|---|---|---|
| 65480 | agent-version | Agent version identifier | This document |
| 65481 | agent-protocols | Comma-separated list of supported agent protocols | This document |
Note: The values 65480 and 65481 are in the private use range (65280-65534) as defined in [RFC9460]. Upon publication, these should be replaced with IANA-assigned values from the Expert Review range.¶