Signature subpacket types may also be categorised, depending on where they are used:¶
These may be attached to any signature type, and define properties of the signature itself.
Some of these subpackets are self-verifying (SV), i.e. they contain hints to locate the issuing key that can be confirmed after the fact.
It MAY be reasonable to place self-verifying general subpackets in the unhashed area.
All other general subpackets MUST be placed in the hashed area.¶
Subpacket types: Signature Creation Time, Signature Expiration Time, Issuer Key ID (SV), Notation Data, Signer's User ID, Issuer Fingerprint (SV).¶
(Notation subpackets are categorised here as general subpackets, however the notations within them may have arbitrary semantics at the application layer)¶
These have semantics that are meaningful only when used in signatures of a particular type or category:¶
These are normally only meaningful in a direct self-sig (or for v4 keys, a self-cert over the primary User ID) and define usage preferences for the certificate as a whole.
They MAY be used in self-certs over other User IDs, in which case they define usage preferences for just that User ID (but this is not always meaningful or universally supported).
The Replacement Key subpacket MAY also be used as a key revocation subpacket.
They SHOULD NOT be used elsewhere.
They MUST be placed in the hashed area.¶
A Direct subpacket MUST be ignored if it is in a self-cert made over a User ID by a v6 or later primary key.¶
Subpacket types: (Additional Decryption Key), Preferred Symmetric Ciphers, Revocation Key (deprecated), Preferred Hash Algorithms, Preferred Compression Algorithms, Key Server Preferences, Preferred Key Server, Features, (Preferred AEAD Algorithms), Preferred AEAD Ciphersuites, (Replacement Key).¶
These are only meaningful in signatures of the Key Revocation, Subkey Revocation or Certificate Revocation categories.
They SHOULD NOT be used elsewhere.
They MUST be placed in the hashed area.¶
Subpacket types: Reason for Revocation.¶
These are only meaningful in a signature of the Key Binding category (or for v4 keys, a self-cert over the primary User ID) and define properties of that particular component key.
They SHOULD NOT be used elsewhere.
They MUST be placed in the hashed area.¶
A Key Binding subpacket MUST be ignored if it is in a self-cert over a User ID that is not currently the primary User ID, or in a self-cert made over a User ID by a v6 or later primary key.¶
Subpacket types: Key Expiration Time, Key Flags.¶
These are only meaningful in a self-certification over a User ID, and define properties of that User ID.
They SHOULD NOT be used elsewhere.
They MUST be placed in the hashed area.¶
Subpacket types: Primary User ID¶
These are only meaningful in third-party certification signatures and define properties of the Web of Trust.
They SHOULD NOT be used elsewhere.
They MUST be placed in the hashed area.¶
Subpacket types: Exportable Certification, Trust Signature, Regular Expression, Revocable, Policy URI, (Trust Alias).¶
These are only meaningful in signatures of the Literal Data category, and define properties of the document or message.
They SHOULD NOT be used elsewhere.
Some of these subpackets are self-verifying (SV) and MAY be placed in the unhashed area.
All other Literal Data subpackets MUST be placed in the hashed area.
(Beware that the usefulness of all of these subpackets has been questioned)¶
Subpacket types: Intended Recipient Fingerprint, (Key Block (SV)), (Literal Data Meta Hash).¶
These are only meaningful in signature types whose specification explicitly requires them.
They SHOULD NOT be used elsewhere.
They have no intrinsic semantics; all semantics are defined by the enclosing signature.¶
Subpacket types: Signature Target, Embedded Signature, (Delegated Revoker), (Approved Certifications).¶
Table 1:
OpenPGP Signature Subpacket Types
Type |
Name |
Category |
Critical |
Self-Verifying |
Context |
Notes |
0 |
Reserved |
- |
|
|
|
never used |
1 |
Reserved |
- |
|
|
|
never used |
2 |
Signature Creation Time |
General |
SHOULD
|
|
|
MUST always be present in hashed area |
3 |
Signature Expiration Time |
General |
SHOULD
|
|
|
|
4 |
Exportable Certification |
Third Party |
MUST IFF false |
|
|
boolean, default true |
5 |
Trust Signature |
Third Party |
|
|
|
|
6 |
Regular Expression |
Third Party |
SHOULD
|
|
|
|
7 |
Revocable |
Third Party |
|
|
|
boolean, default false (deprecated in [I-D.dkg-openpgp-revocation]) |
8 |
Reserved |
- |
|
|
|
never used |
9 |
Key Expiration Time |
Key Binding |
SHOULD
|
|
|
|
10 |
(Additional Decryption Key/ARR) |
Key Binding |
|
|
|
PGP.com proprietary feature |
11 |
Preferred Symmetric Ciphers |
Direct |
|
|
|
|
12 |
Revocation Key (deprecated) |
Direct |
|
|
|
|
13-15 |
Reserved |
- |
|
|
|
never used |
16 |
Issuer Key ID |
General |
|
Yes |
|
issuer fingerprint is preferred |
17-19 |
Reserved |
- |
|
|
|
never used |
20 |
Notation Data |
General |
|
|
|
notations may be further classified |
21 |
Preferred Hash Algorithms |
Direct |
|
|
|
|
22 |
Preferred Compression Algorithms |
Direct |
|
|
|
|
23 |
Key Server Preferences |
Direct |
|
|
|
|
24 |
Preferred Key Server |
Direct |
|
|
|
|
25 |
Primary User ID |
First Party |
|
|
|
boolean, default false |
26 |
Policy URI |
Third Party |
|
|
|
(effectively a human-readable notation) |
27 |
Key Flags |
Key Binding |
SHOULD
|
|
|
|
28 |
Signer's User ID |
General |
|
|
|
|
29 |
Reason for Revocation |
Revocation |
|
|
|
free text field is effectively a human-readable notation |
30 |
Features |
Direct |
|
|
|
|
31 |
Signature Target |
Attr Value |
|
|
0x50 3-p conf |
not a unique identifier [REVOC-13]
|
32 |
Embedded Signature |
Attr Value |
|
Yes IFF it contains an 0x19 signature |
0x18 sbind |
|
33 |
Issuer Fingerprint |
General |
|
Yes |
|
|
34 |
(Preferred AEAD Algorithms) |
Direct |
|
|
|
[I-D.ietf-openpgp-rfc4880bis]
|
35 |
Intended Recipient Fingerprint |
Literal Data |
SHOULD
|
|
|
|
36 |
(Delegated Revoker) |
Attr Value |
MUST
|
|
TBD |
[I-D.dkg-openpgp-revocation]
|
37 |
(Approved Certifications) |
Attr Value |
|
|
0x16 1pa3pc |
[I-D.dkg-openpgp-1pa3pc]
|
38 |
(Key Block) |
Literal Data |
|
Yes |
|
[I-D.ietf-openpgp-rfc4880bis]
|
39 |
Preferred AEAD Ciphersuites |
Direct |
|
|
|
|
40 |
(Literal Data Meta Hash) |
Literal Data |
|
|
|
not yet implemented [I-D.koch-librepgp]
|
41 |
(Trust Alias) |
Third Party |
|
|
|
not yet implemented [I-D.koch-librepgp]
|
TBD |
(Replacement Key) |
Direct |
SHOULD NOT
|
|
|
[I-D.ietf-openpgp-replacementkey]
|
Three subpacket types are Boolean, with different default values for when they are absent (two true, one false).
It is RECOMMENDED that these subpackets not be used to convey their default values, only the non-default value.
The default value SHOULD instead be conveyed by the absence of the subpacket.¶
Unless otherwise indicated, subpackets SHOULD NOT be marked critical.
In particular, a critical subpacket that invalidates a self-signature will leave the previous self-signature (or no self-signature!) as the most recent valid self-signature from the PoV of some receiving implementations.
A generating implementation MUST be sure that all receiving implementations will behave as intended if a signature containing a critical subpacket is invalidated.
Otherwise, with the possible exception of Literal Data signatures, it is NOT RECOMMENDED to set the critical bit.¶
It is RECOMMENDED that a signature's creator places all subpackets in the hashed area, even self-verifying subpackets for which this is not strictly necessary.
The unhashed area MAY be used for informational subpackets attached by third parties (which can be safely stripped).¶