<?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;">

<!ENTITY I-D.ietf-openpgp-crypto-refresh SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-openpgp-crypto-refresh.xml">
<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY I-D.dkg-openpgp-abuse-resistant-keystore SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.dkg-openpgp-abuse-resistant-keystore.xml">
]>


<rfc ipr="trust200902" docName="draft-dkg-openpgp-1pa3pc-00" category="info" submissionType="IETF" xml:lang="en">
  <front>
    <title abbrev="OpenPGP 1PA3PC">First-Party Attested 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="2023" month="August" day="19"/>

    <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="attestation-key-signature"><name>Attestation Key Signature</name>

<t>This document defines a new key signature type used only in OpenPGP certificates known as an Attestation 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 "Attested Certifications" subpacket (see <xref target="attested-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 Attestation Key Signature is valid for any given &lt;key,userid&gt; pair.
If more than one self-signed Attestation Key Signature is present with the same Signature Creation Time, the set of attestations should be treated as the union of all "Attested Certifications" subpackets from all such signatures with the same timestamp.</t>

<section anchor="calculating-signature"><name>Computing an Attestation Key Signature</name>

<t>An Attestation 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="attested-certifications-subpacket"><name>Attested Certifications Subpacket</name>

<t>This document defines a new signature subpacket named Attested 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 Attestation Key Signature (see <xref target="attestation-key-signature"/>).
It has no meaning in any other signature type.
It is used by the primary key to attest to 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 Attested Certification subpacket in any generated Attestation 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 Attestation Key Signature made by key X over User ID U using hash algorithm SHA256 might contain an Attested 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 Attestation 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 Attestation Key Signature, it <bcp14>MUST</bcp14> treat it as a single Attested Certifications subpacket containing the union of all hashes.</t>

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

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

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

<t>The Attestation 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 Attested Certifications subpacket in a valid, most-recent self-signed Attestation 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 attest to self-signed certifications.
Since they are already made by the primary key, self-signed certifications are implicitly approved.</t>

<t>A verifier might observe a attested 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 Attested Certifications.</t>

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

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

<section anchor="third-party-certification-and-attestation-workflow"><name>Third-party Certification and Attestation 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 Attested 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 Attestation 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 attested to third-party certifications from Bob and Carol and she wants to add an attestation to a certification from David, she should issue a new Attestation Key Signature (with a more recent Signature Creation timestamp) that contains an Attested 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, she can issue a new Attestation Key Signature (again, with a more recent Signature Creation timestamp) that contains an Attested 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 unattested third-party certifications before redistributing the certificate.</t>

<t>If such a keystore receives an updated copy of the certificate which includes a newer Attestation Key Signature, it should merge the certificate update with its existing copy of the certificate, and re-apply the new list of attested 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-attestation-key-signature"><name>Signature Types: Add Attestation Key Signature</name>

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

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

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

</section>
</section>


  </middle>

  <back>


    <references title='Normative References'>

&I-D.ietf-openpgp-crypto-refresh;
&RFC2119;
&RFC8174;


    </references>

    <references title='Informative References'>

&I-D.dkg-openpgp-abuse-resistant-keystore;


    </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,
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-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:
H4sIAAAAAAAAA71b3XLctpK+51Mg44tjnZoZSXbiOKpUchTJTrT+01rycc7u
2VpjSMwMjkiCS4AeT1KuOo9yrvZB9lH2SfbrBsAhOT/WVm3tTaIhQaC70f31
1w14MpkkmUlLWagzkdVy7ibZ3WJiKlVWi2pyWsnHVTo5OUlS6c6ELucmsc2s
0NZqU7p1ha+unt0+T3RVnwlXN9Y9Ojn57uRRkstycSZUmTjtcox6rmvrJtey
dmtx7pyyTmXidqnrLDy8ULXTc411MLPFUuINhLj++TqRs1mtPp7F3+L0+vzx
9UUiayXPxI1Km1q7dbLCckHs5G7Vjh6LtDtx8lGVjTpLhFjUpqnOxCiMG+GR
12f03tR3ulyIn2kEPS+kzvE8zP4nrdx8auoFvZJ1usSrpXOVPTs+ppH0SH9U
0zjsmB4cz2qzsuo4zHFM39aqMp1vFzCUnE1TUxxjC477W0Djc0lm63yBYdPw
lTaDD7CCbNzS1GfJBMa0Z+JyKl5Mxc86zwtTYzq/55ey1CoXL+Sy7LyD2Gfi
/OLlO/ytvPpY7E9zPXdLzGnxrJyWyiWTyUTImXW1TF2SnLeb1rG6Eqksydwr
2lSrf1NipSFZ48TMNGUmVktVCseuULErpH1XwEbjyzRvMpVNE/iMFXDZplCl
E5myaa1nCqPESq7F3NSYSgmzKlUtzJx/dGVxRqhPVa5T2G0tZFXV5qOigbZS
KQ06IMlYWIPX0mHr8jW5CI3SWJw0tHKOp6Kqm1JtLYsFZLkWTRlWzAZTTxM2
ZaGzLFdJ8kBcla42WZOy0yZXmN4UZEmrIIZ2AkZorJo3OWm0lNBB7pdcYMUa
AgidwWiIFtoJuXOzpskvZqUwHKvM94zBJhYVVC1UvVAcqjLPD9ptaI4tj3CG
x1RGY1PhELTlrCRWMgCbWc5joLKgHa5laeeqniY3So1509UnCZmUXyrTNm0Y
ouCc5Gij7uLz3JgMuzei1X//HQjCNno0PaVt+vFqcjntYqCcYdVJray2TpZu
cqfW1plaff6MTbua991tj8Ee0qARvlyaPFP16AjOWjpL3+qavh766ExBV0la
z9bCYFjtrbhm03U8WJeZ/2i11OnyUBjx1xuHH0PWjMwbZ8pUmuvgutDWQbsH
D8Stqgtdmtws1gliD6/xoEXNDmqrUfDJjMzqelGKTVUAQaQEBZ3WHP+bOW7D
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
U6FPaWkvpU2T/wGsT0MZ/TUAAA==

-->

</rfc>

