<?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-abuse-resistant-keystore-06" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title>Abuse-Resistant OpenPGP Keystores</title>

    <author initials="D. K." surname="Gillmor" fullname="Daniel Kahn Gillmor">
      <organization abbrev="ACLU">American Civil Liberties Union</organization>
      <address>
        <postal>
          <street>125 Broad St.</street>
          <city>New York, NY</city>
          <code>10004</code>
          <country>USA</country>
        </postal>
        <email>dkg@fifthhorseman.net</email>
      </address>
    </author>

    <date year="2023" month="August" day="18"/>

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

    <abstract>


<t>OpenPGP transferable public keys are composite certificates, made up
of primary keys, revocation signatures, direct key signatures, user IDs,
identity certifications ("signature packets"), 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.</t>

<t>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.</t>

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

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


  </front>

  <middle>


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

<section anchor="requirements-language"><name>Requirements Language</name>

<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 anchor="terminology"><name>Terminology</name>

<t><list style="symbols">
  <t>"OpenPGP certificate" (or just "certificate") is used
interchangeably with <xref target="RFC4880"/>'s "Transferable Public Key".  The
term "certificate" refers unambiguously to the entire composite
object, unlike "key", which might also be used to refer to a
primary key or subkey.</t>
  <t>An "identity certification" (or just "certification") is an
<xref target="RFC4880"/> signature packet that covers OpenPGP identity
information -- that is, any signature packet of type 0x10, 0x11,
0x12, or 0x13.  Certifications are said to (try to) "bind" a
primary key to a User ID.</t>
  <t>The primary key that makes the certification is known as the
"issuer".  The primary key over which the certification is made is
known as the "subject".</t>
  <t>A "first-party certification" is issued by the primary key of a
certificate, and binds itself to a user ID in the certificate. That
is, the issuer is the same as the subject.  This is sometimes
referred to as a "self-sig".</t>
  <t>A "third-party certification" is a made over a primary key and user
ID by some other certification-capable primary key.  That is, the
issuer is different than the subject.  The elusive "second-party"
is presumed to be the verifier who is trying to interpret the
certificate.</t>
  <t>All subkeys are bound to the primary key with an <xref target="RFC4880"/> Subkey
Binding Signature.  Some subkeys also reciprocate by binding
themselves back to the primary key with an <xref target="RFC4880"/> Primary Key
Binding Signature.  The Primary Key Binding Signature is also known
as a "cross-signature" or "cross-sig".</t>
  <t>A "keystore" is any collection of OpenPGP certificates.  Keystores
typically receive mergeable updates over the course of their
lifetime which might add to the set of OpenPGP certificates they
hold, or update the certificates.</t>
  <t>"Certificate validation" is the process whereby a user decides
whether a given user ID in an OpenPGP certificate is acceptable for
use.  For example, if the certificate has a user ID of <spanx style="verb">Alice
&lt;alice@example.org&gt;</spanx> and the user wants to send an e-mail to
<spanx style="verb">alice@example.org</spanx>, the mail user agent might want to ensure that
the certificate is valid for this e-mail address before encrypting
to it. Some clients may rely on specific keystores for certificate
validation, but some keystores (e.g., <xref target="SKS"/>) make no assertions
whatsoever about certificate validity, and others offer only very
subtle guarantees.  See <xref target="certificate-validation"/> for more
details.</t>
  <t>"Certificate lookup" refers to the retrieval of a set of
certificates from a keystore based on the user ID or some substring
match of the user ID.  See <xref target="certificate-lookup"/> for more details.</t>
  <t>"Certificate refresh" refers to retrieval of a certificate from a
 keystore based on the fingerprint of the primary key.  See
 <xref target="certificate-refresh"/> for more details.</t>
  <t>"Certificate discovery" refers to the retrieval of a set of
certificates from a keystore based on the fingerprint or key ID of
any key in the certificate.  See <xref target="certificate-discovery"/> for more
details.</t>
  <t>A "keyserver" is a particular kind of keystore, typically a means of
publicly distributing OpenPGP certificates or updates to them.
Examples of keyserver software include <xref target="SKS"/> and
<xref target="MAILVELOPE-KEYSERVER"/>.  One common HTTP interface for keyservers
is <xref target="I-D.shaw-openpgp-hkp"/>.</t>
  <t>A "synchronizing keyserver" is a keyserver which gossips with other
peers, and typically acts as an append-only log.  Such a keyserver
is typically useful for certificate lookup, certificate discovery,
and certificate refresh (including revocation information).  They
are typically <em>not</em> useful for certificate validation, since they
make no assertions about whether the identities in the certificates
they server are accurate. As of the writing of this document,
<xref target="SKS"/> is the canonical synchronizing keyserver implementation,
though other implementations exist.</t>
  <t>An "e-mail validating keyserver" is a keyserver which attempts to
verify the identity in an OpenPGP certificate's user ID by
confirming access to the e-mail account, and optionally by confirming
access to the secret key.  Some implementations permit removal of a
certificate by anyone who can prove access to the e-mail address in
question.  They are useful for certificate lookup based on e-mail
address and certificate validation (by users who trust the
operator), but some may not be useful for certificate refresh or
certificate discovery, since a certificate could be simply replaced
by an adversary who also has access to the e-mail address in
question.  <xref target="MAILVELOPE-KEYSERVER"/> is an example of such a
keyserver.</t>
  <t>A "sovereignty-respecting" keystore is one that only distributes
data associated with a given certificate that has been explicitly
approved by the primary key of that certificate.  See
<xref target="sovereignty"/> for more details and example strategies.</t>
  <t>"Cryptographic validity" refers to mathematical evidence that a
signature came from the secret key associated with the public key
it claims to come from.  Note that a certification may be
cryptographically valid without the signed data being true (for
example, a given certificate with the user ID <spanx style="verb">Alice
&lt;alice@example.org&gt;</spanx> might not belong to the person who controls
the e-mail address <spanx style="verb">alice@example.org</spanx> even though the self-sig is
cryptographically valid).  In particular, cryptographic validity
for user ID in a certificate is typically insufficient evidence for
certificate validation.  Also note that knowledge of the public key
of the issuer is necessary to determine whether any given signature
is cryptographically valid.  Some keyservers perform cryptographic
validation in some contexts.  Other keyservers (like <xref target="SKS"/>)
perform no cryptographic validation whatsoever.</t>
  <t>OpenPGP revocations can have "Reason for Revocation" (see
<xref target="RFC4880"/>), which can be either "soft" or "hard".  The set of
"soft" reasons is: "Key is superseded" and "Key is retired and no
longer used".  All other reasons (and revocations that do not state
a reason) are "hard" revocations.  See <xref target="revocations"/> for more
detail.</t>
</list></t>

</section>
</section>
<section anchor="problem-statement"><name>Problem Statement</name>

<t>OpenPGP keystores that handle submissions from the public are subject
to a range of attacks by malicious submitters.</t>

<t>This section describes five distinct attacks that public keystores
should consider.</t>

<section anchor="certificate-flooding"><name>Certificate Flooding</name>

<t>Many public keystores (including both the <xref target="SKS"/> keyserver network
and <xref target="MAILVELOPE-KEYSERVER"/>) allow anyone to attach arbitrary data
(in the form of third-party certifications) to any certificate,
bloating that certificate to the point of being impossible to
effectively retrieve.  For example, some OpenPGP implementations
simply refuse to process certificates larger than a certain size.</t>

<t>This kind of Denial-of-Service attack makes it possible to make
someone else's certificate unretrievable from the keystore, preventing
certificate lookup, discovery, or refresh.  In the case of a revoked
certificate that has been flooded, this potentially leaves the client
of the keystore with the compromised certificate in an unrevoked state
locally because it was unable to fetch the revocation information.</t>

<t>Additionally, even without malice, OpenPGP certificates can
potentially grow without bound.</t>

</section>
<section anchor="user-id-flooding"><name>User ID Flooding</name>

<t>Public keystores that are used for certificate lookup may also be
vulnerable to attacks that flood the space of known user IDs.  In
particular, if the keystore accepts arbitrary certificates from the
public and does no verification of the user IDs, then any client
searching for a given user ID may need to review and process an
effectively unbounded set of maliciously-submitted certificates to
find the non-malicious certificates they are looking for.</t>

<t>For example, if an attacker knows that a given system consults a
keystore looking for certificates which match the e-mail address
<spanx style="verb">alice@example.org</spanx>, the attacker may upload thousands of
certificates containing user IDs that match that address.  Even if
those certificates would not be accepted by a client (e.g., because
they were not certified by a known-good authority), the client
still has to iterate through all of them in order to find the
non-malicious certificates.</t>

<t>User ID flooding is only effective if the keystore offers a lookup
interface at all.</t>

</section>
<section anchor="fingerprint-flooding"><name>Fingerprint Flooding</name>

<t>A malicious actor who wants to render a certificate unavailable for
refresh may generate an arbitrary number of OpenPGP certificates with
the targeted primary key attached as a subkey.  If they can convince a
keystore to accept all of those certificates, and the keystore
returns them by subkey match during certificate refresh, then the
certificate refresh client will need to spend an arbitrary amount of
bandwidth and processing power filtering out the irrelevant data, and
may potentially give up before discovering the certificate of
interest.</t>

<t>A malicious actor may also want to confuse a certificate discovery
request that was targeted at a particular subkey, by binding that
subkey to multiple bogus certificates.  If these bogus certificates
are ingested and redistributed by the keystore, then a certificate
discovery client may receive a set of certificates that cannot be
adequately distinguished.</t>

</section>
<section anchor="keystore-flooding"><name>Keystore Flooding</name>

<t>A public keystore that accepts arbitrary OpenPGP material and is
append-only is at risk of being overwhelmed by sheer quantity of
malicious uploaded packets.  This is a risk even if the user ID space
is not being deliberately flooded, and if individual certificates are
protected from flooding by any of the mechanisms described later in
this document.</t>

<t>The keystore itself can become difficult to operate if the total
quantity of data is too large, and if it is a synchronizing keyserver,
then the quantities of data may impose unsustainable bandwidth costs
on the operator as well.</t>

<t>Effectively mitigating against keystore flooding requires either
abandoning the append-only property that some keystores prefer, or
imposing very strict controls on initial ingestion.</t>

</section>
<section anchor="toxic-data"><name>Toxic Data</name>

<t>Like any large public dataset, it's possible that a keystore ends up
hosting some content that is legally actionable in some jurisdictions,
including libel, child pornography, material under copyright or other
"intellectual property" controls, blasphemy, hate speech, etc.</t>

<t>A public keystore that accepts and redistributes arbitrary content
may face risk due to uploads of toxic data.</t>

</section>
</section>
<section anchor="keystore-interfaces"><name>Keystore Interfaces</name>

<t>Some keystores have simple interfaces, like files present in a local
filesystem.  But many keystores offer an API for certificate retrieval
of different types.  This section documents a set of useful
interactions that a client may have with such a keystore.</t>

<t>They are represented in abstract form, and are not intended to be the
full set of interfaces offered by any keystore, but rather a
convenient way to think about the operations that make the keystore
useful for its clients.</t>

<t>Not all keystores may offer all of these interfaces, or they may offer
them in subtly different forms, but clients will nevertheless try to
perform something like these operations with keystores that they
interact with.</t>

<section anchor="certificate-refresh"><name>Certificate Refresh</name>

<t>This is the simplest keystore operation.  The client sends the
keystore the full fingerprint of the certificate's primary key, and
the keystore sends the client the corresponding certificate (or
nothing, if the keystore does not contain a certificate with a
matching primary key).</t>

<figure><artwork><![CDATA[
keystore.cert_refresh(primary_fpr) -> certificate?
]]></artwork></figure>

<t>A client uses certificate refresh to retrieve the full details of a
certificate that it already knows about.  For example, it might be
interested in refreshes to the certificate known to the keystore,
including revocations, expiration refreshes, new third-party
certifications, etc.</t>

<t>Upon successful refresh, the client <bcp14>SHOULD</bcp14> merge the retrieved
certificate with its local copy.</t>

<t>Not all keystores offer this operation. For example, clients cannot
use WKD (<xref target="I-D.koch-openpgp-webkey-service"/>) or OPENPGPKEY
(<xref target="RFC7929"/>) for certificate refresh.</t>

</section>
<section anchor="certificate-discovery"><name>Certificate Discovery</name>

<t>If a client is aware of an OpenPGP signature or certification that it
cannot verify because it does not know the issuing certificate, it may
consult a keystore to try to discover the certificate based on the
Issuer or Issuer Fingerprint subpacket in the signature or
certification it is trying to validate.</t>

<figure><artwork><![CDATA[
keystore.cert_discovery(keyid|fpr) -> certificate_list
]]></artwork></figure>

<t>This is subtly different from certificate refresh
(<xref target="certificate-refresh"/>) in three ways:</t>

<t><list style="symbols">
  <t>it may return more than one certificate (e.g., when multiple
certificates share a subkey, or when a primary key on one
certificate is a subkey on another)</t>
  <t>it is willing to accept searches by short key ID, not just
fingerprint</t>
  <t>it is willing to match against a subkey, not just a primary key</t>
</list></t>

<t>While a certificate discovery client does not initially know the
certificate it is looking for, it's possible that the returned
certificate is one that the client already knows about.  For example,
a new subkey may have been added to a certificate.</t>

<t>Upon successful discovery, the client <bcp14>SHOULD</bcp14> merge any retrieved
certificates with discovered local copies (as determined by primary
key), and then evaluate the original signature against any retrieved
certificate that appears to be valid and reasonable for use in the
signing context.</t>

<t>It is unclear what a client should do if multiple certificates do
appear to be valid for a given signature, because of ambiguity this
represents about the identity of the signer.  However, this ambiguity
is similar to the ambiguity of a certificate with multiple valid user
IDs, which the client already needs to deal with.</t>

<t>Not all keystores offer this operation. For example, clients cannot
use WKD (<xref target="I-D.koch-openpgp-webkey-service"/>) or OPENPGPKEY
(<xref target="RFC7929"/> for certificate discovery.</t>

</section>
<section anchor="certificate-lookup"><name>Certificate Lookup</name>

<t>If a client wants to encrypt a message to a particular e-mail address,
or wants to encrypt a backup to some identity that it knows of but
does not have a certificate for, it may consult a keystore to discover
certificates that claim that identity in their user ID packets.  Both
<xref target="I-D.koch-openpgp-webkey-service"/> and <xref target="I-D.shaw-openpgp-hkp"/> offer
certificate lookup mechanisms.</t>

<t><xref target="RFC4880"/> User IDs are constrained only in that they are a UTF-8
string, but some conventions govern their practical use. See
<xref target="user-id-conventions"/> for more discussion of some common conventions
around user ID structure.</t>

<t>Note that lookup does not necessarily imply user ID or certificate
validation.  It is entirely possible for a keystore to return a
certificate during lookup that the client cannot validate.</t>

<t>Abuse-resistant keystores that offer a lookup interface <bcp14>SHOULD</bcp14>
distinguish interfaces that perform full-string-match lookup from
interfaces that perform e-mail address based lookup.</t>

<section anchor="full-user-id-lookup"><name>Full User ID Lookup</name>

<t>The most straightforward form of certificate lookup asks for the set
of all certificates that contain a user ID that exactly and completely
matches the query parameter supplied by the client.</t>

<figure><artwork><![CDATA[
keystore.cert_lookup(uid) -> certificate_list
]]></artwork></figure>

<t>In its simplest form, this match is done by a simple bytestring
comparison.  More sophisticated keystores <bcp14>MAY</bcp14> perform the comparison
after applying <xref target="UNICODE-NORMALIZATION"/> form NFC to both the <spanx style="verb">uid</spanx>
query and the user IDs from the stored certificates.</t>

</section>
<section anchor="e-mail-address-lookup"><name>E-mail Address Lookup</name>

<t>However, some common use cases look for specific patterns in the user
ID rather than the entire user ID.  Most useful to many existing
OpenPGP clients is a lookup by e-mail address.</t>

<figure><artwork><![CDATA[
keystore.cert_lookup(addr) -> certificate_list
]]></artwork></figure>

<t>For certificates with a user ID that matches the structure of an
<xref target="RFC5322"/> <spanx style="verb">name-addr</spanx> or <spanx style="verb">addr-spec</spanx>, a keystore <bcp14>SHOULD</bcp14> extract the
<spanx style="verb">addr-spec</spanx> from the user ID, canonicalize it (see
<xref target="e-mail-address-canonicalization"/>), and compare it to the
canonicalized form of of the <spanx style="verb">addr</spanx> query parameter.</t>

</section>
<section anchor="other-lookup-mechanisms"><name>Other Lookup Mechanisms</name>

<t>Some keystores offer other forms of substring or regular expression
matching against the stored user IDs.  These other forms of lookup may
be useful in some contexts (e.g., <xref target="identity-monitoring"/>), but they
may also represent privacy concerns (e.g.,
<xref target="publishing-identity-information"/>), and they may impose additional
computational or indexing burdens on the keystore.</t>

</section>
</section>
<section anchor="certificate-validation"><name>Certificate Validation</name>

<t>An OpenPGP client may assess certificate and user ID validity based on
many factors, some of which are directly contained in the certificate
itself (e.g., third-party certifications), and some of which are based
on the context known to the client, including:</t>

<t><list style="symbols">
  <t>Whether it has seen e-mails from that address signed by that
certificate in the past,</t>
  <t>How long it has known about the certificate,</t>
  <t>Whether the certificate was fetched from a keystore that asserts
validity of the user ID or some part of it (such as the e-mail
address).</t>
</list></t>

<t>A keystore <bcp14>MAY</bcp14> facilitate clients pursuing this last point of
contextual corroboration via a direct interface:</t>

<figure><artwork><![CDATA[
keystore.cert_validate(primary_fpr, uid) -> boolean
]]></artwork></figure>

<t>In an e-mail-specific context, the client might only care about the
keystore's opinion about the validity of the certificate for the
e-mail address portion of the user ID only:</t>

<figure><artwork><![CDATA[
keystore.cert_validate(primary_fpr, addr) -> boolean
]]></artwork></figure>

<t>For some keystores, the presence of a certificate in the keystore
alone implies that the keystore asserts the validity of all user IDs
in the certificate retrieved.  For others, the presence in the
keystore applies only to some part of the user ID.  For example,
<xref target="PGP-GLOBAL-DIRECTORY"/> will only return user IDs that have completed
an e-mail validation step, so presence in that keystore implies an
assertion of validity of the e-mail address part of the user IDs
returned, but makes no claim about the <spanx style="verb">display-name</spanx> portion of any
returned user IDs.  Note that a client retrieving a certificate from
such a keystore may merge the certificate with a local copy -- but the
validity asserted by the keystore of course has no bearing on the
packets that the keystore did not return.</t>

<t>In a more subtle example, the retrieval of a certificate looked up via
WKD (<xref target="I-D.koch-openpgp-webkey-service"/>) or DANE (<xref target="RFC7929"/>) should
only be interpreted as a claim of validity about any user ID which
matches the e-mail address by which the certificate was looked up,
with no claims made about any <spanx style="verb">display-name</spanx> portions, or about any
user ID that doesn't match the queried e-mail address at all.</t>

<t>A keystore that offers some sort of validation interface may also
change its opinion about the validity of a given certificate or user
ID over time; the interface described above only allows the client to
ask about the keystore's current opinion, but a more complex interface
might be capable of describing the keystore's assertion over time.
See also <xref target="in-the-past"/>.</t>

<t>An abuse-resistant keystore that clients rely on for any part of their
certificate validation process <bcp14>SHOULD</bcp14> offer a distinct interface for
making assertions about certificate and user ID validity to help
clients avoid some of the subtleties involved with inference based on
presence described above.</t>

<t>Note that the certificate validation operation as described above has
a boolean response.  While a "true" response indicates that keystore
believes the user ID or e-mail address is acceptable for use with the
certificate referred to by the public key fingerprint, a "false"
response doesn't necessarily mean that the keystore actively thinks
that the certificate is actively bad, or must not be used for the
referenced identity.  Rather, "false" is the default state: no opinion
is expressed by the keystore, and the client is left to make their own
inference about validity based on other factors.  A keystore <bcp14>MAY</bcp14> offer
a more nuanced validity interface; if it does, it <bcp14>SHOULD</bcp14> explicitly
document the semantics of the different response types so that clients
can make appropriate judgment.</t>

</section>
<section anchor="certificate-submission"><name>Certificate Submission</name>

<t>Different keystores have different ways to submit a certificate for
consideration for ingestion, including:</t>

<t><list style="symbols">
  <t>a simple upload of a certificate via HTTP</t>
  <t>round-trip e-mail verification</t>
  <t>proof of presence in some other service</t>
  <t>vouching, or other forms of multi-party attestation</t>
</list></t>

<t>Because these schemes vary so widely, this document does not attempt
to describe the keystore certificate submission process in detail.
However, guidance can be found for implementations that generate,
manage, and submit certificates in <xref target="cert-best-practices"/>.</t>

</section>
</section>
<section anchor="simple-mitigations"><name>Simple Mitigations</name>

<t>These steps can be taken by any keystore that wants to avoid obviously
malicious abuse.  They can be implemented on receipt of any new
packet, and are based strictly on the structure of the packet itself.</t>

<section anchor="large-packets"><name>Decline Large Packets</name>

<t>While <xref target="RFC4880"/> permits OpenPGP packet sizes of arbitrary length,
OpenPGP certificates rarely need to be so large.  An abuse-resistant
keystore <bcp14>SHOULD</bcp14> reject any OpenPGP packet larger than 8383
octets. (This cutoff is chosen because it guarantees that the packet
size can be represented as a one- or two-octet <xref target="RFC4880"/> "New Format
Packet Length", but it could be reduced further)</t>

<t>This may cause problems for user attribute packets that contain large
images, but it's not clear that these images are concretely useful in
any context.  Some keystores <bcp14>MAY</bcp14> extend this limit for user attribute
packets specifically, but <bcp14>SHOULD NOT</bcp14> allow even user attributes
packets larger than 65536 octets.</t>

</section>
<section anchor="enforce-strict-user-ids"><name>Enforce Strict User IDs</name>

<t><xref target="RFC4880"/> indicates that User IDs are expected to be UTF-8 strings.
An abuse-resistant keystore <bcp14>MUST</bcp14> reject any user ID that is not valid
UTF-8.</t>

<t>Some abuse-resistant keystores <bcp14>MAY</bcp14> only accept User IDs that meet even
stricter conventions, such as an <xref target="RFC5322"/> <spanx style="verb">name-addr</spanx> or
<spanx style="verb">addr-spec</spanx>, or a URL like <spanx style="verb">ssh://host.example.org</spanx> (see
<xref target="user-id-conventions"/>).</t>

<t>As simple text strings, User IDs don't need to be nearly as long as
any other packets.  An abuse-resistant keystore <bcp14>SHOULD</bcp14> reject any user
ID packet larger than 1024 octets.</t>

</section>
<section anchor="scoped-user-ids"><name>Scoped User IDs</name>

<t>Some abuse-resistant keystores may restrict themselves to publishing
only certificates with User IDs that match a specific pattern.  For
example, <xref target="RFC7929"/> encourages publication in the DNS of only
certificates whose user IDs refer to e-mail addresses within the DNS
zone.  <xref target="I-D.koch-openpgp-webkey-service"/> similarly aims to restrict
publication to certificates relevant to the specific e-mail domain.</t>

</section>
<section anchor="standardize-unhashed"><name>Strip or Standardize Unhashed Subpackets</name>

<t><xref target="RFC4880"/> signature packets contain an "unhashed" block of
subpackets.  These subpackets are not covered by any cryptographic
signature, so they are ripe for abuse.</t>

<t>An abuse-resistant keystore <bcp14>SHOULD</bcp14> strip out all unhashed subpackets
but the following exceptions:</t>

<section anchor="issuer-fingerprint"><name>Issuer Fingerprint</name>

<t>Some certifications only identify the issuer of the certification by
an unhashed Issuer or Issuer Fingerprint subpacket.  If a
certification's hashed subpacket section has no Issuer Fingerprint
(see <xref target="I-D.ietf-openpgp-crypto-refresh"/>) subpacket, then an
abuse-resistant keystore that has cryptographically validated the
certification <bcp14>SHOULD</bcp14> synthesize an appropriate Issuer Fingerprint
subpacket and include it in the certification's unhashed subpackets.</t>

</section>
<section anchor="cross-sigs"><name>Cross-sigs</name>

<t>Some Primary Key Binding Signatures ("cross-sigs") are distributed as
unhashed subpackets in a Subkey Binding Signature.  A
cryptographically-validating abuse-resistant keystore <bcp14>SHOULD</bcp14> be
willing to redistribute a valid cross-sig as an unhashed subpacket.</t>

<t>The redistributed unhashed cross-sig itself should be stripped of all
unhashed subpackets.</t>

</section>
</section>
<section anchor="decline-user-attributes"><name>Decline User Attributes</name>

<t>Due to size concerns, some abuse-resistant keystores <bcp14>MAY</bcp14> choose to
ignore user attribute packets entirely, as well as any certifications
that cover them.</t>

</section>
<section anchor="decline-non-exportable-certifications"><name>Decline Non-exportable Certifications</name>

<t>An abuse-resistant keystore <bcp14>MUST NOT</bcp14> accept any certification that has
the "Exportable Certification" subpacket present and set to 0.  While
most keystore clients will not upload these "local" certifications
anyway, a reasonable public keystore that wants to minimize data has
no business storing or distributing these certifications.</t>

</section>
<section anchor="decline-data-from-the-future"><name>Decline Data From the Future</name>

<t>Many OpenPGP packets have time-of-creation timestamps in them.  An
abuse-resistant keystore with a functional real-time clock <bcp14>MAY</bcp14> decide
to only accept packets whose time-of-creation is in the past.</t>

<t>Note that some OpenPGP implementations may pre-generate OpenPGP
material intended for use only in some future window (e.g. "Here is
the certificate we plan to use to sign our software next year; do not
accept signatures from it until then."), and may use modified
time-of-creation timestamps to try to achieve that purpose.  This
material would not be distributable ahead of time by an
abuse-resistant keystore that adopts this mitigation.</t>

</section>
<section anchor="accept-only-profiled-certifications"><name>Accept Only Profiled Certifications</name>

<t>An aggressively abuse-resistant keystore <bcp14>MAY</bcp14> decide to only accept
certifications that meet a specific profile.  For example, it <bcp14>MAY</bcp14>
reject certifications with unknown subpacket types, unknown notations,
or certain combinations of subpackets.  This can help to minimize the
amount of room for garbage data uploads.</t>

<t>Any abuse-resistant keystore that adopts such a strict posture should
clearly document what its expected certificate profile is, and should
have a plan for how to extend the profile if new types of
certification appear that it wants to be able to distribute.</t>

<t>Note that if the profile is ever restricted (rather than extended),
and the restriction is applied to the material already present, such a
keystore is no longer append-only (see <xref target="non-append-only"/>).</t>

</section>
<section anchor="authorities"><name>Accept Only Certificates Issued by Designated Authorities</name>

<t>An abuse-resistant keystore capable of cryptographic validation <bcp14>MAY</bcp14>
retain a list of designated authorities, typically in the form of a
set of known public keys.  Upon receipt of a new OpenPGP certificate,
the keystore can decide whether to accept or decline each user ID of
the certificate based whether that user ID has a certification that
was issued by one or more of the designated authorities.</t>

<t>If no user IDs are certified by designated authority, such a keystore
<bcp14>SHOULD</bcp14> decline the certificate and its primary key entirely.  Such a
keystore <bcp14>SHOULD</bcp14> decline to retain or propagate all certifications
associated with each accepted user ID except for first-party
certifications and certifications by the designated authorities.</t>

<t>The operator of such a keystore <bcp14>SHOULD</bcp14> have a clear policy about its
set of designated authorities.</t>

<t>Given the ambiguities about expiration and revocation, such a
keyserver <bcp14>SHOULD</bcp14> ignore expiration and revocation of authority
certifications, and simply accept and retain as long as the
cryptographic signature is valid.</t>

<t>Note that if any key is removed from the set of designated
authorities, and that change is applied to the existing keystore, such
a keystore may no longer be append-only (see
<xref target="non-append-only"/>).</t>

</section>
<section anchor="blocklist"><name>Decline Packets by Blocklist</name>

<t>The maintainer of the keystore may keep a specific list of "known-bad"
material, and decline to accept or redistribute items matching that
blocklist.  The material so identified could be anything, but most
usefully, specific public keys or User IDs could be blocked.</t>

<t>Note that if a blocklist grows to include an element already present
in the keystore, it will no longer be append-only (see
<xref target="non-append-only"/>).</t>

<t>Some keystores may choose to apply a blocklist only at retrieval time
and not apply it at ingestion time.  This allows the keystore to be
append-only, and permits synchronization between keystores that don't
share a blocklist, and somewhat reduces the attacker's incentive for
flooding the keystore (see <xref target="retrieval-time-mitigations"/> for more
discussion).</t>

<t>Note that development and maintenance of a blocklist is not without
its own potentials for abuse.  For one thing, the blocklist may itself
grow without bound.  Additionally, a blocklist may be socially or
politically contentious as it may describe data that is toxic
(<xref target="toxic-data"/>) in one community or jurisdiction but not another.
There needs to be a clear policy about how it is managed, whether by
delegation to specific decision-makers, or explicit tests.
Furthermore, the existence of even a well-intentioned blocklist may be
an "attractive nuisance," drawing the interest of would-be censors or
other attacker interested in controlling the ecosystem reliant on the
keystore in question.</t>

</section>
</section>
<section anchor="retrieval-time-mitigations"><name>Retrieval-time Mitigations</name>

<t>Most of the abuse mitigations described in this document are described
as being applied at certificate ingestion time.  It's also possible to
apply the same mitigations when a certificate is retrieved from the
keystore (that is, during certificate lookup, refresh, or discovery).
Applying an abuse mitigation at retrieval time may help a client
defend against a user ID flooding (<xref target="user-id-flooding"/>), certificate
flooding (<xref target="certificate-flooding"/>), or fingerprint flooding
(<xref target="fingerprint-flooding"/>) attack.  It may also help a keystore limit
its liability for redistributing toxic data (<xref target="toxic-data"/>).
However, only mitigations applied at ingestion time are able to
mitigate keystore flooding attacks (<xref target="keystore-flooding"/>).</t>

<t>Some mitigations (like the non-append-only mitigations described in
<xref target="non-append-only"/>) may be applied as filters at retrieval time,
while still allowing access to the (potentially much larger)
unfiltered dataset associated given certificate or user ID via a
distinct interface.</t>

<t>The rest of this section documents specific mitigations that are only
relevant at retrieval time (certificate discovery, lookup, or refresh).</t>

<section anchor="user-id-redacting"><name>Redacting User IDs</name>

<t>Some abuse-resistant keystores may accept and store user IDs but
decline to redistribute some or all of them, while still distributing
the certifications that cover those redacted user IDs.  This draft
refers to such a keystore as a "user ID redacting" keystore.</t>

<t>The certificates distributed by such a keystore are technically
invalid <xref target="RFC4880"/> "transferable public keys", because they lack a
user ID packet, and the distributed certifications cannot be
cryptographically validated independently.  However, an OpenPGP
implementation that already knows the user IDs associated with a given
primary key will be capable of associating each certification with the
correct user ID by trial signature verification.</t>

<section anchor="certificate-refresh-with-redacted-user-ids"><name>Certificate Refresh with Redacted User IDs</name>

<t>A user ID redacting keystore is useful for certificate refresh by a
client that already knows the user ID it expects to see associated
with the certificate.  For example, a client that knows a given
certificate currently has two specific user IDs could access the
keystore to learn that one of the user IDs has been revoked, without
any other client learning the user IDs directly from the keystore.</t>

</section>
<section anchor="certificate-discovery-with-redacted-user-ids"><name>Certificate Discovery with Redacted User IDs</name>

<t>A user ID redacting keystore is somewhat less useful for clients doing
certificate discovery.  Consider the circumstance of receiving a
signed e-mail without access to the signing certificate.  If the
verifier retrieves the certificate from a user ID redacting keystore
by via the Issuer Fingerprint from the signature, and the signature
validates, the received certificate might not be a valid "transferable
public key" unless the client can synthesize the proper user ID.</t>

<t>A reasonable client that wants to validate a certification in the user
ID redacted certificate <bcp14>SHOULD</bcp14> try to synthesize possible user IDs
based on the value of the <xref target="RFC5322"/> From: header in the message:</t>

<t><list style="symbols">
  <t>Decode any <xref target="RFC2047"/> encodings present in the raw header value,
converting into UTF-8 <xref target="UNICODE-NORMALIZATION"/> form C (NFC),
trimming all whitespace from the beginning and the end of the
string.</t>
  <t>The resulting string should be an <xref target="RFC5322"/> <spanx style="verb">name-addr</spanx> or
<spanx style="verb">addr-spec</spanx>.</t>
  <t>If it is a <spanx style="verb">name-addr</spanx>, convert the UTF-8 string into an OpenPGP user
ID and check whether the certification validates, terminating on success.  <list style="symbols">
      <t>If the test fails, extract the <spanx style="verb">addr-spec</spanx> from the <spanx style="verb">name-addr</spanx>
and continue.</t>
    </list></t>
  <t>Canonicalize the <spanx style="verb">addr-spec</spanx> according to
<xref target="e-mail-address-canonicalization"/>, and check whether the
certification validates, terminating on success.</t>
  <t>If it doesn't validate wrap the canonicalized <spanx style="verb">addr-spec</spanx> in
angle-brackets ("&lt;" and "&gt;") and test the resulting minimalist
<spanx style="verb">name-addr</spanx> against the certification, terminating on success.</t>
  <t>If all of the above fails, synthesis has failed.</t>
</list></t>

</section>
<section anchor="certificate-lookup-with-redacted-user-ids"><name>Certificate Lookup with Redacted User IDs</name>

<t>It's possible (though non-intuitive) to use a user ID redacting
keystore for certificate lookup.  Since the keystore retains (but
does not distribute) the user IDs, they can be used to select
certificates in response to a search.  The OpenPGP certificates sent
back in response to the search will not contain the user IDs, but a
client that knows the full user ID they are searching for will be able
to verify the returned certifications.</t>

<t>Certificate lookup from a user ID redacting keystore works better for
certificate lookup by exact user ID match than it does for substring
match, because a client that retrieves a certificate via a substring
match may not be able to reconstruct the redacted user ID.</t>

<t>However, without some additional restrictions on which certifications
are redistributed (whether the user ID is redacted or not),
certificate lookup can be flooded (see <xref target="uploads-vs-lookup"/>).</t>

</section>
<section anchor="uidhash"><name>Hinting Redacted User IDs</name>

<t>To ensure that the distributed certificate is at least structurally a
valid <xref target="RFC4880"/> transferable public key, a user ID redacting
keystore <bcp14>MAY</bcp14> distribute an empty user ID (an OpenPGP packet of tag 13
whose contents are a zero-octet string) in place of the omitted user
ID.  This two-octet replacement user ID packet ("\xb4\x00") is called
the "unstated user ID".</t>

<t>To facilitate clients that match certifications with specific user
IDs, a user ID redacting keystore <bcp14>MAY</bcp14> insert a non-hashed notation
subpacket into the certification.  The notation will have a name of
"uidhash", with 0x80 ("human-readable") flag unset.  The value of such
a notation <bcp14>MUST</bcp14> be 32 octets long, and contains the SHA-256
cryptographic digest of the UTF-8 string of the redacted user ID.</t>

<t>A certificate refresh client which receives such a certification after
the "unstated user ID" <bcp14>SHOULD</bcp14> compute the SHA-256 digest of all user
IDs it knows about on the certificate, and compare the result with the
contents of the "uidhash" notation to decide which user ID to try to
validate the certification against.</t>

</section>
<section anchor="uid-recovery-brute-force"><name>User ID Recovery by Client Brute Force</name>

<t>User ID redaction is at best an imperfect process.  Even if a keystore
redacts a User ID, if it ships a certification over that user ID, an
interested client can guess user IDs until it finds one that causes
the signature to verify.  This is even easier when the space of
legitimate user IDs is relatively small, such as the set of
commonly-used hostnames.</t>

</section>
</section>
<section anchor="primary-key-only-refresh"><name>Primary-key Only Certificate Refresh</name>

<t>Abuse-resistant keystores can defend against a fingerprint flooding
<xref target="fingerprint-flooding"/> attack during certificate refresh by
implementing a narrowly-constrained certificate refresh interface.</t>

<t>Such a keystore <bcp14>MUST</bcp14> accept only a full fingerprint as the search
parameter from the certificate refresh client, and it <bcp14>MUST</bcp14> return at
most a single certificate whose primary key matches the requested
fingerprint.  It <bcp14>MUST NOT</bcp14> return more than one certificate, and it
<bcp14>MUST NOT</bcp14> return any certificate whose primary key does not match the
fingerprint.  In particular, it <bcp14>MUST NOT</bcp14> return certificates where
only the subkey fingerprint matches.</t>

<t>Note that <xref target="I-D.shaw-openpgp-hkp"/> does not offer the primitive
described in <xref target="certificate-refresh"/> exactly.  In that specification,
the set of keys returned by a "get" operation with a "search"
parameter that appears to be a full fingerprint is ambiguous.  Some
popular implementations (e.g., <xref target="SKS"/>) do not currently implement
this mitigation, because they return certificates with subkeys that
match the fingerprint.</t>

</section>
<section anchor="require-cross-sig-discovery"><name>Require Valid Cross-Sigs for Certificate Discovery</name>

<t>By definition, certificate discovery needs to be able to match
subkeys, not just primary keys.  This means that the mitigation in
<xref target="primary-key-only-refresh"/> is ineffective for a keystore that offers
a certificate discovery interface.</t>

<t>An abuse-resistant keystore that aims to defend its certificate
discovery interface from a fingerprint flooding
(<xref target="fingerprint-flooding"/>) attack can follow the following procedure.</t>

<t>Such a keystore <bcp14>MUST</bcp14> accept only a full fingerprint or a 64-bit key ID
as the search parameter from the certificate discovery client.  It
<bcp14>MUST</bcp14> only match that fingerprint against the following:</t>

<t><list style="symbols">
  <t>the fingerprint or key ID of a primary key associated with a valid
certificate</t>
  <t>the fingerprint or key ID of a cryptographically-valid subkey that
also has a cross-sig.</t>
</list></t>

<t>This defends against the fingerprint flooding attack because a
certificate will only be returned by subkey if the subkey has agreed
to be associated with the primary key (and vice versa).</t>

<t>Note that this mitigation means that certificate discovery will fail
if used for subkeys that lack cross-sigs.  In particular, this means
that a client that tries to use the certificate discovery interface to
retrieve a certificate based on its encryption-capable subkey (e.g.,
taking the key ID from a Public Key Encrypted Session Key (PKESK)
packet) will have no success.</t>

<t>This is an acceptable loss, since the key ID in a PKESK is typically
unverifiable anyway.</t>

</section>
</section>
<section anchor="contextual-mitigations"><name>Contextual Mitigations</name>

<t>Some mitigations make the acceptance or rejection of packets
contingent on data that is already in the keystore or the keystore's
developing knowledge about the world.  This means that, depending on
the order that the keystore encounters the various material, or how it
accesses or finds the material, the final set of material retained and
distributed by the keystore might be different.</t>

<t>While this isn't necessarily bad, it may be a surprising property for
some users of keystores.</t>

<section anchor="accept-only-cryptographically-verifiable-certifications"><name>Accept Only Cryptographically-verifiable Certifications</name>

<t>An abuse-resistant keystore that is capable of doing cryptographic
validation <bcp14>MAY</bcp14> decide to reject certifications that it cannot
cryptographically validate.</t>

<t>This may mean that the keystore rejects some packets while it is
unaware of the public key of the issuer of the packet.</t>

<t>As long as the keystore implements the verification algorithm, Any
self-signature should always be cryptographically-verifiable, since
the public key of the issuer is already present in the certificate
under consideration.</t>

</section>
<section anchor="accept-only-certificates-issued-by-known-certificates"><name>Accept Only Certificates Issued by Known Certificates</name>

<t>This is an extension of <xref target="authorities"/>, but where the set of
authorities is just the set of certificates already known to the
keystore.  An abuse-resistant keystore that adopts this strategy is
effectively only crawling the reachable graph of OpenPGP certificates
from some starting core.</t>

<t>A keystore adopting the mitigation <bcp14>SHOULD</bcp14> have a clear documentation
of the core of initial certificates it starts with, as this is
effectively a policy decision.</t>

<t>This mitigation measure may fail due to a compromise of any secret key
that is associated with a primary key of a certificate already present
in the keystore.  Such a compromise permits an attacker to flood the
rest of the network.  In the event that such a compromised key is
identified, it might be placed on a blocklist (see <xref target="blocklist"/>).  In
particular, if a public key is added to a blocklist for a keystore
implementing this mitigation, and it is removed from the keystore,
then all certificates that were only "reachable" from the blocklisted
certificate should also be simultaneously removed.</t>

<t>FIXME: There are complexities associated with this strategy when
certificates expire or are revoked.  If expiration or revocation cause
some certificates to become "unreachable", what should such a keystore
do?</t>

</section>
<section anchor="rate-limit-submissions-by-ip-address"><name>Rate-limit Submissions by IP Address</name>

<t>Some OpenPGP keystores accept material from the general public over
the Internet.  If an abuse-resistant keystore observes a flood of
material submitted to the keystore from a given Internet address, it
<bcp14>MAY</bcp14> choose to throttle submissions from that address.  When receiving
submissions over IPv6, such a keystore <bcp14>MAY</bcp14> choose to throttle entire
nearby subnets, as a malicious IPv6 host is more likely to have
multiple addresses.</t>

<t>This requires that the keystore maintain state about recent
submissions over time and address.  It may also be problematic for
users who appear to share an IP address from the vantage of the
keystore, including those behind a NAT, using a VPN, or accessing the
keystore via Tor.</t>

</section>
<section anchor="exterior-process"><name>Accept Certificates Based on Exterior Process</name>

<t>Some public keystores resist abuse by explicitly filtering OpenPGP
material based on a set of external processes.  For example,
<xref target="DEBIAN-KEYRING"/> adjudicates the contents of the "Debian keyring"
keystore based on organizational procedure and manual inspection.</t>

</section>
<section anchor="accept-certificates-by-e-mail-validation"><name>Accept Certificates by E-mail Validation</name>

<t>Some keystores resist abuse by declining any certificate until the
user IDs have been verified by e-mail.  When these "e-mail validating"
keystores review a new certificate that has a user ID with an e-mail
address in it, they send an e-mail to the associated address with a
confirmation mechanism (e.g., a high-entropy HTTPS URL link) in it.
The e-mail itself <bcp14>MAY</bcp14> be encrypted to an encryption-capable
key found in the proposed certificate.  If the keyholder triggers the
confirmation mechanism, then the keystore accepts the certificate.</t>

<t>Some e-mail validating keystores <bcp14>MAY</bcp14> choose to distribute
certifications over all user IDs for any given certificate, but will
redact (see <xref target="user-id-redacting"/>) those user IDs that have not been
e-mail validated.</t>

<t><xref target="PGP-GLOBAL-DIRECTORY"/> describes some concerns held by a keystore
operator using this approach.  <xref target="MAILVELOPE-KEYSERVER"/> is another
example.</t>

</section>
</section>
<section anchor="non-append-only"><name>Non-append-only mitigations</name>

<t>The following mitigations may cause some previously-retained packets
to be dropped after the keystore receives new information, or as time
passes.  This is entirely reasonable for some keystores, but it may be
surprising for clients of a keystore that expect the keystore to be
append-only (for example, some keyserver synchronization techniques
may expect this property to hold).</t>

<t>Furthermore, keystores that drop old data (e.g., superseded
certifications) may make it difficult or impossible for their users to
reason about the validity of signatures that were made in the past.
See <xref target="in-the-past"/> for more considerations.</t>

<t>Note also that many of these mitigations depend on cryptographic
validation, so they're typically contextual as well.</t>

<t>A keystore that needs to be append-only, or which cannot perform
cryptographic validation <bcp14>MAY</bcp14> omit these mitigations.  Alternately, a
keystore may omit these mitigations at certificate ingestion time, but
apply these mitigations at retrieval time (during certificate refresh,
discovery, or lookup), and offer a more verbose (non-mitigated)
interface for auditors, as described in
<xref target="retrieval-time-mitigations"/>.</t>

<t>Note that <xref target="GnuPG"/> anticipates some of these suggestions with its
"clean" subcommand, which is documented as:</t>

<figure><artwork><![CDATA[
Compact  (by  removing all signatures except the selfsig)
any user ID that is no longer usable  (e.g.  revoked,  or
expired). Then, remove any signatures that are not usable
by the trust calculations.   Specifically,  this  removes
any  signature that does not validate, any signature that
is superseded by a later signature,  revoked  signatures,
and signatures issued by keys that are not present on the
keyring.
]]></artwork></figure>

<section anchor="drop-superseded"><name>Drop Superseded Signatures</name>

<t>An abuse-resistant keystore <bcp14>SHOULD</bcp14> drop all signature packets that are
explicitly superseded.  For example, there's no reason to retain or
distribute a self-sig by key K over User ID U from 2017 if the
keystore have a cryptographically-valid self-sig over &lt;K,U&gt; from 2019.</t>

<t>Note that this covers both certifications and signatures over subkeys,
as both of these kinds of signature packets may be superseded.</t>

<t>Getting this right requires a nuanced understanding of subtleties
in <xref target="RFC4880"/> related to timing and revocation.</t>

<t>One problem with dropping superseded signature packets is that a point-in-time view of a certificate becomes difficult to recover from the keystore.
Following the example above, imagine encountering signature issued by key K in over an e-mail message from 2018.
What happens when the e-mail reader evaluates it in 2022, after the 2019 superseding self-sig has appeared?
If the keystore dropped the earlier self-sig, then a signature verifier depending on the keystore for access to the certificate will not find a binding for User ID U that was valid at the time the message was signed.</t>

<t>A more lenient approach that grants some amount of historical depth while still avoiding arbitrarily-large flooding would be for a keystore to retain the N most recent signatures in a chain of superseded signatures.</t>

</section>
<section anchor="drop-expired"><name>Drop Expired Signatures</name>

<t>If a signature packet is known to only be valid in the past, there is
no reason to distribute it further.  An abuse-resistant keystore with
access to a functional real-time clock <bcp14>SHOULD</bcp14> drop all
certifications and subkey signature packets with an expiration date in
the past.</t>

<t>Note that this assumes that the keystore and its clients all have
roughly-synchronized clocks.  If that is not the case, then there will
be many other problems!</t>

<t>This has a similar problem with point-in-time verifications as the problems described in <xref target="drop-superseded"/>.</t>

</section>
<section anchor="drop-dangling-user-ids-user-attributes-and-subkeys"><name>Drop Dangling User IDs, User Attributes, and Subkeys</name>

<t>If enough signature packets are dropped, it's possible that some of
the things that those signature packets cover are no longer valid.</t>

<t>An abuse-resistant keystore which has dropped all certifications that
cover a User ID <bcp14>SHOULD</bcp14> also drop the User ID packet.</t>

<t>Note that a User ID that becomes invalid due to revocation <bcp14>MUST NOT</bcp14> be
dropped, because the User ID's revocation signature itself remains
valid, and needs to be distributed.</t>

<t>A primary key with no User IDs and no subkeys and no revocations <bcp14>MAY</bcp14>
itself also be removed from distribution, though note that the removal
of a primary key may make it impossible to cryptographically validate
other certifications held by the keystore.</t>

</section>
<section anchor="only-revocation"><name>Drop All Other Elements of a Directly-Revoked Certificate</name>

<t>If the primary key of a certificate is revoked via a key revocation
signature (type 0x20), an abuse-resistant keystore <bcp14>SHOULD</bcp14> drop all
the rest of the associated data (user IDs, user attributes, and subkeys,
and all attendant certifications and subkey signatures).  This defends
against an adversary who compromises a primary key and tries to flood
the certificate to hide the revocation.</t>

<t>Note that the key revocation signature <bcp14>MUST NOT</bcp14> be dropped.</t>

<t>In the event that an abuse-resistant keystore is flooded with key
revocation signatures, it should retain the hardest, earliest
revocation (see also <xref target="revocations"/>).</t>

<t>In particular, if any of the key revocation signatures is a "hard"
revocation, the abuse-resistant keystore <bcp14>SHOULD</bcp14> retain the earliest
such revocation signature (by signature creation date).</t>

<t>Otherwise, the abuse-resistant keystore <bcp14>SHOULD</bcp14> retain the earliest
"soft" key revocation signature it has seen.</t>

<t>If either of the above date comparisons results in a tie between two
revocation signatures of the same "hardness", an abuse-resistant
keystore <bcp14>SHOULD</bcp14> retain the signature that sorts earliest based on a
binary string comparison of the key revocation signature packet
itself.</t>

</section>
<section anchor="implicit-expiration-date"><name>Implicit Expiration Date</name>

<t>In combination with some of the dropping mitigations above, a
particularly aggressive abuse-resistant keystore <bcp14>MAY</bcp14> choose an
implicit expiration date for all signature packets.  For example, a
signature packet that claims no expiration could be treated by the
keystore as expiring 3 years after issuance.  This would permit the
keystore to eject old packets on a rolling basis.</t>

<t>An abuse-resistant keystore that adopts this mitigation needs a policy
for handling signature packets marked with an explicit expiration that
is longer than implicit maximum.  The two obvious strategies are:</t>

<t><list style="symbols">
  <t>cap the packet's expiration to the system's implicit expiration
date, or</t>
  <t>accept the explicit expiration date.</t>
</list></t>

<t>Warning: Any implementation of this idea is pretty radical, and it's
not clear what it would do to an ecosystem that depends on such a
keystore.  It probably needs more thinking.</t>

</section>
</section>
<section anchor="sovereignty"><name>Primary Key Sovereignty</name>

<t>A keystore can defend against malicious external flooding by treating
the "first party" of each certificate as "sovereign" over that
certificate.  This means in practice that no part of the certificate
will redistributed without explicit permission from the primary key.
We call a keystore that aims to respect primary key sovereignty a
"sovereignty-respecting" keystore.</t>

<t><xref target="RFC4880"/> defines "Key Server Preferences" with a "No-modify" bit.
That bit has never been respected by any keyserver implementation that
the author is aware of.  A sovereignty-respecting keystore effectively
treats that bit as always set, whether it is present in any part of
the certificate or not.</t>

<t>A sovereignty-respecting abuse-resistant keystore can apply other
constraints in addition to primary-key sovereignty, of course, for
reasons as diverse as performance concerns, storage capacity, legal
regulation, cryptographic algorithm support, or project policy.  It
will not redistribute anything that has not been explicitly approved
by the primary key, but that does not mean it has to redistribute
everything that has been explicitly approved by the primary key.</t>

<t>The remaining subsections of <xref target="sovereignty"/> describe some sensible
strategies for a sovereignty-respecting keystore.</t>

<section anchor="refresh-only"><name>Refresh-only Keystores</name>

<t>Some soveriegnty-respecting keystores may resist abuse by declining to
accept any user IDs or certifications whatsoever.</t>

<t>Such a keystore <bcp14>MUST</bcp14> be capable of cryptographic validation.  It
accepts primary key packets, cryptographically-valid direct-key and
revocation signatures from a primary key over itself, subkeys and their
cryptographically-validated binding signatures (and cross-sigs, where
necessary).</t>

<t>A client of a refresh-only keystore cannot possibly use the keystore
for certificate lookup, because there are no user IDs to match.  And
it is not particularly useful for certificate discovery, because the
returned certificate would have no identity information.  However,
such a keystore can be used for certificate refresh, as it's possible
to ship revocations, new subkeys,
updates to subkey expiration, subkey revocations, and updates of direct key
signature-based certificate expiration or other OpenPGP properties.</t>

<t>Note that many popular OpenPGP implementations do not implement direct
primary key expiration mechanisms, relying instead on user ID
expirations.  These user ID expiration dates or other metadata
associated with a self-certification will not be distributed by an
refresh-only keystore.</t>

<t>Certificates shipped by an refresh-only keystore are technically
invalid <xref target="RFC4880"/> "transferable public keys," because they lack a
user ID packet.  However many OpenPGP implementations will accept such
a certificate if they already know of a user ID for the certificate,
because the composite certificate resulting from a merge will be a
standards-compliant transferable public key.</t>

</section>
<section anchor="first-party-only"><name>First-party-only Keystores</name>

<t>Slightly more permissive than the refresh-only keystore described in
<xref target="refresh-only"/> is a sovereignty-respecting keystore that also
permits user IDs and their self-sigs.</t>

<t>A first-party-only keystore only accepts and distributes
cryptographically-valid first-party certifications.  Given a primary
key that the keystore understands, it will only attach user IDs that
have a valid self-sig, and will only accept and re-distribute subkeys
that are also cryptographically valid (including requiring cross-sigs
for signing-capable subkeys as recommended in <xref target="RFC4880"/>).</t>

<t>This effectively avoids certificate flooding attacks, because the only
party who can make a certificate overly large is the holder of the
secret corresponding to the primary key itself.</t>

<t>Note that a first-party-only keystore is still problematic for
those people who rely on the keystore for retrieval of third-party
certifications.  <xref target="fpa3pc"/> attempts to address this lack.</t>

<section anchor="first-party-only-without-user-ids"><name>First-party-only Without User IDs</name>

<t>It is possible to operate an first-party-only keystore that
redistributes certifications (in particular, self-sigs) while
declining to redistribute user IDs themselves
(see <xref target="user-id-redacting"/>).  This defends against concerns about
publishing identifiable information, while enabling full certificate
refresh for those keystore clients that already know the associated
user IDs for a given certificate.</t>

</section>
</section>
<section anchor="mutual-certifications"><name>Mutual Certifications</name>

<t>Another approach is to permit re-distribution of certifications only when they are mutually corroborated.
That is, if key X has a self-signed UID A, and key Y has a self-signed UID B, then the keystore <bcp14>MAY</bcp14> store a certification from Y over (X,A) or from X over (Y,B), but it will not redistribute either certification until it sees both of them.</t>

<t>Attention to detail is needed when deploying this strategy over time.
When one certification of a mutually-corroborative pair expires, is revoked or superseded, or otherwise becomes invalid, the other certification in the pair also needs to be marked as not for redistribution.</t>

</section>
<section anchor="fpa3pc"><name>First-party-attested Third-party Certifications</name>

<t>We can augment a first-party-only sovereignty-respecting keystore to
allow it to distribute third-party certifications as long as the
first-party has signed off on the specific third-party certification.</t>

<t>This can be done by placing an Attested Certifications subpacket in
the most recent self-sig of the certificate (see
<xref target="Attested-Certifications"/>).</t>

<section anchor="client-interactions"><name>Client Interactions</name>

<t>Creating such an attestation requires multiple steps by different
parties, each of which is blocked by all prior steps:</t>

<t><list style="symbols">
  <t>The first-party creates the certificate, and transfers it to the
third party.</t>
  <t>The third-party certifies it, and transfers their certification
back to the first party.</t>
  <t>The first party attests to the third party's certification by
issuing a new self-sig.</t>
  <t>Finally, the first party then transfers the updated certificate to
the keystore.</t>
</list></t>

<t>The complexity and length of such a sequence may represent a usability
obstacle to a user who needs a third-party-certified OpenPGP
certificate.</t>

<t>Few OpenPGP clients can currently create the attestations described in
<xref target="Attested-Certifications"/>.  None that the author is aware of are
user-friendly.  More implementation work needs to be done to make it
easy (and understandable) for a user to perform this kind of
attestation.</t>

</section>
<section anchor="third-party-revocations"><name>Revoking Third-party Certifications</name>

<t>A sovereignty-respecting keystore distributes a third-party
certification based on the desires of the first party, but the
third-party themselves may change their mind about the certification
that they issued.  In particular, they may revoke a previously
attested third-party certification.  This causes some additional
complexity.</t>

<section anchor="third-party-certification-revocations-arent-shipped-with-the-certificate"><name>Third-party Certification Revocations Aren't Shipped with the Certificate</name>

<t>Distributing the third-party's revocation of their certification
without the approval of the first party would arguably disrespect the
first-party's sovereignty over their own certificate.  For example,
consider an abusively large revocation, or a revocation which contains
toxic data.</t>

<t>At the same time, if the first party were to revoke their attestation,
then the third-party certification itself <em>and</em> its third-party's
revocation might not be distributed.  So distributing third-party
certification revocations directly on the certificate they refer to
doesn't seem to solve the problem for an abuse-resistant,
sovereignty-respecting keystore.</t>

</section>
<section anchor="third-party-certification-revocations-ship-with-the-issuing-certificate"><name>Third-party Certification Revocations Ship With the Issuing Certificate</name>

<t>Instead, a sovereignty-respecting keystore <bcp14>MAY</bcp14> ship a third-party
certification revocation attached to the end of the issuing
certificate, as this respects the sovereignty of all parties involved.</t>

<t>This means that the certifier's own OpenPGP certificate <bcp14>MAY</bcp14> be
distributed like so:</t>

<figure><artwork><![CDATA[
- A. Primary key
- B. User ID
- C. Self-sig (from A, binding A to B)
- D. Subkey
- E. Subkey binding signature (from A, binds D to A)
- F. Certification revocation signature
     (from A over some other key+userID, targets other
      certification)
]]></artwork></figure>

<t>Note that OpenPGP packet K is unusual here, and augments the
traditional Transferable Public Key structure from <xref target="RFC4880"/>.</t>

<t>A client that cares about third-party certifications <bcp14>SHOULD</bcp14> maintain
an index of certifications based on the SHA256 digest of the
certifications themselves (the "certification index").  The
certification revocation packet <bcp14>SHOULD</bcp14> contain a Signature Target
subpacket using SHA256 to identify the revoked certification.  The
client can use this Signature Target subpacket and the certification
index to identify the targeted certification and to compute the data
over which the revocation is made.  This use of SHA256 is not used for
cryptographic strength, but for indexing efficiency.</t>

<t>A client that cares about third-party certifications from key A <bcp14>SHOULD</bcp14>
refresh the certificate containing A from the keystore, and verify any
discovered certification revocations correctly to the appropriate
certificates, searching for the targeted revocation in its
certification index.</t>

<t>A legacy client that is unaware of this augmentation of the
Transferable Public Key structure is likely to consider packet K as
out-of-order or inapplicable (it would typically expect only a Subkey
Revocation Signature packet in this position), and so will discard it.</t>

<t>In the event that the certificate has no subkeys (packets I and J are
absent), a legacy client might consider F to be an attempt to revoke
Self-Sig C.  However, F's Signature Target subpacket does not point to
C, and the certification is not cryptographically valid over A and B,
so it should be discarded/ignored safely in that case as well.</t>

</section>
</section>
</section>
</section>
<section anchor="client-best-practices"><name>Keystore Client Best Practices</name>

<t>An OpenPGP client that needs to interact with an abuse-resistant
keystore can take steps to minimize the extent that its interactions
with a keystore can be abused by other parties via the attacks
described in <xref target="problem-statement"/>.  This section describes steps that
an abuse-resistant client can take.</t>

<section anchor="use-constrained-keystores-for-lookup"><name>Use Constrained Keystores for Lookup</name>

<t>When performing certificate lookup, an abuse-resistant client <bcp14>SHOULD</bcp14>
prefer to query abuse-resistant keystores to avoid the risks described
in <xref target="uploads-vs-lookup"/>.  In particular, keystores that defend
against User ID Flooding are significantly more reliable for
certificate lookup.</t>

</section>
<section anchor="normalize-addresses-and-user-ids-for-lookup"><name>Normalize Addresses and User IDs for Lookup</name>

<t>When performing lookup by e-mail address, an abuse-resistant client
<bcp14>SHOULD</bcp14> consider canonicalizing the e-mail address before searching
(see <xref target="e-mail-address-canonicalization"/>).</t>

<t>When searching by full User ID, unless there is a strong reason to
believe that a specific non-normalized form is preferable, an
abuse-resistant client <bcp14>SHOULD</bcp14> normalize the entire user ID into
<xref target="UNICODE-NORMALIZATION"/> Form C (NFC) before performing certificate
lookup.</t>

</section>
<section anchor="avoid-fuzzy-lookups"><name>Avoid Fuzzy Lookups</name>

<t>Certificate lookup by arbitrary substring matching, or regular
expression is prone to abuse.  An abuse-resistant client <bcp14>SHOULD</bcp14> prefer
exact-uid or exact-email match lookups where possible.</t>

<t>In particular, an abuse-resistant client should avoid trying to offer
reliable functionality that performs these sort of fuzzy lookups, and
<bcp14>SHOULD</bcp14> warn the user about risks of abuse if the user triggers a
codepath that unavoidably performs such a fuzzy lookup.</t>

</section>
<section anchor="prefer-full-fingerprint-for-discovery-and-refresh"><name>Prefer Full Fingerprint for Discovery and Refresh</name>

<t>Key IDs are inherently weaker and easier to spoof or collide than full
fingerprints.  Where possible, an abuse-resistant keystore client
<bcp14>SHOULD</bcp14> use the full fingerprint when interacting with the keystore.</t>

</section>
<section anchor="use-caution-with-keystore-provided-validation"><name>Use Caution with Keystore-provided Validation</name>

<t>When an abuse-resistant client relies on a keystore for certificate
validation, many things can go subtly wrong if the client fails to
closely track the specific semantics of the keystore's validation
claims.</t>

<t>For example, a certificate published by WKD
(<xref target="I-D.koch-openpgp-webkey-service"/>) at
<spanx style="verb">https://openpgpkey.example.org/.well-known/openpgpkey/hu/iy9q119eutrkn8s1mk4r39qejnbu3n5q?l=joe.doe</spanx>
offers a validation claim only for the e-mail address
<spanx style="verb">joe.doe@example.org</spanx>.  If the certificate retrieved at that address
contains other user IDs, or if the user ID containing that e-mail
address contains an <xref target="RFC5322"/> <spanx style="verb">display-name</spanx>, none of that
information should be considered "validated" by the fact that the
certificate was retrieved via certificate lookup by WKD.</t>

<t>When certificate validation is represented more generally by a
keystore via certificate retrieval (e.g. from an e-mail validating
keyserver that has no distinct certificate validation interface), the
thing validated is the certificate received from the keystore, and not
the result of the merge into any local copy of the certificate already
possessed by the client.</t>

<t>Consider also timing and duration of these assertions of validity,
which represent a subtle tradeoff between privacy and risk as
described in <xref target="validation-privacy"/>.</t>

</section>
</section>
<section anchor="cert-best-practices"><name>Certificate Generation and Management Best Practices</name>

<t>An OpenPGP implementation that generates or manages certificates and
expects to distribute them via abuse-resistant keystores can take
steps to ensure that the certificates generated are more likely to be
accessible when needed.  This section describes steps such an
abuse-sensitive implementation can take.</t>

<section anchor="canonicalized-e-mail-addresses"><name>Canonicalized E-Mail Addresses</name>

<t>E-mail addresses can be written in many different ways.  An
abuse-sensitive implementation considering attaching a user ID
containing an e-mail address on a certificate <bcp14>SHOULD</bcp14> ensure that the
e-mail address is structured as simply as possible.  See
<xref target="e-mail-address-canonicalization"/> for details about e-mail address
canonicalization.</t>

<t>For example, if the e-mail domain considers the local part to be
case-insensitive (as most e-mail domains do today), if a proposed user
ID contains the <spanx style="verb">addr-spec</spanx>: <spanx style="verb">Alice@EXAMPLE.org</spanx>, the implementation
<bcp14>SHOULD</bcp14> warn the user and, if possible, propose replacing the
<spanx style="verb">addr-spec</spanx> part of the user ID with <spanx style="verb">alice@example.org</spanx>.</t>

</section>
<section anchor="normalized-user-ids"><name>Normalized User IDs</name>

<t>User IDs are arbitrary UTF-8 strings, but UTF-8 offers several ways to
represent the same string.  An abuse-sensitive implementation
considering attaching a user ID to a certificate <bcp14>SHOULD</bcp14> normalize the
string using <xref target="UNICODE-NORMALIZATION"/> Form C (NFC) before creating
the self-sig.</t>

<t>At the same time, the implementation <bcp14>MAY</bcp14> also warn the user if the
"compatibility" normalized form (NFKC) differs from the candidate user
ID and, if appropriate, offer to convert the user ID to compatibility
normalized form at the user's discretion.</t>

</section>
<section anchor="avoid-large-user-attributes"><name>Avoid Large User Attributes</name>

<t>An abuse-sensitive implementation <bcp14>SHOULD</bcp14> warn the user when attaching
a user attribute larger than 8383 octets, and <bcp14>SHOULD</bcp14> refuse to attach
user attributes entirely larger than 65536 octets.  (See
<xref target="large-packets"/>)</t>

</section>
<section anchor="provide-cross-sigs"><name>Provide Cross-Sigs</name>

<t><xref target="RFC4880"/> requires cross-sigs for all signing-capable subkeys, but
is agnostic about the use of cross-sigs for subkeys of other
capabilities.</t>

<t>An abuse-sensitive implementation that wants a certificate to be
discoverable by subkey <bcp14>SHOULD</bcp14> provide cross-sigs for any subkey
capable of making a cross-sig.</t>

</section>
<section anchor="provide-issuer-fingerprint-subpackets"><name>Provide Issuer Fingerprint Subpackets</name>

<t>Issuer subpackets contain only 64-bit key IDs.  Issuer Fingerprint
subpackets contain an unambiguous designator of the issuing key,
avoiding the ambiguities described in <xref target="id-vs-fingerprint-discovery"/>.
Abuse-sensitive implementations <bcp14>SHOULD</bcp14> provide Issuer Fingerprint
subpackets.</t>

</section>
<section anchor="put-cross-sigs-and-issuer-fingerprint-in-hashed-subpackets"><name>Put Cross-Sigs and Issuer Fingerprint in Hashed Subpackets</name>

<t>Unhashed subpackets may be stripped or mangled.  Placing cross-sigs
and issuer fingerprint subpackets in the hashed subpackets will ensure
that they are propagated by any cryptographically-validating keystore,
even if that keystore fails to observe the exceptions in
<xref target="standardize-unhashed"/>.</t>

</section>
<section anchor="submit-certificates-to-restricted-lookup-capable-keystores"><name>Submit Certificates to Restricted, Lookup-Capable Keystores</name>

<t>If an abuse-sensitive implementation wants other peers to be able to
to retrieve the managed certificate by certificate lookup (that is, by
searching based on user ID or e-mail address), it needs to be aware
that submission to an unrestricted keystore is not reliable (see
<xref target="uploads-vs-lookup"/> for more details).</t>

<t>Consequently, such an implementation <bcp14>SHOULD</bcp14> submit the managed
certificate to restricted, lookup-capable keystores where possible, as
those keystores are more likely to be able to offer reliable lookup.</t>

</section>
</section>
<section anchor="side-effects-and-ecosystem-impacts"><name>Side Effects and Ecosystem Impacts</name>

<section anchor="designated-revoker"><name>Designated Revoker</name>

<t>A first-party-only keystore as described in <xref target="first-party-only"/> might
decline to distribute revocations made by the designated revoker.
This is a risk to certificate-holder who depend on this mechanism,
because an important revocation might be missed by clients depending
on the keystore.</t>

<t>FIXME: adjust this document to point out where revocations from a
designated revoker <bcp14>SHOULD</bcp14> be propagated, maybe even in
first-party-only keystores.</t>

</section>
<section anchor="id-vs-fingerprint-discovery"><name>Key IDs vs. Fingerprints in Certificate Discovery</name>

<t>During signature verification, a user performing certificate discovery
against a keystore <bcp14>SHOULD</bcp14> prefer to use the full fingerprint as an
index, rather than the 64-bit key ID.  Using a 64-bit key ID is more
likely to run into collision attacks; and if the retrieved certificate
has a matching key ID but the signature cannot be validated with it,
the client is in an ambiguous state -- did it retrieve the wrong
certificate, or is the signature incorrect?  Using the fingerprint
resolves the ambiguity: the signature is incorrect, because the
a fingerprint match is overwhelmingly stronger than a key ID match.</t>

<t>Unfortunately, many OpenPGP implementations distribute signatures with
only an Issuer subpacket, so a client attempting to find such a
certificate <bcp14>MAY</bcp14> perform certificate discovery based on only the key
ID.</t>

<t>A keystore that offers certificate discovery <bcp14>MAY</bcp14> choose to require
full fingerprint, but such a keystore will not be useful for a client
attempting to verify a bare signature from an unknown party if that
signature only has an Issuer subpacket (and no Issuer Fingerprint
subpacket).</t>

</section>
<section anchor="in-band-certificates"><name>In-band Certificates</name>

<t>There are contexts where it is expected and acceptable that the
signature appears without its certificate: for example, if the set of
valid signers is already known (as in some OpenPGP-signed operating
system updates), shipping the certificate alongside the signature
would be pointless bloat.</t>

<t>However, OpenPGP signatures are often found in contexts where the
certificate is not yet known by the verifier.  For example, many
OpenPGP-signed e-mails are not accompanied by the signing certificate.</t>

<t>In another example, the use of authentication-capable OpenPGP keys in
standard SSH connections do not contain the full OpenPGP certificates,
which means that the SSH clients and servers need to resort to
out-of-band processes if evaluation of the OpenPGP certificates is
necessary.</t>

<t>The certificate discovery interface offered by keystores is an attempt
to accommodate these situations.  But in the event that a keystore is
unavailable, does not know the certificate, or suffers from a flooding
attack, signature validation may fail unnecessarily.  In an encrypted
e-mail context specifically, such a failure may also limit the
client's ability to reply with an encrypted e-mail.</t>

<t>Certificate discovery also presents a potential privacy concern for
the signature verifier, as noted in <xref target="discovery-privacy"/>.</t>

<t>These problematic situations can be mitigated by shipping the
certificate in-band, alongside the signature.  Signers <bcp14>SHOULD</bcp14> adopt
this practice where possible to reduce the dependence of the verifier
on the keystores for certificate discovery.  <xref target="AUTOCRYPT"/> is an
example of e-mail recommendations that include in-band certificates.</t>

<section anchor="in-band-certificate-minimization-and-validity"><name>In-band Certificate Minimization and Validity</name>

<t>OpenPGP certificates are potentially large. When distributing an
in-band certificate alongside a signature in a context where size is a
concern (e.g. bandwidth, latency, or storage costs are a factor), the
distributor <bcp14>SHOULD</bcp14> reduce the size of the in-band certificate by
stripping unnecessary packets.  For example, the distributor may:</t>

<t><list style="symbols">
  <t>Strip certification and signature packets that (due to creation and
expiration time) are not relevant to the time of the signature
itself.  This ensures that the reduced certificate is
contemporaneously valid with the signature.</t>
  <t>Strip irrelevant subkeys (and associated Subkey Binding Signature
packets and cross-sigs).  If the signature was issued by a
signing-capable subkey, that subkey (and its binding signature and
cross-sig) are clearly relevant.  Other signing-capable subkeys are
likely to be irrelevant.  But determining which other subkeys are
relevant may be context-specific.  For example, in the e-mail
context, an encryption-capable subkey is likely to be contextually
relevant, because it enables the recipient to reply encrypted, and
therefore should not be stripped.</t>
  <t>Strip user IDs (and associated certifications) that are unlikely to
be relevant to the signature in question.  For example, in the
e-mail context, strip any user IDs that do not match the declared
sender of the message.</t>
  <t>Strip third-party certifications that are unlikely to be relevant
to the verifier.  Doing this successfully requires some knowledge
about what the third-parties the recipient is likely to care about.
Stripping all third-party certifications is a simple means of
certificate reduction. The verifier of such a certificate may need
to do certificate refresh against their preferred keystore to learn
about third-party certifications useful to them.</t>
</list></t>

</section>
</section>
<section anchor="certification-capable-subkeys"><name>Certification-capable Subkeys</name>

<t>Much of this discussion assumes that primary keys are the only
certification-capable keys in the OpenPGP ecosystem.  Some proposals
have been put forward that assume that subkeys can be marked as
certification-capable.  If subkeys are certification-capable, then
much of the reasoning in this draft becomes much more complex, as
subkeys themselves can be revoked by their primary key without
invalidating the key material itself.  That is, a subkey can be both
valid (in one context) and invalid (in another context) at the same
time.  So questions about what data can be dropped (e.g. in
<xref target="non-append-only"/>) are much fuzzier, and the underlying assumptions
may need to be reviewed.</t>

<t>If some OpenPGP implementations accept certification-capable subkeys,
but an abuse-resistant keystore does not accept certifications from
subkeys in general, then interactions between that keystore and those
implementations may be surprising.</t>

</section>
<section anchor="in-the-past"><name>Assessing Certificates in the Past</name>

<t>Online protocols like TLS perform signature and certificate evaluation
based entirely on the present time.  If a certificate that signs a TLS
handshake message is invalid now, it doesn't matter whether it was
valid a week ago, because the present TLS session is the context of
the evaluation.</t>

<t>But OpenPGP signatures are often evaluated at some temporal remove
from when the signature was made.  For example, software packages are
signed at release time, but those signatures are validated at download
time.  A verifier that does not already know the certificate that made
the signature will need to perform certificate discovery against some
set of keystores to find a certificate with which to check the
signature.</t>

<t>Further complicating matters, the composable nature of an OpenPGP
certificate means that the certificate associated with any particular
signing key (primary key or subkey) can transform over time.  So when
evaluating a signature that appears to have been made by a given
certificate, it may be better to try to evaluate the certificate at
the time the signature was made, rather than the present time.</t>

<section anchor="point-in-time"><name>Point-in-time Certificate Evaluation</name>

<t>When evaluating a certificate at a time T in the past (for example,
when trying to validate a data signature by that certificate that was
created at time T), one approach is to discard all packets from the
certificate if the packet has a creation time later than T.  Then
evaluate the resulting certificate from the remaining packets in the
context of time T.</t>

<t>However, any such evaluation <bcp14>MUST NOT</bcp14> ignore "hard" OpenPGP key
revocations, regardless of their creation date. (see <xref target="revocations"/>).</t>

</section>
<section anchor="verification-and-non-append-only"><name>Signature Verification and Non-append-only Keystores</name>

<t>If a non-append-only keystore (<xref target="non-append-only"/>) has dropped
superseded (<xref target="drop-superseded"/>) or expired (<xref target="drop-expired"/>)
certifications, it's possible for the certificate composed of the
remaining packets to have no valid first-party certification at the
time that a given signature was made.  If a user performs certificate
discovery against such a keystore, the certificate it retrieves would
be invalid according to <xref target="RFC4880"/>, and consequently verification of
any signature by that certificate would fail.</t>

<t>One simple mitigation to this problem is to ship a
contemporaneously-valid certificate in-band alongside the signature
(see <xref target="in-band-certificates"/>).</t>

<t>If the distributor does this, then the verifier need only learn about
revocations.  If knowledge about revocation is needed, the verifier
might perform a certificate refresh (not "certificate discovery")
against any preferred keystore, including non-append-only keystores,
merging what it learns into the in-band contemporary certificate.</t>

<t>Then the signature verifier can follow the certificate evaluation
process outlined in <xref target="point-in-time"/>, using the merged certificate.</t>

</section>
</section>
<section anchor="gaol"><name>Global Append-only Ledgers ("Blockchain")</name>

<t>The append-only aspect of some OpenPGP keystores encourages a user of
the keystore to rely on that keystore as a faithful reporter of
history, and one that will not misrepresent or hide the history that
they know about.  An unfaithful "append-only" keystore could abuse the
trust in a number of ways, including withholding revocation
certificates, offering different sets of certificates to different
clients doing certificate lookup, and so on.</t>

<t>However, the most widely used append-only OpenPGP keystore, the
<xref target="SKS"/> keyserver pool, offers no cryptographically verifiable
guarantees that it will actually remain append-only.  Users of the
pool have traditionally relied on its distributed nature, and the
presumption that coordination across a wide range of administrators
would make it difficult for the pool to reliably lie or omit
data. However, the endpoint most commonly used by clients to access
the network is <spanx style="verb">hkps://hkps.pool.sks-keyservers.net</spanx>, the default for
<xref target="GnuPG"/>.  That endpoint is increasingly consolidated, and currently
consists of hosts operated by only two distinct administrators,
increasing the risk of potential misuse.</t>

<t>Offering cryptographic assurances that a keystore could remain
append-only is an appealing prospect to defend against these kinds of
attack.  Many popular schemes for providing such assurances are known
as "blockchain" technologies, or global append-only ledgers.</t>

<t>With X.509 certificates, we have a semi-functional Certificate
Transparency (<xref target="RFC6962"/>, or "CT") ecosystem that is intended to
document and preserve evidence of (mis)issuance by well-known
certificate authorities (CAs), which implements a type of global
append-only ledger.  While the CT infrastructure remains vulnerable to
certain combinations of colluding actors, it has helped to identify
and sanction some failing CAs.</t>

<t>Like other global append-only ledgers, CT itself is primarily a
detection mechanism, and has no enforcement regime.  If a widely-used
CA were identified by certificate transparency to be untrustworthy,
the rest of the ecosystem still needs to figure out how to impose
sanctions or apply a remedy, which may or may not be possible.</t>

<t>CT also has privacy implications -- the certificates published in the
CT logs are visible to everyone, for the lifetime of the log.</t>

<t>For spam abatement, CT logs decline all X.509 certificates except
those issued by certain CAs (those in popular browser "root stores").
This is an example of the strategy outlined in <xref target="authorities"/>).</t>

<t>Additional projects that provide some aspects of global append-only
ledgers that try to address some of the concerns described here
include <xref target="KEY-TRANSPARENCY"/> and <xref target="CONIKS"/>, though they are not
specific to OpenPGP.  Both of these systems are dependent on servers
operated by identity providers, however.  And both offer the ability
to detect a misbehaving identity provider, but no specific enforcement
or recovery strategies against such an actor.</t>

<t>It's conceivable that a keystore could piggyback on the CT logs or
other blockchain/ledger mechanisms like <xref target="BITCOIN"/> to store
irrevocable pieces of data (such as revocation certificates).  Further
work is needed to describe how to do this in an effective and
performant way.</t>

</section>
<section anchor="identity-monitoring"><name>Certificate Lookup for Identity Monitoring</name>

<t>While certificate lookup is classically used to find a key to encrypt
an outbound message to, another use case for certificate lookup is for
the party in control of a particular identity to determine whether
anyone else is claiming that identity.</t>

<t>That is, a client in control of the secret key material associated
with a particular certificate with user ID X might search a keystore
for all certificates matching X in order to find out whether any other
certificates claim it.</t>

<t>This is an important safeguard as part of the ledger-based detection
mechanisms described in <xref target="gaol"/>, but may also be useful for keystores
in general.</t>

<t>However, identity monitoring against a keystore that does not defend
against user ID flooding (<xref target="user-id-flooding"/>) is expensive and
potentially of limited value.  In particular, a malicious actor with a
certificate which duplicates a given User ID could flood the keystore
with similar certificates, hiding whichever one is in malicious use.</t>

<t>Since such a keystore is not considered authoritative by any
reasonable client for the user ID in question, this attack forces the
identity-monitoring defender to spend arbitrary resources fetching and
evaluating each certificate in the flood, without knowing which
certificate other clients might be evaluating.</t>

</section>
</section>
<section anchor="openpgp-details"><name>OpenPGP details</name>

<t>This section collects details about common OpenPGP implementation
behavior that are useful in evaluating and reasoning about OpenPGP
certificates.</t>

<section anchor="revocations"><name>Revocations</name>

<t>It's useful to classify OpenPGP revocations of key material into two
categories: "soft" and "hard".</t>

<t>If the "Reason for Revocation" of an OpenPGP key is either "Key is
superseded" or "Key is retired and no longer used", it is a "soft"
revocation.</t>

<t>An implementation that interprets a "soft" revocation will typically
not invalidate signatures made by the associated key with a creation
date that predates the date of the soft revocation.  A "soft"
revocation in some ways behaves like a non-overridable expiration
date.</t>

<t>All other revocations of OpenPGP keys (with any other Reason for
Revocation, or with no Reason for Revocation at all) should be
considered "hard".</t>

<t>The presence of a "hard" revocation of an OpenPGP key indicates that
the user should reject all signatures and certifications made by that
key, regardless of the creation date of the signature.</t>

<t>Note that some OpenPGP implementations do not distinguish between
these two categories.</t>

<t>A defensive OpenPGP implementation that does not distinguish between
these two categories <bcp14>SHOULD</bcp14> treat all revocations as "hard".</t>

<t>An implementation aware of a "soft" revocation or of key or
certificate expiry at time T <bcp14>SHOULD</bcp14> accept and process a "hard"
revocation even if it appears to have been issued at a time later than
T.</t>

</section>
<section anchor="user-id-conventions"><name>User ID Conventions</name>

<t><xref target="RFC4880"/> requires a user ID to be a UTF-8 string, but does not
constrain it beyond that.  In practice, a handful of conventions
predominate in how User IDs are formed.</t>

<t>The most widespread convention is a <spanx style="verb">name-addr</spanx> as defined in
<xref target="RFC5322"/>.  For example:</t>

<figure><artwork><![CDATA[
Alice Jones <alice@example.org>
]]></artwork></figure>

<t>But a growing number of OpenPGP certificates contain user IDs that are
instead a raw <xref target="RFC5322"/> <spanx style="verb">addr-spec</spanx>, omitting the <spanx style="verb">display-name</spanx> and
the angle brackets entirely, like so:</t>

<figure><artwork><![CDATA[
alice@example.org
]]></artwork></figure>

<t>Some certificates have user IDs that are simply normal human names
(perhaps <spanx style="verb">display-name</spanx> in <xref target="RFC5322"/> jargon, though not necessarily
conforming to a specific ABNF).  For example:</t>

<figure><artwork><![CDATA[
Alice Jones
]]></artwork></figure>

<t>Still other certificates identify a particular network service by
scheme and hostname.  For example, the administrator of an ssh host
participating in the <xref target="MONKEYSPHERE"/> might choose a user ID for the
OpenPGP representing the host like so:</t>

<figure><artwork><![CDATA[
ssh://foo.example.net
]]></artwork></figure>

</section>
<section anchor="e-mail-address-canonicalization"><name>E-mail Address Canonicalization</name>

<t>When an OpenPGP user IDs includes an <spanx style="verb">addr-spec</spanx>, there still may be
multiple ways of representing the addr-spec that refer to the same
underlying mailbox.  Having a truly canonical form of an <spanx style="verb">addr-spec</spanx>
is probably impossible because of legacy deployments of mailservers
that do odd things with the local part, but e-mail addresses used in
an abuse-resistant ecosystem <bcp14>SHOULD</bcp14> be constrained enough to admit to
some sensible form of canonicalization.</t>

<section anchor="disallowing-non-utf-8-local-parts"><name>Disallowing Non-UTF-8 Local Parts</name>

<t>In <xref target="RFC5322"/>, the <spanx style="verb">local-part</spanx> can be any <spanx style="verb">dot-atom</spanx>.  But if this
is <xref target="RFC2047"/> decoded, it could be any arbitrary charset, not
necessarily UTF-8.  FIXME: Do we convert from the arbitrary charset to
UTF-8?</t>

</section>
<section anchor="domain-canonicalization"><name>Domain Canonicalization</name>

<t>FIXME: should domain name be canonicalized into punycode form?  User
IDs are typically user-facing, so i think the canonicalized form
should be the <xref target="UNICODE-NORMALIZATION"/> Form C (NFC) of the domain
name.  Can we punt to some other draft here?</t>

</section>
<section anchor="local-part-canonicalization"><name>Local Part Canonicalization</name>

<t>FIXME:  <xref target="I-D.koch-openpgp-webkey-service"/> recommends downcasing all
ASCII characters in the left-hand side, but leaves all</t>

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

<t>This document offers guidance on mitigating a range of
denial-of-service attacks on public keystores, so the entire document
is in effect about security considerations.</t>

<t>Many of the mitigations described here defend individual OpenPGP
certificates against flooding attacks (see <xref target="certificate-flooding"/>).
But only some of these mitigations defend against flooding attacks
against the keystore itself (see <xref target="keystore-flooding"/>), or against
flooding attacks on the space of possible user IDs (see
<xref target="user-id-flooding"/>).  Thoughtful threat modeling and monitoring of
the keystore and its defenses are probably necessary to maintain the
long-term health of the keystore.</t>

<t><xref target="designated-revoker"/> describes a potentially scary security problem
for designated revokers.</t>

<t>TODO (more security considerations)</t>

<section anchor="uploads-vs-lookup"><name>Tension Between Unrestricted Uploads and Certificate Lookup</name>

<t>Note that there is an inherent tension between accepting arbitrary
certificate uploads and permitting effective certificate lookup.
If a keystore accepts arbitrary certificate uploads for
redistribution, it appears to be vulnerable to user ID flooding
(<xref target="user-id-flooding"/>), which makes it difficult or impossible to rely
on for certificate lookup.</t>

<t>In the broader ecosystem, it may be necessary to use gated/controlled
certificate lookup mechanisms.  For example, both
<xref target="I-D.koch-openpgp-webkey-service"/> and <xref target="RFC7929"/> enable the
administrator of a DNS domain to distribute certificates associated
with e-mail addresses within that domain, while excluding other
parties.  As a rather different example, <xref target="I-D.mccain-keylist"/> offers
certificate lookup on the basis of interest -- a client interested in
an organization can use that mechanism to learn what certificates that
organization thinks are worth knowing about, associated with a range
of identities regardless of the particular DNS domain.  Note that
<xref target="I-D.mccain-keylist"/> does not provide the certificates directly, but
instead expects the client to be able to retrieve them by primary key
fingerprint through some other keystore capable of (and responsible
for) certificate refresh.</t>

</section>
</section>
<section anchor="privacy-considerations"><name>Privacy Considerations</name>

<t>Keystores themselves raise a host of potential privacy concerns.
Additional privacy concerns are raised by traffic to and from the
keystores.  This section tries to outline some of the risks to the
privacy of people whose certificates are stored and redistributed in
public keystores, as well as risks to the privacy of people who make
use of the key stores for certificate lookup, certificate discovery,
or certificate refresh.</t>

<section anchor="publishing-identity-information"><name>Publishing Identity Information</name>

<t>Public OpenPGP keystores often distribute names or e-mail addresses of
people.  Some people do not want their names or e-mail addresses
distributed in a public keystore, or may change their minds about it
at some point.  Append-only keystores are particularly problematic in
that regard.  The mitigation in <xref target="only-revocation"/> can help such
users strip their details from keys that they control.  However, if an
OpenPGP certificate with their details is uploaded to a keystore, but
is not under their control, it's unclear what mechanisms can be used
to remove the certificate that couldn't also be exploited to take down
an otherwise valid certificate.</t>

<t>Some jurisdictions may present additional legal risk for keystore
operators that distribute names or e-mail addresses of non-consenting
parties.</t>

<t>Refresh-only keystores (<xref target="refresh-only"/>) and user ID redacting
keystores (<xref target="user-id-redacting"/>) may reduce this particular privacy
concern because they distribute no user IDs at all.</t>

</section>
<section anchor="social-graph"><name>Social Graph</name>

<t>Third-party certifications effectively map out some sort of social
graph.  A certification asserts a statement of belief by the issuer
that the real-world party identified by the user ID is in control of
the subject cryptographic key material.  But those connections may be
potentially sensitive, and some people may not want these maps built.</t>

<t>A first-party-only keyserver (<xref target="first-party-only"/>) avoids this
privacy concern because it distributes no third-party privacy concern.</t>

<t>First-party attested third-party certifications described in
<xref target="fpa3pc"/> are even more relevant edges in the social graph, because
their bidirectional nature suggests that both parties are aware of
each other, and see some value in mutual association.</t>

</section>
<section anchor="tracking-clients"><name>Tracking Clients by Queries</name>

<t>Even without third-party certifications, the acts of certificate
lookup, certificate discovery, and certificate refresh represent a
potential privacy risk, because the keystore queried gets to learn
which user IDs (in the case of lookup) or which certificates (in the
case of refresh or discovery) the client is interested in.  In the case
of certificate refresh, if a client attempts to refresh all of its known
certificates from the same keystore, that set is likely to be a unique
set, and therefore identifies the client.  A keystore that monitors
the set of queries it receives might be able to profile or track those
clients who use it repeatedly.</t>

<t>A privacy-aware client which wants to to avoid such a tracking attack
<bcp14>MAY</bcp14> try to perform certificate refresh from multiple different
keystores.  To hide network location, a client making a network query
to a keystore <bcp14>SHOULD</bcp14> use an anonymity network like <xref target="TOR"/>.  Tools
like <xref target="PARCIMONIE"/> are designed to facilitate this type of
certificate refresh.  Such a client <bcp14>SHOULD</bcp14> also decline to use protocol
features that permit linkability across interactions with the same
keystore, such as TLS session resumption, HTTP cookies, and so on.</t>

<t>Keystores which permit public access and want to protect the privacy
of their clients <bcp14>SHOULD NOT</bcp14> reject access from clients using <xref target="TOR"/>
or comparable anonymity networks.  Additionally, they <bcp14>SHOULD</bcp14> minimize
access logs they retain.</t>

<t>Alternately, some keystores may distribute their entire contents to
any interested client, in what can be seen as the most trivial form of
private information retrieval.  <xref target="DEBIAN-KEYRING"/> is one such
example; its contents are distributed as an operating system package.
Clients can interrogate their local copy of such a keystore without
exposing their queries to a third-party.</t>

</section>
<section anchor="validation-privacy"><name>"Live" Certificate Validation Leaks Client Activity</name>

<t>If a client relies on a keystore's certificate validation interface,
or on the presence of a certificate in a keystore as a part of its
validation calculations, it's unclear how long the assertion from the
keystore is or should be considered to hold.  One seemingly simple
approach is to simply query the keystore's validation interface each
time that the client needs to validate the certificate.</t>

<t>This "live" validation approach poses a quandary to the client in the
event that the keystore is unavailable.  How should in interpret the
"unknown" result?  In addition, live validation reveals the client's
activity to the keystore with fine precision.</t>

<t>A privacy-aware client that depends on keystores for certificate
validation <bcp14>SHOULD NOT</bcp14> perform "live" certificate validation on each
use it makes of the certificate.  Rather, it <bcp14>SHOULD</bcp14> cache the
validation information for some period of time and make use of the
cached copy where possible.  If such a client does a regular
certificate refresh from the same keystore, it <bcp14>SHOULD</bcp14> also
pre-emptively query the keystore for certificate validation at the
same time.</t>

<t>Choosing the appropriate time intervals for this kind of caching has
implications for the windows of risk for the client that might use a
revoked certificate.  Defining an appropriate schedule to make this
tradeoff is beyond the scope of this document.</t>

</section>
<section anchor="discovery-privacy"><name>Certificate Discovery Leaks Client Activity</name>

<t>The act of doing certificate discovery on unknown signatures offers a
colluding keystore and remote peer a chance to track a client's
consumption of a given signature.</t>

<t>An attacker with access to keystore logs could sign a message with a
unique key, and then watch the keystore activity to determine when a
client consumes the signature.  This is potentially a tracking or
"phone-home" situation.</t>

<t>A signer that has no interest in this particular form of tracking can
mitigate this concern by shipping their certificate in-band, alongside
the signature, as recommended in <xref target="in-band-certificates"/>.</t>

<t>A privacy-aware client <bcp14>MAY</bcp14> insist on in-band certificates by declining
to use any certificate discovery interface at all, and treat a bare
signature by an unknown certificate as an invalid signature.</t>

</section>
<section anchor="refresh-privacy"><name>Certificate Refresh Leaks Client Activity</name>

<t>The act of doing certificate refresh itself reveals some information
that the client is interested in a given certificate and how it may
have changed since the last time the client refreshed it, or since it
was first received by the client.</t>

<t>This is essentially the same privacy problem presented by OCSP
<xref target="RFC6960"/> in the X.509 world.  In the online world of TLS, this
privacy leak is mitigated by the CertificateStatus TLS handshake
extension (<xref target="RFC4366"/>), a.k.a. "OCSP stapling".  There is no
comparable solution for the store-and-forward or non-online scenarios
where OpenPGP is often found.</t>

<t>Privacy-aware clients <bcp14>MAY</bcp14> prefer to access refresh interfaces from
anonymity-preserving networks like <xref target="TOR"/> to obscure where they are
on the network, but if the certificate being refreshed is known to be
used only by a single client that may not help.</t>

<t>Privacy-aware clients <bcp14>MAY</bcp14> prefer to stage their certificate refreshes
over time, but longer delays imply greater windows of vulnerability
for use of an already-revoked certificate.  This strategy also does
not help when a previously-unknown certificate is encountered in-band
(see <xref target="in-band-certificates"/>), and the OpenPGP client wants to
evaluate it for use in the immediate context.</t>

</section>
<section anchor="distinct-keystore-interfaces-leak-client-context-and-intent"><name>Distinct Keystore Interfaces Leak Client Context and Intent</name>

<t>The distinct keystore interfaces documented in
<xref target="keystore-interfaces"/> offer subtly different semantics, and are
used by a reasonable keystore client at different times.  A keystore
that offers distinct discovery and refresh interfaces may infer that a
client visiting the refresh interface already knows about the
certificate in question, or that a client visiting the discovery
interface is in the process of verifying a signature from a
certificate it has not seen before.</t>

<t>HKP itself (<xref target="I-D.shaw-openpgp-hkp"/>) conflates these two interfaces
-- the same HKP query is be used to perform both discovery and refresh
(though implementations like <xref target="SKS"/> are not at all abuse-resistant
for either use), which may obscure the context and intent of the
client from the keystore somewhat.</t>

<t>A privacy-aware client that can afford the additional bandwidth and
complexity <bcp14>MAY</bcp14> use the keystore's discovery interface for both refresh
and discovery, since the discovery interface is a proper superset of
the refresh interface.</t>

</section>
<section anchor="cleartext-queries"><name>Cleartext Queries</name>

<t>If access to the keystore happens over observable channels (e.g.,
cleartext connections over the Internet), then a passive network
monitor could perform the same type profiling or tracking attack
against clients of the keystore described in <xref target="tracking-clients"/>.
Keystores which offer network access <bcp14>SHOULD</bcp14> provide encrypted
transport.</t>

</section>
<section anchor="traffic-analysis"><name>Traffic Analysis</name>

<t>Even if a keystore offers encrypted transport, the size of queries and
responses may provide effective identification of the specific
certificates fetched during lookup, discovery, or refresh, leaving open
the types of tracking attacks described in <xref target="tracking-clients"/>.
Clients of keystores <bcp14>SHOULD</bcp14> pad their queries to increase the size of
the anonymity set.  And keystores <bcp14>SHOULD</bcp14> pad their responses.</t>

<t>The appropriate size of padding to effectively anonymize traffic to
and from keystores is likely to be mechanism- and cohort-specific.
For example, padding for keystores accessed via the DNS (<xref target="RFC7929"/>
may use different padding strategies that padding for keystores
accessed over WKD (<xref target="I-D.koch-openpgp-webkey-service"/>), which may in
turn be different from keystores accessed over HKPS
(<xref target="I-D.shaw-openpgp-hkp"/>).  A keystore which only accepts user IDs
within a specific domain (e.g., <xref target="scoped-user-ids"/>) or which uses
custom process (<xref target="exterior-process"/>) for verification might have
different padding criteria than a keystore that serves the general
public.</t>

<t>Specific padding policies or mechanisms are out of scope for this
document.</t>

</section>
</section>
<section anchor="user-considerations"><name>User Considerations</name>

<t><xref target="client-interactions"/> describes some outstanding work that needs to
be done to help users understand how to produce and distribute a
third-party-certified OpenPGP certificate to an abuse-resistant
keystore.</t>

<t>Additionally, some keystores present directly user-facing affordances.
For example, <xref target="SKS"/> keyservers typically offer forms and listings
that can be viewed directly in a web browser.  Such a keystore <bcp14>SHOULD</bcp14>
be as clear as possible about what abuse mitigations it takes (or does
not take), to avoid user confusion.</t>

<t>Keystores which do not expect to be used directly as part of a
certificate validation calculation <bcp14>SHOULD</bcp14> advise clients as explicitly
as possible that they offer no assertions of validity.</t>

<t>Experience with the <xref target="SKS"/> keyserver network shows that many users
treat the keyserver web interfaces as authoritative.  That is, users
act as though the keyserver network offers some type of certificate
validation.  Unfortunately, The developer and implementor communities
explicitly disavow any authoritative role in the ecosystem, and the
implementations attempt very few mitigations against abuse, permitting
redistribution of even cryptographically invalid OpenPGP packets.
Clearer warnings to end users might reduce this kind of misperception.
Or the community could encourage the removal of frequently
misinterpreted user interfaces entirely.</t>

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

<t>This document asks IANA to register two entries in the OpenPGP
Notation IETF namespace, both with a reference to this document:</t>

<t><list style="symbols">
  <t>the "uidhash" notation is defined in <xref target="uidhash"/>.</t>
</list></t>

</section>


  </middle>

  <back>


    <references title='Normative References'>



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

<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='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='21' month='June' year='2023'/>
      <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-10'/>
   
</reference>

<reference anchor='RFC2047'>
  <front>
    <title>MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text</title>
    <author fullname='K. Moore' initials='K.' surname='Moore'/>
    <date month='November' year='1996'/>
    <abstract>
      <t>This particular document is the third document in the series. It describes extensions to RFC 822 to allow non-US-ASCII text data in Internet mail header fields. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='2047'/>
  <seriesInfo name='DOI' value='10.17487/RFC2047'/>
</reference>




    </references>

    <references title='Informative References'>




<reference anchor='I-D.shaw-openpgp-hkp'>
   <front>
      <title>The OpenPGP HTTP Keyserver Protocol (HKP)</title>
      <author fullname='David Shaw' initials='D.' surname='Shaw'>
         <organization>Jabberwocky Tech</organization>
      </author>
      <date day='20' month='March' year='2003'/>
      <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-shaw-openpgp-hkp-00'/>
   
</reference>


<reference anchor='I-D.koch-openpgp-webkey-service'>
   <front>
      <title>OpenPGP Web Key Directory</title>
      <author fullname='Werner Koch' initials='W.' surname='Koch'>
         <organization>GnuPG e.V.</organization>
      </author>
      <date day='22' month='May' year='2023'/>
      <abstract>
	 <t>   This specification describes a service to locate OpenPGP keys by mail
   address using a Web service and the HTTPS protocol.  It also provides
   a method for secure communication between the key owner and the mail
   provider to publish and revoke the public key.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-koch-openpgp-webkey-service-16'/>
   
</reference>


<reference anchor='I-D.mccain-keylist'>
   <front>
      <title>Distributing OpenPGP Key Fingerprints with Signed Keylist Subscriptions</title>
      <author fullname='R. Miles McCain' initials='R. M.' surname='McCain'>
         <organization>First Look Media</organization>
      </author>
      <author fullname='Micah Lee' initials='M.' surname='Lee'>
         <organization>The Intercept</organization>
      </author>
      <author fullname='Nat Welch' initials='N.' surname='Welch'>
         <organization>Google</organization>
      </author>
      <date day='2' month='September' year='2019'/>
      <abstract>
	 <t>   This document specifies a system by which an OpenPGP client may
   subscribe to an organization&#x27;s public keylist to keep its keystore
   up-to-date with correct keys from the correct keyserver(s), even in
   cases where the keys correspond to multiple (potentially
   uncontrolled) domains.  Ensuring that all members or followers of an
   organization have their colleagues&#x27; most recent PGP public keys is
   critical to maintaining operational security.  Without the most
   recent keys&#x27; fingerprints and a source of trust for those keys (as
   this document specifies), users must manually update and sign each
   others&#x27; keys -- a system that is untenable in larger organizations.
   This document proposes a experimental format for the keylist file as
   well as requirements for clients who wish to implement this
   experimental keylist subscription functionality.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-mccain-keylist-05'/>
   
</reference>


<reference anchor="SKS" target="https://bitbucket.org/skskeyserver/sks-keyserver/wiki/Home">
  <front>
    <title>SKS Keyserver Documentation</title>
    <author initials="Y." surname="Minsky" fullname="Yaron Minsky">
      <organization>SKS development team</organization>
    </author>
    <author initials="K." surname="Fiskerstrand" fullname="Kristian Fiskerstrand">
      <organization>sks-keyservers.net pool operator</organization>
    </author>
    <author initials="P." surname="Pennock" fullname="Phil Pennock">
      <organization></organization>
    </author>
    <date year="2018" month="March" day="25"/>
  </front>
</reference>
<reference anchor="GnuPG" target="https://www.gnupg.org/documentation/manuals/gnupg.pdf">
  <front>
    <title>Using the GNU Privacy Guard</title>
    <author initials="W." surname="Koch" fullname="Werner Koch">
      <organization>GnuPG development team</organization>
    </author>
    <date year="2019" month="April" day="04"/>
  </front>
</reference>
<reference anchor="MAILVELOPE-KEYSERVER" target="https://github.com/mailvelope/keyserver/">
  <front>
    <title>Mailvelope Keyserver</title>
    <author initials="T." surname="Oberndörfer" fullname="Thomas Oberndörfer">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="AUTOCRYPT" target="https://autocrypt.org/">
  <front>
    <title>Autocrypt - Convenient End-to-End Encryption for E-Mail</title>
    <author initials="V." surname="Breitmoser" fullname="Vincent Breitmoser">
      <organization></organization>
    </author>
    <author initials="H." surname="Krekel" fullname="Holger Krekel">
      <organization></organization>
    </author>
    <author initials="D. K." surname="Gillmor" fullname="Daniel Kahn Gillmor">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="DEBIAN-KEYRING" target="https://keyring.debian.org/">
  <front>
    <title>Debian Keyring</title>
    <author initials="J." surname="McDowell" fullname="Jonathan McDowell">
      <organization>Debian</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="TOR" target="https://www.torproject.org/">
  <front>
    <title>The Tor Project</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="PARCIMONIE" target="https://gaffer.ptitcanardnoir.org/intrigeri/code/parcimonie/">
  <front>
    <title>Parcimonie</title>
    <author initials="" surname="Intrigeri" fullname="Intrigeri">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="PGP-GLOBAL-DIRECTORY" target="https://keyserver.pgp.com/vkd/VKDVerificationPGPCom.html">
  <front>
    <title>PGP Global Directory Key Verification Policy</title>
    <author >
      <organization>Symantec Corporation</organization>
    </author>
    <date year="2011"/>
  </front>
</reference>
<reference anchor="MONKEYSPHERE" target="https://web.monkeysphere.info/">
  <front>
    <title>Monkeysphere</title>
    <author initials="D. K." surname="Gillmor" fullname="Daniel Kahn Gillmor">
      <organization></organization>
    </author>
    <author initials="J." surname="Rollins" fullname="Jameson Rollins">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="KEY-TRANSPARENCY" target="https://keytransparency.org/">
  <front>
    <title>Key Transparency, a transparent and secure way to look up public keys</title>
    <author initials="G." surname="Belvin" fullname="Gary Belvin">
      <organization>Google</organization>
    </author>
    <author initials="R." surname="Hurst" fullname="Ryan Hurst">
      <organization>Google</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="CONIKS" target="https://coniks.cs.princeton.edu/">
  <front>
    <title>CONIKS Key Management System</title>
    <author initials="E." surname="Felten" fullname="Edward Felten">
      <organization>Princeton University</organization>
    </author>
    <author initials="M." surname="Freedman" fullname="Michael Freedman">
      <organization>Princeton University</organization>
    </author>
    <author initials="M." surname="Melara" fullname="Marcela Melara">
      <organization>Princeton University</organization>
    </author>
    <author initials="A." surname="Blankstein" fullname="Aaron Blankstein">
      <organization>Princeton University</organization>
    </author>
    <author initials="J." surname="Bonneau" fullname="Joseph Bonneau">
      <organization>Stanford University/Electronic Frontier Foundation</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="BITCOIN" target="https://bitcoin.org/">
  <front>
    <title>Bitcoin</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="UNICODE-NORMALIZATION" target="https://unicode.org/reports/tr15/">
  <front>
    <title>Unicode Normalization Forms</title>
    <author initials="K." surname="Whistler" fullname="Ken Whistler">
      <organization>Unicode Consortium</organization>
    </author>
    <date year="2019" month="February" day="04"/>
  </front>
</reference>
<reference anchor="Attested-Certifications" target="https://gitlab.com/openpgp-wg/rfc4880bis/merge_requests/20">
  <front>
    <title>Documentation of the Attested Certifications subpacket</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


<reference anchor='RFC7929'>
  <front>
    <title>DNS-Based Authentication of Named Entities (DANE) Bindings for OpenPGP</title>
    <author fullname='P. Wouters' initials='P.' surname='Wouters'/>
    <date month='August' year='2016'/>
    <abstract>
      <t>OpenPGP is a message format for email (and file) encryption that lacks a standardized lookup mechanism to securely obtain OpenPGP public keys. DNS-Based Authentication of Named Entities (DANE) is a method for publishing public keys in DNS. This document specifies a DANE method for publishing and locating OpenPGP public keys in DNS for a specific email address using a new OPENPGPKEY DNS resource record. Security is provided via Secure DNS, however the OPENPGPKEY record is not a replacement for verification of authenticity via the "web of trust" or manual verification. The OPENPGPKEY record can be used to encrypt an email that would otherwise have to be sent unencrypted.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='7929'/>
  <seriesInfo name='DOI' value='10.17487/RFC7929'/>
</reference>

<reference anchor='RFC5322'>
  <front>
    <title>Internet Message Format</title>
    <author fullname='P. Resnick' initials='P.' role='editor' surname='Resnick'/>
    <date month='October' year='2008'/>
    <abstract>
      <t>This document specifies the Internet Message Format (IMF), a syntax for text messages that are sent between computer users, within the framework of "electronic mail" messages. This specification is a revision of Request For Comments (RFC) 2822, which itself superseded Request For Comments (RFC) 822, "Standard for the Format of ARPA Internet Text Messages", updating it to reflect current practice and incorporating incremental changes that were specified in other RFCs. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='5322'/>
  <seriesInfo name='DOI' value='10.17487/RFC5322'/>
</reference>

<reference anchor='RFC6962'>
  <front>
    <title>Certificate Transparency</title>
    <author fullname='B. Laurie' initials='B.' surname='Laurie'/>
    <author fullname='A. Langley' initials='A.' surname='Langley'/>
    <author fullname='E. Kasper' initials='E.' surname='Kasper'/>
    <date month='June' year='2013'/>
    <abstract>
      <t>This document describes an experimental protocol for publicly logging the existence of Transport Layer Security (TLS) certificates as they are issued or observed, in a manner that allows anyone to audit certificate authority (CA) activity and notice the issuance of suspect certificates as well as to audit the certificate logs themselves. The intent is that eventually clients would refuse to honor certificates that do not appear in a log, effectively forcing CAs to add all issued certificates to the logs.</t>
      <t>Logs are network services that implement the protocol operations for submissions and queries that are defined in this document.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='6962'/>
  <seriesInfo name='DOI' value='10.17487/RFC6962'/>
</reference>

<reference anchor='RFC6960'>
  <front>
    <title>X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP</title>
    <author fullname='S. Santesson' initials='S.' surname='Santesson'/>
    <author fullname='M. Myers' initials='M.' surname='Myers'/>
    <author fullname='R. Ankney' initials='R.' surname='Ankney'/>
    <author fullname='A. Malpani' initials='A.' surname='Malpani'/>
    <author fullname='S. Galperin' initials='S.' surname='Galperin'/>
    <author fullname='C. Adams' initials='C.' surname='Adams'/>
    <date month='June' year='2013'/>
    <abstract>
      <t>This document specifies a protocol useful in determining the current status of a digital certificate without requiring Certificate Revocation Lists (CRLs). Additional mechanisms addressing PKIX operational requirements are specified in separate documents. This document obsoletes RFCs 2560 and 6277. It also updates RFC 5912.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='6960'/>
  <seriesInfo name='DOI' value='10.17487/RFC6960'/>
</reference>

<reference anchor='RFC4366'>
  <front>
    <title>Transport Layer Security (TLS) Extensions</title>
    <author fullname='S. Blake-Wilson' initials='S.' surname='Blake-Wilson'/>
    <author fullname='M. Nystrom' initials='M.' surname='Nystrom'/>
    <author fullname='D. Hopwood' initials='D.' surname='Hopwood'/>
    <author fullname='J. Mikkelsen' initials='J.' surname='Mikkelsen'/>
    <author fullname='T. Wright' initials='T.' surname='Wright'/>
    <date month='April' year='2006'/>
    <abstract>
      <t>This document describes extensions that may be used to add functionality to Transport Layer Security (TLS). It provides both generic extension mechanisms for the TLS handshake client and server hellos, and specific extensions using these generic mechanisms.</t>
      <t>The extensions may be used by TLS clients and servers. The extensions are backwards compatible: communication is possible between TLS clients that support the extensions and TLS servers that do not support the extensions, and vice versa. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='4366'/>
  <seriesInfo name='DOI' value='10.17487/RFC4366'/>
</reference>




    </references>


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

<t>This document is the result of years of operational experience and
observation, as well as conversations with many different people --
users, implementors, keystore operators, etc.  A non-exhaustive list
of people who have contributed ideas or nuance to this document
specifically includes:</t>

<t><list style="symbols">
  <t>Antoine Beaupré</t>
  <t>Heiko Stamer</t>
  <t>ilf</t>
  <t>Jamie McClelland</t>
  <t>Jon Callas</t>
  <t>Jonathan McDowell</t>
  <t>Justus Winter</t>
  <t>Marcus Brinkmann</t>
  <t>Micah Lee</t>
  <t>Neal Walfield</t>
  <t>Phil Pennock</t>
  <t>Philihp Busby</t>
  <t>vedaal</t>
  <t>Vincent Breitmoser</t>
  <t>Wiktor Kwapisiewicz</t>
</list></t>

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

<t>substantive changes between -05 and -06:</t>

<t><list style="symbols">
  <t>add Mutual Certifications discussion</t>
  <t>observe drawbacks with stripping superseded signatures</t>
</list></t>

<t>substantive changes between -04 and -05:</t>

<t><list style="symbols">
  <t>Clarify distinctions between different signature types</t>
  <t>Point to Attested Certifications proposal</t>
  <t>Formatting changes: use xml2rfc v3, publish editor's copy</t>
</list></t>

<t>substantive changes between -03 and -04:</t>

<t><list style="symbols">
  <t>change "certificate update" to "certificate refresh" for clarity</t>
  <t>relax first-party-attested third-party certification constraints
at the suggestion of Valodim</t>
  <t>introduce "primary key sovereignty" concept explicitly</t>
  <t>describe how to distribute and consume attestation revocations</t>
  <t>introduce augmentation to TPK for third-party certification revocation
distribution</t>
</list></t>

<t>substantive changes between -02 and -03:</t>

<t><list style="symbols">
  <t>new sections:
  <list style="symbols">
      <t>Keystore Interfaces</t>
      <t>Keystore Client Best Practices</t>
      <t>Certificate Generation and Management Best Practices</t>
    </list></t>
  <t>rename "certificate discovery" to "certificate lookup"</t>
  <t>redefine "certificate discovery" to refer to lookup by signing (sub)key</t>
  <t>new attack: fingerprint flooding</t>
  <t>new retrieval-time mitigations -- tighter filters on discovery and update</t>
  <t>recommend in-band certificates where possible to avoid discovery and lookup</t>
  <t>new privacy considerations:
  <list style="symbols">
      <t>distinct keystore interfaces</t>
      <t>certificate update</t>
      <t>certificate discovery</t>
      <t>certificate validation</t>
    </list></t>
  <t>more nuance about unhashed subpacket filtering</t>
</list></t>

<t>substantive changes between -01 and -02:</t>

<t><list style="symbols">
  <t>distinguish different forms of flooding attack</t>
  <t>distinguish toxic data as distinct from flooding</t>
  <t>retrieval-time mitigations</t>
  <t>user ID redaction</t>
  <t>references to related work (CT, keylist, CONIKS, key transparency,
ledgers/"blockchain", etc)</t>
  <t>more details about UI/UX</t>
</list></t>

<t>substantive changes between -00 and -01:</t>

<t><list style="symbols">
  <t>split out Contextual and Non-Append-Only mitigations</t>
  <t>documented several other mitigations, including:
  <list style="symbols">
      <t>Decline Data From the Future</t>
      <t>Blocklist</t>
      <t>Exterior Process</t>
      <t>Designated Authorities</t>
      <t>Known Certificates</t>
      <t>Rate-Limiting</t>
      <t>Scoped User IDs</t>
    </list></t>
  <t>documented Updates-Only Keystores</t>
  <t>consider three different kinds of flooding</t>
  <t>deeper discussion of privacy considerations</t>
  <t>better documentation of Reason for Revocation</t>
  <t>document user ID conventions</t>
</list></t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA8y963bbVrYu+H89BQ79I1I1KTtOUpV4767asiwnKt/Ulp1U
+pwe2yAJSiiTADcASmG5/S79FP0A3S/W877mAkA5VT16jN4/dsUUsLCuc83L
N785m81CV3br4kl2Ot+1xext0ZZtl1dd9mZbVJc/XmYvin3b1U3RhmW9qPIN
PLps8lU3W368ntXw0PZ6O8vp5UZfnn2Ul2aP/hgWeVdc183+SVZWqzqEcts8
ybpm13aPHz364dHjkDdFjn/swl3dfLxu6t32SSYtB2gJfl0+yS6qrmiqops9
w6+HdjfflG1b1tW7/Rb6dHH+7nm4Lapd8SRkmTQykUFM4KeOHpv8Ap8oq+vs
R3wCf9/k5Rp+l+/9R1l0q5O6ucY/5c3iBv5003Xb9snDh/gk/lTeFif62EP8
4eG8qe/a4qG08RDfbYpt7d69hknO5yeLevMQ5u0hz+CXZg/bWcPstZ1rCV4/
kdbK+nc2BD0K+MvyP/N1XcE07GE5t+WT7L939WKatXXTNcWqhf/ab/A//rcQ
8l13UzcwlzPoRAar0z7Jnp1kL06yH8v1elM39DPvh2d5VRbr7EV+UyV/hfmB
fbUpmnKRV9lZeVuus5flvGi6smiz9xUsHj3XwtcLGOPXj7/LnjZ1vsyuuhP6
y6LsYN+8Lu6yX2HdptnrX/nnegmf/frRo0ffyr93VYc77P3VKf2Qz+dNcQsf
P3v5nn4oeJlh8v5jVa66GxhbC79VJ7CjAu7LZpN3sLAw4IvZs5P2Jr+zWb35
uJWfP9aLG/v5rpjD/M7aorktF/riZrHIywonfg1rAD9evbh6Qj3o8uYaB6nr
OC+7+W7xsehoG7UfW1wsaKto8B+z+K+78mP58Kd6U3AzfFqhWTqZ9Ej2rF7s
NkXVwRBkSm358P94CXW1fs2buspewYp+3MsfaHV/PUl/pNXD7yyL22Jdb/ED
WVfkm7FGXzQw3BJW+XkJA2lgRWG3+dZh44z8ib6RDLfFFcm2db1GEdDkneyl
3vcub2AvXRZVVS8++s9cniS/LuH0PMkeP/r6+9mjb2aPvwvZj9Xu8sfxFbm7
uzu5rnbba1qRpZ9TOPvVLl+3D/nv2+XKL8b7FiVKd1NkP75+n1025W2+2Gc/
7vJmOVwMGcAvKMya7AXsKN//X078TzQ91OPxRbDh/TB79O0MD8Or04uXP5+/
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
9ZWFf6Rs/X0l0sV4T1yG5T4ZWh2tCXb4C/UqXpjr7EfElJJJeShR3RRSLKiV
bwlywD4Xqf5DV+86EDqVYle9pBeq3cAlpQQ/hm9ROamVBtGY6dbYajH6uZ7B
Vb9eKgQkwfElMeg2BWtwRuRuTmGgFDjrw5visGH0mSfH+n8au5Lttq0kusdX
4LAXkXNIZXCSRXrRR5bkRO3YVttO3L2EScjCEUQwBClZyRf1d/SPddWt4dUD
QCurxBSmN9dw616N1mVOirHLGro8bWSG27OdjN1KjgF/2Dft7vgglaiAyY+m
yEOfiC6TVJ0UQ8KkwKARFcTXwAr5EA7uYhBfKEp6XJ17JPJ+tamebpZsCW+V
itO01YQjg6EiHtuQCVGi1730t5D95UMjhpGsVC0I6fcfWZFV1yXQZsYfAY4I
TTsVSPxjl9CBqPW0B0QD+Ic9I+vdHrTAH2vTLsGVfapJf5pE/6IZ16Bwbad/
XSgkgA6/c25j0vk+1E8aCl+OyhaKzx/eozpuK+oJWibF2KDiPS0vpnab73e0
ZlV+1Jo0YaIQ/yyFE3SEgL7iQC8+ElVzqggeTaEjK1fUq+0b2Te3ljyJpqxi
pt0XkIyXvbDIe8gep6IPOTdlL7awEm+0SJFxwGIEpw7U/ZALiPUbFQpKRvQ0
FR1rDXVXgXCrlkkotYxvM9FEx6aWY480ttKrcgF2tN91PqHKDvo6AVti9j0Z
FFfswnGKQzWuGChsWBS2EHV500xAwWsr4rY6BRayGLS3ZNCE45pPU9NdVMCP
zWsNOBVMtKmQ1anacOtv9KhnK1LtTWaCd1JmZPmj1sEBPpTOTm/XQDayyOyQ
MsidVSC7WD/csrHqzxUc5rvXb6Rqo+vavtAfL0/enF68fP3q4lw3JokYKTSx
WjJKVewQLiUUQH0xZTKTbaqkMJkcHyyWQOK87xNJQ3FVK7TAhPE4HUFX3hh9
nlbWZBwTif2KszlprhpuNFIipLKdefnzu3eXXLdzg2qJWOGUPDOZC/ohaiJL
9QxuuFcqI24A6j6Sh1KkGmGdhtoBXHFseAp5EqaGXWWSHxgcuCPMbilBpNFI
IjqxShVMc7FUTMpb5VlVUUiQurhgy6YsID0tdaQR5AoLkbedT+FcCIkao5Fr
1CbKAkGdatihpCFgbZIohJi1PcJ3sgMgvU7PvWtSQk0OZSTnk0flKl8g6Ds7
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
x72FH6kl+758jynJP7ystmTSlM/Itr+hflvjN/o4jqLX/I9XNY3F+6ql47bF
Wy6vm7a8rNfrjkZb/91cb8pn+/7DA/9wV6+qCm/7jf1SGoFnW3LOb7teXvm+
ueFN6MV9taHFUt83yz941pzZ9PhZyJILlovB2d14bDyJwyy+/h7bz+LrH6Tv
yAAqXwroMAWQG5VpVn0mvk7mEcvwVPcf4IcIwZOLXgVm+5RNe+xjvtOP+V4+
5rStoG9sIagm6tqEKFiSsWAvCb0JFlyaNCeGDR20xgSg+OLnyEGI7oF80o+w
7j/dtt9ur5bl3dO5kVCWtLdSr4Kxb/No3z7V5nwnzVE8f0ZxLtLBM/7U2UT4
dibZYu6HHWYF7XrVpwyD+zj6NVWc76BlaIpLglLVM+K3qu1WzS3WBkOPsbvP
os5Iz15ETX29e5hJxm2zi9YE3Tmi/Aump3Lus6KWfLIDHoytJX93tf8YuGG6
8t3lC7O3DzQzMHNTK+Mh+NhAfasD9VQGak1nrZbj0JZCz/pyKvY7+IMGgZ9x
FvNSSVH0mphd+wnOh2T76Z0vq3Ul+/voTh5s1K0f4MQfzRmJKczkTjliPnev
pxC0Nu7Dg6s3H1F3PeEKLe0MiTX8mCnDey2lXuOAMVFkibYKhzjZaGDrvWlR
Nt6tB3FMWQjy7ZqBnU6ejiVpxcbOHydtsm8L+PFgJejQfi48L1eMF+z49xR2
Hv0pWZj8PQCa66kmrsV+zec/b5SuvS7dhN59ZOp+o1P3W5m6kTYpxAXgM7GJ
lZdsD+/YdZ/Ym2fuzypE/hFWiON9eKz5r4PKEGm2G0sKhW6lupEt9KPTd7Af
2C6Yl8IWOxcSzsBpPIeMqLDVfhW5t2FnPPGuzfnrfr346td/P7b8v9Y+/Eb6
sKctbQdH/9SVP10sRgutXnNkZNDukMrpubipMt6acF1QFdDpd6aA3DPu9ecW
OX++NxHYL0tIOcBowj/PNVJCewUiJfYYry4/STzBukchuRZ2If39DTML/MK0
kBhX/uktIjfOzzRo1q8idC+tdx8WZ5uurJIr92NIynjXs/mzqutNvY2Sj2wO
Ti5SvlzFpexDPNo6SdYWP9mnYqSj+j+8K9zhD6ABAA==

-->

</rfc>

