Cryptography/Protocols

The ideas used in cryptography have been used to create a large number of protocols.

The original application of these ideas was secret hiding -- Alice wanted to send a message to Bob, but Alice and Bob didn't want anyone else to know exactly what the message said.

More recently, many "cryptographic protocols" have been developed that do useful things *other* than secret hiding.

Some cryptographic protocols make secret hiding better or more convenient in some way --
 * key-agreement protocols such as Diffie-Hellman key exchange
 * Message authentication

(FIXME: say something here about commutative ciphers)

Other cryptographic protocols and cryptography-related ideas are used to improve on non-cryptographic systems:
 * Early "everyone in favor, hold up their hands while I count" voting systems don't hide any secrets; end-to-end auditable voting systems (which internally use cryptographic ideas) are arguably better.
 * mental poker
 * convergent encryption
 * digital signatures
 * version identifiers in Mercurial and git.
 * error-detection and error-correction codes.
 * the rsync protocol
 * verifiable computing
 * various ideas for improving (non-secret) email to reduce the amount of spam, such as hashcash, Sender ID, DomainKeys Identified Mail (DKIM), etc.

In particular, the first fully homomorphic encryption was announced in 2009 by Craig Gentry. It is widely expected that homomorphic encryption will make it relatively easy to do things that were previously considered impossible or infeasible.