A system for communicating a message securely between a sender and a
receiver. The sender provides a key server with a string specifying the
receiver. The key server obtains a message key and a particular envelope
encryption key corresponding with a particular envelope decryption key,
encrypts the message key with the envelope encryption key (creating the
envelope), and provides the envelope to the sender-client. The
sender-client encrypts the message with the message key and provides it
and the envelope to the receiver. The receiver-client receives these and
asks an authentication server for the envelope decryption key. The
authentication server obtains the envelope decryption key and provides it
to the receiver. The receiver then decrypts the envelope with the
envelope decryption key, to get the message key, and decrypts the
message.