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.
โโโโโโโ โโโโโโโ โโโโโโโ โโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโ โโโโโโ โโโ โโโ โโโโโโโโโโโ โโโโโโ โโโ โโโ โโโ โโโโโโโโโโโโโโโโโโโโโ โโโ โโโ โโโ โโโโโโโ โโโโโโโ โโโ โโโ โโโโโโโโโโโโโโ โโโ โโโ โโโโโโโโโโโโโโโ โโโโ โโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโ โโโโโโโโโโโโโโโ โโโ โโโโโโโโโโโโโโ โโโ โโโ โโโโโโโโโโโโโโ โโโ
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.
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 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.
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.
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.
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.
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.
April 2024. KSK-2024 generated at the first key management facility.
July 2024. Copied to the second facility. IANA adds it to root-anchors.xml with validFrom 2024-07-18.
Early 2025. KSK-2024 appears in the root DNSKEY set beside KSK-2017. The RFC 5011 clock starts.
11 October 2026. Only KSK-2024 signs the root key set.
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 |
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.
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.
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)."
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 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."
Key not yet seen. Resolver trusts only its configured anchors.
New SEP key seen in a DNSKEY set signed by a trusted key. Add hold down begins.
Hold down expired and the key was seen again afterward. It is now a trust anchor.
Abnormal. A Valid key is absent from a validated set but still trusted.
Key seen with REVOKE bit in a set it signed. Immediate and permanent.
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.
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.
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.
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-keys.bind (or one .mkeys file per view) in the working directory, with a .jnl journal.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.rndc secroots dumps the current security roots to named.secroots by default.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.
unbound-anchor -a /path/root.key in the init script before starting unbound, as the same user.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 |
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.
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.
Three KeyDigest elements under zone .:
19036 (KSK-2010), validUntil="2019-01-11". Expired.20326 (KSK-2017), validFrom="2017-02-02", no validUntil.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."
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.
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.
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).
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.
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.
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.
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.
Root key set now signed by 38696. Stale resolvers keep serving from cache.
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.
The new key set does not validate. Resolvers that cap TTLs see it sooner.
Pages half load, mail stops, automated jobs error. "The failures will cascade until no program is able to show new information."
Once validation works again, "the users' Internet experience should go back to normal almost immediately."
./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 |
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.
The runbook splits into three windows. The goal of the first is to make the second boring.
rndc secroots, the anchor file), not just the config../DNSKEY query volume. A stale resolver retries because bogus answers are not cached.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.
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 |
rndc secroots or the anchor file, per resolver instance.validFrom and validUntil. The format lives in RFC 9718 now.New deep-dives on systems architecture, delivered when they ship.