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


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

]>


<rfc ipr="trust200902" docName="draft-dkg-openpgp-1pa3pc-01" category="info" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="OpenPGP 1PA3PC">First-Party Approved Third-Party Certifications in OpenPGP</title>

    <author initials="D. K." surname="Gillmor" fullname="Daniel Kahn Gillmor">
      <organization>ACLU</organization>
      <address>
        <email>dkg@fifthhorseman.net</email>
      </address>
    </author>

    <date year="2024" month="March" day="01"/>

    <area>Security</area>
    <workgroup>openpgp</workgroup>
    <keyword>OpenPGP, certification</keyword>

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

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://dkg.gitlab.io/openpgp-1pa3pc/"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-dkg-openpgp-1pa3pc/"/>.
      </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/dkg/openpgp-1pa3pc"/>.</t>
    </note>


  </front>

  <middle>


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

<t>In some cases, it is useful to have a third-party certification over an identity in an OpenPGP certificate.
However, if an OpenPGP certificate simply merges in all third-party certifications, the certificate can grow in size to the point where it is impossible to use or transfer.
See, for example, the discussion about "certificate flooding" in <xref section="2.1" sectionFormat="of" target="I-D.dkg-openpgp-abuse-resistant-keystore"/>.</t>

<t>If the owner of an OpenPGP certificate (the "keyholder") wants their own certificate to be usable by others, they can explicitly indicate which third-party certifications they approve of, and implicitly decline the rest.</t>

<section anchor="terminology"><name>Terminology</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="I-D.ietf-openpgp-crypto-refresh"/>.</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>

</section>
</section>
<section anchor="wire-format"><name>Wire Format</name>

<t>This specification defines a new signature type, a new signature subpacket type, and extends the structure of an OpenPGP certificate.</t>

<section anchor="certification-approval-key-signature"><name>Certification Approval Key Signature</name>

<t>This document defines a new key signature type used only in OpenPGP certificates known as a Certification Approval Key Signature.
The Signature type ID is 0x16.</t>

<t>This signature is issued by the primary key over itself and its User ID (or User Attribute).
It <bcp14>MUST</bcp14> contain exactly three subpackets in its hashed subpackets:</t>

<t><list style="symbols">
  <t>a "Signature Creation Time" subpacket (<xref section="5.2.3.11" sectionFormat="of" target="I-D.ietf-openpgp-crypto-refresh"/>)</t>
  <t>an Issuer Fingerprint subpacket (see <xref section="5.2.3.35" sectionFormat="of" target="I-D.ietf-openpgp-crypto-refresh"/>)</t>
  <t>an "Approved Certifications" subpacket (see <xref target="approved-certifications-subpacket"/>)</t>
</list></t>

<t>This type of key signature does not replace or override any standard certification (0x10-0x13).</t>

<t>Only the most recent self-signed Certification Approval Key Signature is valid for any given &lt;key,userid&gt; pair.
If more than one valid, self-signed Certification Approval Key Signature is present with the same Signature Creation Time, the set of approvals should be treated as the union of all "Approved Certifications" subpackets from all such signatures with the same timestamp.</t>

<section anchor="calculating-signature"><name>Computing a Certification Approval Key Signature</name>

<t>An Approval Key Signature is computed over a hash of data in the same way as a Certification Signature.
That is, the following items are concatenated into the hash function before signing:</t>

<t><list style="symbols">
  <t>The salt (or nothing at all, if the signature version is less than 6)</t>
  <t>The serialized Primary Key</t>
  <t>The serialized User ID</t>
  <t>The trailer, which includes the signature data including the hashed subpackets</t>
</list></t>

</section>
</section>
<section anchor="approved-certifications-subpacket"><name>Approved Certifications Subpacket</name>

<t>This document defines a new signature subpacket named Approved Certifications.
Its contents are N octets of certification digests (see more below).</t>

<t>This subpacket <bcp14>MUST</bcp14> only appear as a hashed subpacket of an self-signed Certification Approval Key Signature (see <xref target="certification-approval-key-signature"/>).
It has no meaning in any other signature type.
It is used by the primary key to approve of a set of third-party certifications over the associated User ID or User Attribute.
This enables the holder of an OpenPGP primary key to mark specific third-party certifications as re-distributable with the rest of the Transferable Public Key (see the "No-modify" flag in <xref section="5.2.3.25" sectionFormat="of" target="I-D.ietf-openpgp-crypto-refresh"/>).
Implementations <bcp14>MUST</bcp14> include exactly one Approved Certifications subpacket in any generated Certification Approval Key Signature.</t>

<t>The contents of the subpacket consists of a series of digests using the same hash algorithm used by the signature itself.
Each digest is made over one third-party signature (any Certification, i.e., signature types 0x10-0x13) that covers the same Primary Key and User ID (or User Attribute).
For example, an Certification Approval Key Signature made by key X over User ID U using hash algorithm SHA256 might contain an Approved Certifications subpacket of 192 octets (6*32 octets) covering six third-party certification Signatures over &lt;X,U&gt;.
They <bcp14>SHOULD</bcp14> be ordered by binary hash value from low to high (e.g., a hash with hexadecimal value 037a… precedes a hash with value 0392…, etc).
The length of this subpacket <bcp14>MUST</bcp14> be an integer multiple of the length of the hash algorithm used for the enclosing Certification Approval Key Signature.</t>

<t>The listed digests <bcp14>MUST</bcp14> be calculated over the third-party certification's Signature packet as described in <xref section="5.2.4" sectionFormat="of" target="I-D.ietf-openpgp-crypto-refresh"/>, but without a trailer: the hash data starts with the octet 0x88, followed by the four-octet length of the Signature, and then the body of the Signature packet.
(Note that this is an Legacy Format packet header for a Signature packet with the length-of-length field set to zero.)  The unhashed subpacket data of the Signature packet being hashed is not included in the hash, and the unhashed subpacket data length value is set to zero.</t>

<t>If an implementation encounters more than one such subpacket in an Certification Approval Key Signature, it <bcp14>MUST</bcp14> treat it as a single Approved Certifications subpacket containing the union of all hashes.</t>

<t>The Approved Certifications subpacket in the most recent self-signed Certification Approval Key Signature over a given User ID supersedes all Approved Certifications subpackets from any previous Certification Approval Key Signature.
However, note that if more than one Certification Approval Key Signature packets have the same (most recent) Signature Creation Time subpacket, implementations <bcp14>MUST</bcp14> consider the union of the Approved Certifications of all Certification Approval Key Signatures.
This allows the keyholder to approve of more third-party certifications than could fit in a single Certification Approval Key Signature.</t>

<t>Note that Certification Revocation Signatures are not relevant for Certification Approval Key Signatures.
To rescind all approvals, the primary key holder needs only to publish a more recent Certification Approval Key Signature with an empty Approved Certifications subpacket.</t>

</section>
<section anchor="placement-in-certificate"><name>Placement in OpenPGP Certificate</name>

<t>The Certification Approval Key Signature appears in an OpenPGP certificate after a User ID or User Attribute packet, mixed in with the certifications that cover that User ID or User Attribute packet.</t>

<t>FIXME: test that these do not break existing implementations by causing them to reject a certificate that they otherwise would have accepted.
If they do, then we might consider placing this signature in an unhashed Embedded Signature subpacket in the User ID's self-sig.</t>

</section>
</section>
<section anchor="semantics"><name>Semantics</name>

<t>The inclusion of a digest in an Approved Certifications subpacket in a valid, most-recent self-signed Certification Approval Key Signature which matches a specific third-party certification is an indication that the keyholder approves of the third-party certification.</t>

<t>There is no need to approve of self-signed certifications.
Since they are already made by the primary key, self-signed certifications are implicitly approved.</t>

<t>A verifier might observe an approved digest that does not correspond to any Certification that the verifier is aware of.
This is normal, because not everyone is guaranteed to have the exact same set of third-party certifications for any given OpenPGP certificate.
In such cases, the verifier should ignore the non-matching digest, but <bcp14>MUST NOT</bcp14> ignore other digests in the list of Approved Certifications.</t>

</section>
<section anchor="reasonable-workflows"><name>Reasonable Workflows</name>

<t>This section describes some possible steps for generating and using Approved Certifications.</t>

<section anchor="third-party-certification-and-approval-workflow"><name>Third-party Certification and Approval Workflow</name>

<t>Alice has a new OpenPGP certificate with primary key <spanx style="verb">K</spanx>, and wants to publish Bob's certification over her User ID in that certificate.</t>

<t>Alice sends Bob her certificate, asking for his certification.
Bob performs his normal verification that the User ID and <spanx style="verb">K</spanx> do indeed belong to Alice, and then creates a certification over her User ID, adding it to the certificate.</t>

<t>Bob then sends the augmented certificate back to Alice.
Alice reviews the added certification, and decides that she likes it.</t>

<t>She chooses a strong hash algorithm <spanx style="verb">H</spanx> and uses it to compute the digest of Bob's certification.
She places that digest into an Approved Certifications subpacket <spanx style="verb">S</spanx>.
She also creates a Signature Creation Time subpacket <spanx style="verb">C</spanx> containing the current timestamp, and an Issuer Fingerprint subpacket <spanx style="verb">F</spanx> containing the fingerprint of <spanx style="verb">K</spanx>.</t>

<t>Alice places subpackets <spanx style="verb">F</spanx>, <spanx style="verb">C</spanx>, and <spanx style="verb">S</spanx> into an Certification Approval Key Signature packet, and signs it with <spanx style="verb">K</spanx> using hash algorithm <spanx style="verb">H</spanx>.</t>

</section>
<section anchor="keyholder-update-workflow"><name>Keyholder Update Workflow</name>

<t>If a keyholder Alice has already approved of third-party certifications from Bob and Carol and she wants to additionally approve a certification from David, she should issue a new Certification Approval Key Signature (with a more recent Signature Creation timestamp) that contains an Approved Certifications subpacket covering all three third-party certifications.</t>

<t>If she later decides that she does not want Carol's certification to be redistributed with her certificate, Alice can issue a new Certification Approval Key Signature (again, with a more recent Signature Creation timestamp) that contains an Approved Certifications subpacket covering only the certifications from Bob and David.</t>

</section>
<section anchor="distributor-workflow"><name>Distributor Workflow</name>

<t>If an abuse-resistant keystore (e.g., an OpenPGP keyserver) receives an OpenPGP certificate for redistribution, it <bcp14>SHOULD</bcp14> strip away all unapproved third-party certifications before redistributing the certificate.</t>

<t>If such a keystore receives an updated copy of the certificate which includes a newer Certification Approval Key Signature, it should merge the certificate update with its existing copy of the certificate, and re-apply the new list of approved digests by stripping away all certifications which do not match the new list.</t>

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

<t>This document is intended to make an OpenPGP certificate more manageable by the keyholder.</t>

<t>A flooded certificate is difficult or impossible to redistribute, which means that peers of the keyholder cannot easily fetch the certificate, resulting in inability to encrypt messages to or verify signatures from that certificate.
An unredistributable certificate can also make it difficult or impossible to transmit revocation, expiration, key rotation, or preference changes associated with the certificate, which interferes with certificate maintenance necessary to securely use OpenPGP.</t>

<t>The mechanisms described in this document defend against certificate flooding attacks by enabling certificate redistributors (e.g., keyserver networks or other "keystores") to limit the contents of a certificate to only those elements which the keyholder explicitly approves of and wants included in the certificate.</t>

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

<t>IANA is asked to register multiple objects in the OpenPGP protocol group.</t>

<section anchor="signature-types-add-certification-approval-key-signature"><name>Signature Types: Add Certification Approval Key Signature</name>

<t>The Signature Types registry should add a row with signature type 0x16, Name "Certification Approval Key Signature", and Reference pointing to <xref target="certification-approval-key-signature"/> in this document.</t>

</section>
<section anchor="signature-subpacket-type-approved-certifications"><name>Signature Subpacket Type: Approved Certifications</name>

<t>The Signature Subpacket Types registry row with Type 37 should be update with Description "Approved Certifications", and Reference pointing to <xref target="approved-certifications-subpacket"/> in this document.</t>

</section>
</section>


  </middle>

  <back>


    <references title='Normative References'>




<reference anchor='I-D.ietf-openpgp-crypto-refresh'>
   <front>
      <title>OpenPGP</title>
      <author fullname='Paul Wouters' initials='P.' surname='Wouters'>
         <organization>Aiven</organization>
      </author>
      <author fullname='Daniel Huigens' initials='D.' surname='Huigens'>
         <organization>Proton AG</organization>
      </author>
      <author fullname='Justus Winter' initials='J.' surname='Winter'>
         <organization>Sequoia-PGP</organization>
      </author>
      <author fullname='Niibe Yutaka' initials='N.' surname='Yutaka'>
         <organization>FSIJ</organization>
      </author>
      <date day='4' month='January' 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.

   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.

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

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-openpgp-crypto-refresh-13'/>
   
</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'>




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




    </references>


<section anchor="augmenting-sop-for-1pa3pc"><name>Augmenting SOP For 1PA3PC</name>

<t>FIXME: Can all of the plausible workflows described in this document be done with the Stateless OpenPGP Interface?
Definitely not right now.
What is missing?</t>

</section>
<section anchor="test-vectors"><name>Test Vectors</name>

<t>FIXME: This document should include a certificate with third-party certifications, some of which are approved, and others of which are not approved.
It should also show the same certificate, but pruned to remove all non-approved third-party certifications.</t>

</section>
<section anchor="existing-implementations"><name>Existing Implementations</name>

<t>RFC Editor Note: Please delete this section before publication.</t>

<t>FIXME: enumerate existing implementations.</t>

</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>Demi Marie Obenour,
Heiko Stamer,
Jan Zerebecki,
Justus Winter,
Neal Walfield,
Orie Steele,
Vincent Breitmoser,
and others all contributed to specifying and defining this mechanism.</t>

</section>
<section anchor="substantive-changes-to-this-document"><name>Substantive changes to this document</name>

<t>RFC Editor Note: Please delete this section before publication.</t>

<section anchor="substantive-changes-from-draft-dkg-openpgp-1pa3pc-00-to-draft-dkg-openpgp-1pa3pc-01"><name>Substantive Changes from draft-dkg-openpgp-1pa3pc-00 to draft-dkg-openpgp-1pa3pc-01</name>

<t><list style="symbols">
  <t>Change terminology from "attest" to "approve"</t>
</list></t>

</section>
<section anchor="substantive-changes-from-mr-60-to-draft-dkg-openpgp-1pa3pc-00"><name>Substantive Changes from MR !60 to draft-dkg-openpgp-1pa3pc-00</name>

<t><list style="symbols">
  <t>https://gitlab.com/openpgp-wg/rfc4880bis/-/merge_requests/60 describes the earlier draft of this proposal.</t>
  <t>This draft transcribes most of that MR, updating references and including explicit IANA considerations.</t>
</list></t>

</section>
</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA71b7ZIbN3b9308BUz9Ws0VyNJIsy1Mue8czkjXR10QzWnuT
TUVgN0hip7vRaaBF0S5V5VHyKw+SR8mT5NwLNNjdHFL0JpUqlzxsooGL+3Hu
uRfgZDJJMpOWslCnIqvl3E2y28XEVKqsFtXkpJKPqnTy4CRJpTsVupybxDaz
QlurTenWFd66fHbzPPl4Kh4luSwXp0KVidMuxzfPdW3d5ErWbi3Oqqo2H1Um
bpa6zsLDc1U7PdeYG7NZTC/eYuGrn64SOZvVCpOGz+Lk6uzR1XkiayVPxbVK
m1q7dbLCckHU5HYVR49F2p04+ajKRp0mQixq01SnYhTGjfDI72H0s6lvdbkQ
P9EIel5IneN5mP1PWrn51NQL+krW6RJfLZ2r7OnxMY2kR/qjmrbDjunB8aw2
K6uOwxzH9G6tKtN5dwFFydk0NcUx1H7cVzuNz6VT1nXewLBpeEubwQtYQTZu
aerTZAJl2lNxMRUvp+InneeFqTGdt/OFLLXKxUu5LDvfQexTcXb+6j3+Vn77
WOxPcz13S8xp8ayclsolk8lEyJl1tUxdkpxFo3W0rkQqS1L3ioxq9a9KrDQk
a5yYmabMxGqpSuHYFSp2hbTvCjA03kzzJlPZNIHPWAE3bQpVOpEpm9Z6pjBK
rORazE2NqZQwq1LVwsz5Q1cWZ4T6VOU6hd7WQnpPpIG2UikN2iPJWFiDr6WD
6fI1uQiN0licdmjlHE9FVTel2loWC8hyLZpStr7fn3qasCoLnWW5SpJ74rJ0
tcmalJ02ucT0piBNWgUxtBNQQmPVvMlpR0uJPcjdkgusWEMAoTMoDdFClpB3
GmuavDArheFYZb5jDIxYVNhqoeqF4lCVeb5Xb0N1bHmEMzymMhpGhUOQyXmT
WMkAYGY5j8GWBVm4lqWdq3qaXCs1ZqOrTxIyKb9Upm3aMCzBOcnRRt3F57kx
Gaw3otV/+w0Iwjp6OD0hM/1wObmYdnFPzrDqpFZWWydLN7lVa+tMrT5/htEu
531326Gw+zRohDeXJs9UPTqCs5bO0ru6preHPjpT2KukXc/WwmBY7bW4ZtV1
PFiXmX9ptdTpcl8Y8dsbhx9D1ozU286UqTTXwXWxW4fd3bsnblRd6NLkZrFO
EHv4Gg8ianZQW42CT2akVteLUhhVAQSREhT2tOb438xxE6zJ271qZhBIvFTr
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
H9l0EizFNwAA

-->

</rfc>

