Proving Your Identity
March 17, 2007 · by Scott Fradkin
Email is a wonderful communication tool. It’s also a wonderful way to spam people, phish for their personal information, and to be a general nuisance. What if instead of having spam filters to filter out all the unwanted email, all you have to do is filter out any email messages for which the sender can’t prove his or her identity?
I can send email to anyone anywhere in the world and claim that I’m someone I’m not. It’s really not that hard to falsify email message headers and even the TCP/IP packet headers to look like the data is coming from someone else. This should be a huge red flag to everyone who uses email, but for some reason it’s usually overlooked.
There is a decent solution to this problem. There is an open standard for PGP (Pretty Good Privacy) called OpenPGP (the open source GNU implementation is called GnuPG or GPG). If you’re interested in all the gory details, the RFC is available [RFC 2440]. Many people have heard of PGP, many have not. Of those that have heard of PGP many may not know exactly what PGP does for you or how it works.
So, what does PGP actually do? PGP allows a user to digitally sign and/or encrypt and decrypt data. Sounds pretty simple. The standard allows a user to generate a public/private key-pair with which pieces of data can be digitally signed or encrypted. It allows for a bunch of different key generation, hashing, and encryption algorithms.
To start with a user needs to generate a key-pair. The key (no pun intended) to generating a nice and secure private key is to make sure that enough random entropy is created during the key generation and that a strong passphrase is used. Key generation algorithms use the random byte generator of the underlying operating system to generate sufficiently secure keys. The operating system usually generates securely random bytes by sampling data from the various system interrupts (you can find the source code from the random byte generator in the Linux kernel fairly easily). This means that the more typing and mouse movements are performed during key generation, the better the random bytes should be. A strong passphrase is necessary so that in the event that the private key is compromised, it will be exceedingly difficult for someone to guess or crack the passphrase so they can emulate your digital identity.
After the key-pair is generated, the public key should be exported into one of the OpenPGP keyservers. The main keyserver can be found at http://keyserver.veridis.com:11371/. It doesn’t really matter too much which keyserver the key is exported to. All of the OpenPGP keyservers replicate with one another. By exporting the public key, it will be available to anyone who wishes to import that key to validate a signature or identity.
Now that everything is setup, things can be encrypted and signed! Email is probably the thing that PGP is used for the most. By signing email messages with your private key, a user who receives the email from you can import your public key and use that to verify that the email was actually signed by you. Encrypting email goes one step further. By encrypting an email with the recipient’s public key and then signing the entire encrypted email with your private key, the recipient is assured that the email they receive came from you and could not be viewed by anyone else since they do not have the private key necessary to decrypt the message.
This is all well and good, but how do you prove that your public key really is yours? The OpenPGP standard includes a trust model. The GNU Privacy Guard handbook calls this trust model the “web of trust”. Everybody is allowed to sign any public key. Generally, you would only want to sign someone’s public key if you knew them personally. When you import a public key you can view the signatures on that key. It’s possible that someone you know has signed keys that you haven’t signed and when you notice this you may want to sign that key also. Eventually, this model of key signatures should build a web of keys that you have signed either because you trust one of the signers either directly or indirectly. To go along with this, you can privately set various trust levels on each public key so that when you view emails signed with someone’s key, you will know to what level you trust that signature.
The largest problem with the adoption of at the very least digitally signing email messages is that a lot of email programs do not come with PGP/GPG support built in. I currently use Mozilla Thunderbird as my email program with the Enigmail OpenPGP plugin. Underneath the covers Enigmail uses GPG. I’ve been trying to get into the habit of signing my email most of the time. Even though most people don’t use OpenPGP aware email programs, I’m hoping that this raises awareness of the necessity to verify that the email that we receive everyday is really being sent by the person claiming to have sent it. I’d also advocate for encrypting messages, but that requires the recipient to also have an OpenPGP key-pair.
One thing that’s left in the background of all this is that a PGP key can also be used to encrypt and decrypt local data. If you have some files on your harddrive that you want to be secured, go ahead and encrypt them using your own public key. The files cannot be decrypted unless someone has both your corresponding private key and your passphrase.
In a nutshell, digitally signing email is a good thing. It helps to validate the sender of the email. The OpenPGP standard has a nice trust framework built in to help people decide how much they trust the identity of the sender. Encrypting email and signing it provides even more protection of the contents of the message.
Below are some extra resources about OpenPGP.
Filed in: Team Member Blog Comments (0)

Comments
There are no comments for this entry.
Commenting is not available in this section entry.