Skip to main content DNSSEC | IoT Worker

DNSSEC

An authoritative DNS server may return an address, and a recursive resolver may pass that answer to the client, but classic DNS has a hard time proving whether the answer really came from the original zone data. If someone on the path wins the race, if recursive cache has been poisoned, or if an upstream response was tampered with, the client still only sees a syntactically correct DNS response.

DNSSEC exists to handle that class of problem. The question is no longer only “does this look like a DNS response?” but also “was this signed by the owner of this namespace?” It does not encrypt DNS queries, and it does not hide which domain the user asked for. It adds source authentication and integrity verification to DNS data.

DNSSEC does not protect the query path. It makes the result verifiable and carries that verification back to the root trust anchor

That is also where DNSSEC is most easily confused with DoH and DoT. DoH and DoT protect the transport hop between the client and the recursive resolver. DNSSEC protects whether the DNS data itself can be verified. The first answers “can someone on the path see or change this transport?” The second answers “was this answer signed by someone who had authority over it?”

Classic DNS Lacks Answer Verification

The main DNS path in classic DNS follows delegation step by step:

Resolver
  -> Root
  -> TLD
  -> Authoritative zone
  -> Answer

That path solves how the namespace is split, how queries recurse, and how results are cached. But it also assumes a practical premise: the responders on the path are broadly trustworthy, or at least an attacker cannot easily insert a response that looks convincing enough.

That premise is often shaky in real networks:

  • Someone on the path can see the UDP 53 query and race back with a forged answer
  • A recursive resolver may store the wrong data in cache
  • A forwarding device, proxy, or local network device may rewrite the response
  • The client usually only sees “resolved successfully” and does not see whether the data came from the real authority

Port randomization, query ID randomization, and 0x20 encoding can make forging harder, but they still focus on “making a fake response harder to guess”. DNSSEC changes the direction: even if a response arrives first, it still has to survive signature verification.

How the Chain of Trust Is Connected

DNSSEC does not preinstall every public key for every domain on every client. It reuses DNS delegation and makes “who is allowed to answer” into a chain as well.

In simplified form, the trust path looks like this:

Root trust anchor
  -> root DNSKEY
  -> .com DS
  -> .com DNSKEY
  -> example.com DS
  -> example.com DNSKEY
  -> www.example.com A / AAAA + RRSIG

Different records have different responsibilities:

  • DNSKEY: the public key a zone uses to verify signatures
  • RRSIG: the digital signature over a set of records with the same name and type
  • DS: the child-zone key digest stored in the parent zone, used to hand trust from parent to child
  • Trust Anchor: the starting point of verification, usually the root trust anchor

The important part is not memorizing the record names. It is understanding the division of responsibility.

The authoritative zone signs its own data with its private key and publishes the corresponding DNSKEY. The parent zone does not sign the child’s business records. Instead, it stores a DS record and says, in effect, “the next zone down should use this key.” A validating resolver starts from the root trust anchor and checks DS and DNSKEY layer by layer before it uses the child zone’s DNSKEY to verify the final RRSIG.

Once that chain is broken, the validator can no longer treat the later answer as verified data. DNSSEC safety does not come from “a server says it is authoritative”. It comes from every delegation step being verifiable.

What a Validated Lookup Adds

Without DNSSEC, when a recursive resolver gets www.example.com A, it mostly checks whether the response matches the current query and cache semantics. With DNSSEC validation enabled, the resolver also needs the material required to verify the answer.

The process can be thought of like this:

  1. Query the final business record, for example www.example.com A
  2. Obtain the corresponding RRSIG
  3. Obtain the DNSKEY for example.com
  4. Use the parent zone’s DS to confirm whether that DNSKEY is trusted through delegation
  5. Continue verifying the key relationship up through .com and the root zone
  6. Only after all signatures and delegation relationships hold does the answer enter a Secure state

When validation succeeds, the client or recursive resolver gets more than “an IP”. It gets “this record set really came from the corresponding zone under the current validation chain”. When validation fails, a strict validating resolver usually does not downgrade and return the suspicious answer. It fails instead, often as SERVFAIL.

That is one of the reasons DNSSEC can be confusing in the field: the authoritative server may have the record, the network may be reachable, yet a validating recursive resolver still refuses to return the result. The problem is not whether the record exists. The problem is whether the signature, key, parent-child delegation, and validity window still form a trustworthy chain.

Negative Answers Also Need Verification

DNS does not only answer “what is this name?” It also answers “this name does not exist.” If only the existing records are signed, an attacker can still forge NXDOMAIN and make a real name look absent.

DNSSEC therefore also has to handle verifiable negative answers.

NSEC and NSEC3 let an authoritative server prove that a particular name or record type does not exist. They do not simply say “nothing is there”. They provide a signed name range, or a hashed name range, that lets the validator confirm the queried object is not in the zone data.

That has two engineering consequences.

First, negative answers also have signature and caching semantics. A validated NXDOMAIN is not just somebody’s word that the name does not exist. It is a negative result that can be verified along the trust chain.

Second, zone enumeration and privacy boundaries become more complicated. Traditional NSEC exposes adjacent name relationships. NSEC3 reduces direct enumeration risk by hashing, but adds more computational and configuration complexity. DNSSEC does not only bring security gains. It also brings zone publishing, signing, and troubleshooting costs with it.

What It Does Not Protect

DNSSEC is easy to misunderstand as “secure DNS”. That label is too broad.

It does not encrypt query contents. The middle of the network may still see which domain the client is asking for, unless the query path also uses DoH, DoT, VPN, or another protected transport.

It does not hide which resolver is being trusted. The client still has to trust some recursive resolver to query and validate on its behalf, or implement validation itself.

It does not guarantee that the returned address is usable. DNSSEC can only prove that the DNS data was not modified by an unauthorized party. It cannot prove the target server is online, the route is reachable, the TLS certificate is correct, or the business is healthy.

It also does not stop authorized parties from publishing wrong data. If the zone owner signs an incorrect address, DNSSEC helps you confirm “this really is the wrong data signed by that zone”, rather than automatically judging whether the business configuration makes sense.

So the boundary is clear:

  • It can detect unauthorized modification
  • It can make forged answers much harder to accept
  • It cannot provide query privacy
  • It cannot replace transport protection, business validation, or availability checks

Why Deployment Can Create New Failures

DNSSEC expands DNS from “return records” to “return records plus verifiable proof”. That brings a few classes of failures into production that simply did not exist before.

Signature expiration

RRSIG has an expiration time. The data may not have changed, but the signature is not valid forever. If the auto-resign flow fails, the record is still in the zone, but the validating resolver will reject it.

That kind of failure often looks like this:

  • A resolver that does not validate DNSSEC can still answer
  • A strict public recursive resolver returns SERVFAIL
  • The record is present when you query the authority directly, but the signature time has already expired

DS and DNSKEY mismatch

The parent zone’s DS must match the child zone’s published DNSKEY. If you change keys, move DNS providers, or migrate authoritative servers and the parent DS is not updated, the validation chain breaks at the parent-child boundary.

This is one of the most common operational DNSSEC traps. The business records, NS records, and glue records may all look fine, but the validator concludes that the key the parent delegated and the key the child actually presents are not the same set.

Larger responses and transport-path issues

DNSSEC increases response size because signatures, keys, and negative proofs add bytes. Once the response gets larger, it is more likely to hit UDP truncation, EDNS incompatibilities, TCP fallback failures, or middleboxes that drop large packets.

That kind of failure is easy to mistake for “DNSSEC validation failed”. In reality, the validation material may never have arrived intact.

Time and automation become critical dependencies

Many DNSSEC operations depend on periodic automation: resigning, key rotation, publication, parent-zone DS updates, and validation monitoring. It is not like a normal A record, where the value staying the same usually means the service is stable.

Once the automation chain is neglected, DNSSEC starts importing the kind of problems people associate with forgetting to renew a certificate.

How It Relates to DNS Pollution, DoH / DoT, and HTTPDNS

These concepts solve different problems and do not replace one another.

DNS pollution is about how the wrong answer enters the resolution path. DNSSEC is about whether the validator can tell that the answer was not authorized data. If a recursive resolver validates strictly, a pollution packet that arrives first is much harder to let into trusted cache.

DoH and DoT are about whether the hop between the client and the recursive resolver is visible or mutable in clear text. They can reduce opportunities for path racing, but encrypted transport alone does not prove the returned answer is correct if the resolver itself is wrong or the upstream data was polluted.

HTTPDNS is about moving the resolution control point back to the application side. It can bypass the system DNS or the ISP recursive path, but whether the result is verifiable depends on the service’s own trust model and whether it performs standard DNSSEC validation.

You can line the boundaries up like this:

Problem More relevant mechanism
The query contents should not be visible locally DoH / DoT
Plain UDP 53 is easy to race DoH / DoT, DNSSEC
Whether the answer came from an authorized zone DNSSEC
The application wants to own scheduling and fallback HTTPDNS
The business record itself is misconfigured DNSSEC cannot fix it

In practice, the common combination is not one of these four at the exclusion of the others. A system can use DoH or DoT to protect the first hop and have the recursive resolver perform DNSSEC validation. Large services can also validate DNSSEC inside an HTTPDNS service and then return the scheduled result to clients.

What to Check During Troubleshooting

Do not look only at the final record value. A better entry point is the validation chain.

Symptom First things to check
A normal resolver answers, but a validating resolver returns SERVFAIL signatures, DS, DNSKEY, validity window
DNS fails after switching providers whether the parent DS still points to the old key
Large records or signed records behave strangely EDNS, UDP truncation, TCP fallback, middleboxes
A nonexistent name behaves oddly NSEC / NSEC3 negative proof
Only some recursive resolvers fail resolver validation policy, cache state, upstream path

There are three useful checkpoints:

  1. Query the authority directly to see whether the business records and DNSSEC records were published completely
  2. Query a strict validating resolver to see whether the failure reproduces consistently
  3. Walk the path from parent zone to child zone and check whether DS, DNSKEY, and RRSIG still connect

If you only look at A or AAAA, it is easy to miss the point where the chain broke. When DNSSEC fails, the final answer is often not missing. It is just no longer provable as trustworthy.

What Engineering Should Actually Remember Today

DNSSEC moves the DNS question from “who returned a syntactically correct answer first” to “can this answer be verified along the delegation chain”. What it adds is data trustworthiness, not transport privacy or business availability.

When you design or troubleshoot, these checks matter most:

  • If you need to protect query contents, look at DoH / DoT or another transport protection layer
  • If you need to verify the source and integrity of the answer, look at DNSSEC
  • If you see SERVFAIL, do not only check the business record. Check signatures, keys, and parent-child delegation too
  • If you deploy DNSSEC, treat re-signing, key rotation, DS updates, and monitoring as a long-running system, not as a one-time toggle

DNSSEC’s benefit is clear: a forged answer can no longer win just by arriving first and looking similar. Its cost is equally clear: the DNS publishing chain now carries a cryptographic state that must be maintained continuously.

Further Reading

  • DNS - delegation, caching, and consistency windows in classic DNS
  • DNS Pollution - why wrong answers enter the resolution path first
  • DoH / DoT - how the first DNS hop changes its transport path and trust boundary
  • TLS - why transport protection and certificate chains are a separate layer

References