For some time, I've had this idea brewing for how the 'net would work without DNS. Initially I was mostly thinking of how to get rid of the dark side of the registrar business, but it appears that maybe it could help with security in general too. It may not be feasible at all, or I may have forgotten extremely crucial points. I'm not a DNS guru, so bear with me and consider this as a thought experiment. This is, however, a proposal for how the Internet could be made truly decentralized, or acentric. Made so, because it currently is very centralized on at least two counts: the DNS is an inherently hierarchical structure of authority; and so is the situation with the SSL certificates used for “securing” websites. Let's start with DNS, if you will.
Basically, the idea is to replace the current Domain Name System, which is centralised in nature (even if subdomains can be delegated) with a fully decentralised system with no central authority.
The point of current DNS is to map names to IP addresses in a unique way. It currently works by registering a “this name is managed by such-and-such server, ask for details at such-and-such IP address” message. Of course, since there's only one namespace (or a limited number thereof, if you consider that TLDs are different namespaces), there needs to be a central authority to resolve conflicts, because some names will be more popular than others.
I propose to start with a cryptographic key pair (think GPG key).
Anyone can create their key pair; we assume that it's extremely
unlikely for two people to generate the same keys, and that it's also
very hard for two people to generate keys with the same fingerprint.
By (being the only one) knowing the secret part of a key, I am the
authority on what can be signed with it. I could for instance sign
records that say that
www points to this set of IP addresses, and
smtp points to that other address. Within my area of authority,
which is to say within my domain. Which is identified by the
fingerprint of my key pair.
What do we have so far? A mechanism that allows in a decentralised
way to verify who's authoritative on the
F5566852EB92BD779CF137190EA756B5144843F5 “domain”. In DNS terms, more
F55...3F5.some-tld. Now let's publish the signed records
on a decentralised peer-to-peer network. I'm not up to date with the
latest trends in that domain, but I think something like Gnutella or
Freenet would qualify, since it doesn't need central hubs but only an
initial list of nodes, and it does automatic discovery of new nodes.
Projects such as the FreedomBox
(name likely to be changed) will probably help with that. Anyway,
when looking up
www.F55...3F5.some-tld, the resolver gets the signed
record (and the public part of the key) from the P2P network, checks
the signature, and uses the contents of the record to determine the IP
address. No central or delegated registry involved at any point.
Lesser risk of a single point of failure, which means better
resilience against outages. Also, a better resilience against
DNS-based censorship, be it promoted by non-democratic states or by
Of course, F5566852EB92BD779CF137190EA756B5144843F5 isn't a terribly easy “name” to remember or transmit. But the string of hex could be presented to the user in some other form easier to recognize for people without geek super-powers. My favourite would be the bibi-binary representation, but I'm told that the bubble-babble method works equally well. It would still be unreasonable to expect people to remember such names, and especially to type them into their web browsers or e-mail agents. A possible solution to that would be to use a short form, such as 144843F5 (or its bibi-binary equivalent), complemented by a visual representation of the full fingerprint such as the one SSH does. That pair could be displayed on business cards, email signatures, glossy brochures, advertisements and so on, and allow users to just type the strange word or flash the 2D barcode, check that the funny picture matches (in case the strange word returns several results), and get the website they want. Which they can of course bookmark under a name they can remember, probably even the same name that everyone else uses to bookmark that website. And nothing precludes convenient directories mapping names to full URLs (like search engines currently do) — as long as users check that the visual representation of the site they go to matches what they've seen elsewhere.
That “elsewhere” could, of course, take advantage of the natural web of trust that emerges in of GPG-using communities. If I'm directed at a website whose key I don't immediately recognize, then I can see who trusts that key to be legitimate (by checking the signatures), and who trusts them, and so on. Ultimately, the decision is mine to make, and mine only. In any case, once I know what URL I want to visit, I can be sure this DNS replacement will give me the right IP address (or addresses). DNS servers replying with advertisement sites instead of correct ones, and DNS-based filtering, will be things of the past.
Of course, having the right IP address only solves the attacks on the DNS part. Eavesdropping can also happen by diverting traffic at the IP level. But we have a trustable way to know information related to a domain, so let's use it: the signed record can also contain the fingerprint of cryptographic keys (SSL or SSH or whatever). So we can be sure we're actually talking to the correct server, rather than to some man-in-the-middle spy. With the same guarantees of correctness as the ones for the DNS, backed by the web of trust and out-of-band validation. Again, we get rid of the hierarchy of “certification authorities”, some of which have been known for helping organizations get at the (supposedly secret) data people exchange over the net.
To summarize: with this scheme, if I know the site I want to access is
F55...3F5, then I can be certain that a) I get the right IP address
for it and b) I'm actually talking to it. And nobody in-between
can intercept the traffic, if the site is properly administrated and
its private key is kept secure. And from the site admin's point of
view, there's no need to trust DNS registrars and SSL certification
authorities not to fool around with the data, or blackmail me into
paying increasing fees for keeping my URL working or my SSL key
certified. There's still the problem of the allocation for the IP
addresses themselves, but two major parts of the centralized and
hierarchical net can be gotten rid of.
There are proposals attempting to fix part of the problems already, but they're incomplete. DNSSEC only solves the authentication of DNS records, not the centralisation problem. Monkeysphere aims at adding a web of trust to the SSL certificates system, but the CA chain problem seems to persist (although I must admit I'm not up to speed with the actual details).
This is of course only a rough draft, full of technical considerations yet certainly not exhaustive. I've thought about it though, and I believe there are no theoretical problems with the implementation of such a scheme (apart for the handling of expiration and revocations, probably). The main obstacle to mass-adoption I can envision is the UI part, and the entrenched habit of just typing a keyword into a search engine and implicitly trusting its results, then blindly trusting the website itself; but even if mass-adoption isn't reached, I can't see anything wrong with giving those who want to be careful a more secure Internet.