<?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.14 (Ruby 3.1.2) -->


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

]>


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

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

    <date year="2024" month="November" day="07"/>

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

    <abstract>


<?line 99?>

<t>This document specifies several updates and clarifications to the OpenPGP signature and message format specifications.</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 103?>

<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>
  <t>Constraining the formal message grammar.</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 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="certification-signature-types"><name>Certification Signature Types (0x10..0x13)</name>

<t><xref section="5.2.1" sectionFormat="of" target="RFC9580"/> defines four types of certification signature (0x10..0x13).
All may be created by either the key owner or a third party, and may be calculated over either a User ID packet or a User Attribute packet.
In addition, a Certification Revocation signature revokes signatures of all four types.</t>

<t>Historically, certifications were only made by third parties.
First-party self-certifications only became customary later, and were made mandatory when preference subpackets were introduced.</t>

<t>The semantic distinctions between the certification signature types were left ill-defined and most software treats them as equivalent.
The following convention has evolved over time <xref target="ASKCERTLEVEL"></xref>, and is hereby specified:</t>

<t><list style="symbols">
  <t>0x10 Generic Certification <bcp14>SHOULD</bcp14> only be used for third-party certifications.</t>
  <t>0x11 Persona Certification is deprecated and <bcp14>SHOULD NOT</bcp14> be created.</t>
  <t>0x12 Casual Certification is deprecated and <bcp14>SHOULD NOT</bcp14> be created.</t>
  <t>0x13 Positive Certification <bcp14>SHOULD</bcp14> only be used for self-certifications.</t>
</list></t>

<t>A receiving implementation <bcp14>MUST</bcp14> treat a third-party certification of any of the above types as equivalent to a type 0x10 signature, and a first-party certification of any of the above types as equivalent to a type 0x13 signature.</t>

</section>
<section anchor="primary-key-revocation-signature"><name>Primary Key Revocation Signature (Type 0x20)</name>

<t><xref section="5.2.1.11" sectionFormat="of" target="RFC9580"/> defines the Key Revocation Signature as:</t>

<ul empty="true"><li>
  <t>This signature is calculated directly on the key being revoked.
A revoked key is not to be used.
Only Revocation Signatures by the key being revoked, or by a (deprecated) Revocation Key, should be considered valid Revocation Signatures.</t>
</li></ul>

<t>The name and description are potentially confusing, as it can only revoke a Primary Key and not a Subkey -- other OpenPGP artifacts that are named "Key" without a qualifier (such as the "Key Flags" and "Key Expiration Time" subpackets) apply to both Primary Keys and Subkeys.</t>

<t>We therefore rename the 0x20 signature type to "<em>Primary</em> Key Revocation Signature" for clarity, and update its definition as follows:</t>

<ul empty="true"><li>
  <t>This signature is calculated directly on the primary key being revoked.
A revoked primary key is not to be used.
Only Revocation Signatures by the primary key being revoked, or by a (deprecated) Revocation Key, should be considered valid Primary Key Revocation Signatures.</t>
</li></ul>

</section>
<section anchor="subkey-revocation-signature"><name>Subkey Revocation Signature (Type 0x28)</name>

<t><xref section="5.2.1.11" sectionFormat="of" target="RFC9580"/> defines the Subkey Revocation Signature as:</t>

<ul empty="true"><li>
  <t>This signature is calculated directly on the primary key and the subkey being revoked.
A revoked subkey is not to be used.
Only Revocation Signatures by the top-level signature key that is bound to this subkey, or by a (deprecated) Revocation Key, should be considered valid Revocation Signatures.</t>
</li></ul>

<t>The phrasing "top-level signature key that is bound to this subkey" is confusing.
Instead, we update the definition for clarity:</t>

<ul empty="true"><li>
  <t>This signature is calculated directly on the primary key and the subkey being revoked.
A revoked subkey is not to be used.
Only Revocation Signatures by the primary key, or by a (deprecated) Revocation Key, should be considered valid Subkey Revocation Signatures.</t>
</li></ul>

</section>
<section anchor="certification-revocation-signature"><name>Certification Revocation Signature (Type 0x30)</name>

<t><xref section="5.2.1.13" sectionFormat="of" target="RFC9580"/> defines the Certification Revocation Signature as:</t>

<ul empty="true"><li>
  <t>This signature revokes an earlier User ID certification signature (Type IDs 0x10 through 0x13) or Direct Key signature (Type ID 0x1F).
It should be issued by the same key that issued the revoked signature or by a (deprecated) Revocation Key.
The signature is computed over the same data as the certification that it revokes, and it should have a later creation date than that certification.</t>
</li></ul>

<t><xref section="5.2.4" sectionFormat="of" target="RFC9580"/> is clear that Direct Key signatures and Certification Signatures have completely different constructions.
This implies that there are two different ways to construct a Type 0x30 signature, each of which appears in a different part of an OpenPGP certificate.</t>

<t>The above definition dates back to <xref target="RFC2440"></xref>, except for the "or Direct Key Signature" clause which was added to the first sentence in <xref target="RFC4880"></xref>.
But the third sentence still defines the construction unconditionally by reference to "the certification that it revokes", even though it does not necessarily revoke a certification.</t>

<t>The use of a Certification Revocation Signature to revoke a Direct Key Signature is imprecise and not widely supported, and is hereby deprecated.</t>

<t>(See also <xref target="key-flags"/>)</t>

</section>
<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>Note also that <xref target="RFC4880"></xref> introduced a Key Flag for timestamping.
This would appear to indicate 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>An OPS packet contains a "nesting" octet that controls whether an inner OPS signature is included in the data signed over by the outer OPS signature (see <xref target="message-grammar"/>).
By reference to <xref target="FINNEY1998"></xref>, we can reconcile the above variations in semantics.</t>

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

<ul empty="true"><li>
  <t>A type 0x40 Timestamp signature is made over an OpenPGP Message, and constructed the same way as a type 0x00 Binary Document Signature.
If the message is a text document, it <bcp14>SHOULD</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.</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>MAY</bcp14> be included in an Embedded Signature packet in the unhashed area of the signature it notarises; if it is so located, a Signature Target <bcp14>SHOULD NOT</bcp14> be included.
Otherwise, it <bcp14>SHOULD</bcp14> be distributed as a detached signature.</t>
</li></ul>

<section anchor="signature-target-subpacket"><name>Signature Target Subpacket</name>

<t>The Signature Target subpacket is not a unique identifier of a signature packet (<xref target="REVOC-13"></xref>) and so does not fulfil its design goals.</t>

<t>It is deprecated for use in revocation signatures by <xref target="I-D.dkg-openpgp-revocation"></xref> ((TBC: this is just an issue for now, not in the draft)), and we hereby deprecate it entirely.</t>

<t>((TODO: use the Approved Certifications subpacket instead! But rename it to "target signatures"...))</t>

</section>
<section anchor="tpc-signature-applications"><name>Use of Third Party Confirmation Signatures by Applications</name>

<t>We may wish to allow the application layer to make validity claims using countersignatures.
For example, a key server may wish to record that it has verified a User ID by automated means.
The key server may not wish to make a Certification signature, to prevent the cumulation of many such automated signatures (<xref target="cumulation-of-signatures"/>).
For the same reason, it may not wish to embed its countersignature in an unhashed area of a signature packet in the certificate.</t>

<t>It could make a Third-Party Confirmation signature over the most recent self-certification, and distribute it as a detached signature, perhaps in a mixed keyring (<xref section="8.1" sectionFormat="of" target="I-D.gallagher-openpgp-hkp"/>).</t>

<t>((TBC))</t>

</section>
</section>
</section>
<section anchor="message-grammar"><name>Message Grammar</name>

<t>The accepted convention is that a prefixed Signature packet signs over the next literal packet only, skipping any intervening signatures - however this is not explicitly specified in <xref target="RFC9580"></xref>.
Historically, PGP 2.X treated a prefixed Signature packet as applying to the entire following message, but this usage is deprecated (<xref target="FINNEY1998"></xref>).</t>

<t>In addition, One-Pass Signature (OPS) nesting semantics are complex, and under-specified (<xref target="SCHAUB2022"></xref>).
<xref section="5.4" sectionFormat="of" target="RFC9580"/> defines the nesting octet as:</t>

<ul empty="true"><li>
  <t>A 1-octet number holding a flag showing whether the signature is nested.
A zero value indicates that the next packet is another One-Pass Signature packet that describes another signature to be applied to the same message data.</t>
</li></ul>

<t>The terminology is imprecise, and non-zero "nesting" flags are completely unspecified.
One self-consistent interpretation is as follows:</t>

<t><list style="symbols">
  <t>A zero nesting octet means that the following OPS and its counterpart signature are stripped from the signature's subject.
  <list style="symbols">
      <t>This process is recursive if multiple sequential OPS packets have a nesting octet of zero.</t>
    </list></t>
  <t>To add multiple OPS signatures over the same message data, all OPS constructions except the innermost one have the nesting octet zeroed.
  <list style="symbols">
      <t>It is not clear what happens if the innermost nesting octet is zero but no OPS packet follows; such a sequence <bcp14>SHOULD NOT</bcp14> be generated.</t>
    </list></t>
  <t>The above implies that an OPS with a nonzero nesting octet signs over all packets between the OPS packet and its matching signature packet, including any further signatures.</t>
</list></t>

<t>This is further expanded in <xref target="OPENPGPDEVBOOK"></xref>.</t>

<t>This still leaves us with an overly complex grammar that resists rigorous formalisation.
We attempt to improve the formalism below.</t>

<section anchor="ops-subject-types"><name>OPS Subject Types</name>

<t>The subject of an OpenPGP signature is the section of the data stream that is passed to the signature's digest function, aside from any metadata or fixed data.
This data may undergo normalisation, depending on the signature context.</t>

<t><xref target="FINNEY1998"></xref> suggests that a three-state nesting flag is required for an unambiguous treatment of all possible OPS subjects.</t>

<t>We constrain OPS structures to a subset of configurations, and fully specify the handling of OPS signature subjects.
The OPS nesting octet is renamed to "OPS Subject Type" to better convey its semantics, and the following values are specified:</t>

<texttable title="OpenPGP One-Pass Signature Subject Types" anchor="subject-types">
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0</c>
      <c>Nested</c>
      <c>1</c>
      <c>Literal Body</c>
      <c>2</c>
      <c>Verbatim</c>
</texttable>

<t><list style="symbols">
  <t>A prefixed Signature packet signs over the next literal or compressed packet, ignoring any intervening signature or OPS packets.</t>
  <t>When one or more prefixed signature packets and one or more one-pass signatures sign over the same subject, the prefixed Signature packet(s) <bcp14>MUST</bcp14> precede the OPS packet(s); this is only permitted if the OPS uses the Literal Body Subject Type.</t>
</list></t>

<section anchor="nested-subject-type"><name>Nested Subject Type</name>

<t>The subject is identical to that of the following OPS packet.
If no well-formed OPS packet follows, the signature is malformed.</t>

<t>This subject type is used to create additional One-Pass Signatures over the same subject.
The ordering of nested One-Pass Signatures is not meaningful (see <xref target="security-considerations"/>).</t>

</section>
<section anchor="literal-body-subject-type"><name>Literal Body Subject Type</name>

<t>The subject is the body of the following Literal Data packet.
The Literal Data packet <bcp14>MAY</bcp14> be encoded in a Compressed Data packet.
If no Literal Data or Compressed Data packet follows, or if the Compressed Data packet does not decompress to a Literal packet, the signature is malformed.</t>

<t>This subject type is used to create Document Signatures.
A Literal Body One-Pass Signature over a Literal Data packet, a prefixed Signature over the same packet, and a detached signature over a file containing the body of the same packet are all calculated the same way.</t>

<t>The following normalisation steps are applied to the subject when calculating the signature digest:</t>

<t><list style="symbols">
  <t>Any Compressed Data packet is replaced by its uncompressed contents, which <bcp14>MUST</bcp14> be a Literal Data packet.</t>
  <t>The Literal Data packet is then replaced by its body.</t>
  <t>If the Signature Type is 0x01, the body is then converted to Canonical Text.</t>
</list></t>

</section>
<section anchor="verbatim-subject-type"><name>Verbatim Subject Type</name>

<t>The subject is the exact sequence of packets between the end of the current One-Pass Signature packet and the beginning of its corresponding Signature packet.
No normalisations are applied to the subject, not even conversion to Canonical Text.</t>

<t>Beware that the signature will thus be sensitive to the packet framing, i.e. the otherwise inconsequential choice of packet header format and partial body lengths.
If a packet sequence is parsed and re-serialised unmodified, but using a different framing, a Verbatim OPS will no longer validate.</t>

<t>This subject type <bcp14>MUST NOT</bcp14> be used to create Document signatures.</t>

</section>
</section>
<section anchor="formal-grammar"><name>Formal Grammar</name>

<t>The message grammar in <xref section="10.3" sectionFormat="of" target="RFC9580"/> is therefore updated to:</t>

<t><list style="symbols">
  <t>OpenPGP Message:<br />
  Encrypted Message | Unencrypted Message.</t>
  <t>Unencrypted Message:<br />
  Signed Message | Unsigned Message.</t>
  <t>Unsigned Message:<br />
  Compressed Message | Literal Message.</t>
  <t>Compressed Message:<br />
  Compressed Data Packet.</t>
  <t>Literal Message:<br />
  Literal Data Packet.</t>
  <t>ESK:<br />
  Public Key Encrypted Session Key Packet | Symmetric Key Encrypted Session Key Packet.</t>
  <t>ESK Sequence:<br />
  ESK | ESK Sequence, ESK.</t>
  <t>Encrypted Data:<br />
  Symmetrically Encrypted Data Packet | Symmetrically Encrypted and Integrity Protected Data Packet.</t>
  <t>Encrypted Message:<br />
  Encrypted Data | ESK Sequence, Encrypted Data.</t>
  <t>Nested One-Pass Signed Message:<br />
  Nested One-Pass Signature Packet, One-Pass Signed Message, Corresponding Signature Packet.</t>
  <t>Literal Body One-Pass Signed Message:<br />
  Literal Body One-Pass Signature Packet, Unsigned Message, Corresponding Signature Packet.</t>
  <t>Verbatim One-Pass Signed Message:<br />
  Verbatim One-Pass Signature Packet, Unencrypted Message, Corresponding Signature Packet.</t>
  <t>One-Pass Signed Message:<br />
  Nested One-Pass Signed Message | Literal Body One-Pass Signed Message | Verbatim One-Pass Signed Message.</t>
  <t>Signed Message:<br />
  Signature Packet, Unencrypted Message | One-Pass Signed Message.</t>
  <t>Optionally Padded Unencrypted Message:<br />
  Unencrypted Message | Unencrypted Message, Padding Packet.</t>
</list></t>

<t>In addition to these rules, a Marker packet (<xref section="5.8" sectionFormat="of" target="RFC9580"/>) can appear anywhere in the sequence.</t>

</section>
<section anchor="unwrapping-encrypted-and-compressed-messages"><name>Unwrapping Encrypted and Compressed Messages</name>

<t><xref target="RFC9580"></xref> permits an encrypted message to contain another encrypted message, and a compressed message to contain another compressed message, possibly recursively.
Such messages require potentially unbounded resources for negligible added utility, and therefore <bcp14>MUST NOT</bcp14> be created.</t>

<t>In addition, encrypt-then-sign messages are not idiomatic OpenPGP, and <bcp14>SHOULD NOT</bcp14> be generated.</t>

<t>The guidance in <xref section="10.3.1" sectionFormat="of" target="RFC9580"/> is therefore updated to:</t>

<t><list style="symbols">
  <t>Decrypting a version 2 Symmetrically Encrypted and Integrity Protected Data packet <bcp14>MUST</bcp14> yield a valid Optionally Padded Unencrypted Message.</t>
  <t>Decrypting a version 1 Symmetrically Encrypted and Integrity Protected Data packet or -- for historic data -- a Symmetrically Encrypted Data packet <bcp14>MUST</bcp14> yield a valid Unencrypted Message.</t>
  <t>Decompressing a Compressed Data packet <bcp14>MUST</bcp14> yield a valid Literal Message.</t>
</list></t>

<t>((TODO: is this too constraining on compressed data packet contents?))</t>

</section>
<section anchor="marker-packet"><name>Marker Packet</name>

<t><xref section="5.8" sectionFormat="of" target="RFC9580"/> defines the Marker Packet as follows:</t>

<ul empty="true"><li>
  <t>The body of the Marker packet consists of:</t>

  <t><list style="symbols">
    <t>The three octets 0x50, 0x47, 0x50 (which spell "PGP" in UTF-8).</t>
  </list></t>

  <t>Such a packet <bcp14>MUST</bcp14> be ignored when received.</t>
</li></ul>

<t>We update this to include:</t>

<t><list style="symbols">
  <t>If a receiving implementation encounters a Marker Packet with any other contents, the entire packet sequence <bcp14>SHOULD</bcp14> be ignored.</t>
  <t>A Marker Packet <bcp14>MAY</bcp14> be added by an application to notify non-OpenPGP software that a data stream contains OpenPGP data.
  If so, the Marker Packet <bcp14>SHOULD</bcp14> be the first packet in the sequence, and <bcp14>SHOULD NOT</bcp14> use a Legacy header, so that it can be easily detected.</t>
</list></t>

</section>
</section>
<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>We wish to prevent infinite recursion via embedded signatures, in order to avoid resource exhaustion.
This can be achieved as follows:</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 Key Block subpacket <bcp14>MUST</bcp14> only be used inside a signature type in the Document Signature Category.</t>
</list></t>

<t>((TODO: Key Block allows us to smuggle a key into the OpenPGP layer without requiring support by the application layer.
We could instead update the message grammar to allow TPKs to be appended to a Literal Message.
Going further, we could unify the packet sequence grammar so that there is only one kind of sequence, which would include both messages and keyrings.
See also "mixed keyrings" in <xref section="8.1" sectionFormat="of" target="I-D.gallagher-openpgp-hkp"/>.))</t>

</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>Document 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 (null document)</t>
    </list></t>
  <t>Unassigned (0x08..0x0F)</t>
  <t>Certification Category (0x10..0x17)
  <list style="symbols">
      <t>0x10 Generic cert</t>
      <t>0x11 Persona cert</t>
      <t>0x12 Casual cert</t>
      <t>0x13 Positive cert</t>
      <t>(0x16 Approved certs)</t>
    </list></t>
  <t>Key Binding Category (0x18..0x1F)
  <list style="symbols">
      <t>0x18 Subkey bind</t>
      <t>0x19 Primary key bind</t>
      <t>0x1F Direct key (self bind)</t>
    </list></t>
  <t>Primary Key Revocation Category (0x20..0x37)
  <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 Cert 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..0x67)</t>
  <t>Private and Experimental Range (0x68..0x6E)</t>
  <t>Unassigned (0x6F..0xFE)</t>
  <t>RESERVED (0xFF)</t>
</list></t>

<t>We have defined a Private and Experimental signature type range.
This is 0x68..0x6E (104..110) for consistency with the conventional 100..110 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..  Document Signature Category</t>
  <t>0x0008.. Timestamping Category</t>
  <t>((TBC)) Primary Key Revocation 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, 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 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.
This is not widely supported and is hereby deprecated.</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>It should be noted that cross-protocol usage can be exploited to evade the domain separation protections of Key Flags.
For example, there is no distinction between signature, 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.))</t>

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

<t>Signature subpacket types may also be categorised, 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 categorised here as general subpackets, however the notations within them may have arbitrary semantics at the application layer)</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).
The Replacement Key subpacket <bcp14>MAY</bcp14> also be used as a key revocation subpacket.
They <bcp14>SHOULD NOT</bcp14> be used elsewhere.
They <bcp14>MUST</bcp14> be placed in the hashed area.</t>

<t>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).</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.</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 (sub)key.
They <bcp14>SHOULD NOT</bcp14> be used elsewhere.
They <bcp14>MUST</bcp14> be placed in the hashed area.</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="document-subpackets"><name>Document subpackets.</name>

<t>These are only meaningful in signatures of the Document 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 document 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 Meta Hash).</t>

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

<t>These are only meaningful in signature types whose specification explicitly requires them.
They <bcp14>SHOULD NOT</bcp14> be used elsewhere.
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 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'>Self-Verifying</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</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</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>6</c>
      <c>Regular Expression</c>
      <c>Third</c>
      <c><bcp14>SHOULD</bcp14></c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>7</c>
      <c>Revocable</c>
      <c>Third</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>boolean, default false (deprecated in <xref target="I-D.dkg-openpgp-revocation"></xref>)</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</c>
      <c><bcp14>SHOULD</bcp14></c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>10</c>
      <c>(Additional Decryption Key/ARR)</c>
      <c>Direct</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>Yes</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</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>boolean, default false</c>
      <c>26</c>
      <c>Policy URI</c>
      <c>Third</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</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</c>
      <c>Data</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>0x50 3-p conf</c>
      <c>not a unique identifier (<xref target="REVOC-13"></xref>)</c>
      <c>32</c>
      <c>Embedded Signature</c>
      <c>Data</c>
      <c>&#160;</c>
      <c>Yes IFF it contains an 0x19 signature</c>
      <c>0x18 sbind</c>
      <c>&#160;</c>
      <c>33</c>
      <c>Issuer Fingerprint</c>
      <c>General</c>
      <c>&#160;</c>
      <c>Yes</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>34</c>
      <c>(Preferred AEAD Algorithms)</c>
      <c>Direct</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c><xref target="I-D.ietf-openpgp-rfc4880bis"></xref></c>
      <c>35</c>
      <c>Intended Recipient Fingerprint</c>
      <c>Document</c>
      <c><bcp14>SHOULD</bcp14></c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>36</c>
      <c>(Delegated Revoker)</c>
      <c>Data</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>(Approved Certifications)</c>
      <c>Data</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>(Key Block)</c>
      <c>Document</c>
      <c>&#160;</c>
      <c>Yes</c>
      <c>&#160;</c>
      <c><xref target="I-D.ietf-openpgp-rfc4880bis"></xref></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 Meta Hash)</c>
      <c>Document</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>not yet implemented <xref target="I-D.koch-librepgp"></xref></c>
      <c>41</c>
      <c>(Trust Alias)</c>
      <c>Third</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>not yet implemented <xref target="I-D.koch-librepgp"></xref></c>
      <c>TBD</c>
      <c>(Replacement Key)</c>
      <c>Direct</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 document 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="time-evolution-of-signatures"><name>Time Evolution of Signatures</name>

<section anchor="key-and-certification-validity-periods"><name>Key and Certification Validity Periods</name>

<t>Key Expiration Time subpackets are a rich source of footguns:</t>

<t><list style="numbers" type="1">
  <t>They specify an offset rather than an timestamp, but are not usable without first converting to a timetamp.</t>
  <t>The offset is calculated relative to the creation timestamp of a different packet (the (sub)key packet).</t>
  <t>Some implementations interpret them as being inheritable in their raw form, so that the same offset value gets applied to different creation timestamps.</t>
</list></t>

<t>Further, their semantics overlaps that of Signature Expiration Time:</t>

<t><list style="numbers" type="1">
  <t>If the binding signature over a key expires, but the key does not, the key is nevertheless unusable due to lack of signatures.</t>
  <t>If a key expires, but the signature over it does not, the signature is unusable.</t>
</list></t>

<t>This means there are effectively two expiration dates on a Key Binding signature, the key expiration and the signature expiration, but without distinct semantics.</t>

<t>In addition, the Signature Creation Time subpacket has an overloaded meaning in both Key Binding and Certification signatures:</t>

<t><list style="numbers" type="1">
  <t>It is used as the "valid from" timestamp of the object being signed over</t>
  <t>It is used to order multiple similar signatures to determine which is valid</t>
</list></t>

<t>If this is interpreted strictly, it means that it is not possible to create a new Key Binding signature that reliably leaves the starting date of the key's validity unchanged.
Some implementations have worked around this by generating signatures with creation dates backdated to one second after that of the previous signature.</t>

<t>The ability to create a new signature with an unchanged valid-from date allows historical signatures to be losslessly cleaned from a TPK, saving space.
It is also more compatible with the historical interpretation favoured by PGP and GnuPG.</t>

</section>
<section anchor="key-binding-temporal-validity"><name>Key Binding Temporal Validity</name>

<t>To clean up the ambiguity in Key Binding signatures, we specify the following:</t>

<t><list style="numbers" type="1">
  <t>Key Binding signatures (Subkey Binding signatures, Primary Key Binding signatures, Direct Key signatures, BUT NOT self-certifications over v4 Primary User IDs) <bcp14>SHOULD NOT</bcp14> contain Signature Expiration Time subpackets.</t>
  <t>The validity of a (sub)key extends from its creation time until its revocation or key expiration time.</t>
  <t>If the most recent Key Binding signature has no Key Expiration Time subpacket, then the key does not expire.</t>
  <t>A signature is valid if it was made by a (sub)key during its validity period.</t>
  <t>The creation time of the Key Binding signature is used only for ordering, not for calculation of signature validity.</t>
  <t>Key Expiration Time subpackets are only meaningful in Key Binding signatures; an implementation <bcp14>MUST</bcp14> ignore a Key Expiration Time subpacket in any other signature.</t>
</list></t>

<t>We also specify that Key Binding signatures cannot be directly revoked; the corresponding revocation signatures affect the key, not the binding.</t>

<t>(See also <xref target="RFC4880BIS-71"></xref>, <xref target="OPENPGPJS-1800"></xref>, and <xref target="REVOC-19"></xref>).</t>

</section>
<section anchor="certification-temporal-validity"><name>Certification Temporal Validity</name>

<t>It is not customary for Certification signatures, even self-certifications over v4 Primary User IDs, to contain Key Expiration Time subpackets.
Instead, the Signature Expiration Time subpacket is used.
In addition, User IDs and User Attributes do not contain a creation time field.
Together, this means that we cannot solve the temporal validity issue for Certifications as easily as we did for Key Bindings.</t>

<t>Instead, we specify the following:</t>

<t>((TODO: who knows at this point, all the options have problems))</t>

<t><list style="symbols">
  <t>Option 1: new signature subpacket type that contains a Valid From time
  <list style="symbols">
      <t>PRO: easy to implement</t>
      <t>CON: will need to exist in parallel with existing calculations</t>
    </list></t>
  <t>Option 2: new Packet type that contains a User ID and a Valid From time
  <list style="symbols">
      <t>PRO: also lets us use URIs instead of RFC822-ish</t>
      <t>CON: backwards compatibility</t>
    </list></t>
  <t>Option 3: new User Attribute subpacket type that contains a User ID and a Valid From time
  <list style="symbols">
      <t>PRO: as option 2</t>
      <t>CON: as option 2, also UAT packets contain arbitrary content, cannot certify only one subpacket</t>
    </list></t>
</list></t>

</section>
<section anchor="cumulation-of-signatures"><name>Cumulation of Signatures</name>

<t>A cryptographically valid Key Binding, certification or document signature automatically and permanently supersedes any earlier signature of the same Signature Category, by the same key pair, over the same subject.
If a later such signature expires before an earlier one, the earlier signature does not become valid again.</t>

<t>For the purposes of the above:</t>

<t><list style="symbols">
  <t>"same key pair" refers to the public key packet as identified by the Issuer KeyID or Issuer Fingerprint subpacket.</t>
  <t>"same subject" refers only to the data fed into the signature digest function after the end of the salt (if appropriate) and before the beginning of the trailer.</t>
</list></t>

<t>(See also <xref target="SCHAUB2021"></xref>)</t>

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

<t>The OPS Subject Type octet is not signed over and is malleable in principle.
An intermediary could swap a Nested OPS with its inner OPS by also swapping the type octets.
The order of OPS nesting therefore <bcp14>MUST NOT</bcp14> be considered meaningful.</t>

<t>In addition, the subject transformations applied during Literal Body signature calculation may result in semantic collisions.
It is possible to construct distinct sequences of packets that map to the same sequence of octets after Literal Body normalisation is applied.
It is not known whether such a pair of colliding packet sequences might also have different semantics.</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>
      <ttcol align='left'>ID</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Embeddable</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>0x68-0x6E</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>
      <ttcol align='left'>ID</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Embeddable</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>0x10</c>
      <c>Generic Certification Signature</c>
      <c>&#160;</c>
      <c><xref target="RFC9580"></xref>, <xref target="certification-signature-types"/></c>
      <c>0x11</c>
      <c>Persona Certification Signature (Deprecated)</c>
      <c>&#160;</c>
      <c><xref target="RFC9580"></xref>, <xref target="certification-signature-types"/></c>
      <c>0x12</c>
      <c>Casual Certification Signature (Deprecated)</c>
      <c>&#160;</c>
      <c><xref target="RFC9580"></xref>, <xref target="certification-signature-types"/></c>
      <c>0x13</c>
      <c>Positive Certification Signature</c>
      <c>&#160;</c>
      <c><xref target="RFC9580"></xref>, <xref target="certification-signature-types"/></c>
      <c>0x19</c>
      <c>Primary Key Binding Signature</c>
      <c>Yes</c>
      <c><xref target="RFC9580"></xref>, <xref target="recursive-embedding"/></c>
      <c>0x20</c>
      <c>Primary Key Revocation Signature</c>
      <c>&#160;</c>
      <c><xref target="RFC9580"></xref>, <xref target="primary-key-revocation-signature"/></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>

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

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

<texttable>
      <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 Primary Key Revocation Category</c>
      <c><xref target="signature-categories"/>, <xref target="I-D.dkg-openpgp-revocation"/></c>
      <c>((TBC))</c>
      <c>This key may be used to make signatures in the Countersignature Category</c>
      <c><xref target="signature-categories"/></c>
</texttable>

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

<texttable>
      <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.</c>
      <c><xref target="signature-categories"/></c>
      <c>0x02...</c>
      <c>This key may be used to make signatures in the Document Signature Category.</c>
      <c><xref target="signature-categories"/></c>
      <c>0x0008...</c>
      <c>This key may be used to make signatures in the Timestamping Category.</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>

</section>
</section>


  </middle>

  <back>


    <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-rfc4880bis">
   <front>
      <title>OpenPGP Message Format</title>
      <author fullname="Werner Koch" initials="W." surname="Koch">
         <organization>GnuPG e.V.</organization>
      </author>
      <author fullname="brian m. carlson" initials="B. M." surname="carlson">
         </author>
      <author fullname="Ronald Henry Tse" initials="R. H." surname="Tse">
         <organization>Ribose</organization>
      </author>
      <author fullname="Derek Atkins" initials="D." surname="Atkins">
         </author>
      <author fullname="Daniel Kahn Gillmor" initials="D. K." surname="Gillmor">
         </author>
      <date day="31" month="August" year="2020"/>
      <abstract>
	 <t>   { Work in progress to update the OpenPGP specification from RFC4880 }

   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.

   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>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-openpgp-rfc4880bis-10"/>
   
</reference>


<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="21" month="October" year="2024"/>
      <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-01"/>
   
</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>
      <date day="17" month="August" year="2023"/>
      <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-01"/>
   
</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-hkp">
   <front>
      <title>OpenPGP HTTP Keyserver Protocol</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="6" month="July" year="2024"/>
      <abstract>
	 <t>   This document specifies a series of conventions to implement an
   OpenPGP keyserver using the Hypertext Transfer Protocol (HTTP).  As
   this document is a codification and extension of a protocol that is
   already in wide use, strict attention is paid to backward
   compatibility with these existing implementations.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-gallagher-openpgp-hkp-05"/>
   
</reference>


<reference anchor="I-D.koch-librepgp">
   <front>
      <title>LibrePGP Message Format</title>
      <author fullname="Werner Koch" initials="W." surname="Koch">
         <organization>g10 Code GmbH</organization>
      </author>
      <author fullname="Ronald Henry Tse" initials="R. H." surname="Tse">
         <organization>Ribose</organization>
      </author>
      <date day="9" month="September" year="2024"/>
      <abstract>
	 <t>   This document specifies the message formats used in LibrePGP.
   LibrePGP is an extension of the OpenPGP format which provides
   encryption with public-key or symmetric cryptographic algorithms,
   digital signatures, compression and key management.

   This document is maintained in order to publish all necessary
   information needed to develop interoperable applications based on the
   LibrePGP 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.

   This document is based on: RFC 4880 (OpenPGP), RFC 5581 (Camellia in
   OpenPGP), and RFC 6637 (Elliptic Curves in OpenPGP).

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-koch-librepgp-02"/>
   
</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="RFC2440">
  <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="R. Thayer" initials="R." surname="Thayer"/>
    <date month="November" year="1998"/>
    <abstract>
      <t>This document is maintained in order to publish all necessary information needed to develop interoperable applications based on the OpenPGP format. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2440"/>
  <seriesInfo name="DOI" value="10.17487/RFC2440"/>
</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="ASKCERTLEVEL" target="https://dkg.fifthhorseman.net/blog/gpg-ask-cert-level-considered-harmful.html">
  <front>
    <title>'gpg --ask-cert-level' Considered Harmful</title>
    <author initials="D. K." surname="Gillmor" fullname="Daniel Kahn Gillmor">
      <organization></organization>
    </author>
    <date year="2013" month="May" day="20"/>
  </front>
</reference>
<reference anchor="FINNEY1998" target="https://mailarchive.ietf.org/arch/msg/openpgp/U4Qg3Z9bj-RDgpwW5nmRNetOZKY/">
  <front>
    <title>Re: More spec-ulations - update</title>
    <author initials="H." surname="Finney" fullname="Hal Finney">
      <organization></organization>
    </author>
    <date year="1998" month="March" day="26"/>
  </front>
</reference>
<reference anchor="OPENPGPJS-1800" target="https://github.com/openpgpjs/openpgpjs/issues/1800">
  <front>
    <title>'Signature creation time is in the future' error for apparently valid signature</title>
    <author initials="I." surname="Hell" fullname="Ivan Hell">
      <organization></organization>
    </author>
    <date year="2024" month="October" day="28"/>
  </front>
</reference>
<reference anchor="RFC4880BIS-71" target="https://gitlab.com/openpgp-wg/rfc4880bis/-/issues/71">
  <front>
    <title>Deprecate the use of 'Key Expiration Time' packets (type 9) in V5 sigs</title>
    <author initials="A." surname="Gallagher" fullname="Andrew Gallagher">
      <organization></organization>
    </author>
    <date year="2022" month="January" day="08"/>
  </front>
</reference>
<reference anchor="REVOC-19" target="https://gitlab.com/dkg/openpgp-revocation/-/issues/19">
  <front>
    <title>Add validity period guidance?</title>
    <author initials="A." surname="Gallagher" fullname="Andrew Gallagher">
      <organization></organization>
    </author>
    <date year="2024" month="October" day="30"/>
  </front>
</reference>
<reference anchor="REVOC-13" target="https://gitlab.com/dkg/openpgp-revocation/-/issues/13">
  <front>
    <title>Deprecate use of 'Signature Target' subpacket in revocation signatures</title>
    <author initials="A." surname="Gallagher" fullname="Andrew Gallagher">
      <organization></organization>
    </author>
    <date year="2024" month="April" day="07"/>
  </front>
</reference>
<reference anchor="SCHAUB2021" target="https://mailarchive.ietf.org/arch/msg/openpgp/C0P4MxwqJBbxS6H0YoXFF3oEJ3A/">
  <front>
    <title>[openpgp] Question on Signature Expiration</title>
    <author initials="P." surname="Schaub" fullname="Paul Schaub">
      <organization></organization>
    </author>
    <date year="2021" month="December" day="13"/>
  </front>
</reference>
<reference anchor="SCHAUB2022" target="https://mailarchive.ietf.org/arch/msg/openpgp/uepOF6XpSegMO4c59tt9e5H1i4g/">
  <front>
    <title>[openpgp] Proposing a Simplification of Message Syntax</title>
    <author initials="P." surname="Schaub" fullname="Paul Schaub">
      <organization></organization>
    </author>
    <date year="2022" month="October" day="07"/>
  </front>
</reference>


    </references>


<?line 823?>

<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 Kahn Gillmor, Justus Winter and Paul Schaub for additional discussions and suggestions.</t>

</section>


  </back>

<!-- ##markdown-source:
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

-->

</rfc>

