<?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.3.8) -->


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

]>


<rfc ipr="trust200902" docName="draft-ietf-openpgp-replacementkey-04" 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="July" day="20"/>

    <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.
The Record Length field is authoritative, and a receiving implementation <bcp14>MUST NOT</bcp14> infer the length of a target record by any other means.
If the Record Length field indicates that a target record contains more octets than expected, a receiving implementation <bcp14>MUST</bcp14> ignore any trailing extra octets.
If a target record contains fewer octets than expected, it is malformed and <bcp14>MUST</bcp14> be ignored.</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.</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.</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 the subkeys in the replacement certificate are not usable, 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 the subkeys in the first original certificate are not 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 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 289?>

<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>If Alice's client supports v6 certificates, and Alice only has a v4 certificate, it may suggest to Alice that she should generate a v6 primary keypair and certificate.
If the secret key material for the v4 certificate is available, the client may offer to generate the new keypair and certificate automatically.
The client should warn Alice of potential compatibility issues with any other devices that she may have which share the v4 secret key material.
The client should also perform pre-flight checks that may include:</t>

<t><list style="symbols">
  <t>Refreshing the certificate from the internet to check whether another client has already created a replacement.</t>
  <t>Attempting to sync with other devices in a multi-device deployment, e.g. by emailing itself.</t>
</list></t>

<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>Alice's client should perform regular consistency tests, by performing the pre-flight checks above to discover whether another client or device has published a different replacement certificate.
In such a scenario, the client should warn the user and attempt to reconcile the differences by first syncing the secret key material, and then updating the older "replacement" certificate to be an additional original for the newer replacement, and finally updating the proper replacement certificate to refer to the additional original.</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, Johannes Roth, Heiko Schaefer, Falko Strenzke, Neal Walfield, 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-03-and-04"><name>Changes Between draft-ietf-openpgp-replacementkey-03 and -04</name>

<t><list style="symbols">
  <t>Made target records forward-compatible.</t>
  <t>Added additional guidance for Alice's client.</t>
  <t>Removed unnecessary reference to WKD.</t>
  <t>Removed requirement for unilateral reference to be treated as a preference.</t>
  <t>Modified wording to avoid incompatibility with future encryption subkey selection draft.</t>
</list></t>

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

<t><list style="symbols">
  <t>Added section clarifying time evolution of equivalence.</t>
  <t>Added section clarifying how to prevent resource exhaustion when following chains.</t>
  <t>Clarified description of equivalence transitivity.</t>
</list></t>

</section>
<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:
H4sIAAAAAAAAA7Vd63IbN5b+z6folX9EcpH0JU5mRpmdGfmWOIkva8njmkpN
bcBukMSo2WAa3VIY2++yz7JPtucGNNDsppRM1pWqSGQ3cHBwLt+5AJrNZpPG
NKU+zY5eb3X15us32Xd6l73V21LleqOr5miSq0avbL07zVxTTAqbV2oDLxS1
WjYzo5vlzMKr29V2VnevXerd7P6jSbst4G13mv3piz/en5htfZo1deuah/fv
/+n+w4mqtYJhdT65tvXlqrbt9jST0SYwBHxanGYvqkbXlW5mT3HKiWsXG+Oc
sdXFbguEvHh28XxypatWn06yTAbxyzmCjxp67Og9TGGqVfY1PoGfb5Qp4XOZ
72+4lLmtV/iVqvM1fLVumq07vXcPn8SPzJWe+8fu4Qf3FrW9dvqejHEP3wUu
2OjdFfBXLea53dxTVVHr61VhG/xtmGs4Qok8a6IxkhfnMqKxo0O4Bt74b1Xa
Cha+026yNafZD43Np5mzdVPrpYOfdhv84Z8T1TZrWwPzZjB3li3bsuQtfqq2
60pn52t1Td/AqlVlflEN8P40+1YtFrq+tvnlLrvQ+Zoe0czUwsE7f/tX9wSu
f3+CM1pX9rUqS7Va63pgFthDkEg3f/YuHl8Y8jf5P48O/2qLsqwL09h6Utl6
A6NckVy8ff4EZfB0Yqpl/PmL2dN5IsRbXTvjGmDlDDi00U1t8hlw1Z1OJrPZ
LFML19QqbyaTi7VxGehDi3zP3FbnZmm0y1QGb61tkZkq81rV2My1qxVsK3wd
bVcGxMBqMv3z1tS6mMJ3V/YSf4DPC72tNapfkW1rs1H1LgNC5kzHxhRFqSeT
O6gftS3aHBmWfbhjol8/IZU6ULHRzqmVzpgD2Q/ClH/CTEtTAenNtc2u1c4h
vaa6UqVB/QWSk/lfg1DAUxksv1nDOA1MET0AirXLFhrXVJochHXnV5VdGQWD
4TP4SU57nDmzqlTT1hpGFkJV6ZBh2y1Iq6Pxc1vlettkdkmvE7/o9SkMyEQu
wUxk12uTr+kNfMytbVsWWWUbJKh1uphP3q91la4IF+IpBLbzXoCGXGn43sKw
FQ5Ya3xOwVjwc/I6MQG+A87rqoBBgHuyx5lpYL/O6DF7XcGLyBxaXg7Gj3hb
gQrcNFwQBRT9MDhQYpBekFe0bNEg02zRNtm1ATmE/9Pi8Am/OvyZpqH9JEGG
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

-->

</rfc>

