<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.35 (Ruby 3.3.8) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-gallagher-openpgp-signatures-03" category="std" consensus="true" submissionType="IETF" updates="9580" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title>OpenPGP Signatures</title>

    <author fullname="Andrew Gallagher" role="editor">
      <organization>PGPKeys.EU</organization>
      <address>
        <email>andrewg@andrewg.com</email>
      </address>
    </author>

    <date year="2026" month="June" day="04"/>

    <area>int</area>
    <workgroup>openpgp</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 47?>

<t>This document specifies several updates and clarifications to the grammar and semantics of OpenPGP signatures.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://andrewgdotcom.gitlab.io/openpgp-signatures"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-gallagher-openpgp-signatures/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        OpenPGP Working Group mailing list (<eref target="mailto:openpgp@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/openpgp/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/openpgp/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://gitlab.com/andrewgdotcom/openpgp-signatures"/>.</t>
    </note>


  </front>

  <middle>


<?line 51?>

<section anchor="introduction"><name>Introduction</name>

<t>OpenPGP signatures have a rich vocabulary, however this is often under-specified.
This document attempts to address this by:</t>

<t><list style="symbols">
  <t>Expanding on specifications where <xref target="RFC9580"></xref> does not fully describe the existing or expected behaviour of deployed implementations.</t>
  <t>Adding clarification where deployed implementations differ in their interpretation of <xref target="RFC9580"></xref> and its predecessors.</t>
  <t>Deprecating unused or error-prone features.</t>
</list></t>

<t>This document does not specify any new wire formats.</t>

</section>
<section anchor="conventions-definitions"><name>Conventions and Definitions</name>

<t>The term "OpenPGP Certificate" is used in this document interchangeably with "OpenPGP Transferable Public Key", as defined in <xref section="10.1" sectionFormat="of" target="RFC9580"/>.</t>

<t>The term "Component key" is used in this document to mean either a primary key or subkey.</t>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

</section>
<section anchor="signature-types"><name>Signature Types</name>

<t>Several signature types are specified in incomplete, confusing or contradictory ways.
We update their specifications as follows.</t>

<section anchor="timestamp-signature"><name>Timestamp Signature (0x40)</name>

<t><xref section="6.2.1" sectionFormat="of" target="RFC1991"/> defined the Timestamp signature as:</t>

<ul empty="true"><li>
  <t>&lt;40&gt; - time stamping ("I saw this document")</t>

  <t>Type &lt;40&gt; is intended to be a signature of a signature, as a notary seal on a signed document.</t>
</li></ul>

<t>The second statement implies that a v3 0x40 sig is made over a signature packet.
But the first statement implies a signature over a document, just with different semantics.</t>

<t>By <xref section="5.2.1.14" sectionFormat="of" target="RFC9580"/>, this has changed to:</t>

<ul empty="true"><li>
  <t>0x40: Timestamp signature.
This signature is only meaningful for the timestamp contained in it.</t>
</li></ul>

<t>This avoids the apparent contradiction of <xref target="RFC1991"></xref>, but is less informative.
And there is no explicit construction given in <xref section="5.2.4" sectionFormat="of" target="RFC9580"/>.</t>

<t>We note also that <xref target="RFC9580"></xref> introduced a Key Flag for timestamping.
This indicates that timestamping documents is sufficiently different from signing them that separate keys should be used.
This is consistent with the idea that "I wrote this document" and "I saw this document" are distinct statements with different consequences.
This is crucial in the case of an automated timestamping service that makes no claims about the accuracy of document contents.</t>

<t>We define type 0x40 Timestamp signatures as follows:</t>

<ul empty="true"><li>
  <t>A type 0x40 Timestamp signature is made over a Literal Data Packet.
It is constructed and distributed in the same way as a type 0x00 Binary Document Signature.
If the message is a text document, it <bcp14>MUST</bcp14> already be in Canonical Text form.
By default a Timestamp signature conveys no opinion about the validity of the document; it only claims that the document existed at the timestamp of signature creation.
This interpretation <bcp14>MAY</bcp14> be modified by adding notation subpackets, the meaning of which are application-dependent.
It can be made over an otherwise unsigned document, or it can be one of many signatures over the same document.
The Cleartext Signature Framework <bcp14>MUST NOT</bcp14> be used with Timestamp signatures.</t>
</li></ul>

<t>Countersigning a Signature packet only (including blind countersigning) is done using the type 0x50 Third-Party Confirmation signature.</t>

</section>
<section anchor="tpc-signature"><name>Third-Party Confirmation Signature (0x50)</name>

<t><xref section="5.2.1.15" sectionFormat="of" target="RFC9580"/> defines a Third-Party Confirmation signature as:</t>

<ul empty="true"><li>
  <t>This signature is a signature over some other OpenPGP Signature packet(s).
It is analogous to a notary seal on the signed data.
A Third-Party Confirmation signature <bcp14>SHOULD</bcp14> include a Signature Target subpacket that identifies the confirmed signature.</t>
</li></ul>

<t>A concrete construction is provided, but the placement and semantics are still not well-defined.
We clarify these as follows:</t>

<ul empty="true"><li>
  <t>By default, a Third-Party Confirmation signature makes no claim about the validity of the other signature, just its existence, and makes no claim whatsoever about the subject of that signature.
This interpretation <bcp14>MAY</bcp14> be modified by adding notation subpackets, the meaning of which are application-dependent.
It <bcp14>SHOULD</bcp14> be distributed in an Embedded Signature subpacket in the unhashed area of the signature it notarizes.
A Signature Target subpacket is therefore unnecessary and <bcp14>SHOULD NOT</bcp14> be included.</t>
</li></ul>

<t>See <xref target="signature-target-subpacket"/> for further discussion of the Signature Target subpacket.</t>

<section anchor="terminology-subtleties"><name>Terminology Subtleties</name>

<t>Implementers should note that "Third-Party Confirmation" signatures (type 0x50) are distinct from "third-party Certification" signatures (types 0x10..0x13 when issued by a primary key other than the one signed over), and beware that older RFCs do not always use sufficiently precise terminology to distinguish them.</t>

</section>
</section>
</section>
<section anchor="signature-packets"><name>Signature Packets</name>

<t>Receiving implementations currently have insufficient guidance for when to reject non-idiomatic signature packets.</t>

<section anchor="recursive-embedding"><name>Recursive Embedding Inside Signature Subpackets</name>

<t><xref section="5.2.3" sectionFormat="of" target="RFC9580"/> specifies two subpackets which could recursively include a signature inside a signature:</t>

<t><list style="symbols">
  <t>Embedded Signature (type 32): contains a signature packet</t>
  <t>Key Block (type 38, experimental): contains an entire certificate, which may itself include signature packets</t>
</list></t>

<t>In order to prevent excessive recursion via nested signature subpackets:</t>

<t><list style="symbols">
  <t>Signatures contained within Embedded Signature subpackets <bcp14>MUST NOT</bcp14> contain any Embedded Signature subpackets:
  <list style="symbols">
      <t>An Embedded Signature subpacket <bcp14>MUST</bcp14> contain a signature of an Embeddable signature type.</t>
      <t>An Embeddable signature <bcp14>MUST NOT</bcp14> contain Embedded Signature subpackets.</t>
      <t>Initially, only the Primary Key Binding and Third-Party Confirmation signature types are specified as Embeddable.</t>
    </list></t>
  <t>A signature of a type other than in the Literal Data Signature Category (<xref target="signature-categories"/>) <bcp14>MUST NOT</bcp14> contain a Key Block subpacket.</t>
</list></t>

<t>A receiving implementation <bcp14>MUST</bcp14> invalidate any signature that does not conform to the above guidance.</t>

</section>
<section anchor="conflicting-subpackets"><name>Subpackets with Conflicting Information</name>

<t><xref section="5.2.3.9" sectionFormat="of" target="RFC9580"/> gives a receiving implementation significant leeway in interpreting conflicting combinations of subpackets:</t>

<ul empty="true"><li>
  <t>It is certainly possible for a signature to contain conflicting information in subpackets.
For example, a signature may contain multiple copies of a preference or multiple expiration times.
In most cases, an implementation <bcp14>SHOULD</bcp14> use the last subpacket in the hashed section of the signature, but it <bcp14>MAY</bcp14> use any conflict resolution scheme that makes more sense.</t>
</li></ul>

<t>We hereby tighten this guidance:</t>

<ul empty="true"><li>
  <t>A signature <bcp14>MUST NOT</bcp14> contain more than one subpacket of any given type in its hashed subpackets area, unless otherwise specified.
A receiving implementation <bcp14>MUST</bcp14> invalidate a signature that contains in its hashed area more than one subpacket of any type for which this is not explicitly permitted.</t>
</li></ul>

<t>Multiple copies of the following subpacket types are already explicitly permitted:</t>

<t><list style="symbols">
  <t>Issuer Key ID (type 16) <xref section="5.2.3.9" sectionFormat="of" target="RFC9580"/></t>
  <t>Notation Data (type 20) <xref section="5.2.3.24" sectionFormat="of" target="RFC9580"/></t>
  <t>Intended Recipient Fingerprint (type 35) <xref section="5.2.3.36" sectionFormat="of" target="RFC9580"/></t>
</list></t>

<t>In addition, the following interpretations are natural extensions of specified behaviour, and hereby permitted:</t>

<section anchor="multiple-revocation-key-type-12-subpackets"><name>Multiple Revocation Key (type 12) Subpackets</name>

<t>If multiple Revocation Key subpackets are present, any of the listed keys <bcp14>MAY</bcp14> generate key revocation signatures.</t>

</section>
<section anchor="multiple-preferred-key-server-type-24-subpackets"><name>Multiple Preferred Key Server (type 24) Subpackets</name>

<t>If multiple Preferred Key Server subpackets are present, updates <bcp14>MAY</bcp14> be obtained from any of the listed keyservers.</t>

</section>
<section anchor="multiple-embedded-signature-type-32-subpackets"><name>Multiple Embedded Signature (type 32) Subpackets</name>

<t>If multiple Embedded Signature subpackets are present, a receiving implementation <bcp14>MAY</bcp14> attempt to process them all in turn.</t>

</section>
<section anchor="multiple-issuer-fingerprint-type-33-subpackets"><name>Multiple Issuer Fingerprint (type 33) Subpackets</name>

<t>Multiple Issuer Fingerprint subpackets are permitted, with the same interpretation as multiple Issuer Key ID subpackets.</t>

<t>Note however that <xref section="5.2.3.35" sectionFormat="of" target="RFC9580"/> states of the Issuer Fingerprint subpacket:</t>

<ul empty="true"><li>
  <t>If the version of the issuing key is 4 and an Issuer Key ID subpacket (Section 5.2.3.12) is also included in the signature, the Key ID of the Issuer Key ID subpacket <bcp14>MUST</bcp14> match the low 64 bits of the fingerprint.</t>
</li></ul>

<t>Generalizing to multiple subpackets, we replace this with:</t>

<ul empty="true"><li>
  <t>If both Issuer Key ID and Issuer Fingerprint subpackets are included in a signature then each Issuer Key ID subpacket <bcp14>MUST</bcp14> match the low 64 bits of only one v4 Issuer Fingerprint subpacket, and all v4 Issuer Fingerprint subpackets <bcp14>MUST</bcp14> have a corresponding Key ID subpacket.</t>
</li></ul>

</section>
<section anchor="multiple-key-block-type-38-experimental-subpackets"><name>Multiple Key Block (type 38, experimental) Subpackets</name>

<t>If multiple Key Block subpackets are present, a receiving implementation <bcp14>MAY</bcp14> attempt to process them all in turn.</t>

</section>
</section>
<section anchor="revocable-subpacket"><name>Deprecation of the "Revocable" Signature Subpacket (type 7)</name>

<t>The "Revocable" subpacket is not commonly supported, and when used as described is effectively non-functional.
It is hereby deprecated.</t>

<section anchor="non-functionality-of-the-revocable-signature-subpacket"><name>Non-functionality of the "Revocable" Signature Subpacket</name>

<t><xref section="5.2.3.20" sectionFormat="of" target="RFC9580"/> states:</t>

<ul empty="true"><li>
  <t>Signatures that are not revocable have any later revocation signatures ignored.
They represent a commitment by the signer that he cannot revoke his signature for the life of his key.
If this packet is not present, the signature is revocable.</t>
</li></ul>

<t>But this is not an effective constraint on the key owner's future behaviour:</t>

<t><list style="symbols">
  <t>Since there is no such thing as a document revocation signature, "revocability" is only applicable to self-signatures and third party certifications.</t>
  <t>If a key is compromised, then the timestamp on any signature can be trivially backdated, so the timestamps on any signatures cannot be relied upon.
Since "revocability" only concerns "later revocation signatures", it is only meaningful for signatures made by valid or soft-revoked keys.</t>
  <t>A soft revocation of a self-signature or third-party certification is functionally equivalent to a later signature with an expiry date, which is not covered by the "Revocable" semantics.</t>
  <t>A hard revocation has the same semantics regardless of its creation date.
In particular, an escrowed revocation signature (such as the revocation signatures commonly made at key generation time) will typically have a creation time significantly in the past compared to when it is published.
A "non-revocable" certification created after the escrowed revocation sig cannot prevent the escrowed revocation taking effect.</t>
</list></t>

<t>Therefore any "non-revocable" signature can still be effectively "revoked" by one of the following unremarkable events:</t>

<t><list style="symbols">
  <t>by a later signature with an explicit expiry date, which has the same practical effect as a soft revocation,</t>
  <t>or by an escrowed hard revocation, which has the same practical effect as a later hard revocation.</t>
</list></t>

<t>The "revocable" subpacket is therefore non-functional.</t>

</section>
</section>
<section anchor="signature-target-subpacket"><name>Deprecation of the Signature Target Subpacket (type 31)</name>

<t>The Signature Target subpacket (<xref section="5.2.3.33" sectionFormat="of" target="RFC9580"/>) fulfils the following roles:</t>

<t><list style="symbols">
  <t>In a Timestamp or Third-Party Confirmation signature, it identifies the signature that is being countersigned</t>
  <t>In a Revocation signature, it identifies the signature being revoked</t>
</list></t>

<t>It is imprecisely defined and does not uniquely identify a particular Signature subpacket, and so when used as described is effectively non-functional.
It is hereby deprecated.</t>

<section anchor="non-functionality-of-the-signature-target-signature-subpacket"><name>Non-functionality of the "Signature Target" Signature Subpacket</name>

<t>The Signature Target subpacket is imprecisely defined:</t>

<ul empty="true"><li>
  <t>(1 octet public key algorithm, 1 octet hash algorithm, N octets hash)</t>

  <t>This subpacket identifies a specific target signature to which a signature refers.
For Revocation Signatures, this subpacket provides explicit designation of which signature is being revoked.
For a Third-Party Confirmation or Timestamp signature, this designates what signature is signed.
All arguments are an identifier of that target signature.</t>

  <t>The N octets of hash data <bcp14>MUST</bcp14> be the size of the signature's hash.
For example, a target signature with a SHA-1 hash <bcp14>MUST</bcp14> have 20 octets of hash data.</t>
</li></ul>

<t>It is unclear from this text alone whether the hash field refers to the digest that the target signature is made over, or a digest over the resulting signature packet.
The definition of a Third-Party Confirmation signature in <xref section="5.2.1" sectionFormat="of" target="RFC4880"/> gives us a hint however:</t>

<ul empty="true"><li>
  <t>A third-party signature <bcp14>SHOULD</bcp14> include Signature Target subpacket(s) to give easy identification. Note that we really do mean <bcp14>SHOULD</bcp14>.
There are plausible uses for this (such as a blind party that only sees the signature, not the key or source document) that cannot include a target subpacket.</t>
</li></ul>

<t>(Beware that "third-party signature" in the above should be read as "Third-Party Confirmation signature"; see <xref target="terminology-subtleties"/>.)</t>

<t>The only way that a blind party would be unable to generate a Signature Target subpacket is if the hash is the digest that the original signature was made over.
But if so it is not a unique identifier of a signature packet, since multiple distinct signatures can be made over the exact same material, including subpackets.
In particular, if there was no Issuer Key ID or Issuer Fingerprint subpacket in the target signature's hashed area, a Signature Target subpacket could not distinguish between the original signature or an otherwise valid one issued by a completely different signing key.</t>

<t>The Signature Target subpacket is therefore not functional when used in a Third-Party Confirmation signature.
A more reliable mechanism for identifying the target of a Third-Party Confirmation signature is to include it an Embedded Signature subpacket, directly in the unhashed area of the signature being countersigned.</t>

<t>The other specified use for the Signature Target subpacket is in a revocation signature.
Certification Revocations are customarily understood to mean "I retract all my previous statements that this key is related to this user" (<xref section="6.2.1" sectionFormat="of" target="RFC1991"/>), so a Certification Revocation is not specific to any particular Certification signature.
No other signature types can be revoked - primary key and subkey revocation signatures revoke the key, not the previous binding signature(s), and so are not specific to any particular binding signatures either.</t>

<t>The Signature Target subpacket is therefore not functional when used in a revocation signature.
It is normally sufficient to distribute a revocation signature in an OpenPGP certificate or revocation certificate.</t>

<t>Timestamp signatures as specified in <xref target="timestamp-signature"/> do not require a Signature Target subpacket, since the signed message grammar identifies the material being signed over.</t>

<t>We therefore deprecate the Signature Target subpacket in all contexts.</t>

</section>
</section>
</section>
<section anchor="signature-categories"><name>Signature Categories</name>

<t>Signature Type code points are spaced out into identifiable ranges of types with similar semantics.
These also mostly correspond to the various Key Flags.
These ranges and their mapping to the Key Flags are not specified in <xref target="RFC9580"></xref>.</t>

<t>We define Signature Categories to cover each range of type values:</t>

<t><list style="symbols">
  <t>Literal Data Signature Category (0x00..0x07)
  <list style="symbols">
      <t>0x00 Signature over a Binary document</t>
      <t>0x01 Signature over a Canonical Text document</t>
      <t>0x02 Standalone signature</t>
    </list></t>
  <t>Unassigned (0x08..0x0F)</t>
  <t>Certification Category (0x10..0x17)
  <list style="symbols">
      <t>0x10 Generic certification</t>
      <t>0x11 Persona certification</t>
      <t>0x12 Casual certification</t>
      <t>0x13 Positive certification</t>
      <t>(0x16 Approved certifications)</t>
    </list></t>
  <t>Key Binding Category (0x18..0x1F)
  <list style="symbols">
      <t>0x18 Subkey binding</t>
      <t>0x19 Primary key binding</t>
      <t>0x1F Direct key</t>
    </list></t>
  <t>Primary Key Revocation Category (0x20..0x27)
  <list style="symbols">
      <t>0x20 Primary Key revocation</t>
    </list></t>
  <t>Subkey Revocation Category (0x28..0x2F)
  <list style="symbols">
      <t>0x28 Subkey revocation</t>
    </list></t>
  <t>Certification Revocation Category (0x30..0x37)
  <list style="symbols">
      <t>0x30 Certification revocation</t>
    </list></t>
  <t>Unassigned (0x38..0x3F)</t>
  <t>Timestamping Category (0x40..0x47)
  <list style="symbols">
      <t>0x40 Timestamp</t>
    </list></t>
  <t>Unassigned (0x48..0x4F)</t>
  <t>Countersignature Category (0x50..0x57)
  <list style="symbols">
      <t>0x50 Third-Party confirmation</t>
    </list></t>
  <t>Unassigned (0x58..0x5F)</t>
  <t>Private and Experimental Range (0x60..0x6F)</t>
  <t>Unassigned (0x70..0xFE)</t>
  <t>RESERVED (0xFF)</t>
</list></t>

<t>The Standalone signature type is effectively a "signature over an empty document".
The Direct Key signature type contains key usage preference subpackets, similar to the Subkey Binding signature type, and is therefore effectively a "self-binding signature".</t>

<t>We have defined a Private and Experimental signature type range.
This is 0x60..0x6F (96..111) for consistency with the existing private and experimental range in other registries.
It does not form a Category and does not have a corresponding Key Flag.</t>

<t>Self-certifications over v4 Primary User IDs are used to convey the same information as Key Binding signatures.
Therefore, unless specifically stated otherwise, any stipulations that apply to Key Binding signatures also apply to self-certifications over v4 Primary User IDs.</t>

<section anchor="key-flags"><name>Key Flags</name>

<t>A Key Flags subpacket <bcp14>SHOULD</bcp14> be included in a Direct Key or Subkey Binding signature (or for v4 keys, a self-certification over the primary User ID).
It applies only to a single key material packet; for a Direct Key signature (or primary User ID self-cert) it applies to the primary key only, and for a Subkey Binding signature, it applies only to that subkey.</t>

<t>Previously, it was also specified for use in third-party Certification Signatures.
This is not widely supported and is hereby deprecated.</t>

<t>The following Key Flags permit the creation of signatures in one or more Signature Categories:</t>

<t><list style="symbols">
  <t>0x01.. Third-party signatures in the Certification and Certification Revocation Categories</t>
  <t>0x02.. Literal Data Signature Category</t>
  <t>0x0008.. Timestamping Category</t>
  <t>((TBC)) Countersignature Category</t>
</list></t>

<t>The following exceptional usages are always permitted regardless of Key Flags:</t>

<t><list style="symbols">
  <t>Primary keys are always permitted to make self-signatures in the Certification, Key Binding, Certification Revocation, Primary Key Revocation and Subkey Revocation Categories.</t>
  <t>Subkeys with signing-capable algorithms are always permitted to make Primary Key Binding signatures.</t>
  <t>Any key with a signing-capable algorithm is permitted to make a signature in the Private and Experimental range.</t>
</list></t>

<t>Otherwise:</t>

<t><list style="symbols">
  <t>A signature made by a key that does not have the corresponding Key Flag <bcp14>MUST</bcp14> be considered invalid.</t>
  <t>A key with no Key Flags subpacket <bcp14>MUST NOT</bcp14> create signatures.</t>
</list></t>

<t><xref section="5.2.1.10" sectionFormat="of" target="RFC9580"/> also explicitly allows keys with the 0x01 Key Flag to create third-party 0x1F Direct Key Signatures.
These are used for trust delegation in <xref target="SQ-WOT"></xref>.</t>

</section>
<section anchor="authentication-signatures"><name>Authentication Signatures</name>

<t>OpenPGP defines no authentication signature types, but does have an authentication Key Flag.
Traditionally, authentication is performed by converting the key material into that of another protocol (usually OpenSSH) and performing authentication in that protocol.</t>

<t>Beware that cross-protocol usage can be exploited to evade the domain separation protections of Key Flags.
For example, there is no distinction between document signing, certification and authentication usage in OpenSSH, and once converted an OpenPGP authentication key may be used as a OpenSSH CA or to sign git commits.</t>

<t>((TODO: Guidance for the use of authentication keys should be provided. #12))</t>

</section>
</section>
<section anchor="signature-subpacket-categories"><name>Signature Subpacket Categories</name>

<t>Signature subpacket types may also be categorized, depending on where they are used:</t>

<section anchor="general-subpackets"><name>General subpackets.</name>

<t>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 <bcp14>MAY</bcp14> be reasonable to place self-verifying general subpackets in the unhashed area.
All other general subpackets <bcp14>MUST</bcp14> be placed in the hashed area.</t>

<t>Subpacket types: Signature Creation Time, Signature Expiration Time, Issuer Key ID (SV), Notation Data, Signer's User ID, Issuer Fingerprint (SV).</t>

<t>(Notation subpackets are categorized here as general subpackets, however the notations within them may have arbitrary semantics at the application layer)</t>

<t>TODO: should Signature Expiration Time subpackets be more restricted, e.g. to certifications? (issue #8)</t>

</section>
<section anchor="context-subpackets"><name>Context subpackets.</name>

<t>These have semantics that are meaningful only when used in signatures of a particular type or category:</t>

<section anchor="direct-subpackets"><name>Direct subpackets.</name>

<t>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 <bcp14>MAY</bcp14> 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).
They <bcp14>SHOULD NOT</bcp14> be used elsewhere.
They <bcp14>MUST</bcp14> be placed in the hashed area.</t>

<t>A Direct subpacket <bcp14>MUST</bcp14> be ignored if it is in a self-cert made over a User ID by a v6 or later primary key.</t>

<t>Subpacket types: 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.</t>

<t>The Replacement Key subpacket <bcp14>MAY</bcp14> also be used as a key revocation subpacket.</t>

</section>
<section anchor="revocation-subpackets"><name>Revocation subpackets.</name>

<t>These are only meaningful in signatures of the Key Revocation, Subkey Revocation or Certificate Revocation categories.
They <bcp14>SHOULD NOT</bcp14> be used elsewhere.
They <bcp14>MUST</bcp14> be placed in the hashed area.</t>

<t>Subpacket types: Reason for Revocation, Replacement Key (Primary Key Revocations only).</t>

</section>
<section anchor="key-binding-subpackets"><name>Key Binding subpackets.</name>

<t>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 <bcp14>SHOULD NOT</bcp14> be used elsewhere.
They <bcp14>MUST</bcp14> be placed in the hashed area.</t>

<t>A Key Binding subpacket <bcp14>MUST</bcp14> 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.</t>

<t>Subpacket types: Key Expiration Time, Key Flags.</t>

</section>
<section anchor="first-party-certification-subpackets"><name>First-party Certification subpackets.</name>

<t>These are only meaningful in a self-certification over a User ID, and define properties of that User ID.
They <bcp14>SHOULD NOT</bcp14> be used elsewhere.
They <bcp14>MUST</bcp14> be placed in the hashed area.</t>

<t>Subpacket types: Primary User ID</t>

</section>
<section anchor="third-party-certification-subpackets"><name>Third-party Certification subpackets.</name>

<t>These are only meaningful in third-party certification signatures and define properties of the Web of Trust.
They <bcp14>SHOULD NOT</bcp14> be used elsewhere.
They <bcp14>MUST</bcp14> be placed in the hashed area.</t>

<t>Subpacket types: Exportable Certification, Trust Signature, Regular Expression, Revocable, Policy URI, (Trust Alias).</t>

</section>
<section anchor="literal-data-subpackets"><name>Literal Data subpackets.</name>

<t>These are only meaningful in signatures of the Literal Data category, and define properties of the document or message.
They <bcp14>SHOULD NOT</bcp14> be used elsewhere.
Some of these subpackets are self-verifying (SV) and <bcp14>MAY</bcp14> be placed in the unhashed area.
All other Literal Data subpackets <bcp14>MUST</bcp14> be placed in the hashed area.
(Beware that the usefulness of all of these subpackets has been questioned)</t>

<t>Subpacket types: Intended Recipient Fingerprint, (Key Block (SV)), (Literal Data Metadata).</t>

</section>
<section anchor="attribute-value-subpackets"><name>Attribute Value subpackets.</name>

<t>These are only meaningful in signature types whose specification explicitly requires them.
They <bcp14>SHOULD NOT</bcp14> be used elsewhere.
It <bcp14>MAY</bcp14> be reasonable to place Embedded Signature subpackets in the unhashed area.
All other Attribute Value subpackets <bcp14>MUST</bcp14> be placed in the hashed area.
They have no intrinsic semantics; all semantics are defined by the enclosing signature.</t>

<t>Subpacket types: Signature Target, Embedded Signature, (Delegated Revoker), (Approved Certifications).</t>

</section>
</section>
<section anchor="subpackets-summary"><name>Subpackets summary</name>

<texttable title="OpenPGP Signature Subpacket Types" anchor="subpacket-types">
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Category</ttcol>
      <ttcol align='left'>Critical</ttcol>
      <ttcol align='left'>Unhashed</ttcol>
      <ttcol align='left'>Context</ttcol>
      <ttcol align='left'>Notes</ttcol>
      <c>0</c>
      <c>Reserved</c>
      <c>-</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>never used</c>
      <c>1</c>
      <c>Reserved</c>
      <c>-</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>never used</c>
      <c>2</c>
      <c>Signature Creation Time</c>
      <c>General</c>
      <c><bcp14>SHOULD</bcp14></c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c><bcp14>MUST</bcp14> always be present in hashed area</c>
      <c>3</c>
      <c>Signature Expiration Time</c>
      <c>General</c>
      <c><bcp14>SHOULD</bcp14></c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>4</c>
      <c>Exportable Certification</c>
      <c>Third-Party</c>
      <c><bcp14>MUST</bcp14> IFF false</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>boolean, default true</c>
      <c>5</c>
      <c>Trust Signature</c>
      <c>Third-Party</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>6</c>
      <c>Regular Expression</c>
      <c>Third-Party</c>
      <c><bcp14>SHOULD</bcp14></c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>7</c>
      <c>Revocable (deprecated)</c>
      <c>Third-Party</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>boolean, default false (<xref target="revocable-subpacket"/>)</c>
      <c>8</c>
      <c>Reserved</c>
      <c>-</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>never used</c>
      <c>9</c>
      <c>Key Expiration Time</c>
      <c>Key Binding</c>
      <c><bcp14>SHOULD</bcp14></c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>10</c>
      <c>Placeholder for backwards compatibility</c>
      <c>-</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>PGP.com proprietary feature</c>
      <c>11</c>
      <c>Preferred Symmetric Ciphers</c>
      <c>Direct</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>12</c>
      <c>Revocation Key (deprecated)</c>
      <c>Direct</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>13-15</c>
      <c>Reserved</c>
      <c>-</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>never used</c>
      <c>16</c>
      <c>Issuer Key ID</c>
      <c>General</c>
      <c>&#160;</c>
      <c><bcp14>MAY</bcp14></c>
      <c>&#160;</c>
      <c>issuer fingerprint is preferred</c>
      <c>17-19</c>
      <c>Reserved</c>
      <c>-</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>never used</c>
      <c>20</c>
      <c>Notation Data</c>
      <c>General</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>notations may be further classified</c>
      <c>21</c>
      <c>Preferred Hash Algorithms</c>
      <c>Direct</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>22</c>
      <c>Preferred Compression Algorithms</c>
      <c>Direct</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>23</c>
      <c>Key Server Preferences</c>
      <c>Direct</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>24</c>
      <c>Preferred Key Server</c>
      <c>Direct</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>25</c>
      <c>Primary User ID</c>
      <c>First Party</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>boolean, default false</c>
      <c>26</c>
      <c>Policy URI</c>
      <c>Third-Party</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>(effectively a human-readable notation)</c>
      <c>27</c>
      <c>Key Flags</c>
      <c>Key Binding</c>
      <c><bcp14>SHOULD</bcp14></c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>28</c>
      <c>Signer's User ID</c>
      <c>General</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>29</c>
      <c>Reason for Revocation</c>
      <c>Revocation</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>free text field is effectively a human-readable notation</c>
      <c>30</c>
      <c>Features</c>
      <c>Direct</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>31</c>
      <c>Signature Target (deprecated)</c>
      <c>Attr Value</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>0x50 3-p conf</c>
      <c><xref target="signature-target-subpacket"/></c>
      <c>32</c>
      <c>Embedded Signature</c>
      <c>Attr Value</c>
      <c>&#160;</c>
      <c><bcp14>MAY</bcp14></c>
      <c>0x18 sbind</c>
      <c>&#160;</c>
      <c>33</c>
      <c>Issuer Fingerprint</c>
      <c>General</c>
      <c>&#160;</c>
      <c><bcp14>MAY</bcp14></c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>34</c>
      <c>Reserved</c>
      <c>-</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>35</c>
      <c>Intended Recipient Fingerprint</c>
      <c>Literal Data</c>
      <c><bcp14>SHOULD</bcp14></c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>36</c>
      <c>(Delegated Revoker)</c>
      <c>Attr Value</c>
      <c><bcp14>MUST</bcp14></c>
      <c>&#160;</c>
      <c>TBD</c>
      <c><xref target="I-D.dkg-openpgp-revocation"></xref></c>
      <c>37</c>
      <c>Reserved (Approved Certifications)</c>
      <c>Attr Value</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>0x16 1pa3pc</c>
      <c><xref target="I-D.dkg-openpgp-1pa3pc"></xref></c>
      <c>38</c>
      <c>Reserved (Key Block)</c>
      <c>Literal Data</c>
      <c>&#160;</c>
      <c><bcp14>MAY</bcp14></c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>39</c>
      <c>Preferred AEAD Ciphersuites</c>
      <c>Direct</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>40</c>
      <c>(Literal Data Metadata)</c>
      <c>Literal Data</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c><xref target="I-D.gallagher-openpgp-literal-metadata"></xref></c>
      <c>41</c>
      <c>(Trust Alias)</c>
      <c>Third-Party</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>TBD</c>
      <c>Replacement Key</c>
      <c>Direct, Revocation</c>
      <c><bcp14>SHOULD NOT</bcp14></c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c><xref target="I-D.ietf-openpgp-replacementkey"></xref></c>
</texttable>

<t>Three subpacket types are Boolean, with different default values for when they are absent (two true, one false).
It is <bcp14>RECOMMENDED</bcp14> that these subpackets not be used to convey their default values, only the non-default value.
The default value <bcp14>SHOULD</bcp14> instead be conveyed by the absence of the subpacket.</t>

<t>Unless otherwise indicated, subpackets <bcp14>SHOULD NOT</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>NOT RECOMMENDED</bcp14> to set the critical bit.</t>

<t>It is <bcp14>RECOMMENDED</bcp14> 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 <bcp14>MAY</bcp14> be used for informational subpackets attached by third parties (which can be safely stripped).</t>

</section>
<section anchor="guidance-for-management-of-the-signature-subpacket-registry"><name>Guidance for management of the Signature Subpacket Registry</name>

<t><list style="symbols">
  <t>Future boolean subpackets <bcp14>SHOULD NOT</bcp14> contain an explicit value; a value of TRUE <bcp14>SHOULD</bcp14> be indicated by the presence of the subpacket, and FALSE otherwise.</t>
  <t>Specification of new subpackets <bcp14>SHOULD</bcp14> address classification, criticality and self-verification as outlined above.</t>
  <t>Subpackets <bcp14>SHOULD</bcp14> be implemented in the private/experimental area first, then reassigned to a permanent code point.</t>
</list></t>

</section>
<section anchor="unhashed-subpacket-deduplication"><name>Unhashed Subpacket Deduplication</name>

<t>Unhashed subpacket areas are malleable and so may have subpackets added or removed in transit, either innocently or maliciously.
A receiving implementation <bcp14>SHOULD</bcp14> clean the unhashed area of subpackets that are not meaningful or trustworthy outside the hashed area.
If two signature packets are bitwise identical apart from differences in their unhashed subpacket areas, an implementation <bcp14>MAY</bcp14> merge them into a single signature.
If two unhashed subpackets in the merged signature are bitwise identical, they <bcp14>MUST</bcp14> be deduplicated.
Otherwise, the unhashed subpacket area of the merged signature <bcp14>SHOULD</bcp14> contain the useful subpackets from both original signatures, even if this means multiple subpackets of the same type.</t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>(( TO BE COMPLETED ))</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="openpgp-signature-types-registry"><name>OpenPGP Signature Types Registry</name>

<t>IANA is requested to add a column to the OpenPGP Signature Types registry, called "Embeddable".
This column should be empty by default.</t>

<t>IANA is requested to register the following new entry in the registry:</t>

<texttable title="OpenPGP Signature Types (new)" anchor="signature-types-new">
      <ttcol align='left'>ID</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Embeddable</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>0x60-0x6F</c>
      <c>Private or Experimental Use</c>
      <c>&#160;</c>
      <c><xref target="signature-categories"/></c>
</texttable>

<t>IANA is requested to update the following existing entries in the registry:</t>

<texttable title="OpenPGP Signature Types (updated)" anchor="signature-types-updated">
      <ttcol align='left'>ID</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Embeddable</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>0x19</c>
      <c>Primary Key Binding Signature</c>
      <c>Yes</c>
      <c><xref target="RFC9580"></xref>, <xref target="recursive-embedding"/>, ((TBC))</c>
      <c>0x40</c>
      <c>Timestamp Signature</c>
      <c>&#160;</c>
      <c><xref target="RFC9580"></xref>, <xref target="timestamp-signature"/></c>
      <c>0x50</c>
      <c>Third-Party Confirmation Signature</c>
      <c>Yes</c>
      <c><xref target="RFC9580"></xref>, <xref target="tpc-signature"/>, <xref target="recursive-embedding"/></c>
</texttable>

<t>((TODO: avoid clash between the updates to 0x19 here and in draft-certificates))</t>

</section>
<section anchor="openpgp-key-flags-registry"><name>OpenPGP Key Flags Registry</name>

<t>IANA is requested to register the following new entry in the OpenPGP Key Flags registry:</t>

<texttable title="OpenPGP Key Flags (new)" anchor="key-flags-new">
      <ttcol align='left'>Flag</ttcol>
      <ttcol align='left'>Definition</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>((TBC))</c>
      <c>This key may be used to make signatures in the Countersignature Category (0x50..0x57)</c>
      <c><xref target="signature-categories"/></c>
</texttable>

<t>IANA is requested to update the following existing entries in the registry:</t>

<texttable title="OpenPGP Key Flags (update)" anchor="key-flags-update">
      <ttcol align='left'>Flag</ttcol>
      <ttcol align='left'>Definition</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>0x01..</c>
      <c>This key may be used to make signatures over other keys, in the Certification and Certification Revocation Categories (0x10..0x17 and 0x30..0x37)</c>
      <c><xref target="signature-categories"/></c>
      <c>0x02...</c>
      <c>This key may be used to make signatures in the Literal Data Signature Category (0x00..0x07)</c>
      <c><xref target="signature-categories"/></c>
      <c>0x0008...</c>
      <c>This key may be used to make signatures in the Timestamping Category (0x40..0x47)</c>
      <c><xref target="signature-categories"/></c>
</texttable>

</section>
<section anchor="openpgp-signature-subpacket-types-registry"><name>OpenPGP Signature Subpacket Types Registry</name>

<t>IANA is requested to add columns for "Category", "Critical", and "Self-Verifying" to the OpenPGP Signature Subpacket Types registry, and populate them with initial values as listed in <xref target="subpacket-types"/>.</t>

<t>IANA is requested to mark the "Revocable" subpacket entry as "deprecated", referencing this document, <xref target="revocable-subpacket"/>.</t>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC9580">
  <front>
    <title>OpenPGP</title>
    <author fullname="P. Wouters" initials="P." role="editor" surname="Wouters"/>
    <author fullname="D. Huigens" initials="D." surname="Huigens"/>
    <author fullname="J. Winter" initials="J." surname="Winter"/>
    <author fullname="Y. Niibe" initials="Y." surname="Niibe"/>
    <date month="July" year="2024"/>
    <abstract>
      <t>This document specifies the message formats used in OpenPGP. OpenPGP provides encryption with public key or symmetric cryptographic algorithms, digital signatures, compression, and key management.</t>
      <t>This document is maintained in order to publish all necessary information needed to develop interoperable applications based on the OpenPGP format. It is not a step-by-step cookbook for writing an application. It describes only the format and methods needed to read, check, generate, and write conforming packets crossing any network. It does not deal with storage and implementation questions. It does, however, discuss implementation issues necessary to avoid security flaws.</t>
      <t>This document obsoletes RFCs 4880 ("OpenPGP Message Format"), 5581 ("The Camellia Cipher in OpenPGP"), and 6637 ("Elliptic Curve Cryptography (ECC) in OpenPGP").</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9580"/>
  <seriesInfo name="DOI" value="10.17487/RFC9580"/>
</reference>
<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>



    </references>

    <references title='Informative References' anchor="sec-informative-references">




<reference anchor="I-D.ietf-openpgp-replacementkey">
   <front>
      <title>OpenPGP Key Replacement</title>
      <author fullname="Daphne Shaw" initials="D." surname="Shaw">
         <organization>Jabberwocky Tech</organization>
      </author>
      <author fullname="Andrew Gallagher" initials="A." surname="Gallagher">
         <organization>PGPKeys.EU</organization>
      </author>
      <date day="29" month="May" year="2026"/>
      <abstract>
	 <t>   This document specifies a method in OpenPGP to suggest a replacement
   for an expired, revoked, or deprecated primary key.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-openpgp-replacementkey-08"/>
   
</reference>

<reference anchor="I-D.dkg-openpgp-revocation">
   <front>
      <title>Revocation in OpenPGP</title>
      <author fullname="Daniel Kahn Gillmor" initials="D. K." surname="Gillmor">
         <organization>ACLU</organization>
      </author>
      <author fullname="Andrew Gallagher" initials="A." surname="Gallagher">
         </author>
      <date day="28" month="March" year="2025"/>
      <abstract>
	 <t>   Cryptographic revocation is a hard problem.  OpenPGP&#x27;s revocation
   mechanisms are imperfect, not fully understood, and not as widely
   implemented as they could be.  Additionally, some historical OpenPGP
   revocation mechanisms simply do not work in certain contexts.  This
   document provides clarifying guidance on how OpenPGP revocation
   works, documents outstanding problems, and introduces a new mechanism
   for delegated revocations that improves on previous mechanism.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-dkg-openpgp-revocation-02"/>
   
</reference>

<reference anchor="I-D.dkg-openpgp-1pa3pc">
   <front>
      <title>First-Party Approved Third-Party Certifications in OpenPGP</title>
      <author fullname="Daniel Kahn Gillmor" initials="D. K." surname="Gillmor">
         <organization>ACLU</organization>
      </author>
      <date day="6" month="September" year="2024"/>
      <abstract>
	 <t>   An OpenPGP certificate can grow in size without bound when third-
   party certifications are included.  This document describes a way for
   the owner of the certificate to explicitly approve of specific third-
   party certifications, so that relying parties can safely prune the
   certificate of any unapproved certifications.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-dkg-openpgp-1pa3pc-02"/>
   
</reference>

<reference anchor="I-D.gallagher-openpgp-literal-metadata">
   <front>
      <title>OpenPGP Literal Data Metadata Integrity</title>
      <author fullname="Andrew Gallagher" initials="A." surname="Gallagher">
         <organization>PGPKeys.EU</organization>
      </author>
      <date day="1" month="January" year="2024"/>
      <abstract>
	 <t>   This document specifies a method for ensuring the integrity of file
   metadata when signed using OpenPGP.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-gallagher-openpgp-literal-metadata-00"/>
   
</reference>
<reference anchor="RFC1991">
  <front>
    <title>PGP Message Exchange Formats</title>
    <author fullname="D. Atkins" initials="D." surname="Atkins"/>
    <author fullname="W. Stallings" initials="W." surname="Stallings"/>
    <author fullname="P. Zimmermann" initials="P." surname="Zimmermann"/>
    <date month="August" year="1996"/>
    <abstract>
      <t>This document describes the format of "PGP files", i.e., messages that have been encrypted and/or signed with PGP. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="1991"/>
  <seriesInfo name="DOI" value="10.17487/RFC1991"/>
</reference>
<reference anchor="RFC4880">
  <front>
    <title>OpenPGP Message Format</title>
    <author fullname="J. Callas" initials="J." surname="Callas"/>
    <author fullname="L. Donnerhacke" initials="L." surname="Donnerhacke"/>
    <author fullname="H. Finney" initials="H." surname="Finney"/>
    <author fullname="D. Shaw" initials="D." surname="Shaw"/>
    <author fullname="R. Thayer" initials="R." surname="Thayer"/>
    <date month="November" year="2007"/>
    <abstract>
      <t>This document is maintained in order to publish all necessary information needed to develop interoperable applications based on the OpenPGP format. It is not a step-by-step cookbook for writing an application. It describes only the format and methods needed to read, check, generate, and write conforming packets crossing any network. It does not deal with storage and implementation questions. It does, however, discuss implementation issues necessary to avoid security flaws.</t>
      <t>OpenPGP software uses a combination of strong public-key and symmetric cryptography to provide security services for electronic communications and data storage. These services include confidentiality, key management, authentication, and digital signatures. This document specifies the message formats used in OpenPGP. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4880"/>
  <seriesInfo name="DOI" value="10.17487/RFC4880"/>
</reference>

<reference anchor="OPENPGPDEVBOOK" target="https://openpgp.dev/book/">
  <front>
    <title>OpenPGP for Application Developers</title>
    <author >
      <organization></organization>
    </author>
    <date year="2024" month="May" day="06"/>
  </front>
</reference>
<reference anchor="SQ-WOT" target="https://sequoia-pgp.gitlab.io/sequoia-wot/">
  <front>
    <title>OpenPGP Web of Trust</title>
    <author initials="N." surname="Walfield" fullname="Neil Walfield">
      <organization></organization>
    </author>
    <date year="2022" month="February" day="03"/>
  </front>
</reference>


    </references>

</references>


<?line 604?>

<section anchor="acknowledgments"><name>Acknowledgments</name>

<t>This document would not have been possible without the extensive work of the authors of <xref target="OPENPGPDEVBOOK"></xref>.</t>

<t>The author would also like to thank Daniel Huigens, Daniel Kahn Gillmor, Heiko Schäfer, Neal Walfield, Justus Winter and Paul Schaub for additional discussions and suggestions.</t>

</section>
<section anchor="document-history"><name>Document History</name>

<t>Note to RFC Editor: this section should be removed before publication.</t>

<section anchor="changes-between-draft-gallagher-openpgp-signatures-02-and-draft-gallagher-openpgp-signatures-03"><name>Changes Between draft-gallagher-openpgp-signatures-02 and draft-gallagher-openpgp-signatures-03</name>

<t><list style="symbols">
  <t>Renamed document.</t>
  <t>Split out certificate grammar and revocation sections into draft-gallagher-openpgp-certificates.</t>
  <t>Split out message grammar section into draft-gallagher-openpgp-messages.</t>
  <t>Moved sections deprecating revocable and signature target subpackets, with minor updates.</t>
  <t>Minor updates to Timestamp and Third-Party Confirmation signature guidance.</t>
  <t>Relaxed treatment of multiple Embedded Signature and Key Block subpackets.</t>
</list></t>

</section>
<section anchor="changes-between-draft-gallagher-openpgp-signatures-01-and-draft-gallagher-openpgp-signatures-02"><name>Changes Between draft-gallagher-openpgp-signatures-01 and draft-gallagher-openpgp-signatures-02</name>

<t><list style="symbols">
  <t>Merged in half of draft-dkg-openpgp-revocation and added DKG as co-author.</t>
  <t>Adapted key temporal validity rules for certification signatures.</t>
  <t>Specified use of Persona Certifications for non-trust statements.</t>
  <t>Added section for Primary Key Binding signatures.</t>
  <t>Added sections for conflicting subpackets and conflicting requirements.</t>
  <t>Specified line ending normalization of bare LF only.</t>
  <t>Deprecated revocation of Direct Key signatures.</t>
  <t>Deprecated Signature Target subpackets.</t>
  <t>Added section for issues with temporary identities.</t>
  <t>Refactored and constrained message grammar.</t>
  <t>Fixed some crufty terminology.</t>
</list></t>

</section>
<section anchor="changes-between-draft-gallagher-openpgp-signatures-00-and-draft-gallagher-openpgp-signatures-01"><name>Changes Between draft-gallagher-openpgp-signatures-00 and draft-gallagher-openpgp-signatures-01</name>

<t><list style="symbols">
  <t>Expanded temporal validity.</t>
  <t>Renamed "Document" and "Data Type" Signature Categories to "Literal Data" and "Attribute Value" respectively.</t>
  <t>Expanded experimental range to cover 0x60..0x6F (96..111).</t>
  <t>Add explicit category ranges to the Key Flags registry.</t>
  <t>Add explicit note about when to ignore Direct and Key Binding subpackets.</t>
  <t>Distinguish between signature subject and signature type-specific data.</t>
  <t>Deprecated the nesting octet.</t>
  <t>Minor errata.</t>
</list></t>

</section>
</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA8V923IbR5LoO76iFnoYYgKACJKSJXrWs5RI2jy2Ja5I2THh
cGw0GgWyV41uTF9Iw5b+5Tzsl+z+2Oatbn0BQXk8q4gZE91dVVlZmVl5rZpM
JoMqqVJ9rIZv1zq7/PpSXSU3WVTVhS6Hgziq9E1ebI5VWS0GizzOohV8uyii
ZTW5idI0urnVxSSHpuub9aS0TSf7h4N6vYDm5bF6+ezF/iBZF8eqKuqyOtjf
f7l/MIgKHR2rJKsG93nx4abI6/Wxkp4GH/QGni6O1UVW6SLT1eQUxxyU9XyV
lGWSZ9ebNUBycXZ9PrjTWa2PB0pJJ2YqQ3hU0WfDH2GIJLtRX+MX+HwVJSk8
l/H+LdHVcpoXN/gqKuJbeHVbVevy+OlT/BIfJXd6aj57ig+ezov8vtRPpY+n
2LbQ69xrewO4jebTOF89jbJFoe9vFnmFv9oYw9Yp4qvy2geNptJbknc2Lyv4
+j+iNM9gwhtdDtbJsfqpyuOxKvOiKvSyhL82K/zj50FUV7d5gUibwP+UWtZp
yot7QmOqr83q0muYc5Qlv0YVYP5YAW6/1ZtyevaeXmpGpgD7b/JfnDW9LnKk
L71IqrwYZHmxgl7uaL3enb9G2jgeJNnSf34xOSVUW8ICtKZRrFc6q4AyzCeL
DzfeF3d5zOB1vJ2to8N1bN60CTdNgMqidLLSVQREGwlws5cvZ/Ln0QuEU6m3
l2dvYPqnZz+8evv222OaYBUVNxqWzaya9Dpd6Lun8zz/8JS/avAZzFidrNdp
wmCrU32nU2haECkohcxzrA72D44m+88m+8/h4dW/T358e909aKn/XudJNMGB
HaGYp/d51Q3Fj3qu8qW6RsbkcR1l4L+J/Fcppo43OknVj1G6THS6COE8mOwf
IN8PJpOJiuZlVURxNRhc3yalAtFR4+qpcq3jBBqXqoT5As6ViAkkHxUDp8Fb
xkipqlxVtxrYOlqtooK+KIHYsiqJS4TaTMKxwZRHXyWLRaoHgycoP4p8UceE
4t+eJN7PT4NBuwN1G91pFakiiW8VktS8Bpg2Y3Wb3yPAABBMJ8HhK52pOlsA
GZlJLaaN2UZVpVfrimYSLYAtypI7mAMRD/6szn5Zw6RQMAF00ouZ/D0QqFY/
CY/8DJ0CdFleEatu1EKXcZHMNWFI/5KUFXVTwN/QT6UXaq5hLkleF4iqBXBQ
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

-->

</rfc>

