\documentstyle[doublespace,11pt]{article}
% $Id: proposal.tex,v 1.1 1995/10/06 17:41:56 marc Exp $
\pagestyle{empty}
\begin{document}
For my Advanced Undergraduate Project, I intend to implement a PGP
public key server.

PGP (Pretty Good Privacy) is a popular program for signing and
encrypting email, files, and other documents.  It is based on a public
key paradigm, but is different from most in that instead of using a
strict certification heirarchy of public keys, it uses a ``web of
trust''.  In this web of trust, any private key can sign any public
key.  To validate a key, a user attempts to find a certification path
across the web of trust between his key and the key being verified.
The quality of validation depends up the number of paths and the
relative level of trust the validator has for each presenter.

One property of this system is that to encrypt a message for an
arbitrary person, or to verify a message from them, you need to find
that person's key.  Since anyone can create a key, including
pseudonyms and coalitions, there isn't necessarily a good way to find
a person's key.  Thus, the concept of an internet PGP public key
server was developed.  Today, you can submit your own public key,
including any signatures, via email or the World Wide Web, to a set of
public key servers which keep a database of all known public keys.
This database can be queried by email or via the web, allowing people
to look up keys and verify messages from people with whom they have
never had direct contact before.

Unfortunately, the existing key servers are poorly engineered (having
evolved, and not really designed at all), slow, and use substantial
system resources to run.  My project will be to design an integrated,
standalone key server which does not have these problems.  I intend
first to take a snapshot of the updates and queries which are received
by a single key server over a period of time.  Based on analysis of
this snapshot, I will design a database format which is optimized for
the most common operations, whatever those will be.  Then, I will
implement email and web interfaces to this database.  Lastly, I will
design and implement a mechanism for key servers to propagate updates
to other key servers.  Ideally, the entire system will run out of a
single executeable, to make installation and management easy.  This
will encourage more people to run key servers, reducing the load on
the servers and on the network.

The result of my project will be a functioning key server,
specification and design documents, and documentation for
administrators and end-users.  This key server will be put into
production at MIT and hopefully at other sites when it is complete.
\end{document}
