The Domain Name System is one of the most critical pieces of internet infrastructure. Every time you visit a website, send an email, or use an API, DNS translates human-readable domain names into the IP addresses that computers use to communicate. But DNS was designed in the 1980s without any built-in security mechanism to verify that the answers it provides are genuine.
This means that without additional protection, an attacker can intercept DNS queries and return forged responses, redirecting users to malicious servers without their knowledge. The attack is invisible to the end user because their browser still shows the correct domain name in the address bar.
DNSSEC (DNS Security Extensions) was created to solve this problem. It adds a layer of cryptographic verification to DNS, allowing resolvers to confirm that the DNS data they receive is authentic and has not been tampered with. Despite being standardized for over a decade, DNSSEC adoption remains surprisingly low. This article explains what DNSSEC is, how it works, why you should care, and how to enable it for your domain.
The Problem DNSSEC Solves: DNS Cache Poisoning and Spoofing
To understand why DNSSEC matters, you need to understand the attacks it prevents.
DNS Cache Poisoning
DNS resolvers cache query results to improve performance. When you visit example.com, your ISP's resolver stores the IP address so that subsequent requests do not require a full lookup. Cache poisoning occurs when an attacker injects a fraudulent DNS record into a resolver's cache.
Here is how a cache poisoning attack works in simplified terms:
- The attacker sends a flood of forged DNS responses to a recursive resolver, each claiming to be the answer for
bank.com. - If a forged response arrives before the legitimate one and matches the expected query ID, the resolver accepts it as valid.
- The resolver now caches the attacker's IP address for
bank.com. - Every user who queries that resolver for
bank.comis sent to the attacker's server. - The attacker's server hosts a convincing replica of the bank's website, harvesting login credentials.
The most famous demonstration of this vulnerability was the Kaminsky attack in 2008, which showed that cache poisoning could be executed far more easily than previously thought. This discovery accelerated the push for DNSSEC deployment.
DNS Spoofing
DNS spoofing is a broader category that includes any attack where DNS responses are forged. This can happen through cache poisoning, man-in-the-middle attacks on network traffic, or compromising a DNS server directly. The result is the same: users are directed to the wrong IP address while believing they are visiting the correct domain.
Without DNSSEC, a recursive resolver has no way to verify that a DNS response genuinely came from the authoritative server for that domain. It accepts whatever answer arrives first, as long as it matches the query parameters.
How DNSSEC Works: The Chain of Trust
DNSSEC does not encrypt DNS traffic (that is a common misconception). Instead, it uses public-key cryptography to sign DNS records, allowing resolvers to verify that responses are authentic and unmodified.
The Core DNSSEC Record Types
DNSSEC introduces several new DNS record types that work together:
RRSIG (Resource Record Signature)
Every DNS record set (e.g., all A records for a domain) is signed with a digital signature. This signature is stored in an RRSIG record. When a resolver receives DNS data, it also receives the corresponding RRSIG, which it can verify using the zone's public key.
example.com. 300 IN A 93.184.216.34
example.com. 300 IN RRSIG A 13 2 300 20250401000000 20250301000000 12345 example.com. <base64-signature-data>
DNSKEY (DNS Public Key)
Each DNSSEC-signed zone publishes its public keys in DNSKEY records. There are typically two keys:
- Zone Signing Key (ZSK) -- Used to sign the actual DNS records within the zone. This key is rotated more frequently.
- Key Signing Key (KSK) -- Used to sign the DNSKEY record set itself. This key is rotated less frequently and is the anchor of trust for the zone.
example.com. 3600 IN DNSKEY 256 3 13 <base64-zsk-public-key>
example.com. 3600 IN DNSKEY 257 3 13 <base64-ksk-public-key>
The flag value 256 indicates a ZSK; 257 indicates a KSK.
DS (Delegation Signer)
The DS record is the link between a child zone and its parent zone. It contains a hash of the child's KSK and is published in the parent zone. This is what creates the chain of trust: the parent zone vouches for the child zone's key.
example.com. 3600 IN DS 12345 13 2 <sha256-hash-of-ksk>
NSEC / NSEC3 (Authenticated Denial of Existence)
These records prove that a specific domain name or record type does not exist. Without them, an attacker could forge "this domain doesn't exist" responses. NSEC3 uses hashed names to prevent zone enumeration (walking through all names in a zone).
The Chain of Trust in Action
When a DNSSEC-validating resolver queries www.example.com, the verification process follows the DNS hierarchy:
-
Root zone (.) -- The resolver already has the root zone's public key built in (the root trust anchor). It verifies the DS record for
.comusing the root's DNSKEY. -
TLD zone (.com) -- The resolver retrieves
.com's DNSKEY records and verifies them against the DS record from the root. It then uses.com's key to verify the DS record forexample.com. -
Authoritative zone (example.com) -- The resolver retrieves
example.com's DNSKEY records and verifies them against the DS record from.com. It then usesexample.com's ZSK to verify the RRSIG on the A record forwww.example.com. -
Validation complete -- If every signature in the chain verifies correctly, the resolver marks the response as authenticated (AD flag set). If any link in the chain fails, the resolver returns a SERVFAIL error rather than delivering potentially poisoned data.
This hierarchical verification is what makes DNSSEC robust. An attacker would need to compromise the cryptographic keys at some level of the chain to forge a response, which is computationally infeasible with modern key sizes.
Why DNSSEC Adoption Is Still Low
Despite the clear security benefits, DNSSEC adoption has been gradual. As of recent measurements, roughly 30-40% of the world's DNS zones that could be signed are actually signed, and a smaller percentage of resolvers perform full validation.
Several factors contribute to slow adoption:
- Complexity. Setting up DNSSEC requires generating keys, signing zones, publishing DS records with your registrar, and managing key rollovers. Mistakes can take your domain offline.
- Key management burden. DNSSEC keys must be rotated periodically. A failed key rollover can cause widespread resolution failures for your domain.
- Larger DNS responses. DNSSEC signatures increase the size of DNS responses, which can cause issues with networks that block large UDP packets. This sometimes requires falling back to TCP, adding latency.
- Registrar support varies. Not all domain registrars make it easy to upload DS records or manage DNSSEC settings. Some charge extra for DNSSEC support.
- Perceived low risk. Many domain owners do not consider cache poisoning a likely threat to their specific domain, so they do not prioritize the mitigation.
However, the landscape is shifting. Major DNS providers like Cloudflare, Google Cloud DNS, and AWS Route 53 now offer automated DNSSEC signing with one-click setup, dramatically reducing the operational burden.
How to Enable DNSSEC for Your Domain
The process for enabling DNSSEC depends on your DNS hosting provider and domain registrar. Here is the general workflow:
Step 1: Enable DNSSEC Signing at Your DNS Provider
Your authoritative DNS provider must sign your zone. With managed providers, this is typically a single toggle:
- Cloudflare: Navigate to DNS > Settings > DNSSEC and click "Enable DNSSEC." Cloudflare handles key generation and zone signing automatically.
- AWS Route 53: Enable DNSSEC signing in the hosted zone settings. Route 53 creates a KSK using AWS KMS.
- Google Cloud DNS: Enable DNSSEC on the managed zone. Google handles signing and key management.
If you run your own authoritative DNS servers (e.g., BIND or PowerDNS), you will need to generate keys and configure zone signing manually:
# Generate a KSK and ZSK for BIND
dnssec-keygen -a ECDSAP256SHA256 -f KSK example.com
dnssec-keygen -a ECDSAP256SHA256 example.com
# Sign the zone
dnssec-signzone -A -3 $(head -c 1000 /dev/random | sha1sum | cut -b 1-16) -N INCREMENT -o example.com -t example.com.zone
Step 2: Publish the DS Record at Your Registrar
After your DNS provider signs the zone, you need to create a DS record in the parent zone. This is done through your domain registrar's control panel.
Your DNS provider will give you the DS record details, which typically include:
- Key Tag: A numeric identifier for the DNSKEY (e.g.,
12345) - Algorithm: The signing algorithm number (e.g.,
13for ECDSA P-256) - Digest Type: The hash algorithm (e.g.,
2for SHA-256) - Digest: The hash value of the KSK
Enter these values in your registrar's DNSSEC management section. The registrar then publishes the DS record in the parent zone (e.g., .com for a .com domain).
Step 3: Verify the Chain of Trust
After both the zone signing and DS record are in place, verify that the full chain of trust is working. You can use command-line tools:
# Check if DNSSEC is active and the chain validates
dig +dnssec example.com A
# Verify the DS record exists in the parent zone
dig DS example.com @a.gtld-servers.net
# Use delv for full chain-of-trust validation
delv @8.8.8.8 example.com A +rtrace
Look for the ad (Authenticated Data) flag in the response header, which indicates the resolver successfully validated the DNSSEC signatures.
Verifying DNSSEC Configuration With DNSChkr
Checking whether a domain has DNSSEC properly configured is straightforward with the right tools.
Use the DNSChkr DNS Inspector to query a domain's DNSKEY and DS records. If DNSKEY records are present in the response, the zone is signed. If DS records are present in the parent zone, the chain of trust is established.
You can also use the DNSChkr Propagation Checker to verify that DNSSEC-related records are consistent across DNS servers worldwide. Inconsistencies between servers during a key rollover can indicate a problem that needs immediate attention.
Key records to check:
- DNSKEY records at your domain to confirm zone signing is active.
- DS records in the parent zone to confirm the chain of trust is anchored.
- RRSIG records alongside your A, AAAA, MX, and other records to confirm they are being signed.
If you are in the process of enabling DNSSEC, monitoring propagation is especially important. The DS record must be visible in the parent zone before resolvers will attempt DNSSEC validation for your domain. If the DS record is published before your zone is fully signed, resolvers will see a broken chain and return SERVFAIL errors, taking your domain offline.
Frequently Asked Questions
Key Takeaways
- DNSSEC adds cryptographic signatures to DNS records, allowing resolvers to verify that responses are authentic and unmodified. It does not encrypt DNS traffic.
- Cache poisoning and DNS spoofing are real threats that can redirect users to malicious servers without their knowledge. DNSSEC prevents these attacks.
- The chain of trust works hierarchically: the root zone vouches for TLD zones, TLD zones vouch for domain zones, through DS and DNSKEY records at each level.
- Four key record types power DNSSEC: RRSIG (signatures), DNSKEY (public keys), DS (delegation signer), and NSEC/NSEC3 (authenticated denial of existence).
- Adoption is growing but still incomplete. Major DNS providers now offer one-click DNSSEC setup, making it far easier to enable than it was even a few years ago.
- Misconfigurations can cause outages because resolvers return SERVFAIL when validation fails. Plan key rollovers carefully and monitor your DNSSEC records.
- Use the DNSChkr DNS Inspector to check whether a domain has DNSKEY and DS records, and the Propagation Checker to monitor DNSSEC record consistency across global DNS servers.
DNSSEC is one of the most impactful security improvements you can make for your domain, and with modern DNS providers, it is easier to deploy than ever. The threat of cache poisoning is not theoretical. It has been demonstrated repeatedly, and without DNSSEC, your domain's DNS responses have no cryptographic proof of authenticity.
Check your domain's DNSSEC status now using the DNSChkr DNS Inspector and verify that your records are properly signed and propagated worldwide with the Propagation Checker.
