Reproducible Research: WorldMake.org

Open Peer Review: OpenReview.net

Metagenomics: RTAX, QIIME


RSS feed

GitHub: davidsoergel

Twitter: @loraxorg

Thoughts on GPG Key Management

2008 Nov 09

I am retiring my old GPG key because I‘ve lost confidence that the private part is completely secret (i.e., who knows what backups it may be on, and where those have ended up). Also, I’ve used the passphrase on the old key in other contexts, which is not so good. Of course I want to be more careful with the new private key, in hopes of keeping it trustworthy indefinitely. Hence the following scheme:

  1. Edit the old key to have an expiration date, and send the new version to the keyservers. Once it has expired, revoke it for good measure.
  2. Create a new Master Signature Key on a Knoppix system with no internet connectivity, and store it directly onto my secure flash drive (“the vault”), together with its revocation certificate. The vault will never be mounted on any machine that is connected to the internet. Using a second (less secure) flash drive, copy the public key to my laptop and, from there, send it to the keyservers.
  3. Create a second new key for daily use, with an easier passphrase.
  4. Sign the “daily use” key with the “master” key (again using a clean Knoppix system, since that's the only place the Master secret key should ever be available).
  5. Store the “daily use” key along with its revocation certificate in the vault, but also import it (both public and secret keys) to my regular laptop keychain.
  6. Perhaps, create additional keys for different purposes, storing them and their revocation certificates in the vault and signing them with the master key as appropriate.

Separation of Master and Daily Use keys

There are several reasons to separate the master key from the communication keys (inspired by Mark Haber's page on the topic). Note that I mean completely distinct keypairs, not the subkeys already built in to the GPG system.

  • First of all, the benefits associated with subkeys apply, namely that the master key never expires but the daily use keys do.
  • Second, I want to protect my master private key very carefully, e.g. by not carrying it around on my laptop, or allowing it to be copied to backup tapes that I may lose track of. If the master key were the key I used for communication, then I wouldn't be able to sign or decrypt anything on my laptop, which is clearly impractical.
  • Finally, I want the master key to have a very strong passphrase, but I don‘t want to have to type that in all the time— both because it’s a hassle, and because typing the passphrase at all is a security risk (due to possible keyloggers, hidden observers, etc.).

So, this scheme allows me to use a weaker passphrase on the “daily use” key, without sacrificing passphrase strength on the master key. Also, I can expire the “daily use” key regularly (or revoke it at any time and make a new one), without losing the signatures on my master key.

The upshot of this is that someone who wants to communicate with me without performing any key verification (a bad idea) would need only my “daily use” public key; but someone who wants to verify that key would need the “master” public key in addition, since that is the only source of a signature on the “daily use” key. A disadvantage of this scheme is that the length of the key path to the “daily use” key is one hop greater than it would otherwise be, meaning that the web-of-trust algorithm is less likely to assign validity to it.

Why I don't use subkeys

What advantages does a subkey have over a second primary key signed by the first? Sure, there are advantages to having a “daily use” key that expires and differs from the long-term master signing key. But the technical act of making the “daily use” key a subkey of the “master” key (or, similarly, making an encryption key a subkey of a signing key) serves no purpose as far as I can tell.

Disadvantages of subkeys:

  • I find them Confusing.
  • There are disturbingly many (i.e., any at all) bug reports on the web about gpg software handling subkeys incorrectly.
  • It is possible to export a subkey and attach it to a different primary key, creating a potential security hole.
  • No ability (without a lot of hassle, anyway) to use different passphrases on primary and subkeys.

So, why bother with them at all? We can get all the advantages of subkeys (essentially, reduced trust of commonly used keys, with expiration) by just signing one primary keypair with another. Advantages of using only primary keys:

  • easier to understand, less chance of human failure in applying encryption correctly.
  • easier to manage, e.g. I can copy my email key to my laptop but leave my master signing key secure in my safe.
  • separate passphrases.

The only disadvantage I can think of is that this scheme induces an additional hop in the web-of-trust model, and so makes the daily-use keys less likely to be trusted. I don‘t care, honestly. All of the people I want to communicate with will sign my master key directly, and if there is a web-of-trust thing going on I don’t mind enforcing an extra level of paranoia.

Protecting the Master Signature Key

The Master Signature Key (together with its revocation certificate!) will live only on the “vault” flash drive and on two CDs stored in two secure locations, together with printouts to guard against technical failures in reading the CDs in the future. It will not be stored on any hard drive anywhere. If for any reason I want to discard a CD or printout containing the Master Signature Key, these should be convincingly destroyed, e.g. by shredding, burning, etc. The “vault” flash drive and the CDs should never be mounted on a machine with internet connectivity; thus, key-management operations are best performed in a Knoppix environment.

I also store other confidential information on CDs, but the CDs containing the Master Signature Key and its revocation certificate should contain nothing else. The reason for this is that I may need to update other information more frequently, resulting in burning a new CD and discarding the old one. By keeping the Master Signature Key on a dedicated CD, I reduce the number of times that old versions of the CD need to be destroyed. (Old versions of the other CDs may require destruction anyway, but that's a separate issue).

Under this scheme I won't need to use the Master Signature Key very often; in fact, since nothing should be encrypted to it, the only thing it will be ever used for is signing other keys. This is infrequent enough that retrieving the CD and booting up Knoppix when the need arises is not too inconvenient.

Protecting the Master Signature Key passphrase

[I thought about doing the following, but then decided against it; if I forget the passphrase or am incapacitated, that's too bad, but not actually that important in the grand scheme of things.]

I will encrypt the Master Signature Key using a reasonably strong passphrase containing upper- and lower-case letters, numbers, and symbols.

This passphrase is encrypted with the public keys of two trusted friends, and placed on CDs in both secure locations. The encrypted passphrases may be printed as well. This guards against the possibility that I forget the passphrase (or am incapacitated, etc.); in that case, a trusted friend accessing one secure location can retrieve the passphrase, as well as the master private key itself. The passphrase is not recorded anywhere else; it exists only in my memory and in these encrypted forms.