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

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-dkg-openpgp-abuse-resistant-keystore-03" category="info">

  <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="2019" month="April" day="19"/>

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

    <abstract>


<t>OpenPGP transferable public keys are composite certificates, made up
of primary keys, 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>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<section anchor="requirements-language" title="Requirements Language">

<t>The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”,
“SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and
“OPTIONAL” 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" title="Terminology">

<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 update” refers to retrieval of a certificate from a
 keystore based on the fingerprint of the primary key.  See
 <xref target="certificate-update"/> 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 update (including revocation information).  They
are typically <spanx style="emph">not</spanx> 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 possibly 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 update 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>“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" title="Problem Statement">

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

<t>The rest of the document describes some mitigations that can be used
by keystores that are concerned about these problems but want to
continue to offer some level of service for certificate lookup,
certificate update, certificate discovery, or certificate validation.</t>

<section anchor="certificate-flooding" title="Certificate Flooding">

<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 update.  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" title="User ID Flooding">

<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 hundreds or 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
typically still has to wade through all of them in order to find the
non-malicious certificates.</t>

<t>If the keystore does not offer a lookup interface at all (that is,
if clients cannot search it by user ID), then user ID flooding is of
less consequence.</t>

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

<t>A malicious actor who wants to render a certificate unavailable for
update 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 update, then the
certificate update 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" title="Keystore Flooding">

<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" title="Toxic Data">

<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" title="Keystore Interfaces">

<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-update" title="Certificate Update">

<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_update(primary_fpr) -> certificate?
]]></artwork></figure>

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

<t>Upon successful update, the client SHOULD 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 update.</t>

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

<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 update
(<xref target="certificate-update"/>) 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 SHOULD 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" title="Certificate Lookup">

<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 SHOULD
distinguish interfaces that perform full-string-match lookup from
interfaces that perform e-mail address based lookup.</t>

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

<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 MAY 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" title="E-mail Address Lookup">

<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 SHOULD 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" title="Other Lookup Mechanisms">

<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" title="Certificate Validation">

<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 MAY 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 SHOULD 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 MAY offer
a more nuanced validity interface; if it does, it SHOULD explicitly
document the semantics of the different response types so that clients
can make appropriate judgement.</t>

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

<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" title="Simple Mitigations">

<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" title="Decline Large Packets">

<t>While <xref target="RFC4880"/> permits OpenPGP packet sizes of arbitrary length,
OpenPGP certificates rarely need to be so large.  An abuse-resistant
keystore SHOULD 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 MAY extend this limit for user attribute
packets specifically, but SHOULD NOT allow even user attributes
packets larger than 65536 octets.</t>

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

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

<t>Some abuse-resistant keystores MAY 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 SHOULD reject any user
ID packet larger than 1024 octets.</t>

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

<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" title="Strip or Standardize Unhashed Subpackets">

<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 SHOULD strip out all unhashed subpackets
but the following exceptions:</t>

<section anchor="issuer-fingerprint" title="Issuer Fingerprint">

<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-rfc4880bis"/>) subpacket, then an
abuse-resistant keystore that has cryptographically validated the
certification SHOULD synthesize an appropriate Issuer Fingerprint
subpacket and include it in the certification’s unhashed subpackets.</t>

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

<t>Some Primary Key Binding Signatures (“cross-sigs”) are distributed as
unhashed subpackets in a Subkey Binding Signature.  A
cryptographically-validating abuse-resistant keystore SHOULD 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 anchor="first-party-attestations" title="First-party Attestations">

<t>Some third-party certifications are attested to by the certificate
primary key itself in an unhashed subpacket, as described in
<xref target="fpatpc"/>.  A cryptographically-validating abuse-resistant keystore
SHOULD be willing to redistribute a valid first-party attestation as
an unhashed subpacket.</t>

<t>The redistributed first-party attestation itself should be stripped of
all unhashed subpackets.</t>

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

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

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

<t>An abuse-resistant keystore MUST NOT 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" title="Decline Data From the Future">

<t>Many OpenPGP packets have time-of-creation timestamps in them.  An
abuse-resistant keystore with a functional real-time clock MAY 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" title="Accept Only Profiled Certifications">

<t>An aggressively abuse-resistant keystore MAY decide to only accept
certifications that meet a specific profile.  For example, it MAY
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 (please see <xref target="non-append-only"/>).</t>

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

<t>An abuse-resistant keystore capable of cryptographic validation MAY
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
SHOULD decline the certificate and its primary key entirely.  Such a
keystore SHOULD 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 SHOULD have a clear policy about its
set of designated authorities.</t>

<t>Given the ambiguities about expiration and revocation, such a
keyserver SHOULD 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 (please see
<xref target="non-append-only"/>).</t>

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

<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 (please 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" title="Retrieval-time Mitigations">

<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, update, 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 update).</t>

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

<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-update-with-redacted-user-ids" title="Certificate Update with Redacted User IDs">

<t>A user ID redacting keystore is useful for certificate update 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" title="Certificate Discovery with Redacted User IDs">

<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 SHOULD 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" title="Certificate Lookup with Redacted User IDs">

<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" title="Hinting Redacted User IDs">

<t>To ensure that the distributed certificate is at least structurally a
valid <xref target="RFC4880"/> transferable public key, a user ID redacting
keystore MAY 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 MAY 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 MUST 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 update client which receives such a certification after
the “unstated user ID” SHOULD 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="user-id-recovery-by-client-brute-force" title="User ID Recovery by Client Brute Force">

<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-update" title="Primary-key Only Certificate Update">

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

<t>Such a keystore MUST accept only a full fingerprint as the search
parameter from the certificate update client, and it MUST return at
most a single certificate whose primary key matches the requested
fingerprint.  It MUST NOT return more than one certificate, and it
MUST NOT return any certificate whose primary key does not match the
fingerprint.  In particular, it MUST NOT 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-update"/> 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" title="Require Valid Cross-Sigs for Certificate Discovery">

<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-update"/> 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 MUST accept only a full fingerprint or a 64-bit key ID
as the search parameter from the certificate discovery client.  It
MUST 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" title="Contextual Mitigations">

<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" title="Accept Only Cryptographically-verifiable Certifications">

<t>An abuse-resistant keystore that is capable of doing cryptographic
validation MAY 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>

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

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

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

<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
MAY choose to throttle submissions from that address.  When receiving
submissions over IPv6, such a keystore MAY 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" title="Accept Certificates Based on Exterior Process">

<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" title="Accept Certificates by E-mail Validation">

<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.
In some cases, the e-mail itself is 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 MAY 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" title="Non-append-only mitigations">

<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 any keystore that expects 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 MAY omit these mitigations.  Alternately, a
keystore may omit these mitigations at certificate ingestion time, but
apply these mitigations at retrieval time (during certificate update,
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" title="Drop Superseded Signatures">

<t>An abuse-resistant keystore SHOULD 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>

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

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

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

<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 SHOULD also drop the User ID packet.</t>

<t>Note that a User ID that becomes invalid due to revocation MUST NOT 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 MAY
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" title="Drop All Other Elements of a Directly-Revoked Certificate">

<t>If the primary key of a certificate is revoked via a direct key
signature, an abuse-resistant keystore SHOULD 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 direct key revocation signature MUST NOT be dropped.</t>

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

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

<t>Otherwise, the abuse-resistant keystore SHOULD retain the earliest
“soft” direct 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 SHOULD retain the signature that sorts earliest based on a
binary string comparison of the direct key revocation signature packet
itself.</t>

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

<t>In combination with some of the dropping mitigations above, a
particularly aggressive abuse-resistant keystore MAY 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="updates-only" title="Updates-only Keystores">

<t>In addition to the mitigations above, some keystores may resist abuse
by declining to accept any user IDs or certifications whatsoever.</t>

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

<t>A client of an updates-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 update, as it’s possible
to ship revocations (which are direct key signatures), new subkeys,
updates to subkey expiration, subkey revocation, and direct key
signature-based certificate expiration updates.</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
updates-only keystore.</t>

<t>Certificates shipped by an updates-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" title="First-party-only Keystores">

<t>Slightly more permissive than the updates-only keystore described in
<xref target="updates-only"/> is a 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="fpatpc"/> attempts to address this lack.</t>

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

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

</section>
</section>
<section anchor="fpatpc" title="First-party-attested Third-party Certifications">

<t>We can augment a first-party-only 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>An abuse-resistant keystore SHOULD only accept a third-party
certification if it meets the following criteria:</t>

<t><list style="symbols">
  <t>The third-party certification MUST be cryptographically valid. Note
that this means that the keystore needs to know the primary key for
the issuer of the third-party certification.</t>
  <t>The third-party certification MUST have an unhashed subpacket of
type Embedded Signature, the contents of which we’ll call the
“attestation”.  This attestation is from the certificate’s primary
key over the third-party certification itself, as detailed in the
steps below:  <list style="symbols">
      <t>The attestation MUST be an OpenPGP signature packet of type 0x50
(Third-Party Confirmation signature)</t>
      <t>The attestation MUST contain a hashed “Issuer Fingerprint”
subpacket with the fingerprint of the primary key of the
certificate in question.</t>
      <t>The attestation MUST NOT be marked as non-exportable.</t>
      <t>The attestation MUST contain a hashed Notation subpacket with the
name “ksok”, and an empty (0-octet) value.</t>
      <t>The attestation MUST contain a hashed “Signature Target” subpacket
with “public-key algorithm” that matches the public-key algorithm
of the third-party certification.</t>
      <t>The attestation’s hashed “Signature Target” subpacket MUST use a
reasonably strong hash algorithm (as of this writing, any
<xref target="RFC4880"/> hash algorithm except MD5, SHA1, or RIPEMD160), and
MUST have a hash value equal to the hash over the third-party
certification with all unhashed subpackets removed.</t>
      <t>The attestation MUST be cryptographically valid, verifiable by the
primary key of the certificate in question.</t>
    </list></t>
</list></t>

<t>This means that a third-party certificate will only be
accepted/distributed by the keystore if:</t>

<t><list style="symbols">
  <t>the keystore knows about both the first- and third-parties.</t>
  <t>the third-party has made the identity assertion</t>
  <t>the first-party has confirmed that they’re OK with the third-party
certification being distributed by any keystore.</t>
</list></t>

<t>The “ksok” notification is not strictly necessary for this mitigation,
but it is intended to avoid potential accidental confusion with any
other use of the Third-Party Confirmation signature packet type.  The
author does not know of any current use that might collide.</t>

<section anchor="key-server-preferences-no-modify" title="Key Server Preferences “No-modify”">

<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.  An abuse-resistant keystore following
<xref target="fpatpc"/> effectively treats that bit as always set, whether it is
present in the certificate or not.</t>

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

<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.</t>
  <t>Finally, the first party then transfers the compound 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>No current OpenPGP client can easily create the attestations described
in this section.  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>
<section anchor="client-best-practices" title="Keystore Client Best Practices">

<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" title="Use Constrained Keystores for Lookup">

<t>When performing certificate lookup, an abuse-resistant client SHOULD
prefer to query constrained keystores to avoid the risks described in
<xref target="uploads-vs-lookup"/>.</t>

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

<t>When performing lookup by e-mail address, an abuse-resistant client
SHOULD 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 SHOULD normalize the entire user ID into
<xref target="UNICODE-NORMALIZATION"/> Form C (NFC) before performing certificate
lookup.</t>

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

<t>Certificate lookup by arbitrary substring matching, or regular
expression is prone to abuse.  An abuse-resistant client SHOULD prefer
exact-userid 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
SHOULD 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-update" title="Prefer Full Fingerprint for Discovery and Update">

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

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

<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" title="Certificate Generation and Management Best Practices">

<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" title="Canonicalized E-Mail Addresses">

<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 SHOULD 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
SHOULD 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" title="Normalized User IDs">

<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 SHOULD normalize the
string using <xref target="UNICODE-NORMALIZATION"/> Form C (NFC) before creating
the self-sig.</t>

<t>At the same time, the implementation MAY 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" title="Avoid Large User Attributes">

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

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

<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 SHOULD provide cross-sigs for any subkey
capable of making a cross-sig.</t>

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

<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 SHOULD providue Issuer Fingerprint
subpackets.</t>

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

<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" title="Submit Certificates to Restricted, Lookup-Capable Keystores">

<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 SHOULD 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" title="Side Effects and Ecosystem Impacts">

<section anchor="designated-revoker" title="Designated Revoker">

<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 SHOULD be propagated, maybe even in
first-party-only keystores.</t>

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

<t>During signature verification, a user performing certificate discovery
against a keystore SHOULD 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 MAY perform certificate discovery based on only the key
ID.</t>

<t>A keystore that offers certificate discovery MAY 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" title="In-band Certificates">

<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 SHOULD 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" title="In-band Certificate Minimization and Validity">

<t>OpenPGP certificates are potenitally 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 SHOULD 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 update against their preferred keystore to learn
about third-party certifications useful to them.</t>
</list></t>

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

<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" title="Assessing Certificates in the Past">

<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" title="Point-in-time Certificate Evaluation">

<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 MUST NOT ignore “hard” OpenPGP key
revocations, regardless of their creation date. (see <xref target="revocations"/>).</t>

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

<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 update (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" title="Global Append-only Ledgers (“Blockchain”)">

<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" title="Certificate Lookup for Identity Monitoring">

<t>A typical use case for certificate lookup is a user looking for a
certificate in order to be able to encrypt an outbound message
intended for a given e-mail address, but this is not the only use
case.</t>

<t>Another use caes is when the party in control of a particular identity
wants to determine whether anyone else is claiming that identity.
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" title="OpenPGP details">

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

<section anchor="revocations" title="Revocations">

<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 SHOULD treat all revocations as “hard”.</t>

<t>An implementation aware of a “soft” revocation or of key or
certificate expiry at time T SHOULD 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" title="User ID Conventions">

<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" title="E-mail Address Canonicalization">

<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 SHOULD be constrained enough to admit to
some sensible form of canonicalization.</t>

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

<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" title="Domain Canonicalization">

<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" title="Local Part Canonicalization">

<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" title="Security Considerations">

<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" title="Tension Between Unrestricted Uploads and Certificate Lookup">

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

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

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

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

<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>Updates-only keystores (<xref target="updates-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" title="Social Graph">

<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="fpatpc"/> 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" title="Tracking Clients by Queries">

<t>Even without third-party certifications, the acts of certificate
lookup, certificate discovery, and certificate update 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 update or discovery) the client is interested in.  In the case
of certificate update, if a client attempts to update 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
MAY try to perform certificate update from multiple different
keystores.  To hide network location, a client making a network query
to a keystore SHOULD use an anonymity network like <xref target="TOR"/>.  Tools
like <xref target="PARCIMONIE"/> are designed to facilitate this type of
certificate update.  Such a client SHOULD 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 SHOULD NOT reject access from clients using <xref target="TOR"/>
or comparable anonymity networks.  Additionally, they SHOULD 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" title="“Live” Certificate Validation Leaks Client Activity">

<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 SHOULD NOT perform “live” certificate validation on each
use it makes of the certificate.  Rather, it SHOULD 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 update from the same keystore, it SHOULD 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" title="Certificate Discovery Leaks Client Activity">

<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 MAY 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="update-privacy" title="Certificate Update Leaks Client Activity">

<t>The act of doing certificate update 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 updated 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 MAY prefer to access update interfaces from
anonymity-preserving networks like <xref target="TOR"/> to obscure where they are
on the network, but if the certificate being updated is known to be
used only by a single client that may not help.</t>

<t>Privacy-aware clients MAY prefer to stage their certificate updates
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" title="Distinct Keystore Interfaces Leak Client Context and Intent">

<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 update interfaces may infer that a
client visiting the update 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 update
(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 MAY use the keystore’s discovery interface for both update
and discovery, since the discovery interface is a proper superset of
the update interface.</t>

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

<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 SHOULD provide encrypted
transport.</t>

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

<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 update, leaving open
the types of tracking attacks described in <xref target="tracking-clients"/>.
Clients of keystores SHOULD pad their queries to increase the size of
the anonymity set.  And keystores SHOULD 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" title="User Considerations">

<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 SHOULD
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 SHOULD 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" title="IANA Considerations">

<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 “ksok” notation is defined in <xref target="fpatpc"/>.</t>
  <t>the “uidhash” notation is defined in <xref target="uidhash"/>.</t>
</list></t>

</section>
<section anchor="document-considerations" title="Document Considerations">

<t>[ RFC Editor: please remove this section before publication ]</t>

<t>This document is currently edited as markdown.  Minor editorial
changes can be suggested via merge requests at
https://gitlab.com/dkg/draft-openpgp-abuse-resistant-keystore or by
e-mail to the author.  Please direct all significant commentary to the
public IETF OpenPGP mailing list: openpgp@ietf.org</t>

<section anchor="document-history" title="Document History">

<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>
</section>
<section anchor="acknowledgements" title="Acknowledgements">

<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>ilf</t>
  <t>Jamie McClelland</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>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="RFC2047" target='https://www.rfc-editor.org/info/rfc2047'>
<front>
<title>MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text</title>
<author initials='K.' surname='Moore' fullname='K. Moore'><organization /></author>
<date year='1996' month='November' />
<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>



<reference  anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<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="RFC4880" target='https://www.rfc-editor.org/info/rfc4880'>
<front>
<title>OpenPGP Message Format</title>
<author initials='J.' surname='Callas' fullname='J. Callas'><organization /></author>
<author initials='L.' surname='Donnerhacke' fullname='L. Donnerhacke'><organization /></author>
<author initials='H.' surname='Finney' fullname='H. Finney'><organization /></author>
<author initials='D.' surname='Shaw' fullname='D. Shaw'><organization /></author>
<author initials='R.' surname='Thayer' fullname='R. Thayer'><organization /></author>
<date year='2007' month='November' />
<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="RFC8174" target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></author>
<date year='2017' month='May' />
<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="I-D.ietf-openpgp-rfc4880bis">
<front>
<title>OpenPGP Message Format</title>

<author initials='W' surname='Koch' fullname='Werner Koch'>
    <organization />
</author>

<author initials='b' surname='carlson' fullname='brian carlson'>
    <organization />
</author>

<author initials='R' surname='Tse' fullname='Ronald Tse'>
    <organization />
</author>

<author initials='D' surname='Atkins' fullname='Derek Atkins'>
    <organization />
</author>

<date month='November' day='15' year='2018' />

<abstract><t>{ Work in progress to update the OpenPGP specification from RFC4880 }  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.  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.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-openpgp-rfc4880bis-06' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-openpgp-rfc4880bis-06.txt' />
</reference>




    </references>

    <references title='Informative References'>





<reference  anchor="RFC4366" target='https://www.rfc-editor.org/info/rfc4366'>
<front>
<title>Transport Layer Security (TLS) Extensions</title>
<author initials='S.' surname='Blake-Wilson' fullname='S. Blake-Wilson'><organization /></author>
<author initials='M.' surname='Nystrom' fullname='M. Nystrom'><organization /></author>
<author initials='D.' surname='Hopwood' fullname='D. Hopwood'><organization /></author>
<author initials='J.' surname='Mikkelsen' fullname='J. Mikkelsen'><organization /></author>
<author initials='T.' surname='Wright' fullname='T. Wright'><organization /></author>
<date year='2006' month='April' />
<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>



<reference  anchor="RFC5322" target='https://www.rfc-editor.org/info/rfc5322'>
<front>
<title>Internet Message Format</title>
<author initials='P.' surname='Resnick' fullname='P. Resnick' role='editor'><organization /></author>
<date year='2008' month='October' />
<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 &quot;electronic mail&quot; messages.  This specification is a revision of Request For Comments (RFC) 2822, which itself superseded Request For Comments (RFC) 822, &quot;Standard for the Format of ARPA Internet Text Messages&quot;, 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="RFC6960" target='https://www.rfc-editor.org/info/rfc6960'>
<front>
<title>X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP</title>
<author initials='S.' surname='Santesson' fullname='S. Santesson'><organization /></author>
<author initials='M.' surname='Myers' fullname='M. Myers'><organization /></author>
<author initials='R.' surname='Ankney' fullname='R. Ankney'><organization /></author>
<author initials='A.' surname='Malpani' fullname='A. Malpani'><organization /></author>
<author initials='S.' surname='Galperin' fullname='S. Galperin'><organization /></author>
<author initials='C.' surname='Adams' fullname='C. Adams'><organization /></author>
<date year='2013' month='June' />
<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="RFC6962" target='https://www.rfc-editor.org/info/rfc6962'>
<front>
<title>Certificate Transparency</title>
<author initials='B.' surname='Laurie' fullname='B. Laurie'><organization /></author>
<author initials='A.' surname='Langley' fullname='A. Langley'><organization /></author>
<author initials='E.' surname='Kasper' fullname='E. Kasper'><organization /></author>
<date year='2013' month='June' />
<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="RFC7929" target='https://www.rfc-editor.org/info/rfc7929'>
<front>
<title>DNS-Based Authentication of Named Entities (DANE) Bindings for OpenPGP</title>
<author initials='P.' surname='Wouters' fullname='P. Wouters'><organization /></author>
<date year='2016' month='August' />
<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 &quot;web of trust&quot; 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="I-D.shaw-openpgp-hkp">
<front>
<title>The OpenPGP HTTP Keyserver Protocol (HKP)</title>

<author initials='D' surname='Shaw' fullname='David Shaw'>
    <organization />
</author>

<date month='March' day='20' year='2003' />
</front>

<seriesInfo name='Internet-Draft' value='draft-shaw-openpgp-hkp-00' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-shaw-openpgp-hkp-00.txt' />
</reference>



<reference anchor="I-D.koch-openpgp-webkey-service">
<front>
<title>OpenPGP Web Key Directory</title>

<author initials='W' surname='Koch' fullname='Werner Koch'>
    <organization />
</author>

<date month='November' day='13' year='2018' />

<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-07' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-koch-openpgp-webkey-service-07.txt' />
</reference>



<reference anchor="I-D.mccain-keylist">
<front>
<title>Distributing OpenPGP Key Fingerprints with Signed Keylist Subscriptions</title>

<author initials='R' surname='McCain' fullname='R. McCain'>
    <organization />
</author>

<author initials='M' surname='Lee' fullname='Micah Lee'>
    <organization />
</author>

<author initials='N' surname='Welch' fullname='Nat Welch'>
    <organization />
</author>

<date month='March' day='6' year='2019' />

<abstract><t>This document specifies a system by which an OpenPGP client may subscribe to an organization's public keylist to keep its keystore up-to-date with correct keys, even in cases where the keys correspond to multiple (potentially uncontrolled) domains.  Ensuring that all members or followers of an organization have their colleagues' most recent PGP public keys is critical to maintaining operational security.  Without the most recent keys' fingerprints and a source of trust for those keys (as this document specifies), users must manually update and sign each others' 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-04' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-mccain-keylist-04.txt' />
</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="n.d."/>
  </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>


    </references>



  </back>

<!-- ##markdown-source:
H4sIAG1kuVwAA8y963bbSJYu+D+eAsP8kVIvUnZeq9Ldp7tlW85U+6ZjyVmd
M2dWGyRBCWUSYAGglCyPX2teYF5s9j12AKDkrF6z1vSPLicFBOKyY9/3t2ez
WejKbl08yU7nu7aYvSvasu3yqsvebovq4ueL7GWxb7u6KdqwrBdVvoFHl02+
6mbLj9ezGh7aXm9nOb3c6Muzj/LS7PF3YZl38M63j7/5afb4+9k3P4UF/HBd
N/snWVmt6hDKbfMk65pd2337+PFPj78NeVPk+Mcu3NXNx+um3m2fZPKpAEPD
r8sn2XnVFU1VdLPnOJ0Q8MvL/8rXdQWf28N8t+WT7P/o6sU0a+uma4pVC//a
b/Af/2cI+a67qZsnIZuFDP6vrNon2fOT7OVJ9nO5Xm/qhn7mBT/Pq7JYZy/z
myr5a91cw8ZtiqZc5FX2rLwt19mrcl40XVm02fuqrCt6roWvF92T7Jtvf8ie
NnW+zC67E/rLouxgH94Ud9lvsNRp9uY3/rlewme/efz48ffy37uqwx17f3lK
P+TzeVPcwsefvXpPPxSbvFzD0Xy8/vdVuepuYG0t/FadwA4F3Odmk3flbQEL
fvfi2fff/fgj/+uH7779lv/1408/PrZ/yW9/+unbn+Bf57PnJ+1NfmfnffNx
Kz9/rBc39vNdMYfjmbVFc1suCnlis1jkZYUksQbqgB8vX14+oTl3eXON23LT
ddv2yaNH87Kb7xYfi+4ENvZR+7FFMoKxigb/Yxb/6678WD76pd4UPAwTMAxL
xEqPZM/rxW5TVB0sWg7BDhz/jw9dz/e3vKmr7DXQwMe9/IHo4beT9Ec6b/zO
srgt1vUWP5B1Rb4ZG/RlA8stgS5elLCQBmgA6NOPDqQ28if6RrLcFs8w29b1
Gi9Bk3dCfb3vXdwA9V0UVVUvPvrPXJwkv9p1/DNcztm3P4Ts52p38fP4idzd
3Z1cV7vtNZ3I0u/pIyCuXb5uH/Hft8uVP4z3bVldZ91Nkf385n120ZS3+WKf
/bzLm+XwMGQBf8Hr3GQvgaL8/P9y4n+i7aEZHziELOU3eIFen56/+vXs1duL
s9nLs98uz979evZufL3XZXezm58s6s0jvE80fvEoEp5f4mt7IJLdwbVd3dSb
vM3eAm+olv/P/92s5FlZ49VJ70+n76/ePnv328XV+DzhE/Wi2W/5pvhZnepf
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
d82OrOT2rlv8Uf0XczyQ/cWWAQA=

-->

</rfc>

