PGP Trust Levels and Signature Types Explained

Table of Contents

So last time we introduced the basics of how PGP works. This time, we cover something slightly more in-depth: signature types, and trust levels.

Signatures

To recap, a signature here is referring to a cryptographic signature on a user’s key, showing that you either trust said key, or have verified that the key you signed belongs to the user that it claims.

Signature Types

There’s four different types of signatures you can attach to a particular PGP key, and note that they’re not all separate, you can mix-and-match if you like.

Normal Signature

This is the basic signature type, with nothing special attached, except maybe a trust level, but we’ll cover that later.

Trust Signature

A trust signature is rarely used, but this is used for trust delegation. When making a trust signature, you are allowed to specify the depth to which it will apply, and this allows the signed key to therefore make trust signatures on your behalf. Trust signatures also impart a de facto trust level on the key to you or anyone who trusts you. This isn’t really used, but if you’re organizing your multiple keys, of have some complex trust system in place in, say, some company or whatnot, it might be useful. For most users, it’s not a thing you’ll be using.

Local Signature

A local signature is a signature that does not leave your device, meaning if you publish the key to a keyserver, any local signatures will not be sent over with it. Reasons for doing this are basically completely up to you, but it is a possibility. You can tag any other signature as “local” to prevent it from being sent when published.

Non-Revocable Signature

This is one that should really only be used sparingly, since it does break one of the fundamental parts of PGP: if your key is lost or compromised, you can publish a revocation to make everyone else treat it as invalid. A non-revocable signature bypasses this: this signature is always going to be valid, even if the key that made it is not. I see very few reasons to ever do this, but the option does exist, for some reason.

Trust Levels

Every key and user ID may be trusted to a certain amount, or not at all. You yourself can mark certain keys as trusted manually, but the majority of trust should come from trusted keys signing other keys, thus creating…. the web of trust.

Unknown

This is the default trust level, where there is not enough information to discern the trust of a key.

Never

You have explicitly marked a key so that any signatures from it are never trusted, something most commonly used if, say, you know the key holder is compromised, making bag signatures, or not verifying keys before signing them.

Marginal

Marginal trust means that they’re good, but not too good. For a key to be marked as “trusted,” it will need signatures from three keys you’ve given marginal trust to.

Full

Full trust should be used for keys that, well… you trust. Unlike marginal trust, full trust only requires one signature on a key to mark it as trusted.

Ultimate

Only use with your own keys! Ultimate trust is the highest level of trust, and should only be used for your own keys. Others, if well verified, should be given full trust, and, if you’re not too sure, use marginal trust.

Signature Certification Levels

When you sign a key, with GPG, it requires that you have the option ask-cert-level enabled to do this, you have an option of assigning a “certification level” to your signature. This is completely optional and has no real weight to it, unlike signatures and trust levels, this is more of an indicator for anyone looking at the key and your signatures, so they themselves can decide how much faith they put in your signatures.

None Specified

This is the “prefer not to say” option. Nothing really special here. No indication given. If you didn’t pick an option when signing, or didn’t have the advanced mode turned on to even be asked about this in the first place, this is what your signatures are marked as.

No Verification

Also called a sig1. Signing someone’s key as sig1 indicates that you have really not verified that the key is actually theirs. You may believe it is there but have done no actual verification of such.

Casual Verification

Also called a sig2. You ran a few checks to make sure that the key you’re signing belongs to the person identified in it, but nothing too major.

Extensive Verification

Also called a sig3. You are completely sure that the key you’re signing belongs to the user it says it does, and have verified this with extreme confidence.