DNS, as originally designed in 1983, has no security. A recursive resolver asks an authoritative server for a record, the server answers in plaintext UDP, the resolver caches the answer, and the user trusts whatever came back. There is no signature, no encryption, no way for the resolver to tell whether the response actually came from the authoritative server or from someone who slipped a fake packet in along the path. For most of DNS's first quarter-century, "well, who would even bother to do that?" was the answer.

In 2008, Dan Kaminsky demonstrated exactly how easy it was. A flaw in how resolvers picked transaction IDs meant a determined attacker could poison the cache of any major resolver in a matter of minutes, redirecting bank.com's DNS to whatever IP they wanted. Patches buried the worst of it, but the underlying problem stayed the same: DNS is unsigned, and unsigned data on a hostile network is data you can't trust. DNSSEC is the long-running attempt to fix that — by adding cryptographic signatures to every DNS record so resolvers can verify the answer came from the actual zone owner, not from a man-in-the-middle.

The problem DNSSEC solves

Strip DNSSEC away and the threat is simple: anyone in the network path between you and the resolver, or between the resolver and the authoritative server, can lie to you about DNS. They can return a different IP, point you at a different mail server, mis-deliver your SPF lookups, redirect your bank's login. Operating systems and browsers will happily connect to the wrong IP because the IP is what DNS said to use. TLS catches some of it — you'd hit a cert mismatch trying to MITM HTTPS — but DNS-derived data flows everywhere, including places where TLS won't save you (mail routing, software update endpoints, certain CAPTCHA flows).

The historical fix is a chain of cryptographic signatures rooted in a single key everyone trusts (the root zone's KSK, jointly held by ICANN/IANA). DNSSEC doesn't change how DNS queries work — it adds new record types and signatures that prove the answer matches what the zone owner published. A resolver that bothers to validate can refuse to accept tampered data.

How the chain of trust works

DNSSEC's elegance is in the way trust cascades. Each zone in the DNS tree signs its own data with its own keys, and the parent zone publishes a hash of the child's key. To validate any record, you walk up the tree, hash by hash, until you hit the root zone — which is the one key your resolver trusts implicitly.

  • The root zone (.) is signed by ICANN/IANA. The root KSK's public key is shipped with every DNSSEC-aware resolver as a trust anchor — that's the bottom turtle.
  • The root zone publishes a DS (Delegation Signer) record for each TLD it delegates to. The DS contains a hash of the TLD's public key. By signing this DS, the root vouches that the TLD's key is genuine.
  • Each TLD (com, org, net, uk, …) signs its own zone and publishes a DS for each domain delegated within it.
  • The domain (example.com) publishes its own DNSKEYs and signs every record in its zone with them. The DS that lives at the TLD level binds the domain's keys back into the chain.
  • To validate www.example.com A record: verify its RRSIG with example.com's DNSKEY → verify the DNSKEY matches the DS at com → verify com's DNSKEY matches the DS at the root → root key is your trust anchor. Each step a parent vouches for a child, all the way up.

Break any link in the chain and validation fails. That failure surfaces to the resolver as SERVFAIL, and the user sees "this site can't be reached."

The record types that make DNSSEC work

DNSSEC introduces five new record types. Knowing what each does is most of understanding the protocol:

  • DNSKEY — the zone's public keys. A zone typically publishes at least two: a KSK (Key Signing Key, flags 257) that signs only the DNSKEY set, and a ZSK (Zone Signing Key, flags 256) that signs everything else in the zone. Splitting them this way means the ZSK can be rotated frequently without disturbing the DS record at the parent, and the KSK can be long-lived and well-protected.
  • DS (Delegation Signer) — a hash of a child zone's KSK, stored at the parent. This is the cross-zone handoff: the parent publishes the DS, and a validator uses it to confirm the child's DNSKEY is genuine. Adding a DS at your registrar is what "turns DNSSEC on" for your domain.
  • RRSIG — the signatures themselves. Every record set (every group of records sharing a name + type) in a signed zone has an accompanying RRSIG that signs that set with the ZSK. Resolvers verify the RRSIG before trusting the data.
  • NSEC and NSEC3 — authenticated denial of existence. If you ask for a record that doesn't exist, the zone has to be able to prove that absence cryptographically (otherwise an attacker could forge NXDOMAIN responses). NSEC records list the next record name in the zone, so a validator can verify "nothing exists between A and B." NSEC3 does the same with hashed names so an attacker can't walk the zone by enumerating NSEC responses.

The DNSSEC validator queries DS, DNSKEY, RRSIG, and NSEC/NSEC3 in parallel for a given domain, computes the key tag for each KSK locally per RFC 4034 Appendix B, and shows the chain of trust as a step-by-step diagram.

How validation works in practice

From the resolver's point of view, validating a single response is roughly:

  • Ask the authoritative server for www.example.com A. Set the DNSSEC OK bit (+do) in the query.
  • The server returns the A record plus the RRSIG that signs it.
  • Fetch example.com DNSKEY. Use the ZSK to verify the RRSIG over the A record.
  • Fetch the DS at the parent (com). Hash the KSK from the DNSKEY set and compare against the DS. They must match.
  • Fetch com's DNSKEY and DS at the root. Verify the chain another level.
  • The root's DNSKEY is signed by the root KSK, whose public part is the trust anchor baked into the resolver. Chain ends here.

If every step verifies, the resolver flips the AD (Authenticated Data) flag on the response it returns to the client. Tools that show "DNSSEC: valid" are reading that AD flag. If any step fails — wrong signature, expired RRSIG, DS doesn't match the KSK — the resolver returns SERVFAIL. From the user's browser it looks like the domain is broken.

Why isn't DNSSEC universal yet?

DNSSEC has been around for over twenty years, the root has been signed since 2010, and as of 2026 something on the order of 5–8% of domains have it enabled. The reasons are practical, not technical:

  • Operational risk. A misconfigured DNSSEC deployment doesn't degrade gracefully — it returns SERVFAIL and the domain becomes unreachable for any user behind a validating resolver. That's measurably worse than not having DNSSEC at all, and the asymmetry weighs heavily on operators. Plenty of high-profile outages have been DNSSEC misconfigurations (HBO, .gov subdomains, Slack at one point) and that history sticks.
  • Key rotation is painful. Rotating the ZSK requires double-signing the zone for a TTL window; rotating the KSK requires coordinating with the registrar to update the DS record at the parent, with carefully timed pre-publishing of the new key. Mess up the timing and the chain breaks.
  • Registrar support is inconsistent. Some big registrars (Cloudflare, Gandi, Namecheap) make DNSSEC essentially one click — generate the keys, publish the DS automatically. Others (long tail of cheaper registrars) have klunky DS-update flows or don't support it at all.
  • DNSSEC doesn't encrypt anything. It only authenticates. Anyone watching the network can still see which domains you're looking up. That's not what DNSSEC is for — but it means there's no privacy benefit to advertise to non-technical operators.

For domains that do enable DNSSEC, modern tooling has narrowed the operational risk considerably. Cloudflare's DNS, AWS Route 53, Google Cloud DNS, and Azure DNS all handle key generation, rotation, and DS publication automatically — you tick a box and it works. For domains hosted on those platforms, the operational excuse has mostly evaporated.

DNSSEC vs DoH / DoT

One source of confusion: DNSSEC is sometimes lumped together with DNS-over-HTTPS and DNS-over-TLS. They solve different problems:

  • DNSSEC authenticates the data. Proves the answer matches what the zone owner published. Doesn't hide the query from the network.
  • DoH / DoT encrypts the transport. Hides the query content from anyone watching between you and your resolver. Doesn't prove the resolver isn't lying to you.

Ideally a resolver does both: it validates DNSSEC on every answer (proving data integrity) and reaches the resolver over DoH or DoT (preventing eavesdropping). They compose. Doing one without the other still leaves a real failure mode open. Most public resolvers (1.1.1.1, 8.8.8.8, Quad9) validate DNSSEC by default and also support DoH/DoT — picking either is a reasonable position.

Algorithms in use today

The DNSSEC algorithm landscape has shifted as cryptography has aged:

  • RSA/SHA-1 (algorithms 5 and 7) — legacy, SHA-1 collisions make this weak. Don't use for new deployments; rotate to a modern algorithm.
  • RSA/SHA-256 (algorithm 8) — the current workhorse. Safe, well-supported everywhere, but signature sizes are bigger than the alternatives.
  • ECDSA P-256 (algorithm 13) — modern recommendation. Substantially shorter signatures (so your DNS responses fit in fewer UDP packets), faster verification.
  • Ed25519 (algorithm 15) — the latest option. Even smaller and faster than ECDSA, with cleaner cryptographic properties. Universal resolver support as of about 2022.

If you're enabling DNSSEC today, ECDSA P-256 or Ed25519 are the right defaults. The validator flags weak algorithms when it finds them.

What happens when DNSSEC breaks

The honest downside, restated: if DNSSEC fails to validate, the domain returns SERVFAIL to every validating resolver — which in 2026 is a large fraction of the world's resolver capacity. That means the domain effectively disappears for those users until the problem is fixed.

  • Expired signatures — RRSIG records carry an expiry. If the zone-signing pipeline stalls (cron job dies, a maintenance window runs over), signatures expire and the entire zone fails validation. Most modern signing infrastructure resigns every few hours with a multi-week expiry to give plenty of slack, but the failure mode is real.
  • DS / KSK mismatch after a rollover — if you publish a new KSK without coordinating the new DS at the parent, validators see a KSK that doesn't match the DS, and the chain breaks.
  • Algorithm rollover mishaps — switching from RSA to ECDSA requires careful staging; both old and new must be valid for a window so resolvers caching the old DNSKEY can still validate.

That fear is why adoption is slow, and it's why the safest path is to enable DNSSEC on a DNS provider that handles the operational details for you. The DNSSEC validator shows the current chain state, flags expired or expiring signatures, and explains exactly which step broke if validation fails — so you can debug a misconfigured rollover before it becomes an outage.

For more context, see our pieces on DNS record types (where DS / DNSKEY / RRSIG fit in the family) and DNS propagation (why TTLs and signing windows interact). The DNS records lookup shows the underlying records without the chain analysis; the propagation checker shows the same answer at multiple public resolvers worldwide.

Try it

Check DNSSEC for your domain

Validates the full chain of trust — DS at the parent, DNSKEY at your zone, RRSIGs over your records, NSEC/NSEC3 for denial-of-existence. Surfaces broken chains, expired signatures, weak algorithms, and the AD flag from a validating resolver.

Check DNSSEC for your domain →