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


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

]>


<rfc ipr="trust200902" docName="draft-ietf-openpgp-replacementkey-03" category="std" consensus="true" submissionType="IETF" updates="9580" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title>OpenPGP Key Replacement</title>

    <author fullname="Daphne Shaw">
      <organization>Jabberwocky Tech</organization>
      <address>
        <email>dshaw@jabberwocky.com</email>
      </address>
    </author>
    <author fullname="Andrew Gallagher" role="editor">
      <organization>PGPKeys.EU</organization>
      <address>
        <email>andrewg@andrewg.com</email>
      </address>
    </author>

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

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

    <abstract>


<?line 35?>

<t>This document specifies a method in OpenPGP to suggest a replacement for an expired, revoked, or deprecated primary key.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://andrewgdotcom.gitlab.io/openpgp-replacementkey"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-openpgp-replacementkey/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        OpenPGP Working Group mailing list (<eref target="mailto:openpgp@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/openpgp/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/openpgp/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://gitlab.com/andrewgdotcom/openpgp-replacementkey"/>.</t>
    </note>


  </front>

  <middle>


<?line 39?>

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

<t>The OpenPGP message format <xref target="RFC9580"></xref> defines two ways to invalidate a primary key.
One way is that the primary key may be explicitly revoked via a key revocation signature.
OpenPGP also supports the concept of key expiration, a date after which the key should not be used.
When a primary key is revoked or expires, very often there is another primary key that is intended to replace it.</t>

<t>A key owner may also create a new primary key that is intended to deprecate and replace their existing primary key, but without revoking or expiring that key.
This is useful during the rollout of new key versions and algorithms which may not (yet) enjoy universal support.
In such cases, a key owner may prefer that their correspondents use their new primary key, but if this is not possible for technical reasons they may continue to use the non-preferred key, which remains valid.</t>

<t>In the past some key owners have created key transition documents, which are signed, human-readable statements stating that a newer primary key should be preferred by their correspondents.
It is desirable that this process be automated through a standardised machine-readable mechanism.</t>

<t>This document is to specify the format of a Signature Subpacket to be optionally included in a revocation signature or direct self-signature over a primary key.
This subpacket contains a pointer to a suggested replacement for the primary key that is signed over, or a primary key for which the current primary key is the suggested replacement.
The corresponding replacement certificate may then be automatically retrieved by the key owner's correspondents and (if supported and validated) used instead of the original.</t>

</section>
<section anchor="conventions-definitions"><name>Conventions and Definitions</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

<section anchor="terminology"><name>Terminology</name>

<t>In OpenPGP, the term "key" has historically been used loosely to refer to several distinct concepts.
Care is therefore required when talking about "keys" in a non-specific sense.
In this document, we use the following convention:</t>

<t><list style="symbols">
  <t>"replacement primary key" and "original primary key" refer to a primary key as contained in a Transferable Public Key (certificate) or Transferable Secret Key.</t>
  <t>"target key" refers to either a replacement or original primary key that is referred to by a record in a Replacement Key subpacket.</t>
  <t>"current primary key" refers to the primary key that the self-signature currently under discussion belongs to.</t>
  <t>"replacement certificate", "original certificate" and "current certificate" refer to the TPK within which the corresponding primary key is distributed.</t>
</list></t>

</section>
</section>
<section anchor="replacement-key-subpacket"><name>The Replacement Key Subpacket</name>

<t>The Replacement Key subpacket is a Signature Subpacket (<xref section="5.2.3.7" sectionFormat="of" target="RFC9580"/>), and all general Signature Subpacket considerations from there apply here as well.
The value of the Signature Subpacket type octet for the Replacement Key subpacket is (insert this later).</t>

<t>To explicitly state that a revoked primary key has no replacement, a Reason for Revocation of "Key is retired and no longer used" <bcp14>SHOULD</bcp14> be used (see <xref target="reasons-for-revocation"/>).
The absence of a Replacement Key subpacket <bcp14>SHOULD NOT</bcp14> be interpreted as meaning that there is no replacement (or original) for the current primary key.</t>

<t>The Replacement Key subpacket <bcp14>MUST</bcp14> only be used in the hashed subpackets area of a primary key revocation or direct key signature.</t>

</section>
<section anchor="replacement-key-subpacket-format"><name>Format of the Replacement Key Subpacket</name>

<t>The format of the Replacement Key subpacket is:</t>

<texttable title="Replacement Key Subpacket Fields" anchor="replacement-key-subpacket-fields">
      <ttcol align='left'>Octets</ttcol>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Notes</ttcol>
      <c>1</c>
      <c>Class</c>
      <c>&#160;</c>
      <c>2</c>
      <c>Record length (1)</c>
      <c>&#160;</c>
      <c>1</c>
      <c>Target Key Version (1)</c>
      <c>&#160;</c>
      <c>N1</c>
      <c>Target Key Fingerprint (1)</c>
      <c>&#160;</c>
      <c>M</c>
      <c>Target Key Imprint (1)</c>
      <c>&#160;</c>
      <c>2</c>
      <c>Record length (2)</c>
      <c>optional</c>
      <c>1</c>
      <c>Target Key Version (2)</c>
      <c>optional</c>
      <c>N2</c>
      <c>Target Key Fingerprint (2)</c>
      <c>optional</c>
      <c>M</c>
      <c>Target Key Imprint (2)</c>
      <c>optional</c>
      <c>...</c>
      <c>...</c>
      <c>...</c>
</texttable>

<t>The class octet contains flags that indicate the form and semantics of the subpacket:</t>

<texttable title="Replacement Key Subpacket Flags" anchor="replacement-key-subpacket-flags">
      <ttcol align='left'>Flag bit</ttcol>
      <ttcol align='left'>Flag name</ttcol>
      <ttcol align='left'>Form of remainder of packet</ttcol>
      <c>0x40</c>
      <c>Inverse relationship</c>
      <c>Multiple targets may be given</c>
</texttable>

<t>The 0x40 bit of the class octet is the "inverse relationship" bit.
When set, this means that the target key(s) identified by the packet are the primary keys for which the current primary key is the replacement primary key.</t>

<t>All other flag bits of the class octet are currently undefined.
All undefined flags <bcp14>MUST</bcp14> be zero.
An implementation that encounters a class octet with nonzero bits that it does not recognise <bcp14>MUST</bcp14> ignore those bits.</t>

<t>Note that if the critical bit on the Replacement Key subpacket is set, a receiving implementation could consider the whole self-signature to be in error (<xref section="5.2.3.7" sectionFormat="of" target="RFC9580"/>).
The critical bit therefore <bcp14>SHOULD NOT</bcp14> be set on the Replacement Key subpacket.</t>

<t>The remainder of the subpacket contains one or more target records of the form:</t>

<figure><artwork><![CDATA[
( Record Length || Target Key Version || Target Key Fingerprint || Target Key Imprint )
]]></artwork></figure>

<t>The Record Length field contains a big-endian two-octet number which indicates the length of the next three fields in octets.
If a receiving implementation does not understand the target key version, it <bcp14>SHOULD</bcp14> ignore the target record and skip to the next.</t>

<t><list style="symbols">
  <t>If the class octet does not have the 0x40 bit set, the subpacket <bcp14>MUST</bcp14> contain exactly one target record to identify the replacement primary key.</t>
  <t>If the class octet has the 0x40 bit set, the subpacket contains one or more target records, to identify the original primary key(s) that the current primary key is a replacement for.</t>
</list></t>

<t>The length of the Target Key Fingerprint field (N) <bcp14>MUST</bcp14> equal the fingerprint length corresponding to the immediately preceding Target Key Version field, e.g.
20 octets for version 4, or 32 octets for version 6.
The length of the Target Key Imprint field (M) <bcp14>MUST</bcp14> equal the length of the output of the digest algorithm used by the enclosing signature, e.g.
32 octets for SHA2-256.</t>

<t>If the intent is to state that the replacement (or original) primary key is unknown, then no Replacement Key subpacket should be included in the signature.</t>

<section anchor="key-imprints"><name>Key Imprints</name>

<t>An imprint of a public key packet is a generalisation of a fingerprint.
It is calculated in the same way as the fingerprint, except that it <bcp14>MAY</bcp14> use a digest algorithm other than the one specified for the fingerprint.
Conversely, the fingerprint of a public key packet can be considered a special case of an imprint.
A public key packet has only one fingerprint, but may have any number of imprints, each using a different digest algorithm.</t>

<t>When used in a Replacement Key subpacket, an imprint <bcp14>MUST</bcp14> use the same digest algorithm as the enclosing signature.
This guards against key-substitution attacks when referring to keys that use weaker digest algorithms in their fingerprints.
If the signature's digest algorithm is the same as that used by the fingerprint, then the imprint and the fingerprint will be identical.
In such a case, the imprint <bcp14>MUST</bcp14> still be included for parsing reasons.</t>

</section>
<section anchor="graph-topology"><name>Graph Topology</name>

<t>A given signature <bcp14>MUST</bcp14> contain at most one Replacement Key subpacket.
If a signature contains more than one such subpacket, a receiving implementation <bcp14>MUST</bcp14> disregard them all.
This imposes a simple graph topology:</t>

<t><list style="symbols">
  <t>An original certificate <bcp14>MUST NOT</bcp14> claim to have more than one replacement.</t>
  <t>An original certificate that claims to have a replacement <bcp14>MUST NOT</bcp14> claim to be the replacement for any other(s).</t>
</list></t>

<t>In addition, the order of the original primary keys specified in an inverse-relationship Replacement Key subpacket is meaningful.
If a replacement primary key is supported by a receiving implementation, but is not usable for the desired purpose (for example, it may not have an encryption-capable subkey), the implementation <bcp14>MAY</bcp14> use the ordering of the original primary keys in its inverse Replacement Key subpacket (if one exists) to indicate which original primary key is preferred as a fallback.
The original primary keys <bcp14>SHOULD</bcp14> therefore be listed in order of decreasing preference.</t>

</section>
</section>
<section anchor="replacement-key-subpacket-trust"><name>Trust and Validation of the Replacement Key Subpacket</name>

<section anchor="key-equivalence-binding"><name>Key Equivalence Binding</name>

<t>The existence of a matching pair of forward and inverse Replacement Key subpackets on the most recent direct self-signatures (or key revocations) over two primary keys, with each referring to the other primary key, forms a Key Equivalence Binding.
If one primary key is validated for use in a particular context, then any primary key that has a Key Equivalence Binding with it (together with any bound subkeys) is also valid, regardless of any User ID certifications over the second primary key (or lack thereof).</t>

<t>The equivalence binding is invalidated under the following circumstances:</t>

<t><list style="symbols">
  <t>if either primary key is hard-revoked.</t>
  <t>if either primary key overrides the equivalence binding with a new direct self-signature that a) does not contain a Replacement Key subpacket, or b) contains a Replacement Key subpacket that does not refer to the other key.</t>
  <t>if either signature that forms the equivalence binding has expired.</t>
</list></t>

<t>Note however:</t>

<t><list style="symbols">
  <t>If either primary key is soft-revoked or expired, the equivalence binding is unaffected.</t>
  <t>If either primary key is hard-revoked, then the equivalence binding is invalidated and the other key is unaffected.</t>
  <t>Other properties (such as expiry dates, usage preferences, custom notations) <bcp14>SHOULD NOT</bcp14> be applied across the equivalence binding.</t>
  <t>Key Equivalence is transitive; if A and B are both equivalent to C (e.g. if C replaces both A and B), then A is also equivalent to B.</t>
</list></t>

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

<t>For the purposes of Key Revocation signatures:</t>

<t><list style="symbols">
  <t>"hard-revoked" means the key has been revoked with a Reason for Revocation subpacket specifying "Key material has been compromised" or "No reason specified"; the absence of a Reason for Revocation subpacket is equivalent to "No reason specified".</t>
  <t>"soft-revoked" means the key has been revoked with a Reason for Revocation subpacket specifying "Key is superseded" or "Key is retired and no longer used".</t>
</list></t>

<t>If a Key Revocation signature contains a Replacement Key subpacket, a Reason for Revocation subpacket <bcp14>MUST</bcp14> also be included, to prevent it from being interpreted as "No reason specified", which is a hard revocation.</t>

<t><list style="symbols">
  <t>if a Replacement Key subpacket is included in a revocation signature, then the Reason For Revocation subpacket <bcp14>SHOULD</bcp14> indicate "Key is superseded".</t>
  <t>if no Replacement Key subpacket is included in a revocation signature, but a Replacement Key might be specified at a later date, then the Reason For Revocation subpacket <bcp14>MAY</bcp14> indicate "Key is superseded".</t>
  <t>otherwise, the Reason for Revocation subpacket <bcp14>SHOULD</bcp14> indicate "Key is retired and no longer used".</t>
</list></t>

<t>If two or more primary keys have Key Equivalence Binding(s) between them, they <bcp14>MUST</bcp14> be treated as a single key for the purposes of the Web of Trust, particularly when calculating partial trust values.</t>

</section>
<section anchor="time-evolution-of-key-equivalence"><name>Time Evolution of Key Equivalence</name>

<t>An implementation <bcp14>MUST NOT</bcp14> assume that Key Equivalence Bindings have any permanent significance.
For example, if an MUA relies solely upon a Key Equivalence Binding between A and B to validate B, the validity of B at a future date depends on the continuing validity of the Key Equivalence Binding.
If the binding is no longer valid, and there are no other trust pathways to B, then B is no longer valid.</t>

<t>It is therefore <bcp14>RECOMMENDED</bcp14> that applications attempt to find alternative trust pathways for replacement certificates.
The optimal method of obtaining alternative trust pathways is application-dependent, and therefore beyond the scope of this document.
It should be noted however that similar time evolution concens also apply to other methods of validation, such as WoT.</t>

</section>
</section>
<section anchor="without-a-key-equivalence-binding"><name>Without a Key Equivalence Binding</name>

<t>The Replacement Key subpacket <bcp14>MUST NOT</bcp14> be treated as a Web of Trust certification over either the current or replacement primary key.
In the absence of a Key Equivalence Binding, a receiving implementation <bcp14>SHOULD</bcp14> validate the replacement certificate as they would any other.
If the replacement certificate is supported, and validates successfully, it <bcp14>SHOULD</bcp14> be preferred over the current certificate when determining which one to use for correspondence.</t>

<t>It is also suggested that the key owner asks the third parties who certified the User ID(s) on the original certificate to certify the corresponding User ID(s) on the replacement.
Distribution of the replacement certificate over a trusted mechanism (such as WKD) <bcp14>MAY</bcp14> also be used to confer legitimacy.</t>

<section anchor="limiting-chaining-of-non-equivalent-replacements"><name>Limiting Chaining of Non-Equivalent Replacements</name>

<t>It is possible for a singly-linked chain of certificates to exist, where each (non-final) certificate contains a valid forwards Replacement Key subpacket with no equivalence binding.
Such a chain may terminate, or may form a closed loop.
A generating implementation <bcp14>SHOULD NOT</bcp14> intentionally create singly-linked chains or loops, however they may be encountered in practice as a result of a stale cache, user or implementation error, or malice.</t>

<t>It may be possible for the certificates in a singly-linked chain to be validated without Key Equivalence bindings, such as by provenance or Web of Trust.
In such a scenario, a receiving implementation might be induced to process the chain of references until it found the end, or a certificate that did not validate.
An implementation <bcp14>SHOULD</bcp14> limit the maximum number of references it follows (per invocation), and/or implement a loop detection mechanism to prevent following a closed loop of references indefinitely.</t>

<t>For example, a receiving implementation <bcp14>MAY</bcp14> choose to process only one unpaired forwards Key Replacement subpacket per invocation.
Such an implementation <bcp14>MAY</bcp14> however process a subsequent unpaired subpacket on its next invocation, if the current certificate in the chain successfully validated.
While this could result in unstable behaviour, where the apparent preferred certificate of the correspondent changes continually, each invocation will consume a finite amount of resources.</t>

</section>
</section>
</section>
<section anchor="selection-of-encryption-subkeys"><name>Selection of Encryption Subkeys</name>

<t>If a replacement certificate has been validated, whether through key equivalence or other means, correspondents <bcp14>SHOULD</bcp14> assign it preference over the current certificate.
When a correspondent of the key owner selects subkeys for encryption, the subkeys in the replacement certificate <bcp14>SHOULD</bcp14> therefore be considered first.
If there are no usable subkeys in the replacement certificate, then:</t>

<t><list style="symbols">
  <t>If there is an equivalence binding, the subkeys in the first listed original certificate <bcp14>SHOULD</bcp14> be considered next.
  If none of those are usable, then the subkeys in the next original certificate (if any) <bcp14>SHOULD</bcp14> be considered, and so forth.</t>
  <t>If there is no equivalence binding, the subkeys in the current certificate <bcp14>SHOULD</bcp14> be used.</t>
</list></t>

<t>When encrypting to herself, the key owner is not required to use the same encryption subkey selection algorithm as her correspondents.</t>

</section>
<section anchor="replacement-key-subpacket-placement"><name>Placement of the Replacement Key Subpacket</name>

<t>The Replacement Key subpacket is only meaningful on a primary key revocation or direct key signature, and <bcp14>MUST NOT</bcp14> appear elsewhere.
The Replacement Key subpacket <bcp14>MUST</bcp14> be placed in the hashed subpackets area of the signature to prevent a possible key substitution attack.
If the Replacement Key subpacket was allowed in the unhashed subpackets area, an attacker could add a bogus Replacement Key subpacket to an existing signature.</t>

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

<t>A Key Equivalence Binding requires the active consent of both primary key owners.
This is to prevent one key owner from unilaterally claiming signatures made by the other key owner, using the same argument that motivates the embedded Primary Key Binding signature in a signing-capable subkey's binding signature.</t>

<t>The Target Key Imprint is included to mitigate against weaknesses in the fingerprint digest algorithm used by older key versions.
By including a digest over the target primary public key packet, using the same digest algorithm as the enclosing signature, we ensure that the indirect cryptographic binding between the equivalent keys is of the same overall strength as a signature made directly over the target primary public key (as in a certification signature or subkey binding signature).
We intentionally chose not to use embedded back-signatures or third-party certifications, both to keep the design simple and to limit the size of the subpacket(s) required.</t>

<t>In the absence of a complete Key Equivalence Binding, the Replacement Key subpacket <bcp14>MUST</bcp14> be treated as merely advisory.
In this scenario, it provides information for the purposes of key discovery and order of preference only, without any trust statement regarding the replacement.
Implementations <bcp14>SHOULD NOT</bcp14> infer any trust value from a single Replacement Key subpacket, and <bcp14>SHOULD</bcp14> validate the replacement certificate as they would any other.</t>

<t>In addition, as this document is an update of <xref target="RFC9580"></xref>, the security considerations there should be carefully reviewed.</t>

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

<t>This document requests that the following entry be added to the OpenPGP Signature Subpacket registry:</t>

<texttable title="Signature Subpacket Registry" anchor="signature-subpacket-registry">
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Specification</ttcol>
      <c>TBC</c>
      <c>Replacement Key</c>
      <c>This document</c>
</texttable>

</section>


  </middle>

  <back>


    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC9580">
  <front>
    <title>OpenPGP</title>
    <author fullname="P. Wouters" initials="P." role="editor" surname="Wouters"/>
    <author fullname="D. Huigens" initials="D." surname="Huigens"/>
    <author fullname="J. Winter" initials="J." surname="Winter"/>
    <author fullname="Y. Niibe" initials="Y." surname="Niibe"/>
    <date month="July" year="2024"/>
    <abstract>
      <t>This document specifies the message formats used in OpenPGP. OpenPGP provides encryption with public key or symmetric cryptographic algorithms, digital signatures, compression, and key management.</t>
      <t>This document is maintained in order to publish all necessary information needed to develop interoperable applications based on the OpenPGP format. It is not a step-by-step cookbook for writing an application. It describes only the format and methods needed to read, check, generate, and write conforming packets crossing any network. It does not deal with storage and implementation questions. It does, however, discuss implementation issues necessary to avoid security flaws.</t>
      <t>This document obsoletes RFCs 4880 ("OpenPGP Message Format"), 5581 ("The Camellia Cipher in OpenPGP"), and 6637 ("Elliptic Curve Cryptography (ECC) in OpenPGP").</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9580"/>
  <seriesInfo name="DOI" value="10.17487/RFC9580"/>
</reference>

<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>

<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>




    </references>

    <references title='Informative References' anchor="sec-informative-references">




<reference anchor="I-D.ietf-openpgp-persistent-symmetric-keys">
   <front>
      <title>Persistent Symmetric Keys in OpenPGP</title>
      <author fullname="Daniel Huigens" initials="D." surname="Huigens">
         <organization>Proton AG</organization>
      </author>
      <date day="30" month="January" year="2025"/>
      <abstract>
	 <t>   This document defines new algorithms for the OpenPGP standard (RFC
   9580) to support persistent symmetric keys, for message encryption
   using authenticated encryption with additional data (AEAD) and for
   authentication with hash-based message authentication codes (HMAC).
   This enables the use of symmetric cryptography for data storage (and
   other contexts that do not require asymmetric cryptography), for
   improved performance, smaller keys, and improved resistance to
   quantum computing.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-openpgp-persistent-symmetric-keys-01"/>
   
</reference>




    </references>


<?line 290?>

<section anchor="example-workflows"><name>Example Workflows</name>

<t>In the following, Alice has a v4 primary keypair and subsequently generates a new v6 primary keypair, then at a later date she revokes her v4 primary key.
Bob is her correspondent who consumes the updated certificate(s).
We do not assume that Alice's secret keys are stored on the same hardware device.</t>

<section anchor="alices-actions"><name>Alice's Actions</name>

<t>On creation of a v6 primary keypair and certificate, Alice's client will:</t>

<t><list style="symbols">
  <t>Add a Direct Key signature to Alice's new (v6) certificate, including an inverse Replacement Key subpacket that references her v4 original.</t>
  <t>If the original (v4) secret key is available, add a new Direct Key signature to its certificate with a forwards Replacement Key subpacket that references the v6 replacement.</t>
  <t>Publish the updated certificate(s) to a keyserver.</t>
  <t>Back up the new secret key material and (if necessary) sync it to any other devices.</t>
</list></t>

<t>On revocation of her v4 primary key, Alice's client will:</t>

<t><list style="symbols">
  <t>Add a forwards Replacement Key subpacket to the Primary Key Revocation signature, referencing the replacement.</t>
  <t>If the replacement secret key is available, add a new Direct Key signature to its certificate with a new (or updated) inverse Replacement Key subpacket that references the original.</t>
  <t>Publish the updated certificate(s) to a keyserver.</t>
</list></t>

<t>On receipt of the new (v6) certificate on a second device, Alice's second client will:</t>

<t><list style="symbols">
  <t>Check to see if the certificate contains an unpaired inverse Replacement Key subpacket that refers to any of the available secret keys.</t>
  <t>If the reference is correct, add a Direct Key signature to the affected certificate with a forwards Replacement Key subpacket.</t>
  <t>Publish the updated certificate to a keyserver.</t>
</list></t>

<t>If Alice has a local encryption subkey that she prefers for encryption to herself, for example a Persistent Symmetric subkey <xref target="I-D.ietf-openpgp-persistent-symmetric-keys"></xref>, her client <bcp14>SHOULD</bcp14> use it regardless of any Replacement Key subpacket(s) in her published certificate.</t>

</section>
<section anchor="bobs-actions"><name>Bob's Actions</name>

<t>If Alice has revoked her original Primary Key:</t>

<t><list style="symbols">
  <t>Bob wants to send Alice a message; Bob has Alice's original (v4) certificate but they have not corresponded for some time.</t>
  <t>Bob's client refreshes Alice's original certificate from a keyserver; it contains a Primary Key Revocation signature with a Replacement Key subpacket.</t>
  <t>Bob's client looks up Alice's replacement (v6) certificate on a keyserver.</t>
  <t>There is a Key Equivalence Binding between the original and replacement certificates, which Bob's client automatically validates.</t>
  <t>Bob's client uses Alice's replacement certificate instead of the original certificate.</t>
</list></t>

<t>There are other means to achieve a similar result, such as WKD or Autocrypt, but they may not be available.
For example, Alice's service provider may not support WKD, and Alice may not have sent Bob an autocrypt message since revoking her original primary key.</t>

<t>If Alice has not revoked her original Primary Key:</t>

<t><list style="symbols">
  <t>Bob wants to send Alice a message and has Alice's original (v4) certificate.</t>
  <t>Either Bob's copy of Alice's original certificate already has a Replacement Key subpacket that references her replacement (v6) fingerprint, or Bob refreshes Alice's original certificate from a keyserver and sees the new Replacement Key subpacket.</t>
  <t>If Bob has a v6 implementation, it can proceed with fetching Alice's v6 replacement certificate, validating it, and using it to send his message to Alice.</t>
  <t>If Bob doesn't have a v6 implementation, it can continue to use Alice's v4 original certificate.</t>
</list></t>

<t>WKD does not currently allow more than one valid certificate to be returned for a query, therefore it cannot easily support this use case.</t>

</section>
</section>
<section anchor="acknowledgments"><name>Acknowledgments</name>

<t>The authors would like to thank Bart Butler, Kai Engert, Daniel Kahn Gillmor, Daniel Huigens, Simon Josefsson, Heiko Schaefer, Falko Strenzke, Justus Winter and Aron Wussler for suggestions and discussions.</t>

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

<t>Note to RFC Editor: this section should be removed before publication.</t>

<section anchor="changes-between-draft-ietf-openpgp-replacementkey-01-and-02"><name>Changes Between draft-ietf-openpgp-replacementkey-01 and -02</name>

<t><list style="symbols">
  <t>Added explanation of hard vs soft revocations.</t>
  <t>Remove the "No Replacement" bit and use the Reason for Revocation subpacket instead.</t>
  <t>Record length field is now two octets.</t>
  <t>Inverted treatment of undefined flag bits.</t>
  <t>Remove references to the Preferred Key Server subpacket.</t>
  <t>Expanded example workflows section and add reference to draft-ietf-openpgp-persistent-symmetric-keys.</t>
  <t>Various terminology nitpicking.</t>
</list></t>

</section>
<section anchor="changes-between-draft-ietf-openpgp-replacementkey-00-and-01"><name>Changes Between draft-ietf-openpgp-replacementkey-00 and -01</name>

<t><list style="symbols">
  <t>Updated references to RFC9580.</t>
  <t>Removed subpacket version octet.</t>
  <t>Added guidance for encryption subkey selection.</t>
  <t>Added record length fields.</t>
  <t>Renamed to "OpenPGP Key Replacement" and normalised terminology.</t>
</list></t>

</section>
<section anchor="changes-between-draft-gallagher-openpgp-replacementkey-02-and-draft-ietf-openpgp-replacementkey-00"><name>Changes Between draft-gallagher-openpgp-replacementkey-02 and draft-ietf-openpgp-replacementkey-00</name>

<t><list style="symbols">
  <t>Standardised capitalisation and terminology.</t>
</list></t>

</section>
<section anchor="changes-between-draft-gallagher-openpgp-replacementkey-01-and-02"><name>Changes Between draft-gallagher-openpgp-replacementkey-01 and -02</name>

<t><list style="symbols">
  <t>Specified Public Key Imprints.</t>
  <t>Specified inverse relationship flag and packet format.</t>
  <t>Restricted graph topology.</t>
  <t>Specified Key Equivalence Binding.</t>
  <t>Guidance re subpacket placement escalated from <bcp14>SHOULD</bcp14> to <bcp14>MUST</bcp14>, and critical bit to <bcp14>SHOULD NOT</bcp14>.</t>
</list></t>

</section>
<section anchor="changes-between-draft-gallagher-openpgp-replacementkey-00-and-01"><name>Changes Between draft-gallagher-openpgp-replacementkey-00 and -01</name>

<t><list style="symbols">
  <t>Added example workflows.</t>
  <t>Specifically describe "deprecation without expiry or revocation" use case.</t>
  <t>Add note about weakness of signatures over fingerprints.</t>
  <t>Miscellaneous clarifications.</t>
</list></t>

</section>
<section anchor="changes-between-draft-shaw-openpgp-replacementkey-00-and-draft-gallagher-openpgp-replacementkey-00"><name>Changes Between draft-shaw-openpgp-replacementkey-00 and draft-gallagher-openpgp-replacementkey-00</name>

<t><list style="symbols">
  <t>Changed <spanx style="verb">algid</spanx> octet to <spanx style="verb">key version</spanx> octet.</t>
  <t>Changed initial subpacket version number to 1.</t>
  <t>Clarified semantics of some edge cases.</t>
</list></t>

</section>
</section>


  </back>

<!-- ##markdown-source:
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
BlM8pgG8NdO7rIsCPDD/jEzY8v8BMGRGxRNiAAA=

-->

</rfc>

