<?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.29 (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-02" 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>
    <author initials="D. K." surname="Gillmor" fullname="Daniel Kahn Gillmor">
      <organization>ACLU</organization>
      <address>
        <email>dkg@fifthhorseman.net</email>
      </address>
    </author>

    <date year="2025" month="November" day="03"/>

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

    <abstract>


<?line 97?>

<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 101?>

<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 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="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>

<section anchor="generic-casual-positive-certifications"><name>Generic, Casual and Positive Certifications (0x10, 0x12, 0x13)</name>

<t>The semantic distinctions between the certification signature types are ill-defined.
Since no definition of the phrase "some casual verification" (<xref section="5.2.1.6" sectionFormat="of" target="RFC9580"/>) was ever issued, there is no consensus on the semantics of a Casual Certification or how it differs in practice from the other certification types.</t>

<t>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>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="persona-certifications"><name>Persona Certifications (0x11)</name>

<t>0x11 Persona Certification signatures are an exceptional case, because by default many implementations do not consider them when calculating trust values.
This follows from <xref section="5.2.1.5" sectionFormat="of" target="RFC9580"/>:</t>

<ul empty="true"><li>
  <t>The issuer of this certification has not done any verification of the claim that the owner of this key is the User ID specified.</t>
</li></ul>

<t>A receiving implementation therefore <bcp14>MUST NOT</bcp14> attribute any trust statement to the presence of a Persona Certification.
In addition, since an unverified self-certification is both a meaningless and reckless statement ("I have not checked whether this is my own identity"), a generating implementation <bcp14>MUST NOT</bcp14> generate Persona self-certifications, and a receiving implementation <bcp14>MUST</bcp14> ignore them.</t>

<t>Although a Persona Certification has no intrinsic semantic value, the semantics of signatures may be altered by adding subpackets such as notations.
A generating implementation <bcp14>MAY</bcp14> use a third-party Persona Certification to make a verifiable statement about a User ID (for example, by adding a notation) without making any trust statement about the relationship between the User ID and the primary key.</t>

</section>
</section>
<section anchor="primary-key-binding-signature"><name>Primary Key Binding Signature (Type 0x19)</name>

<t><xref section="5.2.1.9" sectionFormat="of" target="RFC9580"/> defines the Primary Key Binding Signature as:</t>

<ul empty="true"><li>
  <t>This signature is a statement by a signing subkey, indicating that it is owned by the primary key.</t>
</li></ul>

<t><xref section="10.1.5" sectionFormat="of" target="RFC9580"/> gives additional details:</t>

<ul empty="true"><li>
  <t>For subkeys that can issue signatures, the Subkey Binding signature <bcp14>MUST</bcp14> contain an Embedded Signature subpacket with a Primary Key Binding signature (Type ID 0x19) issued by the subkey on the top-level key.</t>
</li></ul>

<t>The motivation for this requirement is not contained in any of the RFCs, and the terms "signing subkey" and "subkeys that can issue signatures" are imprecise.
We hereby address these omissions:</t>

<ul empty="true"><li>
  <t>An attacker could issue a Subkey Binding signature over a public subkey that belongs to a victim, and publish it as part of the attacker's own certificate.
A third party might then look up the subkey using the Issuer Key ID or Issuer Fingerprint subpacket from a signature made by the victim, and find the attacker's certificate instead.
The attacker could then use this to impersonate the victim to the third party.
The Primary Key Binding signature mitigates this attack, by requiring the subkey's owner to consent for it to be bound to a particular primary key.</t>

  <t>A Primary Key Binding signature is <bcp14>REQUIRED</bcp14> in any Subkey Binding signature that contains one or more Key Flags whose specification requires one.
A receiving implementation <bcp14>MUST</bcp14> reject any Subkey Binding signature that contains one or more of these Key Flags and does not contain a valid Subkey Binding signature.
A Primary Key Binding signature is <bcp14>OPTIONAL</bcp14> otherwise.</t>
</li></ul>

<t>Initially, the only Key Flags for which a Primary Key Binding signature is <bcp14>REQUIRED</bcp14> are 0x02 (Literal Data Signature Category), 0x0008 (Timestamping Category) and ((TBC)) (Countersignature Category) (<xref target="openpgp-key-flags-registry"/>).</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>

<t>There are several other places in <xref target="RFC9580"></xref> that use the term "top-level key" instead of "Primary Key", but this is not explicitly defined.
It <bcp14>MUST</bcp14> be interpreted as a synonym for "Primary Key" in all these contexts.</t>

</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.
Since Direct Key Signatures have no intrinsic semantics, the ability to revoke a Direct Key Signature is not necessary.
To retract a previous statement made by a Direct Key Signature, it is sufficient to create a new Direct Key Signature with a different set of subpackets.</t>

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

<section anchor="distribution-of-certification-revocations"><name>Distribution of Certification Revocations</name>

<t>Distribution of revocations has historically been unreliable.
In particular, a keystore that enforces self-sovereignty (<xref section="8" sectionFormat="of" target="I-D.dkg-openpgp-abuse-resistant-keystore"/>) cannot be relied upon to distribute third-party certification revocations.
In addition, it is not normally possible to distribute a self-certification revocation over a User ID without also distributing the contents of that User ID.
This is a significant impediment to reliable implementation of self-sovereign User ID redaction.</t>

<t>One possible solution is to allow the use of Embedded Signatures in User Attributes (<xref section="3.2.1" sectionFormat="of" target="I-D.gallagher-openpgp-user-attributes"/>).</t>

</section>
</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>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, and is constructed 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>MAY</bcp14> be included in an Embedded Signature packet in the unhashed area of the signature it notarizes.
Otherwise, it <bcp14>SHOULD</bcp14> be distributed as a detached signature.
A Signature Target subpacket <bcp14>SHOULD NOT</bcp14> be included.</t>
</li></ul>

<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 anchor="signature-target-subpacket"><name>Deprecation of the Signature Target Subpacket</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>The Signature Target subpacket is vaguely defined however:</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 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) (<xref target="revoking-signatures-and-keys"/>), 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.
An alternative mechanism is to allow the inclusion of Intended Recipient subpackets in signatures over key material (<xref section="3.2.1" sectionFormat="of" target="I-D.gallagher-openpgp-user-attributes"/>).</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 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 certificate bundle (<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 sequence of packets, but this usage is deprecated <xref target="FINNEY1998"></xref>.
See <xref target="nested-signatures"/> for an alternative construction.</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 not signed over by the current OPS.
  <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.</t>
    </list></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, however it is not clear whether any current implementation supports this.</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 formalization.
We attempt to improve the formalism below.</t>

<section anchor="ops-message-constraints"><name>OPS Message Constraints</name>

<t>We constrain OPS structures to a subset of previously-allowed configurations:</t>

<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>Prefixed signatures and OPS signatures <bcp14>MUST NOT</bcp14> both be used in the same message.</t>
  <t>When generating an OPS packet that is not followed by another OPS packet, the nesting octet <bcp14>SHOULD</bcp14> be set to 1.
  <list style="symbols">
      <t>Otherwise, the nesting octet <bcp14>SHOULD</bcp14> be set to 0.</t>
    </list></t>
  <t>When consuming an OPS packet, the nesting octet <bcp14>MUST</bcp14> be ignored.</t>
</list></t>

<t>This effectively deprecates the nesting octet, while maintaining backwards compatibility with legacy code.</t>

</section>
<section anchor="subject-normalization"><name>Subject Normalization</name>

<t>The <em>subject</em> of an OpenPGP signature refers to the packet(s) that are signed over.
The <em>type-specific data</em> of an OpenPGP signature refers to the section of the data stream that is passed to the signature's digest function after the optional salt and before the trailer.
The type-specific data differs from the subject in that it has been normalized, the details of which are dependent on the signature type.</t>

<t>The subject of a signature in the Literal Data category (<xref target="signature-categories"/>) is the Literal Data packet that immediately follows one or more prefixed signatures, or is enclosed by one or more OPS constructions.
If no Literal Data packet is present, the signature is malformed.</t>

<t>The following normalization steps are applied to the subject of the signature to produce the type-specific data:</t>

<t><list style="symbols">
  <t>The framing of the Literal Data packet is discarded, and any partial-length packets are concatenated.</t>
  <t>If the Signature Type is 0x01, the Literal Data packet body is converted to Canonical Text, by converting line endings to CRLF and removing any trailing whitespace (<xref target="line-ending-normalization"/>).</t>
</list></t>

<t>A 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.
This means that they can be losslessly transformed into each other with the exception of the Literal Data metadata fields, which an application <bcp14>MAY</bcp14> assume contain their recommended default values as per <xref section="5.9" sectionFormat="of" target="RFC9580"/>.</t>

<t>A signature of Type 0x01 <bcp14>MUST NOT</bcp14> be made over arbitrary binary data, only over UTF-8 text.</t>

<section anchor="line-ending-normalization"><name>Line Ending Normalization</name>

<t>When normalizing line endings, only bare linefeeds (an <spanx style="verb">LF</spanx> control character that is not preceded by a <spanx style="verb">CR</spanx>) are normalized to <spanx style="verb">CRLF</spanx>.
In particular, bare carriage returns <bcp14>MUST NOT</bcp14> be converted to <spanx style="verb">CRLF</spanx>.</t>

</section>
</section>
<section anchor="nested-signatures"><name>Nested Signatures</name>

<t>To sign over an entire signed message together with its signatures, the wire format of the inner message <bcp14>SHOULD</bcp14> first be encapsulated in a Literal Data packet.
A Canonical Text signature <bcp14>MUST NOT</bcp14> be made over such a nested message, and the Cleartext Signature Framework <bcp14>MUST NOT</bcp14> be used.</t>

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

</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>Literal Message:<br />
  Literal Data Packet.</t>
  <t>Encrypted Session Key:<br />
  Public Key Encrypted Session Key Packet | Symmetric Key Encrypted Session Key Packet.</t>
  <t>Encrypted Data:<br />
  Symmetrically Encrypted Data Packet | Symmetrically Encrypted and Integrity Protected Data Packet.</t>
  <t>Encrypted Message:<br />
  Encrypted Data | Encrypted Session Key, Encrypted Message.</t>
  <t>Prefixed Signed Message:
  Signature Packet, Prefixed Signed Message | Literal Message.</t>
  <t>Multiply One-Pass Signed Message:<br />
  One-Pass Signature Packet (with nesting octet 0), One-Pass Signed Message, Corresponding Signature Packet.</t>
  <t>Singly One-Pass Signed Message:<br />
  One-Pass Signature Packet (with nesting octet 1), Literal Message, Corresponding Signature Packet.</t>
  <t>One-Pass Signed Message:<br />
  Multiply One-Pass Signed Message | Singly One-Pass Signed Message.</t>
  <t>Signed Message:<br />
  Prefixed Signed Message | One-Pass Signed Message.</t>
  <t>Optionally Signed Message:<br />
  Signed Message | Literal Message.</t>
  <t>Compressed Message:<br />
  Compressed Data Packet.</t>
  <t>Unencrypted Message:<br />
  Compressed Message | Optionally Signed Message.</t>
  <t>Optionally Padded Unencrypted Message:<br />
  Unencrypted Message | Unencrypted Message, Padding Packet.</t>
  <t>OpenPGP Message:<br />
  Encrypted Message | Unencrypted Message.</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>MUST 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 Decrypted 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 Decrypted Message.</t>
  <t>Decompressing a Compressed Data packet <bcp14>MUST</bcp14> yield a valid Optionally Signed Message.</t>
</list></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 rejected.</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="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 Key Block subpacket <bcp14>MUST</bcp14> only be used inside a signature type in the Literal Data Signature Category.</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 <xref section="5.2.3.9" sectionFormat="of" target="RFC9580"/></t>
  <t>Notation Data <xref section="5.2.3.24" sectionFormat="of" target="RFC9580"/></t>
  <t>Intended Recipient Fingerprint <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-subpackets"><name>Multiple Revocation Key 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-keyserver-subpackets"><name>Multiple Preferred Keyserver Subpackets</name>

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

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

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

</section>
<section anchor="multiple-key-block-subpackets"><name>Multiple Key Block Subpackets</name>

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

</section>
<section anchor="multiple-issuer-fingerprint-subpackets"><name>Multiple Issuer Fingerprint 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>
</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 (null document)</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 bind</t>
      <t>0x19 Primary key bind</t>
      <t>0x1F Direct key (self bind)</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>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)) 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, 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 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.))</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>

</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="revoking-signatures-and-keys"><name>Revoking Signatures and Keys</name>

<t>(( TODO: merge parts of this section into <xref target="signature-types"/> ))</t>

<t>There are three kinds of signatures that perform revocation: Key Revocation (0x20), Subkey Revocation (0x28), and Certification Revocation (0x30).</t>

<t><list style="symbols">
  <t>A Key Revocation Signature (0x20) directly invalidates a Primary Key packet, and thereby (indirectly) revokes a full OpenPGP certificate (a.k.a. "Transferable Public Key").</t>
  <t>A Subkey Revocation Signature (0x28) directly revokes a Subkey packet, without affecting other key material attached to the same Primary Key.</t>
  <t>A Certification Revocation Signature (0x30) revokes:
  <list style="symbols">
      <t>all previous Certification Signatures (0x10..0x13) over the same primary key and User ID or User Attribute, or</t>
      <t>all previous Direct Key Signatures (0x1f) over the same primary key, that were made by the same key that made the revocation.</t>
    </list></t>
</list></t>

<t>All revocation types are permanent and cannot be un-revoked.
A key may be temporarily invalidated by specifying a Key expiry date on a new Direct Key, Subkey Binding, or (for v4 keys) Primary User ID self-certification.
A User ID or User Attribute may be temporarily invalidated by specifying a Signature expiry date on a self-certification.
This expiry date can then be overridden on a later signature of the same type.</t>

<section anchor="revoking-key"><name>Revoking a Primary Key</name>

<t>A Key Revocation signature invalidates the Primary Key packet that it is made over.
By implication, this revokes the entire certificate (Transferable Public Key) anchored by the Primary Key.</t>

<section anchor="key-retirement"><name>Key Retirement</name>

<t>A key owner may wish to retire a key, for example if it is using an older algorithm or it is no longer required.
This can be achieved by making a Key Revocation Signature with a soft revocation reason (see <xref target="soft-vs-hard"/>) and publishing it directly.</t>

</section>
<section anchor="key-compromise"><name>Key Compromise</name>

<t>If a key owner loses control of their private key material, for example if their storage device is stolen or their computer is infected with malware, they will normally wish to invalidate their key.
This can be achieved by making a Key Revocation Signature with a Reason for Revocation of "Key Compromise" (0x02) and publishing it directly.</t>

<t>If the key owner has also lost access to their private key material, for example if all copies of it were stolen, they cannot generate a new revocation and must follow the "Loss of Access" procedure in the next section.</t>

</section>
<section anchor="loss-of-access"><name>Loss of Access</name>

<t>If a key owner loses access to their private key material, for example if they forget an encryption passphrase or a storage medium is destroyed, they will generally wish to invalidate their key.
This can be achieved by publishing an escrowed Key Revocation Signature (see <xref target="escrowed-revocation"/>).</t>

<t>If the key owner does not have such a revocation stored safely, there is nothing further that they can do cryptographically.
In such circumstances, they will need to inform their correspondents by other means.
See <xref target="revoking-certification"/> below for possible alternative methods in a controlled environment.</t>

</section>
</section>
<section anchor="revoking-subkey"><name>Revoking a Subkey</name>

<t>A Subkey packet may be revoked because its private key material has been compromised.
It is possible for a Subkey to be compromised without the Primary Key being affected, for example if the private Subkey and Primary Key material are stored on separate devices.
In such a case, it is not necessary for a Subkey Revocation Signature to be generated ahead of time and escrowed, since the Primary Key is still usable and can generate a revocation as required.</t>

<t>FIXME: are other kinds of subkey revocation meaningful, see draft-revocations #1 ABG</t>

</section>
<section anchor="revoking-certification"><name>Revoking a Certification</name>

<t>User ID and User Attribute self-certifications and Direct Key self-signatures can be explicitly expired or replaced by the keyholder by issuing a superseding signature, so the only reason for a certification revocation is for third-party certifications.</t>

<t><xref section="6.2.1" sectionFormat="of" target="RFC1991"/> provided guidance for the interpretation of Certification Revocations as follows:</t>

<ul empty="true"><li>
  <t>&lt;30&gt; - public key packet and user ID packet, revocation ("I retract all my previous statements that this key is related to this user")  (*)</t>
</li></ul>

<t>While this language was not carried over into later specifications of the OpenPGP standard, neither was it explicitly contradicted.</t>

<t>When Alice revokes her third-party certification over Bob's Primary Key and User ID, she is saying one of the following:</t>

<t><list style="symbols">
  <t>Key is Compromised (0x02): "I believe that this key has been compromised"</t>
  <t>User ID No Longer Valid (0x32): "I no longer believe that this primary key should be associated with this identity"</t>
</list></t>

<t>Hard third-party certification revocations are useful in an environment where Alice is treated as an authority (say as a member of a corporate IT department) but does not have control over Bob's key material or access to an escrowed revocation of Bob's key.</t>

<t>FIXME: we need to specify what a receiving application should do when seeing an 0x02 certification revocation made by a trusted authority; ABG</t>

<t>Alice's Certification Revocation signature packet could get attached to Bob's certificate by several methods:</t>

<t><list style="symbols">
  <t>By submitting it to a keystore that performs an unauthenticated merge; this is however vulnerable to abuse</t>
  <t>By submitting it to a keystore whose administrators can override Bob's published certificate, for example a corporate directory</t>
  <t>By attaching it to her own key as an Embedded Signature subpacket, as specified in <xref section="3.2.1.1" sectionFormat="of" target="I-D.gallagher-openpgp-user-attributes"/></t>
</list></t>

<t>Alice could issue a superseding certification of her own over Bob's User ID or User Attribute instead of using a soft revocation type, however she may wish to be explicit about the finality of her decision.</t>

<t>FIXME: Given an initial certification at time <spanx style="verb">T</spanx>, if the superseding certification has a timestamp of <spanx style="verb">T</spanx>+1, then will a verifier that cares about the certification still accept signatures from the key based on the User ID that were made exactly at time <spanx style="verb">T</spanx>?
Alternately, if the superseding certification has a timestamp of time <spanx style="verb">T</spanx> exactly, will verifiers prefer its expiration date or the initial certification's expiration date (or lack thereof)?</t>

</section>
<section anchor="challenges-with-openpgp-revocation"><name>Challenges with OpenPGP Revocation</name>

<t>This section describes a number of outstanding challenges with implementing OpenPGP revocation in the state of the field before this document.
Some of these problems are fixed by this document.</t>

<section anchor="obtaining-revocation-information"><name>Obtaining Revocation Information</name>

<t>How does the user know that they have the correct revocation status?
Where do they look for revocations from?
With what frequency?</t>

<t>When the keyholder changes to a new certificate, how do they distribute revocations over older certificates?</t>

<section anchor="revocation-stripping"><name>Revocation Stripping</name>

<t>Given the chance to tamper with an OpenPGP certificate, the simplest thing that an adversary can do is to strip signature packets.
Stripping a revocation signature packet is trivial, and the resulting certificate looks valid.</t>

<t>An OpenPGP implementation needs a reliable channel to fetch revocation signatures from, and a reliable and well-indexed storage mechanism to retain them safely to avoid using revoked certificates.</t>

</section>
</section>
<section anchor="revocations-using-weak-cryptography"><name>Revocations Using Weak Cryptography</name>

<t>What if we find a Key Revocation signature made using SHA1 or MD5?</t>

<t>Should we consider the indicated key revoked?</t>

</section>
<section anchor="revoking-primary-key-binding-signatures"><name>Revoking Primary Key Binding Signatures</name>

<t>Primary keys sign Subkey Binding Signatures.
Signing-capable subkeys sign Primary Key Binding Signatures.</t>

<t>A Primary Key Binding Signature is only valid in an Embedded Signature subpacket of another signature.
If the enclosing signature is revoked, the embedded signature is no longer meaningful.
It is therefore not necessary to define a method to explicitly revoke a Primary Key Binding Signature.</t>

</section>
<section anchor="implications-for-revoked-key-material"><name>Implications for Revoked Key Material</name>

<t>If a primary key is revoked with Reason for Revocation 2 (key has been compromised), then an implementation <bcp14>MAY</bcp14> infer that any other certificate containing the same key material has also been compromised.
Note that testing key material for equality is nontrivial due to flexibility in representation, and is therefore outside the scope of this document.</t>

<t>If a primary key is revoked for any reason other than key compromise, an implementation <bcp14>MUST NOT</bcp14> infer anything about any other certificate containing the same key material.</t>

<t>If a subkey is revoked for any reason, an implementation <bcp14>MUST NOT</bcp14> infer anything about any other certificate containing the same key material.
This is because a key owner can create a valid subkey revocation signature over a subkey containing arbitrary key material:</t>

<t><list style="symbols">
  <t>embedded Primary Key Binding Signatures are not required in Subkey Revocation Signatures</t>
  <t>an earlier valid Subkey Binding Signature is not required to validate a later Subkey Revocation Signature</t>
</list></t>

<t>Encryption subkeys cannot create embedded Primary Key Binding Signatures, but a malicious subkey binding over an arbitrary encryption subkey has no security implications, since the only person adversely affected would be the attacker themselves, whose correspondents would encrypt to the wrong key.
By contrast, if a malicious revocation over such a subkey was interpreted as a valid revocation over the original key material, the key's actual owner might no longer be able to receive encrypted messages at all.</t>

<t>Therefore, the meaning of a Subkey Revocation Signature <bcp14>MUST</bcp14> be limited to the context of the primary key that made the revocation signature.</t>

</section>
<section anchor="no-revocation-expiration"><name>No Revocation Expiration</name>

<t>Key material can be marked with an expiration date (e.g. in a self-signature).
Signatures themselves can also be marked with an expiration date.</t>

<t>While Revocation Signatures are signatures, the act of revocation is permanent, so expiration is not applicable to revocations.</t>

<t>An implementation generating a Revocation Signature <bcp14>MUST NOT</bcp14> include an Signature Expiration Time subpacket or a Key Expiration Time subpacket in either the hashed subpackets area or the unhashed subpackets area of the signature packet.
An implementation encountering a Revocation Signature packet that contains either expiration subpacket <bcp14>MUST</bcp14> ignore the subpacket.</t>

</section>
<section anchor="reasons-for-revocation-mismatch"><name>Reasons for Revocation Mismatch</name>

<t>How should an implementation interpret a Key Revocation signature or Subkey Revocation signature with Reason for Revocation subpacket with ID 32 ("User ID information is no longer valid")?</t>

<t>How should an implementation interpret a Certification Revocation with a Reason for Revocation with, say, ID 1 ("Key is superseded")?</t>

<t>Do we just say these Revocation signatures are invalid?
Do we ignore the Reasons for Revocation subpacket?</t>

</section>
</section>
<section anchor="revocation-signature-subpacket-limitations"><name>Revocation Signature Subpacket limitations</name>

<t>When generating a revocation signature, an implementation:</t>

<t><list style="symbols">
  <t><bcp14>SHOULD</bcp14> include a Signature Creation Time subpacket</t>
  <t><bcp14>SHOULD NOT</bcp14> set the critical bit for any subpacket</t>
  <t><bcp14>MUST NOT</bcp14> set the critical bit for any subpacket other than Signature Creation Time</t>
  <t><bcp14>MUST NOT</bcp14> place Signature Creation Time or Reason for Revocation packets in the unhashed area</t>
</list></t>

<t>When consuming a revocation signature, an implementation:</t>

<t><list style="symbols">
  <t><bcp14>MUST</bcp14> ignore the critical bit for every subpacket</t>
  <t><bcp14>MUST</bcp14> ignore any Signature Creation Time or Reason for Revocation subpacket in the unhashed area</t>
</list></t>

<t>An implementation <bcp14>MUST</bcp14> support the Signature Creation Time subpacket.
If a revocation signature does not contain a valid Signature Creation Time subpacket, a receiving implementation <bcp14>MAY</bcp14> treat it as if it was created in the infinite past.</t>

</section>
<section anchor="what-about-revocations-from-the-future"><name>What About Revocations From the Future?</name>

<t>If a Revocation signature appears to have been made in the future, its interpretation will depend on whether it is hard or soft:</t>

<t><list style="symbols">
  <t>If a hard revocation is from the future, then its creation date is irrelevant, since hard revocations are retrospective.
Hard revocations <bcp14>MUST</bcp14> be treated as if their creation date was in the infinite past, regardless of the value of the creation date subpacket.</t>
  <t>If a soft revocation is from the future, then the revocation <bcp14>SHOULD NOT</bcp14> take effect until that date.</t>
</list></t>

</section>
<section anchor="dealing-with-revoked-certificates"><name>Dealing With Revoked Certificates</name>

<t>Implementations <bcp14>MUST NOT</bcp14> encrypt to a revoked certificate.
Implementations <bcp14>MUST NOT</bcp14> accept a signature made by a revoked certificate as valid unless the revocation is "soft" (see <xref target="soft-vs-hard"/>) and the timestamp of the signature predates the timestamp of the revocation.
Implementations <bcp14>MUST NOT</bcp14> use secret key material corresponding to a revoked certificate for signing, unless the secret key material also corresponds to a non-revoked certificate.</t>

<t>Implementations <bcp14>MAY</bcp14> use the secret key material corresponding to a revoked certificate.</t>

</section>
<section anchor="soft-vs-hard"><name>Hard vs. Soft Revocations</name>

<t>Reasons for Revocation subpacket allows different values.</t>

<t>Some of them suggest that a verifier can still accept signatures from before the timestamp of the Revocation.
These are "soft" revocations.</t>

<t>All the rest require that a verifier <bcp14>MUST</bcp14> treat the certificate as "hard" revoked, meaning that even signatures that have creation timestamps before the creation timestamp of the revocation signature should themselves be rejected.</t>

<section anchor="when-is-soft-revocation-useful"><name>When is Soft Revocation Useful?</name>

<t>Expiration makes just as much sense as a soft revocation in many circumstances, and is typically better supported.
Soft revocation can however be useful if the signer wishes to explicitly indicate that their decision is final.
Since revocations are permanent, a correspondent who sees a soft revocation does not need to poll for further updates to see whether an expiration date has been extended.
The only reason to poll for an update to a soft-revoked key would be to check whether the soft revocation had been upgraded to a hard revocation.</t>

<t>Since a public encryption subkey is not useful to third parties for historical purposes, only for creating new encrypted data, there is no practical distinction between soft and hard revocation reasons, and all soft encryption subkey revocations <bcp14>SHOULD</bcp14> be treated as hard revocations with reason "none" (0x00).
Note however that for some public key algorithms (such as ECDH) the owner may need to keep the public subkey in order to decrypt historical data, if the secret key material only exists on an OpenPGP card.</t>

</section>
</section>
<section anchor="revocation-certificates"><name>Revocation Certificates</name>

<t>A revocation certificate indicates that a given primary key is revoked.</t>

<t>This can take two common forms.
Each form is a sequence of OpenPGP packets:</t>

<t><list style="symbols">
  <t>A standalone Key Revocation signature packet by key X over X (this form is valid only for primary keys earlier than version 6)</t>
  <t>Primary Key X + Key Revocation signature by X over X</t>
</list></t>

<t>Additionally, there is a deprecated form:</t>

<t><list style="symbols">
  <t>Primary Key X + Direct Key Signature with Revocation Key subpacket pointing to Y + Key Revocation signature by Y over X (this form is valid only for primary keys earlier than version 6)</t>
</list></t>

<section anchor="handling-a-revocation-certificate"><name>Handling a Revocation Certificate</name>

<t>When an implementation observes any of the above forms of revocation certificate for a certificate with primary key X, it should record it and indicate that X has been revoked and is no longer to be used, along with all of its User IDs and Subkeys.</t>

</section>
<section anchor="publishing-a-revocation-certificate"><name>Publishing a Revocation Certificate</name>

<t>FIXME: talk about interactions with HKP, VKS, WKD, OPENPGPKEY (DANE), or other key discovery methods?</t>

</section>
</section>
<section anchor="escrowed-revocation"><name>Escrowed Revocation Certificate</name>

<t>An escrowed revocation certificate is just a valid revocation certificate that is not published.
The parties who can retrieve or reassemble the escrowed revocation certificate can publish it to inform the rest of the world that the certificate has been revoked.
It is described in <xref section="13.9" sectionFormat="of" target="RFC9580"/>.</t>

<t>Since the reason for publishing an escrowed revocation cannot be known in advance, escrowed revocations <bcp14>SHOULD NOT</bcp14> include a Reason for Revocation subpacket.
If such a subpacket is included, it <bcp14>SHOULD</bcp14> explicitly state a reason of "none" (0x00).</t>

<t>Since the reason for publishing an escrowed revocation cannot be known in advance, escrowed revocations <bcp14>SHOULD NOT</bcp14> include a Reason for Revocation subpacket.
If such a subpacket is included, it <bcp14>SHOULD</bcp14> explicitly state a reason of "none" (0x00).</t>

<t>In what circumstances does escrowed revocation work?
When is it inappropriate?</t>

<section anchor="escrowed-hard-revocation-workflow"><name>Escrowed Hard Revocation Workflow</name>

<t>An escrowed hard revocation certificate covers the use case where where the keyholder has lost control of the secret key material, and someone besides the keyholder may have gotten access to the secret key material.</t>

<t>At key creation time, keyholder creates a hard revocation certificate.
Optionally, they encrypt it to a set of trusted participants.
The keyholder stores the revocation certificate somewhere they or one of the trusted participants will be able to access it.</t>

<t>If the keyholder sends it to any trusted participant immediately, that participant can trigger a revocation any time they like.
In this case, the keyholder and the trusted participants should clarify between themselves what an appropriate signal should be for when the trusted participant should act</t>

<t>If physical access is retained by the keyholder, then the keyholder has to be capable of consenting for the revocation to be published.</t>

</section>
<section anchor="escrowed-soft-revocation-workflow"><name>Escrowed Soft Revocation Workflow</name>

<t>Do regular updates of the escrowed revocation  (e.g. after each signing).
Store them somewhere safe?</t>

</section>
<section anchor="k-of-n-escrowed-revocation"><name>K-of-N Escrowed Revocation</name>

<t>FIXME: how to split an escrowed revocation certificate among N parties so that any K of them can reconstruct it.
(( ABG: I think this is out of scope ))</t>

</section>
</section>
<section anchor="revocable-subpacket"><name>Deprecation of the "Revocable" Signature Subpacket</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, this is only applicable to self-signatures and third party certifications.</t>
  <t>If a key is compromised, then the timestamp on any revocation can be trivially backdated.
So this must only apply to revocations 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 have a creation time significantly in the past compared to when it is typically 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>
<section anchor="time-evolution-of-signatures"><name>Time Evolution of Signatures</name>

<t>Validation of a Signature packet is performed in several stages:</t>

<t><list style="numbers" type="1">
  <t>Formal Validation (the signature packet is well-formed and parseable)</t>
  <t>Cryptographic Validation (the signature data was calculated correctly)</t>
  <t>Structural Validation (the signature packet is placed in the correct context)</t>
  <t>Temporal Validation (the signature has not expired or been revoked)</t>
  <t>Issuer Validation (the signature was made by a valid key)</t>
</list></t>

<t>Included in the Issuer Validation stage is validation (including Temporal Validation) of the binding signatures in the issuer's certificate.
If the Web of Trust is in use, this process is potentially recursive.</t>

<section anchor="conflicting-requirements"><name>Conflicting Requirements in Current Specifications</name>

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

<ul empty="true"><li>
  <t>An implementation that encounters multiple self-signatures on the same object <bcp14>MUST</bcp14> select the most recent valid self-signature and ignore all other self-signatures.</t>
</li></ul>

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

<ul empty="true"><li>
  <t>If a key has been revoked because of a compromise, all signatures created by that key are suspect.</t>
</li></ul>

<t>These requirements are in explicit conflict and must be resolved by further specification.</t>

<t>In addition, the use of the unqualified term "valid" is ambiguous.
If read inclusively to mean that expired or revoked signatures are not "valid" for the purposes of this statement, it results in complex key validity calculations with questionable added utility and obscure failure modes.</t>

<t>We therefore update the first statement above to read:</t>

<ul empty="true"><li>
  <t>An implementation that encounters multiple self-signatures on the same object <bcp14>MUST</bcp14> select the most recent <em>cryptographically valid</em> self-signature and ignore all other self-signatures, <em>unless there is a revocation signature over the same object</em>.</t>
</li></ul>

</section>
<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 timestamp.</t>
  <t>The offset is calculated relative to the creation timestamp of a different packet (the component 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>
  <t>It is unclear how to interpret Key Expiration Time subpackets in a v4 self-signature over a non-Primary User ID.</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>

<t>Finally, both Expiration Time subpackets use zero to mean "the infinite future", which requires explicit handling of the special case.</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 other than self-certifications over v4 Primary User IDs (Subkey Binding signatures, Primary Key Binding signatures, and Direct Key signatures) <bcp14>SHOULD NOT</bcp14> contain Signature Expiration Time subpackets, and any such subpackets <bcp14>MUST</bcp14> be ignored.</t>
  <t>The validity of a component 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>Key Binding signatures cannot be directly revoked; the corresponding revocation signatures affect the key, not the binding.</t>
  <t>A Key Binding signature is temporally valid if its creation time is later than the creation time of the primary key that made it.</t>
  <t>A Key Binding signature is temporally valid even if the primary has been hard-revoked (so that we can still associate the primary key with its subkeys).</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 (including self-certifications over v4 Primary User IDs); an implementation <bcp14>MUST</bcp14> ignore a Key Expiration Time subpacket in any other signature.</t>
</list></t>

<t>A signature other than a Key Binding signature is temporally valid if it was made by a component key during its validity period.</t>

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

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

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

<t><list style="numbers" type="1">
  <t>Certification signatures other than self-certifications over v4 Primary User IDs <bcp14>SHOULD NOT</bcp14> contain Key Expiration Time subpackets, and any such subpackets <bcp14>MUST</bcp14> be ignored.</t>
  <t>The validity of a User ID or User Attribute extends from the Primary Key's creation time until the User ID or User Attribute's revocation or signature expiration time.</t>
  <t>If the most recent Certification signature has no Signature Expiration Time subpacket, then the ID or attribute does not expire.</t>
  <t>A Certification signature is NOT valid if the primary has been hard-revoked.</t>
  <t>The creation time of the Certification signature is used only for ordering, not for calculation of signature validity.</t>
</list></t>

<section anchor="conflicting-expiration-times-in-v4-self-certifications"><name>Conflicting Expiration Times in v4 Self-Certifications</name>

<t>The above rules permit a v4 self-certification over a Primary User ID to contain both Key Expiration Time and Signature Expiration Time subpackets, both of which are semantically meaningful.
If the calculated expiry times differ, it is <bcp14>RECOMMENDED</bcp14> that a receiving implementation interprets them as follows:</t>

<t><list style="numbers" type="1">
  <t>The Key Expiration Time applies to the Primary Key, while the Signature Expiration Time applies only to the identity link between the Primary User ID and the Primary Key.</t>
  <t>If the Key Expiration Time is earlier then the Signature Expiration Time is not meaningful, since the whole certificate becomes unusable after the Primary Key expires.</t>
  <t>If the Key Expiration Time is later or absent then the Primary Key remains usable in the interim, but is no longer linked to the identity in the Primary User ID.</t>
</list></t>

<t>The above rules ensure that a Key Expiration Time subpacket in a v4 self-certification over a Primary User ID has the same effect as if it had been contained in a Direct Key signature.</t>

</section>
<section anchor="issues-with-temporary-identities"><name>Issues with Temporary Identities</name>

<t>When making a third-party certification signature over a User ID, the third party may not wish to validate the User ID retrospectively.
This may arise when a keyholder adds a User ID to their existing certificate on a temporary basis, for example if they assume a role-based identity such as "chairperson@example.com".
It would be possible for such a keyholder to backdate a signature to a time when someone else held the identity, and thereby attempt to impersonate them.
It is therefore desirable to allow a third-party certifier to indicate a custom initial validity date for the User ID they certify.</t>

<t>There are possible approaches that do not require new wire formats:</t>

<t><list style="symbols">
  <t>A minimal approach would specify that third-party certification signatures only validate the User ID from the signature creation time.</t>
  <t>Type 10 certification signatures only validate the User ID from the signature creation time.
This would allow both third parties and keyholders to choose whether to make retrospective or time-limited certifications.</t>
</list></t>

<t>There are common issues with the above proposals:</t>

<t><list style="symbols">
  <t>Current client behaviour is not consistent, so we cannot reliably enforce non-retrospective certifications if legacy clients are in use.</t>
  <t>If the signature creation time acts as the start of validity, we cannot losslessly clean up those certifications.</t>
</list></t>

<t>It would appear that the only way to reliably enforce a novel temporal validity interpretation would require new wire formats.
For example, we could define a new "Subject Valid From" subpacket that contains a timestamp field, by analogy with the Signature Creation Time subpacket.
If the critical bit were always set on this subpacket, a legacy client <bcp14>MUST</bcp14> automatically invalidate the certification.
This would also allow lossless clean up of all certifications.</t>

<t>((TODO: is this a reasonable trade-off?
See #9))</t>

<t>An alternative solution would be to define an identity format with intrinsic creation dates, for example as a novel User Attribute subpacket.</t>

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

<t>A cryptographically valid Key Binding, Certification or Literal Data 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 packets being signed over, and not to the metadata contained in the Signature packets (including subpackets) or any corresponding OPS packet.</t>
</list></t>

<t>Note however that this does not apply to revocation signatures, which have their own cumulation rules (<xref target="revoking-signatures-and-keys"/>).</t>

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

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

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

<t>In addition, the normalization applied during Literal Data 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 Data normalization 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 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>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</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="primary-key-binding-signature"/>, <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"/>, <xref target="revoking-key"/></c>
      <c>0x28</c>
      <c>Subkey Revocation Signature</c>
      <c>&#160;</c>
      <c><xref target="RFC9580"></xref>, <xref target="revoking-subkey"/></c>
      <c>0x30</c>
      <c>Certification Revocation Signature</c>
      <c>&#160;</c>
      <c><xref target="RFC9580"></xref>, <xref target="revoking-certification"/></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 add a column to the OpenPGP Key Flags registry, called "Primary Key Signature Required".
This column should be empty by default.</t>

<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'>Primary Key Signature Required</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>Yes</c>
      <c><xref target="signature-categories"/>, <xref target="primary-key-binding-signature"/></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'>Primary Key Signature Required</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>&#160;</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>Yes</c>
      <c><xref target="signature-categories"/>, <xref target="primary-key-binding-signature"/></c>
      <c>0x0008...</c>
      <c>This key may be used to make signatures in the Timestamping Category (0x40..0x47)</c>
      <c>Yes</c>
      <c><xref target="signature-categories"/>, <xref target="primary-key-binding-signature"/></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>

<t>The "Reason for Revocation Code" entry in the "OpenPGP Signature Subpacket Types" registry should have its References column updated to point to this document.</t>

</section>
<section anchor="openpgp-reason-for-revocation-code-registry"><name>OpenPGP Reason for Revocation Code Registry</name>

<t>The "OpenPGP Reason for Revocation Code" registry should add a column to indicate "Hard/Soft".
Only "Key is Superseded" and "Key is retired and no longer used" are marked "Soft".
All other values should be treated as "Hard".</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="I-D.gallagher-openpgp-user-attributes">
   <front>
      <title>User Attributes in OpenPGP</title>
      <author fullname="Andrew Gallagher" initials="A." surname="Gallagher">
         <organization>PGPKeys.EU</organization>
      </author>
      <date day="11" month="February" year="2025"/>
      <abstract>
	 <t>   This document updates the specification of User Attribute Packets and
   Subpackets in OpenPGP.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-gallagher-openpgp-user-attributes-00"/>
   
</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="13" month="October" year="2025"/>
      <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-06"/>
   
</reference>

<reference anchor="I-D.dkg-openpgp-abuse-resistant-keystore">
   <front>
      <title>Abuse-Resistant OpenPGP Keystores</title>
      <author fullname="Daniel Kahn Gillmor" initials="D. K." surname="Gillmor">
         <organization>American Civil Liberties Union</organization>
      </author>
      <date day="18" month="August" year="2023"/>
      <abstract>
	 <t>   OpenPGP transferable public keys are composite certificates, made up
   of primary keys, revocation signatures, direct key signatures, user
   IDs, identity certifications (&quot;signature packets&quot;), subkeys, and so
   on.  They are often assembled by merging multiple certificates that
   all share the same primary key, and are distributed in public
   keystores.

   Unfortunately, since many keystores permit any third-party to add a
   certification with any content to any OpenPGP certificate, the
   assembled/merged form of a certificate can become unwieldy or
   undistributable.  Furthermore, keystores that are searched by user ID
   or fingerprint can be made unusable for specific searches by public
   submission of bogus certificates.  And finally, keystores open to
   public submission can also face simple resource exhaustion from
   flooding with bogus submissions, or legal or other risks from uploads
   of toxic data.

   This draft documents techniques that an archive of OpenPGP
   certificates can use to mitigate the impact of these various attacks,
   and the implications of these concerns and mitigations for the rest
   of the OpenPGP ecosystem.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-dkg-openpgp-abuse-resistant-keystore-06"/>
   
</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-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>
      <author fullname="Daniel Huigens" initials="D." surname="Huigens">
         <organization>Proton AG</organization>
      </author>
      <date day="3" month="November" year="2025"/>
      <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-09"/>
   
</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="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="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>
<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 1340?>

<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-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:
H4sIAAAAAAAAA+W923bbVrYg+s6vQDMPkdIko4ud2K7dlS1bUuxyYrssJanq
7IxTIAlKKJMACwClsBL/Sz+cLzn9Yz2va821AFCyk6ozzjgee6dEEliXueaa
98t4PB40ebPMniTD1+usePP1m+QivyrSZlNldZIWc/qYzZNvs7pOr7J6OJil
TXZVVtsnSd3MB/NyVqQreH9epYtmfJUul+nVdVaNSxhufbUe12648cHRYLOe
w+v1k+Txw0cHg3xdPUmaalM3RwcHj+HntMrSJ0leNIPbsnp3VZWb9ZNERhq8
y7bw7fxJ8qJosqrImvEpzjmoN9NVXtd5WVxu17CSF2eX54ObrNhkTwZJIoPo
9obwVUOPDX+AKfLiKvkan8DvV2m+hO9lvv/Ms2YxKasr/CmtZtfw03XTrOsn
n3+OT+JX+U020cc+xy8+n1blbZ19LmN8ju9W2bo0714BvNPpZFauPgf4Vtnt
1bxs8FMbYvj2EuHVmPeDlyYyWl52vl438PT/lS7LAja8zerBOn+S/NiUs1FS
l1VTZYsa/tqu8I+fBummuS4rBNoY/j9JFpvlkg/3hOZMvtbTpZ9hz2mR/zNt
APJPEoDty2xbT86+ox8zBqYs9j/lf3HX9HNVIs5l87wpcbAxnDkgxekkeTlJ
vs6Xy1XJc/D0pzBPtkxeptdF8CusANb27Jtgyvm7q/9c5IvmGvZSw3fFBFBl
UJTVClZ6Qzjx9vwZ4h/++WJ8Omkj7aaGD2nTVPl0g+g6yIuFHQDfwnN3L8AZ
L9NZtsqKBtBUH4GluCfSKQwKz9U5Hkozhsdq2HzW9WyV3ZQzhmvHr4fr9Hg9
61/89bt1/4/LHO5OuhyvsiaFq5gKOA4fPz6UP48ePDiQPx88YiC9fnP2Cs73
9Oz7p69fv3xC0G7S6ioDvFS0lAkm8+zm82lZvvucn4qIC0AxOVmvlzlvLznN
brIlvFoRricJUocnydHB0YPxwcPxwRfw5cnFy2dnby+/Ofv+7JvuqQE4k9aJ
fz5dllefX62vxmn9bjzLqma8xMnGs7Ko83lWZfPxdVqtAMkn181qGSz3U3gv
GUdvfpo8c68mz/lVXrW/OPhvLP97F/bqXg+Pca9HB/Dl+YtXr87+CofxqHun
/XRnVV85ovPdgz9fHf/Px9O/j9+eXq1vf3hYrN6+yprX//PlX8NTeQv/+RZw
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
U7GGCF1bPiP8/VvAlSrJqoqe/z8HWVY4Gk8BAA==

-->

</rfc>

