How can I use gpg to both encrypt my email and prove my identity?

In plain language, what does it mean to encrypt my email?

For most of us, when we first decide we want to encrypt our email, we only think about one half of the equation: scrambling our message in a way that only the intended recipient can read it.

A second, and equally important component that is often over looked is authenticity. If someone sends you a secret message, how do you know it was sent by the person who is claiming to have sent it? A little known fact about the Internet is that forging the from address in an email message is just about as easy as forging the from address on a postal letter.

Encryption (scrambling your message) and authenticity (knowing who really sent the message) are the two pillars of secure communication. You must have both to securely send private messages between two parties.

Therefore, when sending mail that you want to keep private, you will typically want to both encrypt the message and digitally sign the message. When receiving email using GnuPG you will typically want to de-crypt the message and verify the signature.

Alternatively, if you want to send message and it's not important to keep it private, but you want the recipient to be sure it is you who is sending it, then you may simply want to digitally sign the message and not encrypt it.

GnuPG, gpg, OpenPGP, PGP, what does it all mean?

There are a lot of confusing acronyms involved in email encryption. Here's a very brief explanation:

GnuPG (also known as GPG) stands for Gnu Privacy Guard (​GNU is a project to create an entirely free operating system).

An open standard means that a group of people have come together to decide on how to communicate. The OpenPGP folks have defined a way to communicate encrypted information securely.

GnuPG is one program (of many) that uses this open standard. GnuPG is free software and is one of the most popular implementations of OpenPGP.

In list form:

PGP

is Pretty Good Privacy, which is a corporate trademark held by Symantec at the moment.

OpenPGP

is the name of the standard that defines the techniques and data structures.

GPG

is the GNU Privacy Guard, an implementation of using and interfacing with the defined techniques and data structures.

keys

are mathematical constructs

identities

are labels that humans can attach to real-world entities

Public and private keys

The technology behind encryption relies on keys. A key is nothing more than a small text file with a lot of random-seeming characters in them. ​Jamie's gpg key can serve as an example for the curious. In order to use OpenPGP you will need to generate a public/private key pair. That means you will need two keys (two small text files with a lot of random-seeming characters): one that is public and one that is private. These two keys are generated together because they have a special relationship:

A message encrypted with the public key can only be de-crypted with the private key

A message signed with the private key can be validated with the public key

As the names imply, the private key should be kept private. It should be saved on your personal computer, preferably one that nobody else has access to. Furthermore, it is typically password-protected, meaning that every time you want to use it, you will need to enter a password. The public key, on the other hand, should be freely given to everyone.

If someone has your public key, then they will be able to send you an encrypted message and if you send them a signed message, they will be able to verify your signature.

It's important to note: you cannot send someone an encrypted message unless you already have their public key. In other words, it is not enough that you know how to use OpenPGP, your intended recipient must also know how to use it, have it setup on their computer, already have a key, and already have given you their public key. Similarly, you cannot verify someone's signature unless you already have a copy of the sender's public key.

What else should I know about GnuPG?

Web of trust. An important concept not covered here is: how do you get other people's public keys? OpenPGP uses a decentralized model of trust called ​web of trust.

Transactional data. GnuPG only encrypts the body of your email message - not the headers. Therefore, when sending email, your email address, the date of the message, the recipient and other information regarding the transport of your message may be sent in the clear. One solution to that problem is to only work with providers that use ​that support starttls (note: May First/People Link, despite not being included in the list, does use starttls).

Verifying fingerprints. When exchanging public keys, it's important to verify the fingerprints of the keys you are exchanging.