Networking ยท Security ยท DNSSEC
๐Ÿ”‘
Root KSK-2024 ยท Key Tag 38696
DNS Root Zone Trust Anchor Rollover
Root KSK emblem: a cyan key on the root zone ring, key tag 20326 struck through above 38696

The Axiom Changes on October 11: Running a Resolver Through the Root KSK Rollover

A trust anchor is the one key in DNSSEC that nothing above it can vouch for. On 11 October 2026 the root zone stops signing with KSK-2017 and signs only with KSK-2024. This is the operator's view: how the root key set is built, how RFC 5011 moves a resolver from one axiom to the next, where anchors go stale, how to verify without trusting the updater, and what failure looks like when it arrives two days late.

ansi ยท wordmark ยท root ksk
โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—  โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—  โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—
โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•”โ•โ•โ•โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•”โ•โ•โ•โ–ˆโ–ˆโ•—โ•šโ•โ•โ–ˆโ–ˆโ•”โ•โ•โ•
โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ•‘   โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘   โ–ˆโ–ˆโ•‘   โ–ˆโ–ˆโ•‘
โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•‘   โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘   โ–ˆโ–ˆโ•‘   โ–ˆโ–ˆโ•‘
โ–ˆโ–ˆโ•‘  โ–ˆโ–ˆโ•‘โ•šโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•โ•šโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•   โ–ˆโ–ˆโ•‘
โ•šโ•โ•  โ•šโ•โ• โ•šโ•โ•โ•โ•โ•โ•  โ•šโ•โ•โ•โ•โ•โ•    โ•šโ•โ•

โ–ˆโ–ˆโ•—  โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•—  โ–ˆโ–ˆโ•—
โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ•”โ•โ•โ•โ•โ•โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•”โ•
โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ• โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•
โ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ•— โ•šโ•โ•โ•โ•โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ•—
โ–ˆโ–ˆโ•‘  โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘  โ–ˆโ–ˆโ•—
โ•šโ•โ•  โ•šโ•โ•โ•šโ•โ•โ•โ•โ•โ•โ•โ•šโ•โ•  โ•šโ•โ•

Overview

Update, 18 October 2026: The Cutover Happened

IANA confirmed that the root zone began signing with KSK-2024 (key tag 38696) on 11 October 2026. IANA expects most users to see no disruption, and says resolvers that were never updated to trust the new key may fail DNSSEC validation. If your resolver still validates, the anchor moved. If it returns SERVFAIL for signed names, the anchor checks below are the fix. The IANA notice gives no revocation date for KSK-2017.

Picture a validating resolver baked into a container image in the spring of 2024. It ships with a root.key file that holds one key: KSK-2017, key tag 20326. The image runs fine for two years. Every few days an orchestrator replaces the container with a fresh copy from the same image, so the resolver starts from that 2024 file every time. On Sunday 11 October 2026 the root zone starts signing its key set with a different key. Nothing breaks on Sunday. The resolver still has a cached root key set that it validated under the old key, and that cache entry has a 48 hour TTL. Sometime on Monday or Tuesday the cache expires, the resolver fetches the new key set, finds no signature from any key it trusts, and every validated lookup behind it starts returning SERVFAIL.

That is the whole failure in one paragraph, and each piece of it is documented. ICANN's guide for this rollover says users will likely start seeing effects "at some point in the 48 hours after the rollover happens" if their resolver's configuration was not updated, and that "it is impossible to predict when affected operators will notice." ICANN also calls out the exact deployment pattern above: containerized services and applications with private stub or DNS over HTTPS configurations "may use resolvers configured at build or deployment time, independently of the host operating system's resolver settings."

You are six days out as this is published. This piece treats the rollover as what it is for an operator: a distributed state migration with a hard cutover, where the state is a file on disk that most teams have never opened.

๐Ÿ—“๏ธ

The Cutover

From 11 October 2026 the root zone uses only KSK-2024, key tag 38696. ICANN's instruction to operators is to check for that key tag and not assume automatic updates worked.

โณ

The Delay

The root DNSKEY and ZSK records carry a 48 hour TTL. Failure shows up when a resolver next refetches the key set, not at the moment of the roll.

๐Ÿ”

The Mechanism

RFC 5011 lets a resolver learn a new anchor from the DNS itself, but only after a 30 day hold down and only if it can write its state to disk.

๐Ÿงพ

The Out of Band Check

IANA publishes the anchors as root-anchors.xml (format in RFC 9718), with a detached CMS signature that chains to the ICANN CA, independent of the DNS.

Why a Trust Anchor Is Configuration, Not Data

Every other DNSSEC key is vouched for by its parent through a DS record. The root has no parent. In ICANN's APNIC 62 session, as summarized by APNIC, the trust anchor "cannot be validated against another key. Instead, systems must configure it as a trusted starting point and treat it as an axiom." Once you accept that, the operations model follows. An axiom lives in configuration management, not in a cache. It has an owner, a version, a place on disk, and a test that proves it is current. If your fleet cannot answer "which root keys does this resolver trust right now," you do not have a DNSSEC deployment, you have a DNSSEC hope.

The Timeline

This is only the second root KSK rollover since the root was signed in 2010. The first took place in October 2018, a year later than planned. ICANN's July 2026 blog explains that it slipped "to allow more time for outreach after data showed that many operators had not yet updated their systems." The same post says the COVID-19 pandemic forced remote only attendance at key ceremonies for a period, and that a move to new hardware security modules required generating a brand new key, which became KSK-2024.

A

Generate

April 2024. KSK-2024 generated at the first key management facility.

B

Replicate

July 2024. Copied to the second facility. IANA adds it to root-anchors.xml with validFrom 2024-07-18.

D

Publish

Early 2025. KSK-2024 appears in the root DNSKEY set beside KSK-2017. The RFC 5011 clock starts.

E

Roll

11 October 2026. Only KSK-2024 signs the root key set.

F

Revoke

Q1 2027. KSK-2017 removed from the root zone. Deletion from both facilities follows through Q3 2027.

The phase letters come from ICANN's rollover FAQ, which describes an eight phase life cycle over roughly six years, with each key "actively used for signing for about three years." Phase C (October 2024) was the first batch of key signing requests signed with the new key, which is why it sits between replication and publication.

Event Date Source
KSK-2024 valid as an anchor validFrom="2024-07-18" IANA root-anchors.xml
IANA announces new trust anchor 24 July 2024 IANA news
KSK-2024 published in the root zone 11 January 2025, or February 2025 IANA news and ICANN blog say 11 January; ICANN FAQ says February
Rollover: KSK-2024 signs alone 11 October 2026 ICANN blog, press release, guide
KSK-2017 removed Q1 2027 ICANN FAQ
Next rollover, expected to change algorithm to ECDSA Estimated to conclude in 2029 ICANN guide
Source Conflicts, Stated Plainly

Publication date. IANA's 2024 notice said it planned to pre-publish the key "starting on 11 January 2025," and ICANN's July 2026 blog says the key "was first published in the root zone on 11 January 2025." ICANN's own FAQ, dated May 2026, says "published to the root zone in February 2025." Two ICANN documents disagree by weeks. For resolver operations it does not matter, since both dates are more than 20 months before the roll. It does matter if you are reconstructing hold down timers from logs, so use your resolver's own records.

Cadence. ICANN's blog says "the original plan called for a rollover every three years." APNIC's summary of ICANN's APNIC 62 talk says key material "is expected to be refreshed every three to four years." ICANN's guide says the post-2018 proposal "set a standard three-year cycle" and that this rollover "is the first to follow that schedule," while the FAQ describes a six year life cycle with about three years of active signing. Plan for a roll roughly every three years and build the process so the exact number does not matter.

What the Root Key Set Looks Like Today

The root zone has two kinds of keys. Per ICANN's guide, zone signing keys "sign the main data in the root zone," key signing keys "sign just the root key set," and a new ZSK is published every three months. The KSK is the only key whose signature a validator checks against its configured anchor. Everything else chains from there.

A DNS over HTTPS query for . DNSKEY with the DO bit set, made on 29 September 2026 while writing this, returned four DNSKEY records and one RRSIG. Two records carry flags 256 (ZSKs). Two carry flags 257, the SEP bit that marks a KSK: one begins AwEAAaz/tAm8, the other AwEAAa96jeuk. The RRSIG covering the set names signer key tag 20326, algorithm 8, original TTL 172800 seconds (48 hours), with an inception of 19 September and an expiration of 10 October 2026. After the roll, that signer field changes to 38696. That field is the whole event.

CONFIGURED TRUST ANCHORS (resolver disk) โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ KSK-2017 tag 20326 alg 8 โ”‚ KSK-2024 tag 38696 alg 8 โ”‚ โ”‚ DS SHA-256 E06D44B8...F8EC8D โ”‚ DS SHA-256 683D2D0A...FB2B16 โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ matches โ”‚ matches โ–ผ โ–ผ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ROOT DNSKEY RRset TTL 172800 (48h) โ”‚ โ”‚ 257 KSK-2017 (20326) 257 KSK-2024 (38696) โ”‚ โ”‚ 256 ZSK 256 ZSK โ”‚ โ”‚ RRSIG DNSKEY by 20326 โ”€โ”€ until 11 Oct 2026 โ”‚ โ”‚ RRSIG DNSKEY by 38696 โ”€โ”€ from 11 Oct 2026 โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ ZSK signs โ–ผ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Root zone data: com. DS net. DS org. DS ... โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ DS โ†’ child DNSKEY โ†’ ... โ–ผ example.com. A (Secure / Bogus)

You can check the anchor file against the live key set yourself, and it is worth doing once so the numbers stop being magic. A key tag is a 16 bit checksum over the DNSKEY RDATA: flags, protocol, algorithm, public key. The DS digest in root-anchors.xml is SHA-256 over the owner name (the root, a single zero byte) followed by that RDATA. Recomputing both from the PublicKey elements in today's root-anchors.xml gives 20326 with digest prefix E06D44B80B8F1D39 and 38696 with digest prefix 683D2D0ACB8C9B71, exactly the values IANA publishes. Both are 2048 bit RSA keys, matching the guide's statement that KSK-2017 and KSK-2024 use "the same cryptographic algorithm (RSA/SHA-256) and key size (2048 bits)."

# Key tag per RFC 4034 appendix B, DS per RFC 4034 section 5.1.4 import base64, hashlib, struct def key_tag(rdata: bytes) -> int: acc = sum(b if i & 1 else b << 8 for i, b in enumerate(rdata)) acc += (acc >> 16) & 0xFFFF return acc & 0xFFFF pub = base64.b64decode(PUBLIC_KEY_FROM_ROOT_ANCHORS_XML) rdata = struct.pack("!HBB", 257, 3, 8) + pub # flags, protocol, alg print(key_tag(rdata)) # 38696 for KSK-2024 print(hashlib.sha256(b"\x00" + rdata).hexdigest().upper()) # 683D2D0A...FB2B16
The Revoked Key Gets a New Tag

RFC 5011 revokes a key by setting bit 8 of the DNSKEY flags field, the REVOKE flag, and the RFC warns that "a DNSKEY with the REVOKE bit set has a different fingerprint than one without the bit set." Flags 257 become 385. Run the same checksum and KSK-2017's tag moves from 20326 to 20454. ICANN's FAQ lists Phase F as "Revocation" in Q1 2027 but describes it only as removal from the root zone. If the old key is published with the REVOKE bit first, as RFC 5011 intends, a dashboard that alerts on "unknown KSK tag in root DNSKEY" will fire on 20454. Put that number in your runbook now so nobody spends an evening on it.

RFC 5011 as a State Machine

RFC 5011 is how most resolvers were supposed to pick up KSK-2024 without anyone touching them. It solves a narrow problem: how can a resolver accept a new trust anchor from the DNS itself without letting an attacker who stole one key add their own? The answer is time. A resolver that sees a new SEP key in a validated DNSKEY set starts an acceptance timer. If the key ever disappears from a validly signed set, the timer resets. The key becomes an anchor only after the add hold down expires "AND it has retrieved and validated a DNSKEY RRSet after the hold-down time that contains the new key."

01

Start

Key not yet seen. Resolver trusts only its configured anchors.

02

AddPend

New SEP key seen in a DNSKEY set signed by a trusted key. Add hold down begins.

03

Valid

Hold down expired and the key was seen again afterward. It is now a trust anchor.

04

Missing

Abnormal. A Valid key is absent from a validated set but still trusted.

05

Revoked

Key seen with REVOKE bit in a set it signed. Immediate and permanent.

06

Removed

After the remove hold down, state for the key may be purged.

Parameter RFC 5011 definition What it works out to for the root today
Add hold down 30 days or the original TTL of the first DNSKEY set containing the key, whichever is greater 30 days (the 48 hour TTL is smaller)
Active refresh MAX(1 hr, MIN(15 days, 1/2*OrigTTL, 1/2*RRSigExpirationInterval)) At most 24 hours, since half of 172800 seconds is one day
Retry on failure MAX(1 hour, MIN(1 day, .1*origTTL, .1*expireInterval)) About 4.8 hours from the TTL term, often less as signatures near expiry
Remove hold down 30 days, "solely a key management database bookkeeping parameter" Bookkeeping only. Does not affect validation
Revocation REVOKE is bit 8 of the flags field. "Immediate and permanent upon receipt of a valid revocation" KSK-2017 tag 20326 would appear as 20454

Read the hold down rule again with a container in mind. The timer only means something if the resolver remembers it. A resolver that restarts from an immutable image, with its managed key state inside the container filesystem, restarts the clock at every deploy. If your deploy cadence is shorter than 30 days, the resolver has been in AddPend for KSK-2024 since early 2025 and never reached Valid. It still validates today because KSK-2017 signs the key set. On 11 October it stops.

There is a second trap after the roll. RFC 5011 only learns a new key from a DNSKEY set signed by a key the resolver already trusts. Once KSK-2017 no longer signs the root key set, a resolver that only knows KSK-2017 has no path to learn KSK-2024 from the DNS. Automatic update cannot rescue it. The anchor has to arrive out of band: a package update, a config change, or a fetch of root-anchors.xml.

The Unwritable Anchor File

ICANN's single line of remediation advice is telling: if key tag 38696 is missing, "verify that automatic trust updates are enabled and that your resolver has write permissions to its storage directory." Unbound's documentation says the same thing from the vendor side: to use RFC 5011 through auto-trust-anchor-file, "the user that Unbound runs under (by default 'unbound') must have write permissions to the file and the directory the file lives in (for creating temporary files)." BIND's reference says the working directory "should be always be writable by named" because it keeps managed key state in a journaled zone file. A read-only root filesystem, a config map mounted read-only, or a hardened AppArmor profile can each silently turn RFC 5011 into RFC 5011 in memory only.

Where Anchors Live

ICANN's blog names the files to check: bind.keys for ISC BIND, root.key for Unbound and PowerDNS Recursor, and root.keys for Knot Resolver. That list is where to start looking, not the full answer. Each implementation has a built-in anchor, a managed state file, and a configuration mode that decides which one wins.

ISC BIND 9

The default is dnssec-validation auto, which, per the BIND reference, uses "a default trust anchor for the DNS root zone" that is "compiled into named and is current as of the release date." A running server that sees the root key change "rolls smoothly to the new key." The catch is the next sentence: newly installed servers being run for the first time "will need to be on a recent-enough version of BIND to have been built with the current key."

  • Managed state: managed-keys.bind (or one .mkeys file per view) in the working directory, with a .jnl journal.
  • Explicit anchors: the trust-anchors statement. With initial-key or initial-ds, anchors are maintained with RFC 5011. With static-key or static-ds, "keys are permanent" and nothing updates them.
  • Inspection: rndc secroots dumps the current security roots to named.secroots by default.

Unbound

Unbound tracks RFC 5011 state in the file named by auto-trust-anchor-file, conventionally root.key. The companion tool unbound-anchor "performs setup or update of the root trust anchor." Its documentation says it fetches the anchor with the RFC 7958 method "when regular RFC 5011 update fails to bring it up to date." It does an HTTPS fetch of root-anchors.xml, checks the result against a built-in root update certificate, and only then writes the file. If the file is missing or empty, it writes a built-in root key.

  • Failure behavior: it "does not perform an update if the certificate is expired, if the network is down or other errors occur." A locked down egress policy therefore leaves the old file in place with no error at the resolver.
  • Pattern: run unbound-anchor -a /path/root.key in the init script before starting unbound, as the same user.

Knot Resolver

Knot Resolver reads trust-anchors-files, each a zone file of DS or DNSKEY records for one domain, updated under RFC 5011 and "persisted in the file (if allowed)." A read-only: true flag "blocks zonefile updates according to RFC 5011." If the file does not exist, it tries to bootstrap the root anchor, which needs the lua-http library. Static trust-anchors entries in config "will not be managed or updated," and the docs say plainly that static keys "are very error-prone and should not be used in production."

The same docs note that "your favorite Linux distribution will take care of it for you." That is true for a host that takes distribution updates. It is not true for a container image frozen at build time.

Resolver Anchor source at first start Where RFC 5011 state lives Silent failure you should test for
BIND 9, dnssec-validation auto Key compiled into named, current as of release managed-keys.bind + journal in working directory Old binary started fresh after 11 Oct. Unwritable working dir
BIND 9, static-key Your config None. Permanent Config never updated to include 38696
Unbound + auto-trust-anchor-file Existing file, else built-in key via unbound-anchor The anchor file itself File or directory not writable by the unbound user
Unbound + unbound-anchor at boot HTTPS fetch of root-anchors.xml, cert checked The anchor file No egress to data.iana.org, so the file stays unchanged
Knot Resolver trust-anchors-files, else bootstrap The same file unless read-only read-only: true or a read-only mount
Embedded or DoH stub in an app Whatever resolver the build or deploy chose Not yours Nobody knows which resolver it is
Images Freeze Axioms

Every image layer that contains a resolver contains a copy of the trust anchor as it was at build time. Distribution packages are how most hosts got KSK-2024, and immutable images skip exactly that path. Keep the images immutable and treat the anchor file like a CA bundle: a pinned input with a known version that you rebuild on purpose, plus a startup check that refuses to serve if key tag 38696 is absent after 11 October. Failing at deploy time, loudly, beats failing on Tuesday afternoon behind a load balancer.

Verifying Without Trusting the Updater

If RFC 5011 is the mechanism under test, you cannot use RFC 5011 to confirm it worked. You need an independent reference. IANA publishes one at https://data.iana.org/root-anchors/root-anchors.xml. The format was defined in RFC 7958 (August 2016), which RFC 9718 obsoleted in January 2025. Unbound's man page still cites RFC 7958. The XML is compatible, but the trust model around it changed, so read 9718.

What the File Says Today

Three KeyDigest elements under zone .:

  • Kjqmt7v, key tag 19036 (KSK-2010), validUntil="2019-01-11". Expired.
  • Klajeyz, key tag 20326 (KSK-2017), validFrom="2017-02-02", no validUntil.
  • Kmyv6jo, key tag 38696 (KSK-2024), validFrom="2024-07-18", no validUntil.

Both current entries carry PublicKey and Flags 257, the optional publickeyinfo pattern that RFC 9718 added so a consumer can build a full DNSKEY record instead of only a DS. The rule for consumers comes from RFC 7958: relying parties "SHOULD NOT use a KeyDigest outside of the time range given in the validFrom and validUntil attributes."

How the File Is Authenticated

RFC 9718 offers two paths. IANA provides "a detached Cryptographic Message Syntax (CMS) signature that chains to the ICANN CA," at root-anchors.p7s, useful if you received the ICANN CA's public key "in a trusted out-of-band fashion." Or you fetch over HTTPS and rely on the WebTrust accredited CA for data.iana.org. RFC 9718 removed the old self-signed PGP and self-issued CSR methods because they "mix out-of-band trust of authentication keys with out-of-band trust of the DNSSEC root keys." It also notes that "the ICANN CA is not a DNSSEC trust anchor." It only authenticates the file.

# 1. Independent reference: what IANA says the anchors are curl -sS https://data.iana.org/root-anchors/root-anchors.xml -o root-anchors.xml curl -sS https://data.iana.org/root-anchors/root-anchors.p7s -o root-anchors.p7s # verify the CMS signature against the ICANN CA bundle (icannbundle.pem), # obtained out of band. Unbound ships a built-in copy for unbound-anchor. openssl cms -verify -inform DER -binary -in root-anchors.p7s \ -content root-anchors.xml -CAfile icannbundle.pem -out /dev/null # prints "CMS Verification successful" against the 29 Sep 2026 files # 2. What each resolver actually trusts rndc secroots && grep -c 38696 named.secroots # BIND grep 38696 /var/lib/unbound/root.key # Unbound (path varies) grep 38696 /etc/knot-resolver/root.keys # Knot (path varies) # 3. Refresh Unbound's anchor out of band, as the unbound user sudo -u unbound unbound-anchor -a /var/lib/unbound/root.key

File checks tell you what is on disk. Two protocol mechanisms tell you what the running resolver believes, and they are how researchers produce the adoption numbers you read in press releases.

๐Ÿ“ก

RFC 8145 Key Tag Signaling

A validating resolver periodically sends a query of the form _ta-4f66-9728. (QTYPE NULL) listing its trusted key tags in hex, smallest first. BIND does this once per day by default through trust-anchor-telemetry. Root operators aggregate these to see who has 38696 (hex 9728) beside 20326 (hex 4f66).

๐Ÿ›ฐ๏ธ

RFC 8509 Root Key Sentinel

Labels root-key-sentinel-is-ta-<tag> and root-key-sentinel-not-ta-<tag> make a resolver answer, through SERVFAIL or not, whether it trusts a given key tag. It works from the client side, so you can test the resolver your users actually reach.

๐Ÿงช

Sentinel Preconditions

The special handling only fires if the response validates as Secure, CD is clear, QTYPE is A or AAAA, and the sentinel is the leftmost label. The key tag is written as five decimal digits, so 38696 needs no padding.

The 95 Percent Is a Self Selected Sample

ICANN reports that "more than 95 percent of reporting resolvers" recognize KSK-2024. The key word is reporting. RFC 8145 signals come from resolvers that implement and enable telemetry and whose queries reach the root. The resolvers most likely to be stale (old binaries, frozen images, embedded stubs, forwarders behind middleboxes that drop odd queries) are also the ones least likely to report. RFC 8145 itself lists the reasons the design moved to a QNAME: EDNS options are hop by hop and "middleboxes might block entire queries containing unknown EDNS(0) option codes." Read the 95 percent as a floor on readiness among well maintained resolvers, not as your fleet's odds.

What Failure Looks Like

ICANN's guide is specific about sequence and symptoms, and it is worth reading before you write alerts, because the failure is delayed, partial, and uneven across users.

T+0

Roll

Root key set now signed by 38696. Stale resolvers keep serving from cache.

T+0 to 48h

Cache Expires

The next query after the 48 hour TTL triggers a refetch. On a busy resolver that is minutes after expiry. On a single user resolver it can be hours or days.

Refetch

Bogus

The new key set does not validate. Resolvers that cap TTLs see it sooner.

Cascade

Everything Fails

Pages half load, mail stops, automated jobs error. "The failures will cascade until no program is able to show new information."

Fix

Recover

Once validation works again, "the users' Internet experience should go back to normal almost immediately."

Why It Is Hard to Diagnose

  • Multiple resolvers mask it. A stub with one good and one stale resolver retries and gets answers, only slower. Users "might not even notice the slowdown."
  • Mixed fleets make it intermittent. "Two users attempting to reach the same host at the same time may get different results." Behind a load balanced resolver pool with one stale member, the same user sees flapping.
  • Your alert channel may depend on DNS. ICANN notes an operator using only broken resolvers "may be unable to receive email and might only hear about the problems by phone."
  • Upstream load rises. Bogus responses are not cached, so stale resolvers hammer the root with ./IN/DNSKEY and, per the guide, likely .net/IN/DS queries. Forwarders will see the same spike from their downstream clients.
Recovery option Effect Risk
Install KSK-2024 anchor and restart Correct fix. Validation resumes Needs a trusted copy of the anchor and write access
Negative trust anchor for the root (RFC 7646) Stops failures immediately by skipping validation at and below . You are running without DNSSEC. RFC 7646 says an NTA "MUST only be used for a limited duration" and its lifetime "SHOULD NOT exceed a week"
Disable validation Same effect as a root NTA Easy to forget to turn back on
Wait for automatic update Never happens once KSK-2017 stops signing RFC 5011 has no trusted signature to learn from
There Is a Back Out Plan, and It Is Not Yours

ICANN's FAQ says that if problems become widespread, the Root Zone Management Partners "could decide to reverse the changes and return the system to a stable state," and that the timeline "may also be adjusted." Do not design around that. A back out is a decision about the global population of resolvers, made on aggregate data. Your stale resolver is one data point that nobody else can see. Plan as if the roll proceeds on schedule.

An October 11 Runbook

The runbook splits into three windows. The goal of the first is to make the second boring.

Before: now through 10 October

  1. Inventory every validator, including the ones that are not called "DNS": sidecars, service mesh DNS, CI runners, appliance firmware, and applications with a hardcoded DoH endpoint. ICANN's guide warns that "the resolver in use may not be an explicit operational choice."
  2. Check each one for key tag 38696 in the running state (rndc secroots, the anchor file), not just the config.
  3. Check writability of anchor files and their directories for the resolver's runtime user. Test with the real mount options.
  4. Rebuild images whose baked anchor file predates KSK-2024, and add a startup assertion that the anchor set includes 38696.
  5. Pick a trusted reference: root-anchors.xml verified by CMS or HTTPS, pinned in your config repo with its digest.
  6. Pre-stage the NTA procedure for your resolver software, with an owner and an expiry, so nobody improvises it under pressure.

During: 11 to 13 October

  1. Watch SERVFAIL rate per resolver instance, not in aggregate. One bad pool member hides inside a fleet average.
  2. Alert on validation failure logs that mention the root DNSKEY. ICANN says an operator with monitoring for significant errors "will be alerted immediately after the resolver fetches a new copy of the root key set."
  3. Watch outbound ./DNSKEY query volume. A stale resolver retries because bogus answers are not cached.
  4. Keep an out of band channel open for the on call team that does not resolve names through the resolvers under watch.
  5. Expect the window to be 48 hours wide, or longer for low traffic resolvers. A quiet Sunday is not a pass.

After: through Q1 2027

  1. Remove any NTA you installed and confirm validation is on.
  2. Expect KSK-2017 to leave the root key set around Q1 2027, possibly first appearing revoked as tag 20454. Neither event should page anyone.
  3. Leave 20326 in static configs until then, then remove it on your own schedule. It does no harm while unused, and removing it early gains nothing.
  4. Write down what you found. The next roll is expected to change the algorithm to ECDSA. That is a harder change, because a resolver must also support the new algorithm, and the inventory you built this month is the starting point.

Cost Reality Check

There is no invoice attached to a KSK rollover. The costs are engineering hours before the roll and incident hours after it, and ICANN's FAQ frames them that way.

Where the Cost Actually Lands

Prepared operators: ICANN expects "a small associated cost" that teams "can help prepare for the root zone KSK rollover during routine network maintenance, without additional costs." Once a resolver supports automated updates, "there is likely to be minimal or no further financial impact."

Unprepared operators: resolvers "will treat responses signed under the new key as having been tampered with and will discard those responses," which "could result in support calls from customers." For a public facing ISP resolver, that is a support queue spike. For an internal resolver behind a platform, it is every service that depends on outbound calls failing at once.

The asymmetry: checking for key tag 38696 across a fleet is minutes of work per resolver type. The incident, if it happens, arrives on a timer you do not control, with symptoms that point everywhere except DNS.

Posture Work before 11 Oct Exposure after 11 Oct
Host resolvers on supported distro packages, writable state Verify 38696 present Low
Resolvers in immutable images rebuilt from a 2024 base Rebuild, add startup assertion High until rebuilt
Static anchors in config management Add 38696 via a reviewed change Total failure if missed
Forwarding to a public validating resolver Confirm the upstream is prepared (sentinel test) Low, and not yours to fix
Validation disabled None None from the roll, and no DNSSEC protection either

Key Takeaways

Principles

  1. A trust anchor is configuration with an owner. Nothing in DNS can vouch for the root key, so the only guarantee you have is the file on disk. Version it, test it, and know who changes it.
  2. Check for key tag 38696 in running state, not in assumptions. ICANN's own instruction is to verify rather than assume automatic updates worked. Use rndc secroots or the anchor file, per resolver instance.
  3. RFC 5011 needs time and a writable disk. A 30 day hold down that restarts on every deploy never completes. Persist resolver state across restarts or refresh anchors out of band at boot.
  4. After the roll, automatic update cannot rescue a stale resolver. Once KSK-2017 stops signing, a KSK-2017-only resolver has no trusted signature to learn from. The fix has to arrive out of band.
  5. Verify against IANA, not against the updater. Fetch root-anchors.xml, authenticate it with the CMS signature or HTTPS, and honor validFrom and validUntil. The format lives in RFC 9718 now.
  6. Alert per instance, and expect a 48 hour fuse. The root key set TTL is 172800 seconds. Failure arrives when caches expire, and it is uneven across resolver pools. A fleet average hides the one bad member.
  7. Treat the 95 percent as a floor for well run resolvers, not your odds. Telemetry comes from resolvers that report. The stale ones are the ones that stay quiet.
  8. Stage the negative trust anchor, then hope you never use it. A root NTA stops the bleeding by turning off DNSSEC. RFC 7646 limits it to a short, bounded duration. Give it an owner and an expiry before you need it.
  9. Use this roll to build the inventory for the next one. The next roll is expected to change the algorithm to ECDSA around 2029. Knowing where every validator lives is the part you can reuse.

In this catalog