When you looked up payroll.internal.acme-corp.example, the root servers used to see the whole thing. So did the .example TLD operators. Neither of them needed it. The root server’s entire job in that transaction is to say “I don’t run .example, go ask these nameservers.” It could have answered that knowing only the word example. Instead, for about thirty years, resolvers handed the full name to every server they talked to on the way down.

That’s what’s strange about classic DNS resolution. Not that it was insecure — that DNSSEC handles — but that it was needlessly chatty. A recursive resolver walking the delegation chain would send the complete query name to the root, then the complete name again to the TLD, then again to each authoritative server, even though every server except the last one only needed enough of the name to point at the next hop. You were telling the root operators and the TLD operators exactly what you were looking up, in full, for no operational reason whatsoever.

QNAME minimization is the fix, and the interesting thing about it isn’t the mechanism. It’s that the mechanism actually got deployed.

What the resolver stopped saying

The idea is almost embarrassingly simple. When a resolver walks the chain, it should send each server only the labels that server actually needs to give a referral — not the whole name.

So instead of asking the root for payroll.internal.acme-corp.example, the resolver asks the root only about example: give me the nameservers for that. The root points it at the .example servers. Now it asks those servers about acme-corp.example — one label longer, still not the full name. They point it at Acme’s nameservers. Only then, at the authoritative server that actually hosts the zone and is going to answer anyway, does the full payroll.internal.acme-corp.example get sent. The server that has to see it sees it. Everybody upstream sees only as much as their job requires.

Nothing about the wire format changes. Authoritative servers don’t have to do anything. Clients don’t have to do anything. It’s a change in how one piece of software — the recursive resolver in the middle — decides to phrase its questions. That property is the whole story, and I’ll come back to it.

It was written up as RFC 7816 in March 2016, by Stéphane Bortzmeyer, as an Experimental protocol. “Experimental” is IETF for “we think this is right but we want to see it survive contact with the real internet first.” It did not entirely survive on the first try.

The part that broke, and how they fixed it

The original spec’s strict interpretation was: to find the next delegation, query for the NS record at each intermediate name. Clean in theory. In practice, a depressing number of authoritative servers respond to a query for a name that exists only as an intermediate label — internal.acme-corp.example with no records of its own — by returning NXDOMAIN, “no such name,” instead of a referral. That answer is wrong. But DNS is full of servers that are confidently wrong, and a resolver that took the NXDOMAIN at face value would decide the whole lookup had failed and hand the user an error for a name that resolves perfectly well.

So the early strict mode had a real cost: turn it on, and some fraction of legitimate lookups broke against noncompliant servers. That’s exactly the kind of tax that kills adoption, because the resolver operator eats the support tickets while the privacy benefit is invisible.

The fix came from the implementations first. Resolvers shipped a relaxed mode as their default: still trim the name, but if a minimized query gets an error or a suspicious NXDOMAIN, fall back to sending the full name rather than failing the user. RFC 9156, published in November 2021, is the grown-up version of the spec. It obsoletes 7816, moves the technique onto the Standards Track, and folds in what deployment taught: stop insisting on the NS query type (an ordinary A or AAAA query works and blends in), cap how many extra queries a deep name can trigger, and it cites research finding that relaxed mode causes almost no problems. You keep most of the privacy and you stop generating outages. That trade — a little less purity for a lot less breakage — is what made the thing shippable.

It shipped because nobody had to agree

Here are the numbers that matter. A measurement study by SIDN Labs and its partners found the share of open resolvers doing minimization went from about 1.6% in 2018 to roughly 16% in 2022 — from around 18,000 resolvers to about 80,000. On the .nl TLD servers, the share of incoming queries that arrived minimized rose from 35.5% in 2019 to 57.3%. Not universal. But a tenfold jump in four years, quietly, with no marketing campaign and no compliance mandate.

Compare that to the graveyard of DNS security features. DNSSEC is past twenty years old and still validates a minority of the world’s lookups. DANE, MTA-STS, CAA — each solves a genuine problem, each has been available for years, each is deployed on a small minority of domains. The reason is the same every time: those protocols demand coordination. DNSSEC needs the zone operator and the registrar and the resolver to all move together, and punishes a single mistake with a dead domain. MTA-STS needs both mail providers to care. When a security improvement requires two or more independent parties to act in concert, the internet’s answer is usually “no.”

QNAME minimization required exactly one party to act: the resolver operator. Not the domains being looked up, not the registrars, not the authoritative servers, not the end users, not the browser vendors. One operator flips one setting — or, better, ships a version where it’s on by default — and every query through that box gets more private, invisibly, for every user behind it. There’s no negotiation because there’s no counterparty. The authoritative side of the internet doesn’t even know it’s happening.

And so the resolver software just… did it. Unbound, BIND, Knot Resolver, and PowerDNS all implemented minimization and turned it on by default. Cloudflare’s 1.1.1.1 does full minimization. Google Public DNS does a partial version — it minimizes down to the TLD level rather than all the way — which is its own small lesson: even the “success” is uneven, and you can’t assume a given resolver protects you as much as the RFC allows. But the trajectory is the one DNSSEC never got: default-on, in the software everyone already runs, without a summit.

What it doesn’t do

Minimization is not encryption, and it’s worth being precise about that because the two get conflated. Your queries still travel in plaintext unless you’re using DNS-over-HTTPS or DNS-over-TLS. Anyone on the path between your resolver and the servers — the network in between, a curious middlebox — can still read what’s being asked. QNAME minimization doesn’t touch the transport. It reduces who learns what among the authoritative servers you’re forced to talk to, not whether the wire is readable.

It also doesn’t hide the full name from the server that actually answers. The authoritative nameserver for a zone still sees the complete query, because it has to — that’s the server resolving the name. If you don’t trust the operator of the zone you’re visiting to know you’re visiting it, minimization was never going to help; that’s a different problem with different tools. What it removes is the gratuitous leak to everyone else: the root, the TLD, every intermediate delegation that had no business knowing your full destination and got told anyway.

So it’s a partial fix. It pairs with DoH/DoT rather than replacing it — encryption hides the query from the path, minimization hides it from the bystander servers, and you want both. But “partial fix that actually got deployed” beats “complete fix that sat on a shelf for two decades,” and DNS has a long shelf of the latter.

The lesson I keep taking from this: the internet doesn’t reward the most elegant security design. It rewards the one that needs the fewest signatures. QNAME minimization asked permission from nobody, and that’s precisely why more than half of the queries reaching .nl’s servers now arrive minimized, while protocols with better press are still waiting for everyone else to go first.