Let us move back to our original dilemma though. How do we encrypt communications between all hosts on the Internet? Securing two hosts is easy. A dozen is doable, but how are we going to secure millions of hosts? Of course, if we are talking about millions of hosts, we cannot use anything based on shared secrets, as the whole world would need to know this secret and it would not be a secret anymore. We have to use public key cryptography, such as RSA or DSA, and clearly we cannot call up all the system administrators and ask for their public keys. We need a place to store and retrieve these public keys dynamically.
This problem is not as new as it looks. It is very similar to the problem of finding a website, or sending email to a particular domain. These tasks are done with the largest distributed database ever designed, the Domain Name System (DNS). And the only information we need from the remote host is its public key. If we can retrieve the remote host's public...