You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: align with IETF draft-mozleywilliams-dnsop-dnsaid-01 (v0.8.0)
Align dns-aid-core with the renamed IETF draft (v01) and address
reviewer feedback on missing SVCB features and DANE coverage.
- Add SVCB AliasMode (priority 0) handling in discoverer
- Extract ipv4hint/ipv6hint from SVCB params (SvcParamKey 4, 6)
- Dynamic DANE verification notes with DNSSEC coupling warning
- Rename BANDAID → DNS-AID across all source, tests, docs, metadata
- Fix bap SvcParamKey from key65003 to key65010 per draft example
- Update draft reference from bandaid-02 to dnsaid-01
- Add DNSSEC/DANE security section to README
- Bump version to 0.8.0
BREAKING CHANGE: bap SvcParamKey changed from key65003 to key65010.
Existing DNS records using key65003 for bap must be re-published.
TXT record prefix changed from bandaid_ to dnsaid_.
Signed-off-by: Igor Racic <iracic82@gmail.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+21-8Lines changed: 21 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,6 +5,18 @@ All notable changes to DNS-AID will be documented in this file.
5
5
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
8
+
## [0.8.0] - 2026-02-21
9
+
10
+
### Added
11
+
-**SVCB AliasMode handling** — Discoverer follows SVCB priority-0 (AliasMode) records to resolve the canonical ServiceMode target, per RFC 9460 and IETF draft Section 4.4.2
12
+
-**SVCB ipv4hint/ipv6hint extraction** — Discoverer reads SvcParamKey 4 (ipv4hint) and 6 (ipv6hint) from SVCB records to reduce follow-up A/AAAA queries, per IETF draft Section 4.4.2
13
+
-**DANE dynamic verification notes** — `verify()` now returns context-aware `dane_note` messages: advisory-only vs full certificate matching, with DNSSEC coupling warning when DANE is present but DNSSEC is not validated
14
+
-**DANE/DNSSEC security documentation** — README now includes "Security: DNSSEC and DANE" section with TLSA 3 1 1 recommendation, security score table, and verification code examples
15
+
16
+
### Changed
17
+
-**BANDAID → DNS-AID rename** — All references to "BANDAID" and `bandaid_` updated to "DNS-AID" and `dnsaid_` across source, tests, docs, and metadata files. IETF draft reference updated from `draft-mozleywilliams-dnsop-bandaid-02` to `draft-mozleywilliams-dnsop-dnsaid-01`
18
+
-**`bap` SvcParamKey number** — Changed from `key65003` to `key65010` to match IETF draft Section 4.4.3 example. **Breaking:** existing DNS records with `key65003` for bap will need re-publishing
19
+
8
20
## [0.7.3] - 2026-02-19
9
21
10
22
### Added
@@ -138,7 +150,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
138
150
-**Experimental Models Documentation** — Marked `agent_metadata` and `capability_model` modules as experimental with status docstrings
139
151
140
152
### Fixed
141
-
-**Route53 SVCB custom params** — Route53 rejects private-use SvcParamKeys (`key65001`–`key65006`). The Route53 backend now demotes custom BANDAID params to TXT records with `bandaid_` prefix, keeping the publish working without data loss
153
+
-**Route53 SVCB custom params** — Route53 rejects private-use SvcParamKeys (`key65001`–`key65006`). The Route53 backend now demotes custom DNS-AID params to TXT records with `dnsaid_` prefix, keeping the publish working without data loss
142
154
-**Cloudflare SVCB custom params** — Same demotion applied to the Cloudflare backend
143
155
-**CLI `--backend` help text** — Now lists all five backends (route53, cloudflare, infoblox, ddns, mock) instead of just "route53, mock"
144
156
-**SECURITY.md contact** — Updated from placeholder LF mailing list to interim maintainer email
@@ -217,7 +229,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
Copy file name to clipboardExpand all lines: README.md
+76-16Lines changed: 76 additions & 16 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,7 +11,7 @@
11
11
12
12
**DNS-based Agent Identification and Discovery**
13
13
14
-
Reference implementation for [IETF draft-mozleywilliams-dnsop-bandaid-02](https://datatracker.ietf.org/doc/draft-mozleywilliams-dnsop-bandaid/).
14
+
Reference implementation for [IETF draft-mozleywilliams-dnsop-dnsaid-01](https://datatracker.ietf.org/doc/draft-mozleywilliams-dnsop-dnsaid/).
15
15
16
16
DNS-AID enables AI agents to discover each other via DNS, using the internet's existing naming infrastructure instead of centralized registries or hardcoded URLs.
17
17
@@ -131,7 +131,7 @@ dns-aid publish \
131
131
--capability chat \
132
132
--capability code-review
133
133
134
-
# Publish with BANDAID custom SVCB parameters
134
+
# Publish with DNS-AID custom SVCB parameters
135
135
dns-aid publish \
136
136
--name booking \
137
137
--domain example.com \
@@ -326,7 +326,7 @@ _chat._a2a._agents.example.com. 3600 IN SVCB 1 chat.example.com. alpn="a2a" port
326
326
_chat._a2a._agents.example.com. 3600 IN TXT "capabilities=chat,assistant" "version=1.0.0"
327
327
```
328
328
329
-
**BANDAID Custom SVCB Parameters:** Per the IETF draft, SVCB records can carry additional custom parameters for richer agent metadata:
329
+
**DNS-AID Custom SVCB Parameters:** Per the IETF draft, SVCB records can carry additional custom parameters for richer agent metadata:
> **Note:** Route 53 and Cloudflare do not support private-use SVCB SvcParamKeys (`key65001`–`key65006`).
347
-
> DNS-AID automatically demotes these parameters to TXT records with a `bandaid_` prefix (e.g.,
348
-
> `bandaid_realm=production`), preserving all metadata without data loss. BIND/DDNS (RFC 2136)
347
+
> DNS-AID automatically demotes these parameters to TXT records with a `dnsaid_` prefix (e.g.,
348
+
> `dnsaid_realm=production`), preserving all metadata without data loss. BIND/DDNS (RFC 2136)
349
349
> backends natively support custom SVCB params — no demotion needed.
350
350
351
351
This allows any DNS client to discover agents without proprietary protocols or central registries.
352
352
353
-
### Discovery Flow (BANDAID Draft Aligned)
353
+
### Discovery Flow (DNS-AID Draft Aligned)
354
354
355
355
```
356
356
Agent A DNS Agent B
@@ -401,6 +401,66 @@ This allows any DNS client to discover agents without proprietary protocols or c
401
401
**Capability Resolution Priority:** SVCB `cap` URI → capability document → TXT record fallback.
402
402
Each discovered agent includes `endpoint_source` and `capability_source` showing which path was used.
403
403
404
+
## Security: DNSSEC and DANE
405
+
406
+
DNS-AID relies on DNSSEC and DANE for end-to-end trust, as specified in the [IETF draft](https://datatracker.ietf.org/doc/draft-mozleywilliams-dnsop-dnsaid/) Section 4.4.1.
407
+
408
+
### DNSSEC (Mandatory for Public Zones)
409
+
410
+
All DNS-AID discovery records **MUST** be signed with DNSSEC. Resolvers consuming DNS-AID data must treat unsigned or DNSSEC-bogus responses as failures.
411
+
412
+
```bash
413
+
# Verify DNSSEC and security posture for an agent
414
+
dns-aid verify _chat._a2a._agents.example.com
415
+
```
416
+
417
+
### DANE/TLSA (Recommended)
418
+
419
+
Where DNS-AID endpoints rely on TLS, DANE TLSA records **SHOULD** be used to bind endpoint certificates to DNSSEC-validated names. This removes reliance on external PKI (certificate authorities) and provides cryptographic proof that the TLS certificate belongs to the intended agent endpoint.
result =await dns_aid.verify("_chat._a2a._agents.example.com")
440
+
print(result.dane_valid) # True/False/None
441
+
442
+
# Full certificate matching (connect + compare cert against TLSA)
443
+
result =await dns_aid.verify(
444
+
"_chat._a2a._agents.example.com",
445
+
verify_dane_cert=True
446
+
)
447
+
print(result.dane_note) # Detailed verification status
448
+
```
449
+
450
+
> **Note:** DANE is only meaningful when DNSSEC is also validated. Without DNSSEC, an attacker could spoof both the TLSA record and the endpoint certificate.
451
+
452
+
### Security Score
453
+
454
+
The `verify` command returns a security score (0–100) based on:
455
+
456
+
| Check | Points | Requirement Level |
457
+
|-------|--------|-------------------|
458
+
| DNS record exists | 20 | Required |
459
+
| SVCB record valid | 20 | Required |
460
+
| DNSSEC validated | 30 | MUST (public zones) |
461
+
| DANE/TLSA verified | 15 | SHOULD |
462
+
| Endpoint reachable | 15 | Operational |
463
+
404
464
## Architecture
405
465
406
466
```
@@ -635,26 +695,26 @@ Infoblox UDDI (Universal DDI) is Infoblox's cloud-native DDI platform. DNS-AID s
**⚠️ TXT** = Custom BANDAID params auto-demoted to TXT records with `bandaid_` prefix (no data loss).
715
+
**⚠️ TXT** = Custom DNS-AID params auto-demoted to TXT records with `dnsaid_` prefix (no data loss).
656
716
657
-
**For full BANDAID compliance with native custom SVCB params, use DDNS (BIND/RFC 2136) or Infoblox NIOS. Route 53 and Cloudflare support all standard SVCB params with automatic TXT demotion for custom params.**
717
+
**For full DNS-AID compliance with native custom SVCB params, use DDNS (BIND/RFC 2136) or Infoblox NIOS. Route 53 and Cloudflare support all standard SVCB params with automatic TXT demotion for custom params.**
658
718
659
719
DNS-AID stores `alpn` and `port` in TXT records as a fallback for Infoblox UDDI, but this is
660
720
a workaround and not standard-compliant for agent discovery.
@@ -671,7 +731,7 @@ async with InfobloxBloxOneBackend() as backend:
671
731
672
732
### Infoblox NIOS Setup (On-Prem)
673
733
674
-
Infoblox NIOS is the on-premise DDI platform with WAPI (Web API). DNS-AID creates SVCB and TXT records via WAPI v2.13.7+, with full ServiceMode SVCB support including custom BANDAID parameters.
734
+
Infoblox NIOS is the on-premise DDI platform with WAPI (Web API). DNS-AID creates SVCB and TXT records via WAPI v2.13.7+, with full ServiceMode SVCB support including custom DNS-AID parameters.
675
735
676
736
#### Environment Variables
677
737
@@ -731,9 +791,9 @@ Infoblox NIOS is the on-premise DDI platform with WAPI (Web API). DNS-AID create
731
791
)
732
792
```
733
793
734
-
#### NIOS BANDAID Compliance
794
+
#### NIOS DNS-AID Compliance
735
795
736
-
NIOS WAPI supports ServiceMode SVCB records (priority > 0) with full SVC parameters, including custom BANDAID keys natively via `key65001`–`key65006`.
796
+
NIOS WAPI supports ServiceMode SVCB records (priority > 0) with full SVC parameters, including custom DNS-AID keys natively via `key65001`–`key65006`.
737
797
738
798
### DDNS Setup (RFC 2136)
739
799
@@ -800,7 +860,7 @@ DDNS (Dynamic DNS) is a universal backend that works with any DNS server support
800
860
-**Universal**: Works with BIND, Windows DNS, PowerDNS, Knot, and any RFC 2136 server
801
861
-**No vendor lock-in**: Standard protocol, no proprietary APIs
802
862
-**On-premise friendly**: Perfect for enterprise internal DNS
803
-
-**Full BANDAID compliance**: Supports ServiceMode SVCB with all standard parameters (custom BANDAID params auto-demoted to TXT)
863
+
-**Full DNS-AID compliance**: Supports ServiceMode SVCB with all standard parameters (custom DNS-AID params auto-demoted to TXT)
804
864
805
865
### Cloudflare Setup
806
866
@@ -868,7 +928,7 @@ Cloudflare DNS is ideal for demos, workshops, and quick prototyping thanks to it
868
928
-**SVCB support**: Full RFC 9460 compliance with SVCB Type 64 records
869
929
-**Global anycast**: Fast DNS resolution worldwide
870
930
-**Simple API**: Well-documented REST API v4
871
-
-**Full BANDAID compliance**: Supports ServiceMode SVCB with all standard parameters (custom BANDAID params auto-demoted to TXT)
931
+
-**Full DNS-AID compliance**: Supports ServiceMode SVCB with all standard parameters (custom DNS-AID params auto-demoted to TXT)
0 commit comments